POST · /api/v1/wallet/withdraw/create

发起提现

受理一笔提现请求,立即返回系统侧记录 id。实际广播、确认、回调由派付后台异步推进。

安全建议

  1. 生产环境请在派付后台为提现配置白名单(限定收款地址 / 金额上限 / 单日笔数);否则任何合法密钥均可提款。
  2. 提现接口建议走独立鉴权服务,不要和 C 端业务网关混用。
  3. 大额提现可在后台开启人工审批,策略由你的风控决定。
POST/api/v1/wallet/withdraw/create HMAC 幂等

appOrderNo 是幂等键。同一应用内相同 appOrderNo 重复提交会返回错误码 1007004000WITHDRAW_BUSINESS_DUPLICATE),而不会重复出款。 请在你的系统里保证每笔提现使用唯一的业务单号。

Header 参数

X-Api-Key
string required
应用 apiKey。沙箱前缀 pk_test_,正式 pk_live_
例: pk_test_4f9d8ab1c0e74...
X-Timestamp
integer (UNIX 毫秒) required
请求发起时刻的 UNIX 毫秒时间戳(13 位整数)。与服务端时差不能超过 ±300000ms(5 分钟)。
例: 1746450000000
X-Nonce
string required
本次请求的随机串,建议 UUID v4 或 16 字节 hex。同一 (apiKey, nonce) 在 10 分钟窗口内不可重复。
例: 8e3a1c2f7b6d4a90
X-Signature
string required
HMAC-SHA256 签名(小写 hex,64 字符)。算法:HMAC(secret, METHOD + "\n" + PATH + "\n" + ts + "\n" + nonce + "\n" + SHA256(body))。详见 鉴权章节
例: 6e4a8c1f...(64 字符)

Body 参数

application/json
appOrderNo
string required
商户业务单号,同一应用内唯一,用作幂等键。重复提交相同 appOrderNo 会返回错误码 1007004000WITHDRAW_BUSINESS_DUPLICATE)。
例: ORDER_2026050501
chainCode
string required
公链 code,必须是该应用已开通的公链,且与 chainTokenId 对应的代币所属链一致。
例: ETH
chainTokenId
integer required
链上代币 id,从 GET /api/v1/wallet/support/tokens 获取。
例: 3
toAddress
string required
收币地址。EVM 链支持 EIP-55 校验和;TRON / BTC 走各自标准格式。
例: 0xab12cd34ef56789000000000000000000000001
toMemo
string optional
仅 Memo 链(XRP / XLM / EOS 等)需要传;非 Memo 链忽略。
例: 1234567890
amount
string required
提现金额,必须以字符串传,值必须 > 0,精度由币种 decimals 决定。
例: "10.5"
callbackUrl
string optional
本笔单独的回调地址,覆盖应用级 WITHDRAW 回调配置。可用于多产品线分流。
例: https://your.app/cb/withdraw
remark
string optional
备注(≤200 字),仅后台展示,不参与上链。
例: 用户申请提现

示例

{
  "appOrderNo":   "ORDER_2026050501",
  "chainCode":    "ETH",
  "chainTokenId": 3,
  "toAddress":    "0xab12cd34ef56789000000000000000000000001",
  "amount":       "10.5",
  "callbackUrl":  "https://your.app/cb/withdraw"
}

请求示例

# 签名算法(stringToSign / 4 个 header)见 /docs/api/auth
API_KEY=pk_test_xxx
SECRET=sk_test_xxx
METHOD=POST
REQ_PATH=/api/v1/wallet/withdraw/create
BODY='{"appOrderNo":"ORDER_2026050501","chainCode":"ETH","chainTokenId":3,"toAddress":"0xab12cd34ef56789000000000000000000000001","amount":"10.5"}'
TS=$(( $(date +%s) * 1000 ))
NONCE=$(uuidgen | tr -d '-' | tr '[:upper:]' '[:lower:]')
BODY_SHA=$(printf "%s" "$BODY" | openssl dgst -sha256 -hex | awk '{print $2}')
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 -X POST "https://api.pqpa.com$REQ_PATH" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key:    $API_KEY" \
  -H "X-Timestamp:  $TS" \
  -H "X-Nonce:      $NONCE" \
  -H "X-Signature:  $SIG" \
  -d "$BODY"

响应

Response
200OK
{
  "code": 0,
  "data": 12345,
  "msg":  ""
}

data 字段说明

data
integer required
系统侧提现记录 id(withdraw_record.id)。后续用 appOrderNo 或此 id 查询状态。

下一步