ยกเลิกคำสั่งชำระเงิน
ยกเลิกคำสั่งชำระเงินที่ยังเปิดอยู่ (สถานะ open) จากฝั่ง backend ของร้านค้า โดยใช้ credentials ของร้านค้า
กรณีใช้งานหลักคือเคลียร์ 409 pending order ที่ได้จาก
/payment-flex/create: ลูกค้าหนึ่งบัญชีเปิด FLEX order ค้างได้ครั้งละ
1 รายการ เมื่อสร้างซ้ำจะได้ response
{
"success": false,
"code": 409,
"error": "you have a pending payment order. complete or cancel it first.",
"data": { "pending_order_id": "THBP20260613123300zBuseUwN" }
}
ให้เรียก /payment/cancel ด้วย pending_order_id นั้นเพื่อยกเลิกคำสั่งที่ค้างอยู่ แล้วจึงสร้างใหม่อีกครั้ง
ลูกค้าสามารถกดยกเลิกบนหน้าชำระเงินได้เองเช่นกัน — endpoint นี้คือช่องทาง server-to-server สำหรับให้ backend ของร้านค้ายกเลิกเอง
URL : /payment/cancel
Method : POST
ข้อกำหนดข้อมูล
{
"merchant_id" : "[Merchant id]",
"token" : "[Auth Token]",
"time" : "[Time Stamp]",
"platform_order_id" : "[platform order id ที่ต้องการยกเลิก]"
}
| ชื่อพารามิเตอร์ | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| platform_order_id | รหัสคำสั่งซื้อของระบบ ที่ต้องการยกเลิก ใช้ pending_order_id จาก 409 ของ FLEX หรือ platform_order_id จากตอนสร้าง | THBP20260613123300zBuseUwN |
ตัวอย่างข้อมูล
{
"merchant_id": "AA12345678",
"token": "testtokentesttokentesttokentesttokentesttoken",
"time": 1656272222,
"platform_order_id": "THBP20260613123300zBuseUwN"
}
เงื่อนไขที่ยกเลิกได้
การยกเลิกจะสำเร็จ ก็ต่อเมื่อ ครบทุกข้อต่อไปนี้:
- คำสั่งซื้อเป็นของร้านค้า ของคุณ เอง
- สถานะคำสั่งซื้อเป็น
open(ยังไม่ถูกชำระ ยังไม่หมดอายุ และยังไม่ถูกยกเลิก) - ยังไม่มีการอัปโหลดสลิป สำหรับคำสั่งซื้อนี้
เมื่อยกเลิกสำเร็จ ระบบจะ:
- ปลด pending-order guard — ทำให้สร้างคำสั่งซื้อใหม่สำหรับลูกค้าบัญชีเดิมได้ทันที
- ส่ง callback สถานะ
CANCELLEDไปยังnotify_urlของคุณ (ดู Callback การชำระเงิน)
⚠️ การยกเลิก อาจไม่ถือเป็นที่สิ้นสุดเสมอไป: ในบางกรณีคำสั่งซื้ออาจถูกชำระภายหลังได้ ซึ่งจะมี callback
PAIDตามมาสำหรับplatform_order_idเดิม — ให้ถือว่าPAIDเป็นสถานะที่ถูกต้องเสมอ
Response สำเร็จ
Code : 200 OK
{
"success": 200,
"data": {
"platform_order_id": "THBP20260613123300zBuseUwN",
"merchant_order_id": "ORDER0123456789789445566",
"status": "cancelled"
}
}
หากเรียกยกเลิกซ้ำกับ order ที่ถูกยกเลิกไปแล้ว ก็จะได้ 200 เช่นกัน (พร้อม "already_cancelled": true)
— เป็นแบบ idempotent
Response ข้อผิดพลาด
เงื่อนไข : merchant id, token หรือ signature ไม่ถูกต้อง
Code : 403
{ "error": { "code": 403, "message": "authentication failed" } }
เงื่อนไข : ไม่พบคำสั่งซื้อ (หรือไม่ใช่ของร้านค้าคุณ) หรือ platform_order_id ไม่ถูกต้อง
Code : 500
{ "error": { "code": 500, "message": "platform order id not found" } }
เงื่อนไข : พบคำสั่งซื้อแต่ยกเลิกไม่ได้ — สถานะไม่ใช่ open หรือมีการอัปโหลดสลิปแล้ว
Code : 409
{ "success": false, "code": 409, "error": "order not open" }