# 多码合一并笔交易接口
最新更新时间:2023.06.13
使用多码合一功能,实现并笔订单缴费# 接口说明
请求URL: https://{domain}/os-base/trade/multiQR/merge/v2/open
请求方式: POST
公共请求参数
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
access_id | 是 | string | 开发者唯一标识 |
sign_type | 是 | string | 固定传RSA2 |
time_stamp | 是 | long | 请求时间,Linux时间戳,单位毫秒 |
sign | 是 | string | 签名结果 |
data | 是 | string | 将业务参数转为JSON字符串,然后使用BASE64编码的数据 |
详细签名方法请阅读接口加密方案
业务请求参数
名称 | 必填 | 类型 | 说明 |
---|---|---|---|
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 | 请求结果返回的业务响应参数,若无业务参数则返回空 |
业务响应参数
名称 | 必传 | 类型 | 说明 |
---|---|---|---|
ownerMergeNo | 是 | string | 商户自传的并笔支付编号 |
orderFee | 是 | int | 该笔订单的资金总金额 单位为分 |
timestamp | 是 | long | 时间戳,标准北京时间 |
sign | 是 | string | 调起支付的签名信息 用户扫码支付:统一返回url链接 支付宝:返回的String可直接调用支付宝sdk拉起支付 微信支付:返回Json字符串 |
SDK方法
// 创建上传数据client
TyhPaymentClient client = TyhPaymentClient.create(TyhOptions.builder()
.accessId(ACCESS_ID)
.secretKey(SECRET_KEY)
.allowUpload(Boolean.TRUE)
.build());
// 构造并笔交易参数
List<TradeMergeCmd.SubTradeCmd> subTradeOrders = new ArrayList<>();
TradeMergeCmd.SubTradeCmd subTradeCmd = TradeMergeCmd.SubTradeCmd.builder()
.title("支付标题")
.orderFee(4)
.osMerchantCode("10000L")
.osStoreCode("10000L")
.payBusiness("支付业务")
.build();
subTradeOrders.add(subTradeCmd);
TradeMergeCmd cmd = TradeMergeCmd.builder()
.payChannel("ALI_PAY")
.payProduct("H5")
.subTradeOrders(subTradeOrders)
.build();
// 发起交易请求,result.ifSuccess()表示请求成功
try {
Results<TradeMergePayDto> tradeMergePayDtoResults = client.multiQrMergeTrade(cmd);
TradeMergePayDto dto = results != null && results.ifSuccess() ? results.getData() : null;
} catch (Exception e) {
e.printStackTrace();
}
入参格式
{
"payChannel":"ALI_PAY",
"payProduct":"H5",
"subTradeOrders":[
{
"orderFee":4,
"osMerchantCode":"10000",
"osStoreCode":"10000",
"payBusiness":"支付业务",
"title":"支付标题"
}
]
}
出参格式:
{
"code":8888,
"data":{
"sign":"二维码地址",
"timestamp":1658286654010
},
"msg":"处理成功"
}
code 为 8888 表示操作成功,其它值则为失败,具体内容参见错误码说明)。