User-Presented Mode Payment (B scan C)
หัวข้อทั้งหมดในหน้านี้
คุณสามารถรับชำระเงินหน้าร้านจากผู้ใช้อาลีเพย์พลัส ผ่านโปรแกรมขายหน้าร้าน (ระบบ POS) โดยผู้ใช้อาลีเพย์พลัสจะแสดงโค้ดชำระเงินเพื่อทำรายการ หรือที่เรียกว่าแบบ B scan C (Business-scan-Consumer)
ในคู่มือนี้จะอธิบายขั้นตอนการชำระเงิน และรายละเอียดวิธีการติดตั้งเพื่อใช้งาน
การเปิดรับชำระเงิน
- ประเทศที่รองรับ: ประเทศไทย, สิงคโปร์, มาเลเซีย
- API เวอร์ชันล่าสุดที่รองรับ:
2017-11-02
วอลเล็ทที่รองรับ | ประเทศไทย | สิงคโปร์ | มาเลเซีย |
---|---|---|---|
Alipay CN | ✅ | ✅ | |
Alipay HK | ✅ | ✅ | ✅ |
KakaoPay | ✅ | ✅ | ✅ |
GCash | ✅ | ✅ | |
Touch 'n Go | ✅ | ✅ | |
TrueMoney | ✅ | ✅ |
ร้านค้าที่ต้องการเปิดใช้ระบบที่ผู้ซื้อแสดงโค้ดชำระเงิน (User-Presented Mode Payment) กรุณาส่งอีเมลมาที่ support@opn.ooo ทางทีมงานจะส่งข้อกำหนดและเงื่อนไขการใช้บริการให้ร้านค้าได้พิจารณาและลงลายมือชื่อก่อนเปิดใช้งานจริง
ขั้นตอนการรับชำระเงิน
หากผู้ซื้อเลือกทำรายการผ่านวิธีแสดงโค้ดชำระเงิน (ไม่ว่าจะเป็นบาร์โค้ดหรือคิวอาร์โค้ดก็ตาม) คุณจำเป็นต้องใช้เครื่องอ่านบาร์โค้ด เพื่อสแกนโค้ดชำระเงิน และสร้างรายการชำระเงินใหม่
❶ ผู้ซื้อเปิดแอปพลิเคชัน WeChat Pay ❷ จากนั้นทำการสแกนคิวอาร์โค้ดที่ร้านค้าแสดงบน POS ❸ ผู้ซื้อตรวจสอบรายการ ❹ ผู้ซื้อยืนยันคำสั่งซื้อ ❺ เมื่อคำสั่งซื้อสำเร็จ ผู้ซื้อจะได้รับการยีนยันผ่านแอปพลิเคชันของวอลเล็ท
การเชื่อมต่อระบบ
สามารถสร้างรายการรับชำระเงินUser-Presented Mode Payment (B scan C) ด้วยการส่งคำสั่ง API ดังนี้
- สร้างรายการรับชำระเงิน พร้อมทั้งระบุ parameter
- เมื่อได้รับการแจ้งเตือนรายการสำเร็จผ่าน webhook ให้เรียกดูข้อมูลอีกครั้งเพื่อความแม่นยำ (แนะนำ)
ใช้งาน secret key ในการสร้างรายการUser-Presented Mode Payment (B scan C)
สร้างรายการรับชำระเงิน
เมื่อผู้ซื้อเลือกชำระเงินผ่านช่องทางนี้ ให้ร้านค้าสร้างรายการรับชำระเงิน พร้อมทั้งระบุ parameter amount
, currency
, source[type]
(alipayplus_upm
), and source[barcode]
Parameter | Type | Description |
---|---|---|
amount |
integer | (required) จำนวนเงิน |
currency |
string | (required) สกุลเงินตาม ISO 4217 (THB สำหรับประเทศไทย, SGD สำหรับสิงคโปร์, MYR สำหรับมาเลเซีย) |
source[type] |
string | (required) alipayplus_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]=alipayplus_upm" \
-d "source[barcode]=2897991359827699709"
{
"object": "charge",
"id": "chrg_test_611bio8b6z7699xhgjj",
"location": "/charges/chrg_test_611bio8b6z7699xhgjj",
"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_611bio8b6z7699xhgjj/refunds",
"order": "chronological",
"from": "1970-01-01T00:00:00Z",
"to": "2024-09-10T03:57:41Z"
},
"link": null,
"description": null,
"metadata": {},
"card": null,
"source": {
"object": "source",
"id": "src_test_611bio81cfrc1h67zfk",
"livemode": false,
"location": "/sources/src_test_611bio81cfrc1h67zfk",
"amount": 150000,
"barcode": "2897991359827699709",
"bank": null,
"created_at": "2024-09-10T03:57:40Z",
"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": null,
"billing": null,
"shipping": null,
"items": [],
"references": null,
"provider_references": null,
"store_id": null,
"store_name": null,
"terminal_id": null,
"type": "alipayplus_upm",
"zero_interest_installments": null,
"charge_status": "pending",
"receipt_amount": null,
"discounts": [],
"promotion_code": null
},
"schedule": null,
"linked_account": null,
"customer": null,
"dispute": null,
"transaction": null,
"failure_code": null,
"failure_message": null,
"status": "pending",
"authorize_uri": null,
"return_uri": null,
"created_at": "2024-09-10T03:57:40Z",
"paid_at": null,
"authorized_at": null,
"expires_at": "2024-09-17T03:57:40Z",
"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,
"can_perform_void": false,
"approval_code": null
}
การตั้งค่ารายการหมดอายุ
ร้านค้าสามารถตั้งค่ารายการหมดอายุได้ทันที สำหรับรายการรับชำระเงินในโหมดที่ผู้ซื้อแสดงโค้ดชำระเงิน และมีสถานะยังไม่ได้รับการอนุมัติวงเงิน (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 และการตรวจสอบสถานะรายการ
ภาพด้านล่างนี้แสดงให้เห็นถึงขั้นตอนทั้งหมดในการรับชำระเงินแต่ละรายการ
การรับ 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 |
รายการถูกปฏิเสธโดยธนาคารผู้ออกบัตร |
insufficient_fund |
วงเงินคงเหลือไม่เพียงพอหรือวงเงินเต็ม |
failed_processing |
ระบบทำรายการไม่สำเร็จ |
การยกเลิกรายการและคืนเงิน
สำหรับรายการชำระเงินในโหมดที่ผู้ซื้อแสดงโค้ดชำระเงิน สามารถยกเลิกรายการได้จนกว่าจะถึงเวลา 16:15 UTC ของวันที่ทำรายการ และสามารถทำการคืนเงินบางส่วนหรือเต็มจำนวนได้ภายในระยะเวลา 1 ปี นับตั้งแต่วันที่ทำรายการ
ข้อจำกัด
ประเทศไทย
- จำนวนรับชำระขั้นต่ำ:
2000
(THB 20.00) - จำนวนรับชำระสูงสุด:
15000000
(THB 150,000.00)
สิงคโปร์
- จำนวนรับชำระขั้นต่ำ:
100
(SGD 1.00) - จำนวนรับชำระสูงสุด:
2000000
(SGD 20,000.00)
มาเลเซีย
- จำนวนรับชำระขั้นต่ำ:
100
(MYR 1.00) - จำนวนรับชำระสูงสุด:
3000000
(MYR 30,000.00)