Skip to content

用户端统一支付 ​

所有业务插件统一调用核心支付接口。用户端不得提交或覆盖订单金额。

查询可用支付渠道 ​

text
GET /api/auth/payment/channels

需要会员登录。

Query参数类型必填说明
source_plugin_idstring是来源插件标识,例如 ecommerce
source_order_uidstring是插件业务订单UID
browser_environmentinteger否1普通浏览器,2微信内,3支付宝内

响应示例:

json
{
  "code": 0,
  "msg": "success",
  "data": [{
    "payment_config_uid": "cph8...",
    "channel": 1,
    "scene": 1,
    "name": "微信支付",
    "logo": "https://cdn.example.com/payment/wechat.png",
    "recommended": true
  }]
}
响应字段类型说明
data[].payment_config_uidstring支付配置业务 UID,创建支付时原样提交
data[].channelinteger支付渠道:1微信,2支付宝
data[].sceneinteger支付场景:1微信小程序,2微信JSAPI,3微信H5,4微信APP,5支付宝小程序,6支付宝H5,7支付宝APP
data[].namestring管理端配置的支付方式名称
data[].logostring按当前默认存储渠道补全的 Logo 地址
data[].recommendedboolean是否为当前列表推荐项

订单不存在、不属于当前会员、已支付、已关闭或已过期时返回业务错误。没有满足用户端渠道与支付场景的配置时,成功返回空数组。

创建支付 ​

text
POST /api/auth/payment/create

请求参数:

json
{
  "source_plugin_id": "ecommerce",
  "source_order_uid": "c123",
  "payment_config_uid": "cph8...",
  "scene": 1,
  "browser_environment": 1,
  "request_uid": "pay_1790000000000_abcd1234",
  "return_url": "https://m.example.com/payment/result"
}
Body参数类型必填说明
source_plugin_idstring是来源插件标识
source_order_uidstring是业务订单UID
payment_config_uidstring是渠道列表返回的支付配置UID
sceneinteger是支付场景1至7
browser_environmentinteger否浏览器环境
request_uidstring是8至64位客户端幂等标识,同一请求重试保持不变
return_urlstring否H5支付完成返回地址

响应示例:

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "attempt_uid": "cpa1...",
    "payment_uid": "cpay...",
    "launch_type": "uni_request_payment",
    "payload": {
      "provider": "wxpay",
      "timeStamp": "1790000000",
      "nonceStr": "...",
      "package": "prepay_id=...",
      "signType": "RSA",
      "paySign": "..."
    }
  }
}

launch_type 取值:

  • uni_request_payment:调用 uni.requestPayment。
  • redirect:H5跳转 payload.url。
响应字段类型说明
data.attempt_uidstring本次支付尝试 UID,用于审计
data.payment_uidstring核心支付单 UID,用于查询最终状态
data.launch_typestringuni_request_payment 或 redirect
data.payloadobject第三方支付拉起参数,不包含商户密钥

同一会员重复提交相同 request_uid 时不会创建第二条支付尝试;待支付请求返回已缓存的拉起参数。失败或关闭的请求必须生成新的 request_uid 再次发起。

查询支付状态 ​

text
GET /api/auth/payment/status?payment_uid={支付单UID}

仅允许查询当前会员自己的支付单。

响应示例:

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "payment_uid": "cpay...",
    "payment_no": "POcpay...",
    "status": 3,
    "amount": "99.00",
    "paid_amount": "99.00",
    "paid_at": "2026-10-15T15:20:30+08:00"
  }
}

状态:1待支付,2支付中,3已支付,4已关闭,5部分退款,6已退款。

响应字段类型说明
data.payment_uidstring核心支付单 UID
data.payment_nostring核心支付单号
data.statusinteger支付单状态
data.amountstring应付金额,两位小数字符串
data.paid_amountstring已支付金额,两位小数字符串
data.paid_atstring/null服务端确认的支付时间

第三方支付回调 ​

text
POST /api/payment/notify/{channel}/{config_uid}

该接口由微信或支付宝调用,不携带平台来源头和会员令牌。

  • channel=1:微信支付API v3通知,验证RSA签名并使用APIv3 Key解密。
  • channel=2:支付宝异步通知,验证RSA2签名、AppID和商户号。
  • 重复通知通过数据库行锁、支付状态机和插件条件更新幂等处理。
  • 不同渠道先后成功支付时仅首笔进入业务订单;后续流水记录为待退款异常并向渠道返回成功,避免第三方无限重试。
  • 验签、金额或订单校验失败时不修改订单,并返回渠道失败响应等待重试。