ฝั่งถอน (Withdrawal)

สร้างรายการถอนแบบ PromptPay ไทม์ไลน์การเติมทีละขา และบัญชีกลาง

1. สร้างรายการถอน

ใช้ API เดียวกับ Create Withdrawal (THB) แต่ P2P ต้องเป็น PromptPay เท่านั้น — ตั้ง receiver_bank เป็น "PromptPay" และใส่เบอร์โทร/เลขบัตรใน withdrawal_address เพราะผู้ฝากต้องสแกนจ่ายให้ทันใน 10 นาที และตรวจปลายทางได้แม่นกว่า

POSTCreate Withdrawal (P2P)
Endpoint URL
https://testnet.trustsig.xyz/v1/withdrawal/createRequest/fiat

Request Example

cURL
curl --location 'https://testnet.trustsig.xyz/v1/withdrawal/createRequest/fiat' \
  --request POST \
  --header 'x-api-key: $SIGNATURE_API_KEY' \
  --header 'x-signature: $SIGNATURE' \
  --header 'x-timestamp: $TIMESTAMP' \
  --header 'Content-Type: application/json' \
  --data '{
    "amount": 10000,
    "currency": "THB",
    "receiver_bank": "PromptPay",
    "withdrawal_address": "0812345678",
    "receiver_name": "MR. John Snow",
    "order_id": "ACME-W-2026-000456",
    "order_user_reference": "USER900"
}'

Response Example

200 OK Response
{
    "success": true,
    "code": 0,
    "data": {
        "id": "4d59bdf7-c762-4f09-94f2-cfaabefc52e7",
        "order_id": "ACME-W-2026-000456",
        "amount": "10000",
        "currency": "THB",
        "receiver_bank": "PromptPay",
        "address": "0812345678",
        "withdrawal_status": "PENDING"
    }
}

เก็บ id ไว้ติดตามด้วย GET /v1/withdrawal/detail/:id ซึ่งคืนขา split รูปแบบเดียวกับ matches[] ใน webhook

2. ผลลัพธ์ที่เป็นไปได้ของรายการถอน

หลังสร้างรายการรอผู้ฝากจับคู่ยอดถูกกันไว้ (reserve)ทุกขาเติมครบตามเวลาWITHDRAWAL_COMPLETEDมี matches[] และ summary ครบทุกขาก่อนหน้านั้นได้ PARTIALLY_FUNDED ครบทุกขา รวมขาสุดท้ายwebhook → ร้านค้าเติมไม่ครบใน 30 นาทีWITHDRAWAL_COMPLETEDบัญชีกลางโอนส่วนที่ขาดให้ยอดนั้นถูกหักจากเครดิต THB_P2Pwebhook → ร้านค้าเงียบระหว่างรอธนาคารปิดรายการทั้งที่เติมได้บางส่วนWITHDRAWAL_COMPLETED_PARTIALLYsummary.withdrawer_received > 0 — เงินถึงปลายทางไปแล้วบางส่วนคืนลูกค้าเฉพาะ summary.withdrawer_pending_refundwebhook → ร้านค้าแพ้ dispute ของขาใดขาหนึ่งWITHDRAWAL_COMPLETED_PARTIALLYrefund_reason: DISPUTE_LOSTอาจมาช้าเป็นชั่วโมงถึงเป็นวันwebhook → ร้านค้าขาใดขาหนึ่งหมดเวลาขาถูกปล่อยกลับเข้าคิวขาที่ settle แล้วไม่กระทบ รายการยังเปิดอยู่poll withdrawal/detail/:idธนาคารตีกลับตอนโอนFREEZEDไม่มี webhook — ต้องแจ้งทีมงานpoll withdrawal/detail/:idbank_final_status
มี webhook ไม่มี webhook — ต้อง poll หรืออ่านจาก response

3. ไทม์ไลน์ของรายการถอน

  1. T+0สร้างรายการถอน

    ระบบกันยอดไว้แล้วรอผู้ฝากจับคู่ — ยังไม่มี webhook

  2. ระหว่างทางขาแต่ละขาทยอยสำเร็จ

    ทุกขาที่สำเร็จได้ WITHDRAWAL_PARTIALLY_FUNDED หนึ่งใบ ขาสุดท้ายก็ได้ แล้วต่อด้วย event ปลายทาง

  3. ครบยอดทางที่ 1เติมครบภายในเวลา

    ได้ WITHDRAWAL_COMPLETED จบรายการ

  4. เกิน 30 นาทีทางที่ 2เติมไม่ครบ → บัญชีกลางโอนส่วนที่ขาด

    ยอดที่ขาดถูกหักจากเครดิต THB_P2P · เงียบระหว่างรอธนาคาร แล้วจึงได้ WITHDRAWAL_COMPLETED

4. บัญชีกลาง (เกิน 30 นาที)

ถ้าผ่านไป 30 นาที unconfirmed แล้วยังมียอดที่ไม่สำเร็จจากฝั่ง P2P ระบบจะคำนวณยอดคงเหลือ โอนจากบัญชีกลางให้ผู้ถอน แล้วหักยอดนั้นจากเครดิต THB_P2P ของร้าน (ดูเครดิต THB_P2P) — รายการจึงปิดครบยอดโดยไม่ต้องรอผู้ฝากรายใหม่

ช่วงระหว่างปิดหน้าต่าง P2P จนธนาคารโอนเสร็จ ไม่มี webhook ใด ๆ — ตั้งเกณฑ์แจ้งเตือนรายการค้างให้ครอบคลุมเวลาโอนของธนาคารด้วย