GET · /api/v1/wallet/withdraw/get-by-business-id
查询单笔提现
按商户业务单号(appOrderNo)查询提现记录的当前状态。收到 WITHDRAW 回调后,建议用此接口反查最新状态做对账。
对账最佳实践
收到 WITHDRAW 系列回调时,不要直接信任 payload 里的 status。 建议用 payload 中的appOrderNo 调本接口拿当前状态—— payload 是事件快照,网络重试或乱序可能让你拿到旧值。 /api/v1/wallet/withdraw/get-by-business-id HMAC Header 参数
X-Api-Keystring required | 应用 apiKey。沙箱前缀 pk_test_,正式 pk_live_。 例: pk_test_4f9d8ab1c0e74... |
X-Timestampinteger (UNIX 毫秒) required | 请求发起时刻的 UNIX 毫秒时间戳(13 位整数)。与服务端时差不能超过 ±300000ms(5 分钟)。 例: 1746450000000 |
X-Noncestring required | 本次请求的随机串,建议 UUID v4 或 16 字节 hex。同一 (apiKey, nonce) 在 10 分钟窗口内不可重复。 例: 8e3a1c2f7b6d4a90 |
X-Signaturestring required | HMAC-SHA256 签名(小写 hex,64 字符)。算法: HMAC(secret, METHOD + "\n" + PATH + "\n" + ts + "\n" + nonce + "\n" + SHA256(body))。详见 鉴权章节。 例: 6e4a8c1f...(64 字符) |
Query 参数
appOrderNostring required | 商户业务单号(发起提现时传入)。 例: ORDER_2026050501 |
请求示例
# 签名算法(stringToSign / 4 个 header)见 /docs/api/auth
API_KEY=pk_test_xxx
SECRET=sk_test_xxx
METHOD=GET
APP_ORDER_NO=ORDER_2026050501
REQ_PATH="/api/v1/wallet/withdraw/get-by-business-id?appOrderNo=$APP_ORDER_NO"
TS=$(( $(date +%s) * 1000 ))
NONCE=$(uuidgen | tr -d '-' | tr '[:upper:]' '[:lower:]')
# GET 请求 body 为空,body hash = SHA256("")
BODY_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
SIG=$(printf "%s\n%s\n%s\n%s\n%s" "$METHOD" "$REQ_PATH" "$TS" "$NONCE" "$BODY_SHA" \
| openssl dgst -sha256 -hmac "$SECRET" -hex | awk '{print $2}')
curl -G "https://api.pqpa.com/api/v1/wallet/withdraw/get-by-business-id" \
--data-urlencode "appOrderNo=$APP_ORDER_NO" \
-H "X-Api-Key: $API_KEY" \
-H "X-Timestamp: $TS" \
-H "X-Nonce: $NONCE" \
-H "X-Signature: $SIG"响应
200OK
{
"code": 0,
"data": {
"appOrderNo": "ORDER_2026050501",
"chainCode": "ETH",
"token": "USDT",
"amount": "10.5",
"fee": "0.0021",
"fromAddress": "0xHotWallet000000000000000000000000000001",
"toAddress": "0xab12cd34ef56789000000000000000000000001",
"memo": null,
"txHash": "0x9ab8c4f7e2d1000000000000000000000000000000000000000000000000abcd",
"blockHeight": 21430500,
"confirmations": 12,
"status": "SUCCESS",
"failReason": null,
"riskLevel": null,
"riskReason": null,
"callbackTaskId": 5001,
"createTime": "2026-05-05T12:34:56",
"updateTime": "2026-05-05T12:36:10"
},
"msg": ""
}data 字段说明
appOrderNostring required | 商户业务单号(回填请求参数)。 |
chainCodestring required | 公链 code。 |
tokenstring required | 代币 symbol,如 USDT。 |
amountstring required | 提现金额(字符串)。 |
feestring? optional | 实际链上手续费;广播前为 null。 |
fromAddressstring? optional | 出款热钱包地址;广播前为 null。 |
toAddressstring required | 链上收款地址。 |
memostring? optional | Memo 链下的 memo;非 Memo 链为 null。 |
txHashstring? optional | 链上交易 hash;广播前为 null。 |
blockHeightinteger? optional | 所在区块高度;确认前为 null。 |
confirmationsinteger required | 当前确认数。 |
statusstring required | 提现状态枚举。 取值: PROCESSINGBROADCASTEDCONFIRMINGSUCCESSFAILEDCANCELLED |
failReasonstring? optional | FAILED 时的失败原因;其它状态为 null。 |
riskLevelstring? optional | 风控评级(如 HIGH);未触发风控时为 null。 |
riskReasonstring? optional | 风控原因说明;未触发风控时为 null。 |
callbackTaskIdinteger? optional | 关联的回调任务 id;尚未生成时为 null。 |
createTimestring required | 提现单创建时间,格式 yyyy-MM-ddTHH:mm:ss。 |
updateTimestring required | 最后更新时间。 |
状态机
同一笔提现的 status 演化路径:
发起提现
│
▼
PROCESSING ──► BROADCASTED ──► CONFIRMING ──► SUCCESS ✅ → 推送 WITHDRAW_SUCCESS 回调
│ │
│ └─ 链上 revert / 重组 ──────────► FAILED ❌ → 推送 WITHDRAW_FAILED 回调
│
└─ 风控拦截 / 余额不足 / 人工拒绝 ─────────────► CANCELLED ⛔ → 推送 WITHDRAW_CANCELLED 回调下一步
- 发起提现 — 创建新的提现单
- WITHDRAW 回调 payload — 状态变更主动通知
- 重发回调 — 主动补发漏处理的回调