支付宝直连

使用商户已审核并启用的支付宝应用凭据创建 PC 或手机网站支付订单。

接口地址
下单:POST /v1/api/open/order/submit
查单:POST /v1/api/open/order/query

接入前提

凭据用途从哪里获取
XPay AppID / AppSecret商户身份识别、请求签名、平台回调验签商户后台 → 后台首页 → 商户设置 → 接口秘钥
支付宝应用 AppID / 应用私钥 / 支付宝公钥XPay 服务端向支付宝发起 RSA2 签名请求商户后台 → 法币支付 → 应用凭据;提交后需审核并启用
商户请求中的 appId 必须填写 XPay AppID,签名必须使用 XPay AppSecret。不要把支付宝应用 AppID 或支付宝应用私钥传给下单接口。

创建支付宝订单

字段类型必填说明
appIdstring是XPay 商户 AppID
merchantOrderNostring是当前商户下的支付宝订单幂等键。同一订单号重试时,amount、payMethod 不得变化;首次显式传入 credentialId 时,重试也必须传入同一值。
payTypestring是固定值 ALIPAY
credentialIdinteger否仅可填写由本次 appId + signature 认证出的当前商户的应用凭据记录 ID。凭据必须已审核、已启用且未删除;跨商户或不可用凭据返回 1009。未传时自动选择当前商户 ID 最大的可用凭据。
payMethodstring是web:PC 网站支付;wap:手机网站支付
amountstring是人民币金额,最多两位小数且必须大于 0;payMoney 可作为兼容别名
productNamestring否商品名称,默认 Payment
productDescstring否商品描述
notifyUrlstring是XPay 支付成功后通知商户后端的可访问 URL
redirectUrlstring否用户支付完成后的商户页面;returnUrl 可作为兼容别名
attachstring否商户自定义数据,回调时原样返回
signaturestring是使用 XPay AppSecret 生成的大写 MD5 签名
WAP 下单示例
curl -X POST 'https://xpay.plus/v1/api/open/order/submit' \
  -H 'Content-Type: application/json' \
  -d '{
    "appId":"Zu78qwe1",
    "merchantOrderNo":"ALI202608070001",
    "payType":"ALIPAY",
    "credentialId":12,
    "payMethod":"wap",
    "amount":"20.00",
    "productName":"订单支付",
    "notifyUrl":"https://merchant.example.com/payment/alipay/notify",
    "redirectUrl":"https://merchant.example.com/payment/result",
    "attach":"user-10001",
    "signature":"..."
  }'

成功返回

返回结果
{
  "code": 0,
  "message": "ok",
  "data": {
    "platformOrderNo": "ALI20260807110917E2BF35",
    "merchantOrderNo": "ALI202608070001",
    "amount": "20.00",
    "credentialId": 12,
    "payUrl": "https://xpay.plus/v1/payment/alipay/redirect/ALI...?token=...",
    "recovered": false
  }
}
商户后端应把 payUrl 返回给自己的前端,由用户浏览器打开。不要由商户服务器请求该地址,也不要把支付宝 Form 表单直接拼到商户接口响应中。支付链接有效期为 30 分钟。
返回的 credentialId 是该订单实际绑定的凭据 ID。首次未传 credentialId 时,平台自动选择当前商户最新可用凭据;相同订单号重试仍沿用原订单绑定的凭据。
payMethod适用终端支付宝接口
webPC 浏览器alipay.trade.page.pay
wap手机浏览器 / H5alipay.trade.wap.pay

签名规则

签名规则与 XPay 其他开放接口一致:删除 signature 和空值字段,按字段名 ASCII 升序排序,拼接查询字符串,在末尾追加 &appsecret=XPay商户密钥,计算 MD5 并转为大写。

所有实际提交的非空字段都参与签名,包括 payType、实际传入的 credentialId、payMethod、amount、redirectUrl 和 attach。未传 credentialId 时,不要在签名原文中补入该字段。字段名区分大小写。

同一订单号重试时,amount 和 payMethod 必须与首次请求一致;首次显式传入 credentialId 时,重试也必须保持相同值。除此之外,notifyUrl、redirectUrl、商品信息和 attach 不参与服务端的幂等比对。

查看统一签名指南

查询订单

请求参数
{
  "appId": "Zu78qwe1",
  "merchantOrderNo": "ALI202608070001",
  "payType": "ALIPAY",
  "signature": "..."
}
返回结果
{
  "code": 0,
  "message": "ok",
  "data": {
    "platformOrderNo": "ALI20260807110917E2BF35",
    "merchantOrderNo": "ALI202608070001",
    "amount": "20.00",
    "status": 2,
    "tradeNo": "2026080722000000000001",
    "payTime": 1786072157
  }
}
status说明
1待支付
2已支付
3已关闭

支付成功通知

XPay 验证支付宝 RSA2 签名、支付宝 AppID、平台订单号和金额后,将支付结果以 application/x-www-form-urlencoded POST 到下单时的 notifyUrl。

商户收到的表单字段
appId=Zu78qwe1
platformOrderNo=ALI20260807110917E2BF35
merchantOrderNo=ALI202608070001
payType=ALIPAY
amount=20.00
status=PAID
payTime=1786072157
tradeNo=2026080722000000000001
attach=user-10001
signature=...
商户必须使用自己的 XPay AppSecret 对除 signature 外的所有非空字段重新计算签名,并按 merchantOrderNo 做幂等处理。平台在收到 2xx 响应且响应体为 success、ok,或 JSON {"code":0} 时确认通知成功;否则按重试计划再次通知。商户应快速返回确认,并使用查单接口作为补偿。

redirectUrl 只用于用户浏览器同步跳转,不能作为支付成功依据;入账必须以异步通知或查单结果为准。

常见错误

code / message原因与处理
1001 / invalid callback URLnotifyUrl 或 redirectUrl 不是有效 URL
1001 / credentialId invalid显式传入的 credentialId 不是正整数
1001 / payMethod must be wap or webpayMethod 只能填写 wap 或 web
1002 / signature error检查 XPay AppSecret、字段大小写、空值过滤和签名排序
1004 / order permission disabled商户下单权限未启用
1005 / merchant not foundappId 必须填写 XPay 商户 AppID,不是支付宝应用 AppID
1006 / order not found该商户下不存在对应支付宝订单
1009 / Alipay credential not found, not approved, or not enabledcredentialId 不属于由 appId + signature 认证出的当前商户,或凭据未审核、未启用、已删除;未指定时表示当前商户没有可自动选择的凭据