Sandbox payment API ที่รองรับ
ใช้ host https://api.sandbox.<โดเมน White Label> กับ test key และวิธีเซ็น request เดิม ผู้ดูแลต้องเปิดรุ่นที่รองรับ simulator ให้ก่อน ข้อมูลทุกใบมี livemode: false และ environment: "sandbox"
ขอบเขตของ simulator รุ่นนี้
รองรับ test balance การจำลองผลรายการ และ signed webhook ผ่าน test endpoint ที่ตั้งค่าไว้ ยังไม่สร้าง QR, checkout หรือรับสลิป ผลทดสอบนี้ยังไม่ยืนยันว่า เส้นทางชำระเงินจริงพร้อมแล้ว ตารางยอด 100.00–116.00 ใน แผน Sandbox ยังเป็นเป้าหมายส่วนที่ต้องพัฒนาต่อ
เริ่มทดสอบ
- สร้าง test API key จากหน้า API Keys ใน test Merchant session เลือกสิทธิ์
deposits:read/write,withdrawals:read/write,wallet:readและsandbox:writeตามงานที่ต้องใช้ เฉพาะsandbox:writeเท่านั้นที่ห้ามให้ Live key สิทธิ์รับ/จ่ายและอ่าน wallet ของ Live ดู Live P2P profile - เติมยอดทดสอบด้วย
POST /v1/pay/sandbox/topupsbody{"amount_minor":10000000,"currency":"THB"}และIdempotency-Key - สร้างรายการด้วย
POST /v1/pay/depositsหรือPOST /v1/pay/withdrawalsใช้ field และวิธีเซ็นของ API เรา จำนวนเงินยังเป็น สตางค์ - ตรวจ
GET /v1/pay/balance, รายการตาม ID และGET /v1/pay/eventsใช้since_sequenceและlimitอ่าน event ต่อให้ครบ
ทุกคำขอซ้ำต้องใช้ nonce ใหม่ เมื่อ retry mutation ให้เก็บ body และ Idempotency-Key เดิมไว้ การเปลี่ยน body กับ key เดิมได้ 409 idempotency_key_reused โดยไม่เพิ่มยอดหรือสร้าง event ซ้ำ
ยอดทดสอบและผลที่ได้
| ยอดบาท | Payin | Payout |
|---|---|---|
| 1,001–2,000 | settled | settled |
| 2,001–3,000 | rejected | rejected |
| 3,001–4,000 | reversed | rejected |
| 4,001–5,000 | expired | expired |
| ยอดอื่น รวมถึงมากกว่า 5,000 | awaiting_payment | open |
ใช้ยอดเต็มบาท ตั้งแต่ 1 ถึง 10,000,000 บาทต่อคำขอ ค่าธรรมเนียมทดสอบรุ่นนี้ เป็นศูนย์ ผลอัตโนมัติจะเกิดพร้อมสร้างรายการ ไม่ต้องรอ callback
Payin ช่วง 3,001–4,000 บาทจะ settled ที่ version 1 แล้ว reversed ที่ version 2 ใน transaction เดียวกัน มี ledger สองฝั่งหักล้างกัน และ event ทั้งคู่ ยอดสุทธิในกระเป๋าจึงเป็นศูนย์
รายการค้างจำลองได้จาก POST /v1/pay/sandbox/deposits/{id}/simulate ด้วย {"outcome":"succeed"}, {"outcome":"fail"} หรือ {"outcome":"expire"} ส่วน .../withdrawals/{id}/simulate รับเฉพาะ succeed และ fail ต้องมี sandbox:write และสิทธิ์ write ของรายการนั้น รายการที่จบแล้วได้ 409 sandbox_transaction_not_pending
Payout จะกันยอดทดสอบไว้ทันที ถ้าไม่พอได้ 402 insufficient_balance เมื่อ succeed ยอดที่กันไว้จะถูกใช้ เมื่อ fail จะคืนสู่ยอด available
ทดสอบ Webhook
ตั้งค่า endpoint ใน Merchant test session ก่อนสร้างรายการใหม่ ระบบจะส่ง canonical payload พร้อมลายเซ็น Ed25519 ตาม วิธีตรวจ webhook โดยมี X-Environment: sandbox, livemode: false และ environment: "sandbox" ต้องเปิด scheduler และตั้ง signing keyring ให้ครบ เหตุการณ์เก่าไม่ถูกส่งย้อนหลัง การส่งอาจซ้ำหรือสลับลำดับ จึงต้อง dedupe ด้วย event ID และตรวจ version หากไม่สำเร็จจะใช้ตาราง retry เดิม 11 attempts
ในหน้า เครื่องมือ Sandbox ของ Merchant test session สามารถเติมยอดและเลือกผล รายการค้างได้ด้วยบัญชีพนักงานที่มีสิทธิ์ sandbox_tools:write โดยไม่ต้องใส่ API key หน้านี้ใช้ยอด รายการ และ event ชุดเดียวกับ Sandbox API
ส่วน ประวัติ Callback แสดงสถานะส่งและความพยายามแต่ละครั้ง กรองทั้งหมด รอส่ง หรือส่งไม่สำเร็จได้ แสดงเฉพาะ hostname และเวอร์ชัน endpoint ไม่มี payload หรือ ข้อมูลลับ การส่งซ้ำด้วยผู้ใช้งานยังไม่เปิดใช้ อ่านประวัติผ่าน GET /v1/bo/sandbox/tools/callbacks ด้วย cookie session และ sandbox_tools:read cursor มีอายุ 15 นาทีและใช้ต่อได้เฉพาะบัญชี ตัวกรอง และขนาดหน้าเดิม
ข้อจำกัด
- Payment API และ Tools ใช้โควตาร่วมกัน 60 requests/นาที รวมคำขออ่าน และสร้างรายการ/เติมยอดใหม่ได้ 500 ครั้ง/วัน UTC ต่อ Merchant โควตารายวันไม่ปิดการอ่านหรือจำลองรายการค้างเดิม
- ประวัติและใบรับ idempotency เก็บ 30 วันแบบ cleanup เมื่อใช้งาน รายการค้างและยอดที่กันไว้ไม่ถูกลบทิ้งอัตโนมัติ
- helper สำหรับ customer, fee editor, reset, manual webhook replay และ advanced slip scenarios ยังไม่อยู่ในรุ่นนี้ path ที่ไม่รองรับตอบ
SANDBOX_UNSUPPORTED - ตรวจ environment จาก response ทุกครั้ง และแยก handler ของ test กับเงินจริง
