创建付款订单
创建一笔付款订单(payout),把资金送到玩家手机号。付款为人工处理,完成后通过 Webhook 通知你。
接口
- 端点:
POST {API_BASE}/apply/create - API_BASE:
https://apply.168tonpay.xyz/api/v1/compat/godapay - 认证: 请求体 MD5 排序签名(见 认证)
请求体
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
merchantId | string (UUID) | ✅ | 你的商户 ID |
outOrderNo | string | ✅ | 你系统的付款单号,≤ 32 字符,唯一 |
amount | string | ✅ | 金额,BDT,最多两位小数,如 "1000.00" |
bankType | string | ✅ | 通道:BKASH / NAGAD / ROCKET |
userName | string | ✅ | 收款人姓名 |
account | string | ✅ | 玩家收款号码(01[3-9]XXXXXXXX) |
returnUrl | string | ✅ | 完成回调地址 |
signature | string | ✅ | MD5 排序签名 |
请求示例
cURL
curl -X POST "${API_BASE}/apply/create" \
-H "Content-Type: application/json" \
-d '{
"merchantId": "aef6025b-f435-443c-bb18-f10e65d9314c",
"outOrderNo": "WD-001",
"amount": "1000.00",
"bankType": "BKASH",
"userName": "Rahim Uddin",
"account": "01711000000",
"returnUrl": "https://your-server.example/payout-webhook",
"signature": "<md5-sorted>"
}'
Node.js
const crypto = require('crypto');
function sign(params, apiSecret) {
const signStr = Object.keys(params)
.filter((k) => k !== 'signature' && params[k] != null)
.sort()
.map((k) => `${k}=${params[k]}`)
.join('&') + `&key=${apiSecret}`;
return crypto.createHash('md5').update(signStr).digest('hex').toLowerCase();
}
async function createPayout({ outOrderNo, amount, account, userName }) {
const body = {
merchantId: process.env.MERCHANT_ID,
outOrderNo,
amount,
bankType: 'BKASH',
userName,
account,
returnUrl: 'https://your-server.example/payout-webhook',
};
body.signature = sign(body, process.env.API_SECRET);
const res = await fetch(`${process.env.APPLY_BASE}/apply/create`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body),
});
return res.json();
}
响应(200 OK)
{
"code": 0,
"data": {
"merchantId": "aef6025b-...",
"orderNo": "WD-001",
"platformOrderNo": "0bf9804d-a970-42fe-8532-138b6b89fb5f",
"status": "processing"
}
}
付款流程
1. 你调用 POST /apply/create(状态:processing)
↓
2. 平台人工处理出款
↓
3. 完成后向你的 returnUrl 发 webhook
↓
4. 你的服务端验签后处理
幂等性
(merchantId, outOrderNo) 唯一,可作为幂等键。失败重试时使用同一个 outOrderNo,首次成功创建付款,重复单号返回原订单,绝不重复出款。
注意事项
- 余额校验:创建前商户余额必须 ≥
amount,否则返回INSUFFICIENT_BALANCE。 - 人工处理:付款不即时完成,以 webhook 为准。
查询状态
- 主动查询:
POST /apply/query(body 带merchantId+outOrderNo+signature)。 - 被动接收:完成 webhook,详见 Webhooks。