统一下单
业务系统调用此接口创建支付订单,获取支付参数后,再自行构造支付场景让用户进行支付。 被扫及协议支付方式调用此接口后,不再需走支付流程。
接口说明
请求方式:
posthttps://p.wecard.tencent.com/cloudpay/v1/pay/b2b/unified_order
请求参数
Request
Body 包体
ChannelSubMerchantId必填
string
微卡收付通平台商户编号(管理控制台→商户管理→商户ID)
最小长度:1 最大长度:50
TotalAmount必填
integer
订单金额,单位:分
PayType必填
string
支付场景:
MINI_PROGRAM:小程序;
PUBLIC:公众号;
PC:网页支付;
H5:手机H5支付;
APP:手机app支付;
最小长度:1 最大长度:50
PayChannel必填
string
支付方式;如:
B2BBANK:企业网银支付;
ENTPAY:银行App支付;
B2BTRANSFER:转账支付;
BALANCEPAY:余额支付;
ALIPAY: 支付宝;
WXPAY:微信支付;
UNIONPAY:银联支付;
WALLETPAY:储值支付
最小长度:1 最大长度:30
OutOrderId必填
string
外部订单号,即业务系统侧订单;
只能是数字、大小写字母、下划线;且在同一个主体下唯一。
最小长度:6 最大长度:60
OrderSubject必填
string
订单标题
最小长度:1 最大长度:200
ExpireTime选填
string
订单过期时间,格式:2023-03-05 11:54:20
最小长度:1 最大长度:19
NotifyUrl选填
string
支付成功后的回调地址
最小长度:1 最大长度:255
FrontUrl选填
string
用户支付成功后,前端跳转URL;
PayChannel 为银行App支付则必填
最小长度:1 最大长度:255
ExternalPaymentData选填
string
支付渠道扩展字段,第三方通道的扩展信息,根据具体对接的渠道情况传值;
该字段为 json 序列化之后的字符串,参考右侧请求示例;
如:微信、支付宝下单时需要将用户的openid或userid,及应用id传入,结构如下
最小长度:1 最大长度:1024
ProfitShareInfoList选填
array
分账信息列表
数组子类型:object
PayerInfo选填
object
用户信息,转账支付、余额支付、储值支付必填
ProductList选填
object
商品列表
PayeeList选填
array
分润接收方列表(当分账模板选择按订单、按角色分账时传)
数组子类型:string
SceneInfo选填
object
设备信息
Attachment选填
string
附加信息,在查询API和支付通知中原样返回,可作为自定义参数使用,实际情况下只有支付完成状态才会返回该字段
最小长度:1 最大长度:128
Remark选填
string
付款备注
最小长度:1 最大长度:128
FundAllocateList选填
array
资金划拨信息。支付通道耦合银行账户体系时必填,否则不用。
数组子类型:object
{
"ChannelSubMerchantId": "CM6756531983210274560",
"TotalAmount": 1000,
"PayChannel": "WXPAY",
"PayType": "MINI_PROGRAM",
"OrderSubject": "杂粮煎饼",
"OutOrderId": "demo202211200001",
"NotifyUrl": "https://business.com/pay/notify",
"ExternalPaymentData": "{\"WxAppId\":\"wx43f1t4567721a03e\",\"WxOpenId\":\"oXLUp5OHJof5768CoFFDuuaRn8kc\"}",
"Currency": "CNY",
"Attachment": "原路返回string",
"SceneInfo": {
"DeviceType": "04",
"PayerClientIp": "14.15.16.17",
"DeviceId": "00000001",
"Longitude": "+121.48352",
"latitude": "+23.561345"
},
"Remark": "备注",
"FundAllocateList": [
{
"ChannelSubMerchantId": "CM-B",
"AllocateAmount": 200,
"AllocatePeriod": "D0"
},
{
"ChannelSubMerchantId": "CM-C",
"AllocateAmount": 100,
"Freeze": true,
"AllocatePeriod": "D0"
}
]
}
ExternalPaymentData 结构
变量 | 类型 | 是否必填 | 描述 |
---|---|---|---|
WxAppId | string | 否 | 微信开放平台审核通过的应用 AppId.(如:公众号 AppId/小程序 AppId) |
WxOpenId | string | 否 | 微信用户在当前 WxAppId 下的 Openid,公众号及小程序场景下微信支付必填 |
AliAppId | string | 否 | 支付宝开放平台审核通过的应用 AppId.(如:生活号 AppId/小程序 AppId) |
AliUserId | string | 否 | 支付宝用户在当前 AppId 下的 Userid,公众号及小程序场景下支付宝支付必填 |
AuthCode | string | 否 | 支付凭证:用户付款码。被扫场景下必填 |
JsCode | string | 否 | 微信B2b小程序用户登录凭证 |
返回参数
Response
200 OK
Response必填
object
{
"Response": {
"RequestId": "A8E7B797ADD44C3AA57E87AD7420A725",
"Result": {
"OutOrderId": "OUT2022111900000004",
"ChannelOrderId": "679735736991281152",
"ThirdPayOrderId": "230420127444480387",
"TotalAmount": "1000",
"OrderStatus": "PAYING",
"PayInfoType": "JSAPI",
"PayInfo": "{\"appId\":\"wxad53ca7fbb5gg5f2\",\"timeStamp\":\"1681867396\",\"nonceStr\":\"94981e22ac0b4663949a442f31739b53\",\"package\":\"prepay_id=wx190923168532565900979a7da2170000000\",\"signType\":\"RSA\",\"paySign\":\"rhOR5lnhv6w2asdMiqRHU/aEZjhk1J4fGT2/Z5vxqtNcaLyHYmqDiIZZqxlSgSibWb/Z1a8SJdzLH9u0nnBKa0u0wtVaXgB6WKUahYtwQZC2ZadaYj6AkAeKLRIUHObVgAClbiiaiUjiaC9JUhj11m7JkClwpRvJkXQi4QzTdjA+kYv+32cgUido8SWIt6WZZXyH1qJTG1rYJC8IeUMgktH8oOoGzlxpaJbgB41j+pBd10b4R4DExlJ+KWP7N8iPj5YrbIzGJ2MsZ8L2U0jKLjpfKF/3d4hsc4or7EKIXdffgsreedaW6JzZ77gyb5ounChaea6CEP1UpUUAvgrkJwgw==\"}"
},
"ErrCode": "SUCCESS",
"ErrMessage": "成功"
}
}
ErrCode 码表
错误代码 | 描述 | 解决方案 |
---|---|---|
SUCCESS | 请求成功 | 当 OrderStatus 为 PAYING 表示订单下单成功,参考支付面板拉起指引来使用 PayInfo 字段完成支付; 当 OrderStatus 为 SUCCESS 表示订单支付成功; 当 OrderStatus 为 PAY_FAIL 表示下单失败,失败原因见 FailReason 字段; |
FailedOperation.SystemError | 系统未知异常 | 系统未知异常,请稍后重试 |
ORDER.INVALID_PARAMETER | 参数有误 | 请根据返回描述修正请求参数 |
ORDER.OPERATE_IS_PROCESSING | 订单存在并发操作 | 当前支付订单同时存在别的请求操作(如下单、退款、关单等),请稍后重试 |
ORDER.ORDER_RECORD_ALREADY_EXIST | 订单已存在 | 订单已存在,并且状态为终态,请调用查单接口确认订单状态 |
NO_MERCHANT_SECRET | 商户秘钥有误 | 商户秘钥配置有误,请联系收付通工作人员确认 |
ChannelOperationError | 下游银行通道业务错误 | 下游通道返回的业务错误,详细原因请参考接口返回的 ErrMessage,请稍后重试 |