ข้ามไปยังเนื้อหา

ทดสอบและเช็กลิสต์ก่อนใช้งานจริง

test key และ live key ใช้ base URL เดียวกัน (https://api.example.com/v1) และมีเพียงการตรวจสลิปที่ให้ผลจำลอง (ถ้าทีมงานให้ URL ของระบบทดสอบแยกไว้ ให้ใช้ URL นั้นแทน) ควรทดสอบเป็นลำดับดังนี้

  1. ตรวจฟังก์ชันเซ็น กับ test vector และtest vector ของ webhook โดยไม่ต้องเรียก API
  2. เรียก endpoint ที่อ่านอย่างเดียว GET /v1/account และ GET /v1/banks เพื่อยืนยันคีย์ การเซ็น และ IP allow-list
  3. ทดสอบการตรวจสลิปด้วย test key ขอ test key (pk_test_...) และเปิดโหมดทดสอบได้จากทีมงาน แล้วใช้ payload ที่ขึ้นต้นด้วย TESTFAIL / TESTDUP เพื่อทดสอบทุกกรณี (รายละเอียด)
  4. ทดสอบรายการจริงยอดเล็ก pay-in และ payout สร้างรายการจริงเสมอ (แม้ใช้ test key) ให้ใช้บัญชีธนาคารของทีมคุณเองเป็น payer และยอดขั้นต่ำตาม limits ของบัญชี
กรณีวิธีทำผลที่คาด
จ่ายสำเร็จสร้าง pay-in แล้วโอนตาม amountwebhook payin.succeeded และ order เปลี่ยนเป็นจ่ายแล้ว
หมดเวลาสร้าง pay-in แล้วไม่โอนwebhook payin.expired
ยกเลิกPOST /v1/payins/{id}/cancelresponse สถานะ canceled ไม่มี webhook
สลิปอัปโหลดสลิปให้ pay-in ที่ยัง pendingmatched: true และ webhook payin.succeeded
payoutสร้าง payout ไปบัญชีของทีมwebhook payout.succeeded
รายการซ้ำสร้าง pay-in ให้ payer ที่มีรายการรออยู่409 pending_payin_exists
payer เดิมสร้าง pay-in สองรายการ (ทีละรายการ) ด้วย payer แบบ inline บัญชีเดียวกันทั้งสอง response มี payerId เดียวกัน
ชื่อเปลี่ยนส่ง payer แบบ inline ด้วยบัญชีที่มีอยู่แล้วแต่ชื่อต่างกันสร้าง pay-in ได้ และ warnings มี payer_name_differs ซึ่งระบบคุณบันทึกไว้
ยอดผิดยอดต่ำกว่า payinMinimum422 amount_below_minimum
ลายเซ็นผิดเปลี่ยน body หลังเซ็น401 invalid_signature
webhook ซ้ำกดส่งแจ้งผลอีกครั้งในหน้าเว็บจัดการระบบคุณไม่เติมเงินซ้ำ
webhook ล่มปิด endpoint ระหว่างรายการสำเร็จงาน reconcile อัปเดตสถานะได้เอง
  • ใช้ live key (pk_live_...) บน production และไม่มี test key หลงอยู่
  • secret อยู่ใน secret manager หรือ environment variable ไม่อยู่ในโค้ด repository หรือ log
  • สร้าง secret ใหม่ก่อนเปิดใช้งาน ถ้า secret ที่ใช้ทดสอบเคยถูกแชร์หรือวางในที่อื่น
  • เรียก API จากเซิร์ฟเวอร์เท่านั้น ไม่มีการเรียกจากเบราว์เซอร์หรือแอป
  • นาฬิกาเซิร์ฟเวอร์ sync ด้วย NTP
  • ถ้าใช้ IP allow-list แจ้ง IP ขาออกทั้งหมดของ production แก่ทีมงานแล้ว
  • ทุก request สร้าง timestamp, nonce และลายเซ็นใหม่ (รวมถึงตอน retry)
  • ส่งจำนวนเงินเป็นสตริง และแสดง amount ของ pay-in ให้ผู้จ่าย (ไม่ใช่ requestedAmount)
  • ทุก pay-in และ payout ส่ง payer (บัญชีธนาคารแบบ inline) หรือ payerId อย่างใดอย่างหนึ่ง และบันทึก warnings ใน response ไว้ใน log
  • ถ้าแสดง QR code เอง สร้างจาก payTo.qrPayload ถ้าใช้รูปสำเร็จรูป คำขอต้องใส่ ?include=paymentImage (ระบบไม่ส่งรูปมาโดยอัตโนมัติ)
  • ตั้ง reference ไม่ซ้ำทุกรายการ และค้นด้วย reference ก่อนสร้างซ้ำหลัง timeout
  • เขียนเงื่อนไขตาม error.code และจัดการ pending_payin_exists, insufficient_balance, not_available_now, maintenance
  • บันทึก requestId ของทุก response ไว้ใน log
  • ตรวจยอดตาม limits จาก GET /v1/account ก่อนสร้างรายการ
  • endpoint เป็น HTTPS สาธารณะ และตรวจลายเซ็นจาก raw body
  • ปฏิเสธ event ที่ timestamp เก่ากว่า 5 นาที
  • ตอบ 2xx ภายใน 10 วินาที และประมวลผลงานหนักแบบ background
  • กันซ้ำด้วย data.id + data.status และไม่ย้อนสถานะของ order ที่จบแล้ว
  • ตอบ 2xx กับ event ชนิดที่ไม่รู้จัก
  • มีงาน reconcile ตั้งเวลา เพราะไม่มีการส่งซ้ำอัตโนมัติ
  • ทีมงานของคุณรู้วิธีใช้ปุ่มส่งแจ้งผลอีกครั้ง และดูประวัติ Callback ในหน้าเว็บจัดการ
  • ติดตามยอดคงเหลือ (balance.available) ให้พอสำหรับ payout
  • มีช่องทางติดต่อทีมงาน: support@example.com โดยแนบ requestId และ id ของรายการทุกครั้ง