ข้อผิดพลาดและวิธีแก้
error ของ API เป็น JSON รูปแบบ {"error":"CODE"}
โค้ด error
| HTTP | โค้ด | ความหมาย |
|---|---|---|
400 | INVALID_REQUEST | ช่องผิดรูปแบบ หรือส่งช่องที่ไม่อนุญาต |
400 | IDEMPOTENCY_KEY_REQUIRED | ไม่มี header Idempotency-Key หรือรูปแบบผิด |
401 | LIVE_KEY_REQUIRED | ไม่มี header Authorization หรือไม่ใช่ key ez2_live_... ที่ถูกต้อง |
401 | INVALID_API_KEY | ไม่รู้จัก key นี้ หรือถูกเพิกถอนแล้ว |
401 | INVALID_MCP_TOKEN | MCP token ผิดรูปแบบ หมดอายุ หรือถูกเพิกถอน |
403 | MCP_FORBIDDEN | MCP token เรียก route หรือ scope ที่ไม่อนุญาต |
403 | MCP_DRAFT_ONLY | MCP พยายามสร้าง SKU ในเกมที่ไม่ใช่ draft หรือตั้ง Webhook URL ของเกมที่ไม่ใช่ draft หรือเกมที่มี Order แล้ว |
404 | SKU_NOT_FOUND | ไม่มี SKU ที่ active รหัสนี้ในเกมนี้ SKU ที่เป็น pending หรือ suspended ขายไม่ได้ |
404 | ORDER_NOT_FOUND | ไม่มี Order นี้ หรือเป็นของเกมอื่น |
404 | GAME_NOT_FOUND | ไม่มีเกมนี้ หรือไม่ใช่เกมของคุณ |
409 | IDEMPOTENCY_CONFLICT | ใช้ Idempotency-Key นี้กับข้อมูลอื่นไปแล้ว |
409 | GAME_APPROVAL_REQUIRED | เกมยังไม่ approved |
409 | ORDER_NOT_NOTIFIED | แจ้งส่งของแล้วขณะที่ Order ไม่ใช่ NOTIFYING, NOTIFIED หรือ DELIVERED |
409 | GAME_SLUG_UNAVAILABLE | มีเกมอื่นใช้ slug นี้แล้ว |
409 | SKU_CODE_EXISTS | เกมนี้มี SKU รหัสนี้แล้ว |
413 | PAYLOAD_TOO_LARGE | body ยาวเกิน 16 KiB |
415 | JSON_REQUIRED | ต้องส่ง Content-Type: application/json |
422 | UNSAFE_WEBHOOK_URL | Webhook URL ไม่ใช่ HTTPS สาธารณะ |
500 | INTERNAL_ERROR | เกิดข้อผิดพลาดที่ไม่คาดคิด ให้ลองใหม่ |
ข้อผิดพลาดที่พบบ่อย
ตรวจลายเซ็นไม่ผ่าน
framework แปลง JSON ก่อนที่คุณจะอ่าน ทำให้ byte เปลี่ยน ให้อ่าน raw body ก่อน ดูFramework อื่น
ถ้าไม่ผ่านแค่บางครั้ง ให้ดูชื่อผู้เล่นที่มีอักษรนอก ASCII ต้องลงนามจาก byte ดิบ ไม่ใช่ string ที่แปลงรหัสใหม่
ถ้าทุก Webhook เริ่มไม่ผ่านหลังมีคนกด สร้าง secret ใหม่ แปลว่าเซิร์ฟเวอร์ยังใช้ secret เดิม ดูเปลี่ยน Webhook secret
เวลาเครื่องไม่ตรง
นาฬิกาเซิร์ฟเวอร์ห่างเกิน 5 นาที ให้ซิงก์ด้วย NTP
Webhook มาซ้ำไม่หยุด
เซิร์ฟเวอร์ตอบค่าอื่นที่ไม่ใช่ 200 ส่วน 201 และ 204 นับว่าไม่สำเร็จ ต้องตอบ 200 พอดี
ส่งของซ้ำ
เก็บสถานะ "เคยให้แล้ว" ไว้ในหน่วยความจำหรือนอก transaction ให้เก็บ order_id ใน transaction เดียวกับการให้ของ ดูให้ของครั้งเดียว
Order ยังไม่ยืนยันว่าจ่ายแล้ว
Order ไม่อยู่ในสถานะจ่ายแล้ว หรือ sku/buyer ไม่ตรงกับ Webhook ห้ามให้ของ ถ้าผู้เล่นบอกว่าจ่ายแล้ว ให้ค้น Order ใน Dashboard
400 ตอนสร้าง Order
ส่งช่องที่ไม่อนุญาต เช่น amount หรือ price ให้ส่งเฉพาะ sku, buyer, customer_email และ return_url
409 IDEMPOTENCY_CONFLICT
ใช้ key เดิมกับข้อมูลใหม่ การซื้อแต่ละครั้งต้องใช้ key ใหม่ การลองซ้ำของการซื้อเดิมต้องส่งข้อมูลเดิม
SKU_NOT_FOUND ทั้งที่เห็น SKU
SKU เป็น pending หรือ suspended หรืออยู่คนละเกม ขายได้เฉพาะ SKU ที่ active
Order ค้างที่ NOTIFIED
แจ้งส่งของแล้วไม่สำเร็จ เช่น เซิร์ฟเวอร์ล่มหลังให้ของ ตรวจว่าของเข้าแล้ว จากนั้นเรียก POST /v1/orders/{id}/delivered เรียกซ้ำได้
Webhook URL ไม่ผ่าน
URL ต้องเป็น HTTPS พอร์ต 443 และชี้ไปที่อยู่สาธารณะ localhost และที่อยู่ภายในถูกปฏิเสธ และระบบไม่ตาม redirect
เงินเพี้ยนจากทศนิยม
0.1 + 0.2 ไม่เท่ากับ 0.3 ใน float ให้เก็บจำนวนเต็มสตางค์ amount เป็นสตริงเช่น "100.00" เทียบเป็นสตริง หรือแปลงเป็นจำนวนเต็มสตางค์
ผู้เล่นจ่ายแล้วแต่ของไม่เข้า
- ผู้เล่นเปิดใบเสร็จแล้วติดต่อทีมเกมของคุณ
- ค้น Order ใน Dashboard ด้วย Order ID หรือ Player ID
- ถ้าเป็น
NOTIFY_FAILEDให้กดส่งแจ้งซ้ำ - ถ้าแก้ไม่ได้ ให้ส่งเรื่องให้ EZ2Pay จากหน้าเดียวกัน
ยังแก้ไม่ได้
ส่งเรื่องจากหน้าค้น Order ใน Dashboard พร้อม Order ID