ยกเลิกคำสั่งชำระเงิน

ยกเลิกคำสั่งชำระเงินที่ยังเปิดอยู่ (สถานะ 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"
}

เงื่อนไขที่ยกเลิกได้

การยกเลิกจะสำเร็จ ก็ต่อเมื่อ ครบทุกข้อต่อไปนี้:

เมื่อยกเลิกสำเร็จ ระบบจะ:

⚠️ การยกเลิก อาจไม่ถือเป็นที่สิ้นสุดเสมอไป: ในบางกรณีคำสั่งซื้ออาจถูกชำระภายหลังได้ ซึ่งจะมี 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" }