Skip to main content

POST - สร้างใบแจ้งหนี้

สร้างใบแจ้งหนี้ชำระเงินคริปโต ผู้ค้าส่งจำนวนเงิน (USD) ข้อมูลคำสั่งซื้อ และ callback URL ระบบจะส่งคืน trans_id และ url_payment เพื่อเปลี่ยนเส้นทางลูกค้าไปยังหน้าชำระเงิน

Endpoint

POST https://api.payerscan.com/payment/crypto

Headers

Headerจำเป็นคำอธิบาย
Content-Typeใช่application/json
x-api-keyใช่API Key ของร้านค้า

Request Body (JSON)

ฟิลด์ประเภทจำเป็นข้อจำกัดคำอธิบาย
merchant_idstringใช่ไม่ว่างรหัสผู้ค้าของร้านค้า (ต้องตรงกับ API Key)
amountnumber | stringใช่> 0 และ ≤ 1,000,000จำนวนเงินชำระ (USD) เช่น: 100, "100"
callback_urlstringแนะนำสูงสุด 500 ตัวอักษร, URL ที่ถูกต้องURL สำหรับรับ webhook เมื่อสถานะ completed หรือ expired
completed_urlstringไม่สูงสุด 500 ตัวอักษร, URL ที่ถูกต้องURL เปลี่ยนเส้นทางหลังชำระเงินสำเร็จ
expired_urlstringไม่สูงสุด 500 ตัวอักษร, URL ที่ถูกต้องURL เปลี่ยนเส้นทางเมื่อใบแจ้งหนี้หมดอายุ
namestringไม่สูงสุด 255 ตัวอักษรชื่อ/หัวข้อใบแจ้งหนี้
descriptionstringไม่สูงสุด 1000 ตัวอักษรคำอธิบายใบแจ้งหนี้
request_idstringไม่สูงสุด 255 ตัวอักษรID คำสั่งซื้อของผู้ค้าสำหรับการอ้างอิง (ส่งคืนใน response และ webhook) ใช้สำหรับ idempotency ด้วย — ดูหมายเหตุด้านล่าง

ตัวอย่าง Request

{
"merchant_id": "MID-XXXXXXXXXX",
"amount": 100,
"name": "Top-up balance",
"description": "Top-up the balance for username: [USERNAME]",
"callback_url": "https://your-server.com/webhook/payment",
"completed_url": "https://your-website.com/thank-you",
"expired_url": "https://your-website.com/",
"request_id": "ORDER_123456"
}

Response

สำเร็จ (HTTP 200)

{
"status": "success",
"data": {
"request_id": "ORDER_123456",
"trans_id": "TID-ABC123DEF4567890",
"status": "waiting",
"amount": "100",
"url_payment": "https://app.payerscan.com/bill/TID-ABC123DEF4567890",
"expires_in_minutes": 15
}
}
ฟิลด์คำอธิบาย
request_idค่าที่คุณส่งใน request
trans_idรหัสใบแจ้งหนี้ที่ไม่ซ้ำ ใช้สำหรับค้นหาและอ้างอิง webhook
statusเป็น "waiting" เสมอเมื่อสร้างใหม่
amountจำนวนเงิน USD (string)
url_paymentURL หน้าชำระเงิน — เปลี่ยนเส้นทางลูกค้ามาที่นี่
expires_in_minutesเวลาหมดอายุใบแจ้งหนี้ (นาที)

ข้อผิดพลาด (4xx / 5xx)

ข้อผิดพลาดทั้งหมดมีรูปแบบนี้:

{
"status": "error",
"message": "คำอธิบายข้อผิดพลาด",
"error_code": "ERROR_CODE",
"request_id": "ORDER_123456",
"details": { }
}
HTTPerror_codeคำอธิบาย
400VALIDATION_ERRORBody ไม่ถูกต้อง (ขาดฟิลด์จำเป็น, ประเภทผิด, เกินข้อจำกัด) details.errors มีรายละเอียด
400INVALID_MERCHANT_IDmerchant_id ไม่ตรงกับ API Key ของร้านค้า
400NO_PAYMENT_METHODร้านค้ายังไม่ได้กำหนดวิธีชำระเงิน เพิ่มอย่างน้อยหนึ่งที่อยู่กระเป๋าเงินหรือกำหนดค่าแพลตฟอร์มแลกเปลี่ยนก่อนสร้างใบแจ้งหนี้
401MISSING_API_KEYไม่มี header x-api-key
401INVALID_API_KEYAPI key ไม่ถูกต้องหรือไม่มีอยู่
403ACCOUNT_INACTIVEบัญชีที่เชื่อมกับ API key นี้ถูกปิดใช้งาน
403STORE_INACTIVEร้านค้าที่เชื่อมกับ API key นี้ถูกปิดใช้งาน
402INSUFFICIENT_BALANCEยอดคงเหลือร้านค้าไม่เพียงพอสำหรับค่าธรรมเนียม details มี current_balance, required_fee, shortage, fee_rate_percent, discount_percent, invoice_amount
429RATE_LIMIT_EXCEEDEDเกินขีดจำกัดคำขอ (burst หรือ sustained) มี limit_type, retry_after_seconds
500INTERNAL_ERRORข้อผิดพลาดเซิร์ฟเวอร์

รายละเอียดรหัสข้อผิดพลาด: รหัสข้อผิดพลาด API

Rate Limit

  • Burst: 5 คำขอ/วินาที (ต่อ API Key หรือ IP)
  • Sustained: 60 คำขอ/นาที (ต่อ API Key หรือ IP)

เกินขีดจำกัด → HTTP 429, body มี error_code: "RATE_LIMIT_EXCEEDED", retry_after_seconds

หมายเหตุ

  • วิธีชำระเงิน: ร้านค้าต้องกำหนดค่าอย่างน้อยหนึ่งที่อยู่กระเป๋าเงินหรือแพลตฟอร์มแลกเปลี่ยน (Binance Pay, OKX, Bybit, MEXC, Gate.io, Bitget ฯลฯ) ก่อนสร้างใบแจ้งหนี้ หากยังไม่ได้กำหนด API จะส่งคืนข้อผิดพลาด NO_PAYMENT_METHOD
  • Idempotency: หากคุณส่ง request_id ที่มีอยู่แล้วสำหรับร้านค้าเดียวกัน API จะส่งคืนใบแจ้งหนี้ที่มีอยู่แทนที่จะสร้างใหม่ Response จะมี idempotent: true เพื่อระบุสิ่งนี้ ป้องกันการสร้างใบแจ้งหนี้ซ้ำเมื่อ retry
  • ค่าธรรมเนียม: ค่าธรรมเนียมคำนวณจาก amount (USD) และหักจากยอดคงเหลือของร้านค้า ตรวจสอบยอดคงเหลือให้เพียงพอก่อนสร้างใบแจ้งหนี้ ในช่วงทดลองใช้ฟรี ค่าธรรมเนียมจะได้รับการยกเว้น
  • Callback: ส่ง callback_url เสมอเพื่อรับ webhook completed/expired มิฉะนั้นสามารถตรวจสอบได้ผ่าน GET https://api.payerscan.com/invoice/:trans_id เท่านั้น
  • request_id: แนะนำให้ส่งเพื่อจับคู่ webhook กับคำสั่งซื้อและรองรับ idempotency