# 多码合一并笔交易接口

最新更新时间: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 表示操作成功,其它值则为失败,具体内容参见错误码说明)。