php微信支付的分账,微信支付分账,就是这么简单!

原标题:微信支付分账,就是这么简单!

ae0c6b21386f73bfb9725fe48c75813c.png

产品介绍

直连商户分账主要用于商户将交易成功的资金,按照一定的周期,分账给其他方,可以是合作伙伴、员工、用户或者其他分润方。

使用场景举例

员工奖励:零售、餐饮等行业中,当销售人员销售完成后,达到可奖励的条件,可以通过分账,将销售奖励分给员工。

管理资金到账时间:在酒店行业中,利用分账功能中的“冻结/解冻“能力,当用户预订/入住酒店时,交易资金先冻结在酒店的账户中,当用户确认消费离店后,再利用“分账“功能中的”分账完结“解冻资金到酒店的账户中。这样可以避免用户退款时商户账户资金不足的情况。

分润给合作伙伴:在与他方合作的情况下,可以用“分账”功能,将交易资金分给合作伙伴,例如物流合作商。

相信不少小伙伴都推荐过一些IT培训的课程,比如你推荐成功以后,你会收到一笔佣金,其实他们也是使用了微信的分账功能。

产品特点

分账方:交易收款方,这里指直连商户本身

分账接收方:接收资金的一方,可以是商户,可以是个人

a62a011084b00d8a0e30b37098db73d2.png

代码集成

对于分账微信提供了不少接口,比如,添加分账接收方、删除分账接收方、请求单次分账、请求多次分账、完结分账等等,具体可以去查看官网文档。

这里需要注意的是,分账接口不再是MD5加密,而是使用了HMAC-SHA256加密。上一坨伪代码:

/**

* 绑定分账账号

* @param allocation

* @param config

*/

public voidaddWx(Allocation allocation, WxPayConfig config){

try{

Stringkey = config.getApiKey;

SortedMap< String, String> packageParams = newTreeMap<>;

wxPayUtil.commonParams(packageParams,config);

packageParams.put( "sign_type",SystemConstant.SIGN_HMAC);

JSONObject receiver = newJSONObject;

receiver.put( "type",allocation.getAccountType);

receiver.put( "account",allocation.getAccount);

receiver.put( "name",allocation.getName);

receiver.put( "relation_type", RelationType.HEADQUARTER.getCode);

packageParams.put( "receiver",receiver.toJSONString);

Stringsign = PayCommonUtil.createSign(packageParams, key, SystemConstant.SIGN_HMAC);

packageParams.put( "sign", sign);

StringrequestXML = PayCommonUtil.getRequestXml(packageParams);

StringresXml = HttpUtil.postData(WxPayUrl.PROFIT_SHARING_ADD_URL, requestXML);

Mapmap = XMLUtil.doXMLParse(resXml);

StringreturnCode = ( String) map.get( "return_code");

if(SystemConstant.SUCCESS.equalsIgnoreCase(returnCode)){

StringresultCode = ( String) map.get( "result_code");

if(!SystemConstant.SUCCESS.equalsIgnoreCase(resultCode)){

StringerrCodeDes = ( String) map.get( "err_code_des");

log.error( "微信分账绑定失败:{}",errCodeDes);

thrownewRrException( "微信分账绑定失败");

}

} else{

StringreturnMsg = ( String) map.get( "return_msg");

log.error( "微信分账绑定(通信)失败:{}",returnMsg);

thrownewRrException( "微信分账绑定失败");

}

} catch(Exception e) {

e.printStackTrace;

log.error( "绑定微信支付账号异常:{}",e.getMessage);

thrownewRrException( "微信分账绑定失败");

}

}

加密方式:

/**

* HmacSHA256 加密

*/

publicclassHMACUtil{

publicstaticString HMACSHA256( String data, String key){

try{

Mac sha256_HMAC = Mac.getInstance( "HmacSHA256");

SecretKeySpec secret_key = newSecretKeySpec(key.getBytes( "UTF-8"), "HmacSHA256");

sha256_HMAC.init(secret_key);

byte[] array = sha256_HMAC.doFinal(data.getBytes( "UTF-8"));

StringBuilder sb = newStringBuilder;

for( byteitem : array) {

sb.append(Integer.toHexString((item & 0xFF) | 0x100), 1, 3);

}

returnsb.toString.toUpperCase;

} catch(Exception e) {

e.printStackTrace;

}

return"";

}

}

需要注意的是,在调用下单的逻辑中,需要新增以下逻辑:

/**

* 是否分账,并且为sign加密参数

* 业务数据请自行关联,比如分账接收方数据

* 这个在微信支付成功以后,自动或者手动调用分账会用到

*/

if(分账){

packageParams.put( "profit_sharing",SystemConstant.Y);

}

支付成功之后,调用分账接口,微信建议在支付回调成功1分钟后或30天内调用分账接口。

截图

a389d88ce7a482e44987e076d2a0e650.png

6048027bccf325bd7cbf495e348044cd.png

1590ad89e09c05370226432d59721430.png

9946823f9dcc9d3b77dd4daa4fc9a207.png

参考

https://paycloud.vip/docs/

https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=26_1

牛逼,CTO点名要搞个灰度发布系统返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值