ทดสอบและเช็กลิสต์ก่อนใช้งานจริง
ทดสอบการเชื่อมต่อ
หัวข้อที่มีชื่อว่า “ทดสอบการเชื่อมต่อ”test key และ live key ใช้ base URL เดียวกัน (https://api.example.com/v1) และมีเพียงการตรวจสลิปที่ให้ผลจำลอง (ถ้าทีมงานให้ URL ของระบบทดสอบแยกไว้ ให้ใช้ URL นั้นแทน) ควรทดสอบเป็นลำดับดังนี้
- ตรวจฟังก์ชันเซ็น กับ test vector และtest vector ของ webhook โดยไม่ต้องเรียก API
- เรียก endpoint ที่อ่านอย่างเดียว
GET /v1/accountและGET /v1/banksเพื่อยืนยันคีย์ การเซ็น และ IP allow-list - ทดสอบการตรวจสลิปด้วย test key ขอ test key (
pk_test_...) และเปิดโหมดทดสอบได้จากทีมงาน แล้วใช้payloadที่ขึ้นต้นด้วยTESTFAIL/TESTDUPเพื่อทดสอบทุกกรณี (รายละเอียด) - ทดสอบรายการจริงยอดเล็ก pay-in และ payout สร้างรายการจริงเสมอ (แม้ใช้ test key) ให้ใช้บัญชีธนาคารของทีมคุณเองเป็น payer และยอดขั้นต่ำตาม
limitsของบัญชี
กรณีที่ควรทดสอบ
หัวข้อที่มีชื่อว่า “กรณีที่ควรทดสอบ”| กรณี | วิธีทำ | ผลที่คาด |
|---|---|---|
| จ่ายสำเร็จ | สร้าง pay-in แล้วโอนตาม amount | webhook payin.succeeded และ order เปลี่ยนเป็นจ่ายแล้ว |
| หมดเวลา | สร้าง pay-in แล้วไม่โอน | webhook payin.expired |
| ยกเลิก | POST /v1/payins/{id}/cancel | response สถานะ canceled ไม่มี webhook |
| สลิป | อัปโหลดสลิปให้ pay-in ที่ยัง pending | matched: 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 ซึ่งระบบคุณบันทึกไว้ |
| ยอดผิด | ยอดต่ำกว่า payinMinimum | 422 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 แก่ทีมงานแล้ว
การเรียก API
หัวข้อที่มีชื่อว่า “การเรียก API”- ทุก 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ก่อนสร้างรายการ
Webhook
หัวข้อที่มีชื่อว่า “Webhook”- 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ของรายการทุกครั้ง