ฝั่งฝาก (Deposit)

ผลลัพธ์ที่เป็นไปได้ ข้อบังคับของรายการ ข้อพิพาท และการเปลี่ยนไปใช้ช่องทางธนาคาร

ระบบต้นทางเป็นผู้สร้าง session ฝากและดูแลหน้าโอนเงิน/แนบสลิปของผู้ฝาก หน้านี้อธิบายเฉพาะผลลัพธ์ที่ร้านค้าต้องจัดการ ติดตามสถานะด้วย GET /v1/p2p/public/flow/:flowId เนื่องจากเหตุการณ์ระหว่างดำเนินการไม่มี webhook (ดู Webhook)

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

หลังจับคู่สำเร็จรอผู้ฝากโอนนับถอยหลัง 15 นาทีสลิปผ่านการตรวจPAYMENT_PAIDเครดิตเข้า payment เต็มจำนวนหักค่าธรรมเนียมจากเครดิต THB_P2Pwebhook → ร้านค้าdeposit_type: P2Pไม่มีรายการให้จับคู่PAYMENT_PAIDเปลี่ยนไปใช้ช่องทางธนาคารตั้งแต่ตอนสร้างwebhook → ร้านค้าdeposit_type: CLASSICสลิปซ้ำกับที่เคยใช้แล้วPAYMENT_FAILEDreason: DUPLICATE_SIGNATUREwebhook → ร้านค้ายอด/บัญชีผู้โอนไม่ตรงสลิปถูกปฏิเสธรายการยังเปิดอยู่ แนบสลิปใหม่ได้จนกว่าจะหมดเวลาดูจาก HTTP error ของ API แนบสลิปหมดเวลาโดยไม่มีสลิปที่ผ่านรายการหมดอายุรายการย่อยถูกปล่อยกลับให้ผู้ฝากรายอื่น · payment_status เป็น PAYMENT_EXPIREDไม่มี webhook (ตั้งแต่ 13 ต.ค. 2026 ไม่ส่ง PAYMENT_CANCELED แล้ว) — ตรวจสอบสถานะผ่าน API payment/info หรือ flowโอนแล้วแต่แนบสลิปไม่ได้DISPUTEDล็อกไว้จนกว่าแอดมินจะตัดสิน ไม่หมดอายุเองpoll match/:matchId
มี webhook ไม่มี webhook — ต้องตรวจสอบสถานะผ่าน API หรือดูจาก response

2. ข้อบังคับของรายการฝาก

โอนภายใน 15 นาที

นับตั้งแต่ระบบเปิดเผยบัญชีปลายทาง

หากเกินเวลาจะไม่ได้รับเครดิต ยกเว้นเปิดข้อพิพาทไว้ก่อน

โอนจากบัญชีที่ระบุไว้เท่านั้น

ต้องเป็น sender_bank + sender_account ที่ส่งตอนสร้างรายการ แม้เป็นเจ้าของคนเดียวกันก็ใช้บัญชีอื่นไม่ได้

หากใช้บัญชีอื่น สลิปจะไม่ผ่านและไม่ได้รับเครดิต

QR ผูกกับรายการเดียว ใช้ครั้งเดียว

ห้ามเก็บไว้ใช้ซ้ำหรือส่งต่อ การฝากครั้งใหม่ต้องสร้างรายการใหม่

หากใช้ซ้ำจะถือเป็นสลิปซ้ำ (DUPLICATE_SIGNATURE)

ttl_seconds คืออายุของลิงก์หน้าชำระเงิน ส่วน 15 นาทีคือเวลาโอนจริงที่เริ่มนับเมื่อจับคู่สำเร็จ — เป็นค่าคนละตัวกัน

3. ข้อพิพาท (dispute)

เมื่อโอนแล้วแต่แนบสลิปไม่สำเร็จ ผู้ฝากเปิดข้อพิพาทได้จากหน้า session (scope match:dispute) รายการจะถูกล็อกไว้แทนที่จะหมดอายุ จนกว่าแอดมินจะตัดสิน — ผลต่อฝั่งร้านค้าเป็นดังนี้ (ดูตารางเทียบสองทางที่หน้า Webhook)

ตรวจสอบสถานะGET /v1/p2p/match/:matchId → match_status — การเปิดและปิดข้อพิพาทไม่มี webhook
ใครตัดสินแอดมินเท่านั้น ไม่มีระบบตัดสินอัตโนมัติ — รายการค้างอยู่จนกว่าจะมีการตัดสิน และย้อนกลับไม่ได้
ระยะเวลาไม่มี SLA รับประกัน อาจใช้เวลาหลายชั่วโมงถึงหลายวัน — อย่าตั้ง timeout ฝั่งร้านแล้วปิดออเดอร์เอง
ตัดสินให้ผู้ฝากpayment กลายเป็น PAYMENT_PAID และส่ง webhook ตามปกติ ยอดที่ได้หักค่าธรรมเนียมฝากแล้ว · ฝั่งถอนได้ WITHDRAWAL_PARTIALLY_FUNDED (reason LEG_SETTLED) ถ้ายังขาดยอด บัญชีบริษัทจะโอนส่วนที่เหลือตามปกติ
ตัดสินให้ผู้ถอนpayment ไม่เปลี่ยนแปลง · ฝั่งถอนได้ webhook ปิดรายการตาม outcome.result และคืนเงินตาม summary · reputation ของผู้ฝากถูกหัก

4. classic fallback

หากไม่มีรายการให้จับคู่ ระบบอาจเปลี่ยนรายการไปใช้ช่องทางธนาคารในคำขอเดียวกัน — response จะส่งข้อมูลช่องทาง classic แทน match ของ P2P

  • ใช้ payment.id เป็นคีย์กระทบยอด อย่าผูก logic กับช่องทางที่ขอ
  • deposit_type จะเป็น CLASSIC แต่ยังเป็นออเดอร์เดียวกัน
  • ถ้าไม่ส่ง order_id ระบบจะสร้างให้เอง และ order_user_reference กลายเป็นเลขบัญชีผู้โอน
  • client ต้องอ่าน response ได้ทั้งสองรูปแบบ ไม่ใช่สมมติว่าเป็น P2P เสมอ