User-Presented Mode (B scan C) ใหม่

หัวข้อทั้งหมดในหน้านี้

คุณสามารถรับชำระเงินหน้าร้านจากผู้ใช้ WeChat Pay ผ่านโปรแกรมขายหน้าร้าน (ระบบ POS) โดยผู้ใช้ WeChat Pay จะแสดงโค้ดชำระเงินเพื่อทำรายการ หรือที่เรียกว่าแบบ B scan C (Business-scan-Consumer)

ในคู่มือนี้จะอธิบายขั้นตอนการชำระเงิน และรายละเอียดวิธีการติดตั้งเพื่อใช้งาน

การเปิดรับชำระเงิน

  • ประเทศที่รองรับ: ประเทศไทย
  • API เวอร์ชันล่าสุดที่รองรับ: 2017-11-02

ร้านค้าที่ต้องการเปิดใช้ระบบที่ผู้ซื้อแสดงโค้ดชำระเงิน (User-Presented Mode Payment) กรุณาส่งอีเมลมาที่ support@opn.ooo ทางทีมงานจะส่งข้อกำหนดและเงื่อนไขการใช้บริการให้ร้านค้าได้พิจารณาและลงลายมือชื่อก่อนเปิดใช้งานจริง

ขั้นตอนการรับชำระเงิน

หากผู้ซื้อเลือกทำรายการผ่านวิธีแสดงโค้ดชำระเงิน (ไม่ว่าจะเป็นบาร์โค้ดหรือคิวอาร์โค้ดก็ตาม) คุณจำเป็นต้องใช้เครื่องอ่านบาร์โค้ด เพื่อสแกนโค้ดชำระเงิน และสร้างรายการชำระเงินใหม่

payment flow

❶ ผู้ซื้อเปิดแอปพลิเคชัน WeChat Pay จากนั้นเลือกแสดงคิวอาร์โค้ดผ่านแอปพลิเคชันบนโทรศัพท์มือถือ ❷ ร้านค้าสแกนคิวอาร์โค้ดด้วยเครื่องอ่านบาร์โค้ด ❸ จากนั้นผู้ซื้อจะต้องทำการยืนยันคำสั่งซื้อในแอปพลิเคชัน ❹ เมื่อคำสั่งซื้อสำเร็จ ผู้ซื้อจะได้รับการยืนยันผ่านแอปพลิเคชัน

การเชื่อมต่อระบบ

สามารถสร้างรายการรับชำระเงินUser-Presented Mode (B scan C) ด้วยการส่งคำสั่ง API ดังนี้

  1. สร้างรายการรับชำระเงิน พร้อมทั้งระบุ parameter
  2. เมื่อได้รับการแจ้งเตือนรายการสำเร็จผ่าน webhook ให้เรียกดูข้อมูลอีกครั้งเพื่อความแม่นยำ (แนะนำ)

ใช้งาน secret key ในการสร้างรายการUser-Presented Mode (B scan C)

สร้างรายการรับชำระเงิน

เมื่อผู้ซื้อเลือกชำระเงินผ่านช่องทางนี้ ให้ร้านค้าสร้างรายการรับชำระเงิน พร้อมทั้งระบุ parameter amount, currency, source[type] (wechat_pay_upm), and source[barcode]

Parameter Type Description
amount integer (required) จำนวนเงิน
currency string (required) THB
source[type] string (required) wechat_pay_upm
source[barcode] string (required) หมายเลขบาร์โค้ดหรือคิวอาร์โค้ด

ตัวอย่างนี้ แสดงวิธีการสร้างรายการด้วย curl แทน $OMISE_SECRET_KEYด้วย test secret key ของร้านค้า สามารถไปคัดลอกจากแดชบอร์ด

curl https://api.omise.co/charges \
  -u $OMISE_SECRET_KEY: \
  -d "amount=150000" \
  -d "currency=THB" \
  -d "source[type]=wechat_pay_upm" \
  -d "source[barcode]=130991292552725093"
{
  "object": "charge",
  "id": "chrg_test_5y4zoncy13i53sx0834",
  "location": "/charges/chrg_test_5y4zoncy13i53sx0834",
  "amount": 150000,
  "acquirer_reference_number": null,
  "net": 147352,
  "fee": 2475,
  "fee_vat": 173,
  "interest": 0,
  "interest_vat": 0,
  "funding_amount": 150000,
  "refunded_amount": 0,
  "transaction_fees": {
    "fee_flat": "0.0",
    "fee_rate": "1.65",
    "vat_rate": "7.0"
  },
  "platform_fee": {
    "fixed": null,
    "amount": null,
    "percentage": null
  },
  "currency": "THB",
  "funding_currency": "THB",
  "ip": null,
  "refunds": {
    "object": "list",
    "data": [],
    "limit": 20,
    "offset": 0,
    "total": 0,
    "location": "/charges/chrg_test_5y4zoncy13i53sx0834/refunds",
    "order": "chronological",
    "from": "1970-01-01T00:00:00Z",
    "to": "2023-12-18T10:18:56Z"
  },
  "link": null,
  "description": null,
  "metadata": {},
  "card": null,
  "source": {
    "object": "source",
    "id": "src_test_5y4zoncor9qfbmtasmb",
    "livemode": false,
    "location": "/sources/src_test_5y4zoncor9qfbmtasmb",
    "amount": 150000,
    "barcode": "130991292552725093",
    "bank": null,
    "created_at": "2023-12-18T10:18:56Z",
    "currency": "THB",
    "email": null,
    "flow": "offline",
    "installment_term": null,
    "ip": null,
    "absorption_type": null,
    "name": null,
    "mobile_number": null,
    "phone_number": null,
    "platform_type": null,
    "scannable_code": {
      "object": "barcode",
      "type": "qr",
      "image": {
        "object": "document",
        "livemode": false,
        "id": "docu_test_5y4zone8bn1bz0pd9yv",
        "deleted": false,
        "filename": "892904087869496945.svg",
        "location": "/charges/chrg_test_5y4zoncy13i53sx0834/documents/docu_test_5y4zone8bn1bz0pd9yv",
        "kind": "qr",
        "download_uri": "https://api.omise.co/charges/chrg_test_5y4zoncy13i53sx0834/documents/docu_test_5y4zone8bn1bz0pd9yv/downloads/BE677B76B672F2BB",
        "created_at": "2023-12-18T10:18:56Z"
      }
    },
    "billing": null,
    "shipping": null,
    "items": [],
    "references": null,
    "provider_references": null,
    "store_id": null,
    "store_name": null,
    "terminal_id": null,
    "type": "wechat_pay_upm",
    "zero_interest_installments": null,
    "charge_status": "pending",
    "receipt_amount": null,
    "discounts": []
  },
  "schedule": null,
  "customer": null,
  "dispute": null,
  "transaction": null,
  "failure_code": null,
  "failure_message": null,
  "status": "pending",
  "authorize_uri": null,
  "return_uri": null,
  "created_at": "2023-12-18T10:18:56Z",
  "paid_at": null,
  "expires_at": "2023-12-19T10:18:56Z",
  "expired_at": null,
  "reversed_at": null,
  "zero_interest_installments": false,
  "branch": null,
  "terminal": null,
  "device": null,
  "authorized": false,
  "capturable": false,
  "capture": true,
  "disputable": false,
  "livemode": false,
  "refundable": false,
  "partially_refundable": false,
  "reversed": false,
  "reversible": false,
  "voided": false,
  "paid": false,
  "expired": false
}

การตั้งค่ารายการหมดอายุ

ร้านค้าสามารถตั้งค่ารายการหมดอายุได้ทันที สำหรับรายการรับชำระเงินในโหมดที่ผู้ซื้อแสดงโค้ดชำระเงิน และมีสถานะยังไม่ได้รับการอนุมัติวงเงิน (status=pending) โดยถือเป็นการยกเลิกรายการรับชำระเงิน

curl https://api.omise.co/charges/$CHARGE_ID/expire \
  -X POST \
  -u $OMISE_SECRET_KEY:

สร้างรายการสำเร็จ

เมื่อร้านค้าสร้างรายการรับชำระเงินขึ้นมาแล้ว จะพบว่าสถานะของรายการแสดงเป็น pending หรือ status==pending โดยสถานะของรายการรับชำระเงินสามารถเป็นได้ทั้ง successful, failed และ expired

ในส่วนต่อไปเราจะอธิบายวิธีอนุมัติรายการ, การรับ event แจ้งเตือนเมื่อรายการเสร็จสิ้นผ่าน webhook และการตรวจสอบสถานะรายการ

ภาพด้านล่างนี้แสดงให้เห็นถึงขั้นตอนทั้งหมดในการรับชำระเงินแต่ละรายการ

sequenceDiagram participant customer participant merchant participant api.omise.co participant payment provider customer->>merchant: Present payment code for scanning merchant->>api.omise.co: Create charge using payment code api.omise.co-->>merchant: Return charge api.omise.co-xmerchant: Send "charge.create" webhook customer->>payment provider: Provide charge authorization payment provider-->>customer: Return payment result payment provider-->>api.omise.co: Return payment result api.omise.co-xmerchant: Send "charge.complete" webhook

การรับ event แจ้งเตือนรายการสำเร็จ

ร้านค้าสามารถรับการแจ้งเตือนเมื่อมีการทำรายการเสร็จสิ้นโดยใช้งาน webhook events

ในการติดตั้งให้ร้านค้ากำหนดตำแหน่งบนเซิร์ฟเวอร์เพื่อรับ webhook events และเพิ่มตำแหน่งเดียวกันนี้เป็น webhook endpoint บนแดชบอร์ด

เมื่อมีรายการเสร็จสิ้น ระบบจะส่ง POST request ไปยัง endpoint นี้ พร้อมทั้งแนบสถานะการตอบกลับของรายการนั้นๆ ไปด้วย

ตัวแปรหลักหรือ key สำหรับ event object ประกอบไปด้วย charge.complete และตัวแปร data ที่มี charge object

อ่านเพิ่มเติมได้ที่ Events API

การตรวจสอบสถานะรายการ

เมื่อได้รับ event ของรายการที่เสร็จสิ้นแล้ว ร้านค้าสามารถตรวจสอบสถานะรายการหรือ status โดยใช้ Charge API

หากค่าของ charge.status เป็น successful หมายถึงว่ารายการรับชำระเงินสำเร็จ หากค่าของ charge.status เป็น failed รายการรับชำระเงินนั้นไม่สำเร็จ ร้านค้าสามารถตรวจสอบ failure_code และ failure_message ได้ใน charge object เพื่ออ่านคำอธิบายเพิ่มเติม

สาเหตุขัดข้องที่อาจเกิดขึ้นได้มีดังนี้

รหัสข้อขัดข้อง รายละเอียด
payment_expired รายการชำระเงินหมดอายุ
payment_rejected รายการถูกปฏิเสธโดยธนาคารผู้ออกบัตร
invalid_account ไม่พบบัญชีที่สามารถชำระเงินผ่านช่องทางที่เลือก
insufficient_fund วงเงินคงเหลือไม่เพียงพอหรือวงเงินเต็ม
failed_processing ระบบทำรายการไม่สำเร็จ

การคืนเงิน

สำหรับรายการชำระเงินในโหมดที่ผู้ซื้อแสดงโค้ดชำระเงิน สามารถทำการคืนเงินบางส่วนหรือเต็มจำนวนได้ภายในระยะเวลา 90 วัน นับตั้งแต่วันที่ทำรายการ

ข้อจำกัด

  • จำนวนรับชำระขั้นต่ำ: 2000 (THB 20.00)
  • จำนวนรับชำระสูงสุด: 15000000 (THB 150,000.00)

ขั้นตอนต่อไป

เว็ปไซต์นี้มีการใช้คุกกี้เพื่อวิเคราะห์การใช้และปรับการใช้งานให้เหมาะกับท่าน เมื่อกดยอมรับหรือยังคงเข้าชมเว็บไซต์ต่อ เราถือว่าท่านยินยอมในการใช้งานคุกกี้ของเว็บไซต์ อ่านนโยบายความเป็นส่วนตัว