什么场景下会用到合单支付呢?下面举个例子:最常见的就是商城系统了,比如用户在一笔订单里面选择了多个不同商户的商品, 为了用户体验,在支付的时候肯定是只需要支付一次即可的;如果我们使用传统的方式即实际后就是一笔订单,直接支付下单即可,这里确实简单了,但是我们在给商户做结算的时候就麻烦了,需要后台去统计相关的财务信息然后再打款给商户;但是如果不想去做这样复制的结算步骤,或者是可能刚开始我们的平台名气小,商户想自己管理资金才放心,想自己看到相关的支付账单信息; 或者是不想再去做一套结算功能和打款流程。
此时我们就可以采用 微信的电商收付通 和 支付宝互联网平台直付通产品;它们都提供了多笔订单一起支付,最后金额自动分配的商家的账户上、账单资金冻结、结算、平台抽成的功能。
下面来谈谈在与它们对接的相关注意事项吧。
支付宝-互联网平台直付通
微信-电商收付通
关于二级商户进件打开接口文档微信和支付的进件需要的资料都是一大坨,一看就是感觉很麻烦!在对接的时候不要管那么多,先用需要资料最少最简单的参数进件成功一个再说(快速理清认证流程和需要的相关资料),同时也方便其他对接支付的同学可以调试后面的支付和结算相关接口(不然后面就会卡住,很多问题不能提前发现);同时虽然资料很多但是微信和支付那边的审核是很快(几乎秒出结果),所以如果进件后审核状态一直不变,那么很大的概率是你的代码问题。
微信的电商收付通二级商户进件说明进件的相关参数直接看官方文档即可,需要说明的是在进件的通过后,会返回一个认证的链接的二维码,需要商户去扫码确认,同时银行卡认证微信需要打款确认。
支付宝的互联网平台直付通二级商户进件说明默认结算规则必须传入(虽然不传入也是可以成功的),否则后面进行支付下单的时候会失败;
虽然文档中写了结算账号可以是银行卡,但是实际是不支持,只支持支付宝账号;
进件接口请求成功后,在支付宝中登陆设置的结算账号的支付宝账号,然后搜索 \'签约助手\' 进入里面签约;具体的流程图
在进件商户签约成功后(也就是上面一步的操作完成后),支付宝会回调通知我们(通知地址需要在支付宝开发者中配置);
注意选择使用的支付宝SDK alipay-sdk-java 的包最好用最新的;因为旧的版本创建进件的接口中自带的AntMerchantExpandIndirectZftCreateModel 转换json转换不出sites ,导致进件请求失败。
关于支付接口 微信的合单支付说明生成的合单订单号在后面查询订单的时候是需要的,不能通过子单号进行查询;但是在退款、分账操作的时候使用的是子单的订单号。
支付成功回调通知说明:支付成功后会将支付信息返回,其结构类似如下:
{ "combine_out_trade_no": "合单订单号", "sub_orders": [ { "out_trade_no": "子单订单号", "transaction_id": "子单交易订单号", ... }, { "out_trade_no": "子单订单号", "transaction_id": "子单交易订单号", ... } ... ], ... }其他的流程和操作和普通的支付是一样的;退款的时候合单支付有专门的接口进行,同时合单支付使用的是新版本接口;
注意H5和微信公众号的jsapi支付需要在微信后台配置的安全域名,直接配置域名根目录即可(如:https://www.baidu.com/),否则将无法成功唤起支付(提示当前URL未注册);同时需要注意微信是会区分http和https的,不要用特殊字符。
支付宝的合单支付接口说明生成的合单订单号就只在预下单的时候有用,后面都不会用了;
支付成功回调通知说明:虽然是合单支付的,但是支付宝的通知还是一笔笔的分开通知,即有多少个子单就有多少个通知(和普通的没有区别);其结构类似如下:
{ "out_trade_no": "子单订单号", "trade_no": "子单交易订单号", ... }如果只有一笔订单,那么不能使用合单支付的接口,要使用普通的单个支付的接口接口,如手机网站支付就使用alipay.trade.wap.pay接口即可;和普通下单的区别就是添加SettleInfo信息(支付宝提供的skd是支持设置这个的参数的:AlipayTradeWapPayModel.setSettleInfo());下面是一个示例:
{ "outTradeNo": "202002220016444498", "productCode": "QUICK_WAP_WAY", "settleInfo": { "settleDetailInfos": [ { "amount": "0.01", "transInType": "defaultSettle" } ], "settlePeriodTime": "365d" }, "subMerchant": { "merchantId": "11112464984" }, "subject": "网球排一个", "timeoutExpress": "15m", "totalAmount": "0.01" }