查询订单
通过你的订单号查询当前状态。作为 webhook 的兜底手段。
接口
- 端点:
POST {API_BASE}/pay/order/query - API_BASE:
https://api.168tonpay.xyz/api/v1/compat/godapay - 认证: 请求体 MD5 排序签名
请求体
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
merchantId | string (UUID) | ✅ | 你的商户 ID |
orderNo | string | ✅ | 你创建订单时用的订单号 |
signature | string | ✅ | MD5 排序签名 |
请求示例
cURL
curl -X POST "${API_BASE}/pay/order/query" \
-H "Content-Type: application/json" \
-d '{
"merchantId": "aef6025b-...",
"orderNo": "ORD-001",
"signature": "<md5-sorted>"
}'
Node.js
async function getOrder(orderNo) {
const body = { merchantId: process.env.MERCHANT_ID, orderNo };
body.signature = sign(body, process.env.API_SECRET); // 见认证页
const res = await fetch(`${process.env.API_BASE}/pay/order/query`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body),
});
return res.json();
}
响应(200 OK)
{
"code": 0,
"data": {
"merchantId": "aef6025b-...",
"orderNo": "ORD-001",
"platformOrderNo": "0b8a4f32-1c1e-4a1c-9b25-3a9c2e0f7d5b",
"amount": "500.00",
"status": "1"
}
}
status:"1" = 已支付,"0" = 未支付(与 webhook 一致)。
轮询建议
async function pollOrderStatus(orderNo, opts = {}) {
const { maxAttempts = 30, interval = 10000 } = opts;
for (let i = 0; i < maxAttempts; i++) {
const { data } = await getOrder(orderNo);
if (data.status === '1') return data;
await new Promise((r) => setTimeout(r, interval));
}
throw new Error('Order polling timeout');
}
最佳实践
- 优先用 Webhook,轮询只作兜底。
- 限速:单商户 60 req/min,过快轮询会触发限流。
- 已支付即停:
status === '1'后停止查询。