Thailand Payin
Create payin
POST /api/v1/merchant/payin/create
| Field | Required | Notes |
|---|---|---|
merchantOrderNo | yes | Unique per merchant |
amount | yes | THB amount, up to 2 decimals |
bankCode | yes | Fixed value: QR |
notifyUrl | no | Webhook URL |
remark | no | Order remark |
payer_mobile | no | Payer mobile |
payer_realname | no | Payer name |
payer_email | no | Payer email |
payer_id_no | no | Payer ID number |
extJson.accountNo | yes | QR collection account number |
The legacy bankName field is still accepted for compatibility, but it is ignored for routing, fee matching, and upstream requests. New integrations should send bankCode only.
bankCode enum
When creating a Thailand payin order, send "bankCode": "QR" in the request body.
| bankCode | Notes |
|---|---|
QR | Thailand QR payin |
Response includes orderNo (PI...), feeAmount, netAmount, payUrl, payQr, and status (processing after successful upstream creation).
Query payin
GET /api/v1/merchant/payin/query?orderNo= or ?merchantOrderNo=
Webhook (completed)
Full checklist: Webhook guide.
POST JSON with headers X-Merchant-No, X-Timestamp, X-Nonce, X-Sign.
json
{
"orderType": "payin",
"orderNo": "PI...",
"merchantOrderNo": "...",
"status": "completed",
"amount": "2000.00",
"feeAmount": "20.00",
"netAmount": "1980.00",
"completedAt": 1718198400
}Respond 200 with body OK. Verify signature before updating order state.
Statuses: created, processing, partial_paid, completed, failed, timeout, cancelled.
