# 合并订单交易接口
最新更新时间:2023.06.13
将多个商户的订单合并发起交易。注意:要使用本接口下单,要求子单必须为两个或两个以上。否则请使用单笔订单交易接口。
# 接口说明
请求URL: https://{domain}/os-base/trade/merge/v2/open
请求方式: POST
请求参数 公共请求参数
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
access_id | 是 | string | 开发者唯一标识 |
sign_type | 是 | string | 固定传RSA2 |
time_stamp | 是 | long | 请求时间,Linux时间戳,单位毫秒 |
sign | 是 | string | 签名结果 |
data | 是 | string | 将业务参数转为JSON字符串,然后使用BASE64编码的数据 |
详细签名方法请阅读接口加密方案
名称 | 必填 | 类型 | 说明 |
---|---|---|---|
payChannel | 是 | string | 支付渠道 ALI_PAY:支付宝,WX_PAY:微信 常量定义在SDK中PayConstant.PayChannel中 |
payProduct | 是 | string | 支付产品类型 APP:手机App客户端,MINI_APP:小程序,M_WEB:手机网页支付,PC_WEB:电脑网页支付,USER_QR:用户扫描商家二维码支付,MCH_QR:商家扫描用户付款码支付,FACE:刷脸付常量定义在SDK中PayConstant.PayProduct中 |
timeExpire | 否 | long | 绝对超时时间,超出该时间则支付失效 时间戳,标准北京时间 |
ownerPayTerminal | 否 | string | 商户支付终端, 商户自传 |
ownerMergeNo | 否 | string | 商户自传的并笔支付编号,传此值时会进行系统重复提交校验 |
ownerAppId | 否 | string | 商户独立应用的appId |
ownerAppBuyerId | 条件必传 | string | 支付宝或微信应用的买家id,小程序必传 (若商户有独立的小程序应用,则传商户小程序的用户id) |
notifyUrl | 否 | string | 通知地址 通知URL必须为直接可访问的URL,不允许携带查询串,要求必须为https地址。 |
subTradeOrders | 是 | List | 交易子单详情 |
↪ appId | 否 | string | 订单明细的应用唯一标识(16位纯数字),指商家的app_id, 没有可不传 |
↪ ownerTradeNo | 是 | string | 商户交易订单号,要求唯一,此值时会进行系统重复提交校验 |
↪ orderFee | 是 | int | 子订单金额 单位分 范围1~1000000000 |
↪ title | 是 | string | 订单标题 最长256 |
↪ osMerchantCode | 是 | string | 平台分配商户编号 |
↪ osStoreCode | 是 | string | 门店编号 |
↪ notifyUrl | 否 | string | 通知地址 通知URL必须为直接可访问的URL,不允许携带查询串,要求必须为https地址。如果主单notifyUrl 无值,此属性有值,则多次回调 |
↪ payBusiness | 否 | string | 支付业务,业务有特殊收款配置时必传,传入此值会进行校验,未指定时,不传 |
↪ remark | 否 | string | 给支付平台的附加信息,支付平台会原封回调给对用方 |
↪ ownerBusinessNo | 否 | string | 商户创建的订单业务号,支付传参时原封不动返回 |
公共响应参数
名称 | 必传 | 类型 | 说明 |
---|---|---|---|
code | 是 | int | 请求结果code,详细请参考错误码说明) |
msg | 是 | string | 请求结果描述,失败时会返回错误原因 |
data | 否 | object | 请求结果返回的业务响应参数,若无业务参数则返回空 |
响应参数
名称 | 类型 | 说明 |
---|---|---|
osMergeNo | string | 开放平台交易记录唯一订单号 |
timestamp | string | 时间戳,标准北京时间 |
sign | string | 调起支付的签名信息 用户扫码支付:统一返回url链接 支付宝:返回的String可直接调用支付宝sdk拉起支付 微信支付:返回Json字符串 |
SDK方法
// 创建上传数据client
TyhPaymentClient client = TyhPaymentClient.create(TyhOptions.builder()
.accessId(ACCESS_ID)
.secretKey(SECRET_KEY)
.allowUpload(Boolean.TRUE)
.build());
// 合单支付示例
TradeMergeCmd.SubTradeCmd subCmd01 = TradeMergeCmd.SubTradeCmd.builder()
.ownerTradeNo("qi_000000000000001")
.orderFee(1)
.title("iPhone13 Pro Max")
.osMerchantCode("OS_MERCHANT_ID1")
.osStoreCode("OS_MERCHANT_ID1")
.build();
TradeMergeCmd.SubTradeCmd subCmd02 = TradeMergeCmd.SubTradeCmd.builder()
.ownerTradeNo("qi_000000000000002")
.orderFee(2)
.title("iPhone12 Pro Max")
.osMerchantCode("OS_MERCHANT_ID2")
.osStoreCode("OS_MERCHANT_ID2")
.build();
List<TradeMergeCmd.SubTradeCmd> subList = Arrays.asList(subCmd01, subCmd02);
TradeMergeCmd cmd = TradeMergeCmd.builder()
.payChannel(PayConstant.PayChannel.WX_PAY)
.payProduct(PayConstant.PayProduct.USER_QR)
.timeExpire(String.valueOf(System.currentTimeMillis() + 1000 * 60 * 10))
.subTradeOrders(subList)
.build();
try {
Results<TradeMergePayDto> results = client.mergeTrade(cmd);
//获取支付结果
TradeMergePayDto dto = results.getData();
} catch (Exception e) {
e.printStackTrace();
}
入参格式
{
"payChannel": "WX_PAY",
"payProduct": "USER_QR",
"subTradeOrders": [{
"orderFee": 1,
"osMerchantCode": "2163737270000001",
"osStoreCode": "2163737270000001",
"ownerTradeNo": "qi_000000000000001",
"title": "iPhone13 Pro Max"
}, {
"orderFee": 2,
"osMerchantCode": "2163737270000002",
"osStoreCode": "2163737270000002",
"ownerTradeNo": "qi_000000000000002",
"title": "iPhone12 Pro Max"
}],
"timeExpire": "1637908592496"
}
出参格式:
{
"osMergeNo": "merge_25778271750131714",
"sign": "weixin://wxpay/bizpayurl/up?pr=2J30MBA00&groupid=00",
"timestamp": "1637908240765"
}
code 为 8888 表示操作成功,其它值则为失败,具体内容参见错误码说明。
← 单笔订单退款回调通知 合并订单交易查询 →