演示文档,示例数据。正式环境参数与返回以签约后配置为准。

接口文档中心

接口文档

按章节说明鉴权、参数与返回结构。建议先在沙箱完成一次完整调用,再按文档接入正式环境。

接入准备

确认环境、凭证与回调地址后即可开始联调。

接入前先在控制台完成商户注册,取得商户号、API Key 与签名密钥。签名密钥只用于服务端计算签名,不得下发到浏览器或客户端。

建议先在沙箱环境完成参数与签名验证,确认返回结构符合预期后,再切换到正式环境配置。

  • 商户号:标识请求来源的商户唯一编号
  • API Key:请求身份标识,可公开出现在请求参数中
  • 签名密钥:仅用于服务端签名计算,禁止写入前端代码
  • 回调地址:接收支付结果通知的 HTTPS 地址

鉴权与签名

所有请求按字段升序拼接后计算签名,服务端校验一致性。

将除 sign 外的非空参数按参数名 ASCII 升序拼接为 key=value&key=value 形式,末尾追加密钥后做 SHA-256,结果转为小写十六进制即为签名。

服务端会重新计算签名并比对,签名不一致时返回 SIGN_ERROR,需检查参数是否被改写、是否漏传字段或密钥是否使用正确。

参数类型必填说明
app_idstring是商户号,控制台凭证页可查看
nonce_strstring是随机字符串,建议 32 位以内
timestampstring是秒级时间戳,与服务端偏差不超过 300 秒
signstring是按签名规则计算的结果
签名示例(伪代码)
params = { "app_id": "M20260101001", "amount": "100", "out_trade_no": "T20260101001" }
raw = "amount=100&app_id=M20260101001&out_trade_no=T20260101001"
sign = sha256(raw + "&key=" + secret_key).hex().lower()

公共参数

公共参数在每个接口中都需要携带。

参数类型必填说明
app_idstring是商户号
nonce_strstring是随机字符串
timestampstring是秒级时间戳
signstring是签名结果
envstring否sandbox / production,默认 production

错误码

返回码用于判断结果,错误说明用于定位问题。

参数类型必填说明
SUCCESS——请求处理成功
PARAM_ERROR——缺少必填参数或格式不正确
SIGN_ERROR——签名校验失败
ORDER_NOT_EXIST——订单号不存在
ORDER_DUPLICATE——商户订单号重复提交
CHANNEL_ERROR——通道处理异常,可稍后重试

下单接口

创建一笔收款订单,返回支付参数。

请求地址:POST /v1/order/create。金额单位为分,订单号由商户生成并保证唯一。

参数类型必填说明
out_trade_nostring是商户订单号,长度不超过 32 位
amountint是订单金额,单位为分
channelstring是wechat / alipay / bank / unionpay
subjectstring是订单标题,用于展示
notify_urlstring否结果通知地址,不传则使用控制台配置
请求示例
POST /v1/order/create
Content-Type: application/x-www-form-urlencoded

app_id=M20260101001&out_trade_no=T20260101001&amount=10000&channel=alipay&subject=会员续费&nonce_str=8f3c1a&timestamp=1767225600&sign=...
返回示例
{
  "code": "SUCCESS",
  "message": "ok",
  "data": {
    "order_no": "P20260101000001",
    "out_trade_no": "T20260101001",
    "amount": 10000,
    "status": "CREATED",
    "pay_params": { "qr_code": "https://example.invalid/qr/P20260101000001" }
  }
}

查询接口

按商户订单号或平台订单号查询当前状态。

请求地址:GET /v1/order/query。回调未收到时可用查询接口做兜底确认。

参数类型必填说明
out_trade_nostring否商户订单号,与 order_no 二选一
order_nostring否平台订单号,与 out_trade_no 二选一
返回示例
{
  "code": "SUCCESS",
  "data": {
    "order_no": "P20260101000001",
    "status": "PAID",
    "paid_at": "2026-01-01 10:00:00",
    "amount": 10000
  }
}

退款接口

对已支付订单发起退款,支持部分退款。

请求地址:POST /v1/refund/create。同一订单多次退款时累计金额不得超过原订单金额。

参数类型必填说明
out_trade_nostring是原商户订单号
out_refund_nostring是退款单号,商户内唯一
refund_amountint是退款金额,单位为分
reasonstring否退款原因说明
返回示例
{
  "code": "SUCCESS",
  "data": {
    "refund_no": "R20260101000001",
    "status": "PROCESSING",
    "refund_amount": 5000
  }
}

回调通知

支付结果以回调通知为准,需要验签与幂等处理。

支付完成后服务端向回调地址发送 POST 请求,参数结构与下单返回一致。商户需校验签名、判断订单状态,并在处理后返回 SUCCESS 字符串。

未收到成功响应时会按退避策略重复通知。请按订单号做幂等处理,避免重复发货或重复记账。

通知参数示例
{
  "order_no": "P20260101000001",
  "out_trade_no": "T20260101001",
  "status": "PAID",
  "amount": 10000,
  "paid_at": "2026-01-01 10:00:00",
  "sign": "..."
}

常见对接问题

联调阶段最常见的几类问题与排查顺序。

  • 签名不通过:确认参数按升序拼接、未包含 sign 字段、空值未参与计算
  • 订单重复:商户订单号需保证唯一,重试时复用原订单号前先查询状态
  • 回调未收到:确认地址为 HTTPS 且公网可达,处理逻辑需在超时内返回 SUCCESS
  • 金额不一致:接口金额单位为分,展示层转换时注意不要二次乘除

在沙箱里试一次

填入参数即可看到签名计算结果与模拟返回,不产生真实交易。

进入沙箱调试