ยกเลิกคำสั่งชำระเงิน (ด้วย Merchant Order ID)
ยกเลิกคำสั่งชำระเงินที่ยังเปิดอยู่ (สถานะ open) จากฝั่ง backend ของร้านค้า โดยใช้ merchant_order_id
ของคุณเอง — รหัสที่คุณส่งไปยัง /payment-flex/create ระบบจะแปลงไปเป็น
คำสั่งซื้อของระบบให้เองภายใน คุณจึง ไม่จำเป็น ต้องเก็บ platform_order_id ที่ระบบคืนกลับมา
นี่คือการทำงานเดียวกับ /payment/cancel แต่อ้างอิงด้วยรหัสคำสั่งซื้อ ของคุณ
แทนรหัสของระบบ กรณีใช้งานหลักคือเคลียร์ 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-by-merchant-order-id ด้วย merchant_order_id ของคำสั่งที่ค้างอยู่เพื่อยกเลิก
แล้วจึงสร้างใหม่อีกครั้ง
ลูกค้าสามารถกดยกเลิกบนหน้าชำระเงินได้เองเช่นกัน — endpoint นี้คือช่องทาง server-to-server สำหรับให้ backend ของร้านค้ายกเลิกเอง
URL : /payment/cancel-by-merchant-order-id
Method : POST
ข้อกำหนดข้อมูล
{
"merchant_id" : "[Merchant id]",
"token" : "[Auth Token]",
"time" : "[Time Stamp]",
"merchant_order_id" : "[merchant order id ของคุณที่ต้องการยกเลิก]"
}
| ชื่อพารามิเตอร์ | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| merchant_order_id | รหัสคำสั่งซื้อ ของคุณเอง — รหัสที่ส่งไปยัง /payment-flex/create ต้องถูกสร้างภายใน 24 ชั่วโมง ที่ผ่านมา | ORDER0123456789789445566 |
ตัวอย่างข้อมูล
{
"merchant_id": "AA12345678",
"token": "testtokentesttokentesttokentesttokentesttoken",
"time": 1656272222,
"merchant_order_id": "ORDER0123456789789445566"
}
เงื่อนไขที่ยกเลิกได้
การยกเลิกจะสำเร็จ ก็ต่อเมื่อ ครบทุกข้อต่อไปนี้:
- คำสั่งซื้อเป็นของร้านค้า ของคุณ เอง
- คำสั่งซื้อถูกสร้างภายใน 24 ชั่วโมง ที่ผ่านมา (ช่วงเวลาที่ระบบใช้ค้นหา)
- สถานะคำสั่งซื้อเป็น
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" } }
เงื่อนไข : ไม่พบคำสั่งซื้อ — merchant_order_id ไม่ได้ถูกสร้างผ่าน FLEX, เก่ากว่า 24 ชั่วโมง หรือไม่ใช่ของร้านค้าคุณ
Code : 500
{ "error": { "code": 500, "message": "ไม่พบ merchant order id" } }
เงื่อนไข : พบคำสั่งซื้อแต่ยกเลิกไม่ได้ — สถานะไม่ใช่ open, มีการอัปโหลดสลิปแล้ว หรือเลยช่วงเวลาที่ยกเลิกได้
Code : 409
{ "success": false, "code": 409, "error": "cannot cancel order" }