跳到主要内容

查询订单

通过你的订单号查询当前状态。作为 webhook 的兜底手段。

接口

  • 端点: POST {API_BASE}/pay/order/query
  • API_BASE: https://api.168tonpay.xyz/api/v1/compat/godapay
  • 认证: 请求体 MD5 排序签名

请求体

参数类型必需描述
merchantIdstring (UUID)你的商户 ID
orderNostring你创建订单时用的订单号
signaturestringMD5 排序签名

请求示例

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');
}

最佳实践

  1. 优先用 Webhook,轮询只作兜底。
  2. 限速:单商户 60 req/min,过快轮询会触发限流。
  3. 已支付即停status === '1' 后停止查询。

下一步