php微信商家分账API
php微信商家分账API
普通商户官方文档:https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=26_1
服务商分账API官方文档:https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=24_1&index=1
分账接口问题Q&A:https://developers.weixin.qq.com/community/pay/doc/000284823e8460aada68dacca5b008?blockType=8%3FblockType%3D8%3FblockType%3D8
这个两个分账其实走的接口是一样的(单次分账接口):https://api.mch.weixin.qq.com/secapi/pay/profitsharing
只是请求时候发送的参数有点差异;主要的差异就是服务商分账多了两个参数:子商户号:sub_mch_id,子商户公众账号ID:sub_appid(非必填)
#首先梳理一下流程:
- 先到微信商户平台开通分账此功能,并且设置分账的比例是多少,目前分账比例最多30%
- 根据业务,确定要走的接口是单次分账还是多次分账
- 不管走的是单次分账还是多次分账,都需要先走添加分账人这个接口
- 发生退款时候,需要走分账回退接口
###下面开始流程;以普通商户示例:
开通分账流程官方文档有,这里不再叙述,文档接口:https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=26_2
添加分账人接口:https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_6&index=2
添加分账人只需要添加一次就通过了就可以了,所以不是很建议每次分账时候都跑一次添加分账人的接口,可以在管理后台设置分账人等信息,保存时候再走添加或者删除分账人的接口
/*** 添加分账接收方** @param $account* @return array|false* @throws Exception* @throws \Exception*/public function addReceiver( $account ){// 1.生成签名$receiver = json_encode($account,256|64);$postArr = ['appid'=>$this->config['appId'],'mch_id'=>$this->config['mchId'],'nonce_str'=>md5(time() . rand(1000, 9999)),'receiver'=>$receiver];$wxSign = new WxSign();$sign = $wxSign->getSign($postArr, 'HMAC-SHA256',$this->config['md5Key']);$postArr['sign'] = $sign;Log::info($postArr);// 2.发送请求$curl = new CUrl();$url = 'https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver';$postXML = $wxSign->toXml($postArr);// 3.处理结果$curl_res = $curl->post($url,$postXML);$ret = $wxSign->toArray($curl_res);return $ret;}
添加完分账人之后,就可以走单次或者多次分账的接口,这里我就用单次分账接口示例;接口文档:https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=27_1&index=1
/*** 请求单次分账接口** @return array* @throws Exception* @throws \Exception*/public function profitSharing($profitSharingOrder){//分账接收方数组/* $receivers = ['type' => 'MERCHANT_ID','account' => ‘接收方mchId’,'amount' => “分账的金额,一定是整型,单位是分”, //这里注意不能大过(支付金额*分账比例)之后的金额'description' => '分账', //备注 不可以少]; *///profitSharingOrder传递的参数/* $profitSharingOrder = ['sub_mchid' => '接收方的mch_id','transaction_id' => "微信支付订单号",'order_no' => “自己生成的订单号”,'receivers' => json_encode($receivers,256|64), //接收方数组 json格式];*/// 2.生成签名$postArr = array('appid'=>$this->config['appId'],'mch_id'=>$this->config['mchId'],'nonce_str'=>md5(time() . rand(1000, 9999)),'out_order_no'=>$profitSharingOrder['order_no'], //自己生成的订单号'transaction_id'=>$profitSharingOrder['transaction_id'], //微信支付订单号'receivers'=>$profitSharingOrder['receivers'], //接收方 json格式);if( isset($profitSharingOrder['sub_appid']) ) $postArr['sub_appid'] = $profitSharingOrder['sub_appid'];$wxSign = new WxSign();$sign = $wxSign->getSign($postArr, 'HMAC-SHA256', $this->config['md5Key']);$postArr['sign'] = $sign;// 3.发送请求$curl = new CUrl(2);$url = 'https://api.mch.weixin.qq.com/secapi/pay/profitsharing';$postXML = $wxSign->toXml($postArr);$opts = array(CURLOPT_HEADER => 0,CURLOPT_SSL_VERIFYHOST => false,CURLOPT_SSLCERTTYPE => 'PEM', //默认支持的证书的类型,可以注释CURLOPT_SSLCERT => $this->config['appCertPem'].'apiclient_cert.pem',CURLOPT_SSLKEY => $this->config['appKeyPem'].'apiclient_key.pem',);// 4.结果$curl_res = $curl->setOption($opts)->post($url,$postXML);$ret = $wxSign->toArray($curl_res);if($ret['return_code']=='SUCCESS' and $ret['result_code']=='SUCCESS'){//保存分账订单状态或者别的操作return $ret;}return $ret;}
分账如果成功了,会返回success,如果不成功也会返回fail的信息,可以根据信息,到官方问题回复去查询;分账接口问题Q&A:https://developers.weixin.qq.com/community/pay/doc/000284823e8460aada68dacca5b008?blockType=8%3FblockType%3D8%3FblockType%3D8
填坑1:分账需要注意的地方,传递接收方的分账的金额amount时候,微信那边会收取手续费,具体的手续费是多少大家可以去微信平台自己的商户账号里面看下,所以传递分账金额amount的时候,需要减掉手续费,比如手续费是0.2%,设置的分账比例是10%,这分账的金额应该是(支付金额*(10-0.2)%)
填坑2,看下图,所以分账接口需要在一分钟之后再分账才能保证成功率
##最后:
总结以上情况,我打包了一套专门用来分账的管理后台,用的laravel框架,管理后台用的laravel-admin,使用了laravel的事件进行监控,有订单回调进来,会隔一分钟后执行分账;
管理平台功能:
基础的权限管理;
分账账号管理;
分账历史记录管理;
分账接收人管理;
有需要的可以私信联系
gitee地址:https://gitee.com/jalen9527/fz
有需要的自取,方便点个start
php微信商家分账API相关推荐
- 微信商家分账热门问题解答合集
微信商家分账是微信支付将自身清结算能力赋能给平台商户,今天小编针对常见的一些问题整理了一期微信商家分账热门问题合集,希望可以帮助大家更进一步地了解微信商家分账. 1.微信商家分账可以按比例分配的吗? ...
- 微信服务商分账功能 PHP
项目说明 微信服务商分账接口说明: 链接: 微信服务商分账接口说明. 开通分账功能 链接: 微信服务商分账接口说明. 服务商代子商户发起添加分账接收方请求 在统一下单API.付款码支付API.委托扣款 ...
- 2021年双十一之后,电商平台如何与商家分账?
一年一度的双十一电商大促已经落下帷幕,据报道,截止至2021年11月11日23点59分,天猫的最终交易额为5403亿,而京东数据显示最终交易额超3491亿,纷纷创下历史新高.据悉,今年天猫双十一有29 ...
- 商家分账使用场景流程
商家分账,指资金在到达商家的支付宝账号后,支付宝根据商家传入的分账规则,将相应的资金从商家的支付宝账号划转至分账对象的支付宝账号. 分账成功后,资金实时转入收款方账号.目前分账分出金额最高不能超过订单 ...
- 分享一些微信支付/分账后端代码及问题收录
微信官方支付接口地址:https://pay.weixin.qq.com/wiki/doc/api/index.html 导入WXPayUtil <dependency> <grou ...
- 微信支付 分账需要注意的坑
分账发起方:发起分账的一方,这里指电商平台: 分账方:交易的直接收款方,电商平台二级商户: 接收方:接收资金的一方,电商平台已被默认添加为接收方,二级商户可直接向电商平台进行分账:其他接收方,电商平台 ...
- 支付宝商家分账--绑定,解绑,查询的简单实例。记录一下!!!
看之前请升级自己alipay-sdk-java.jar 不然你代码就会报错 绑定 public static void main(String[] args) {//此处为绑定分账AlipayClie ...
- php网页微信登录验证失败,php 微信添加分账接收方-验证签名失败
"err_code": "SIGN_ERROR", "err_code_des": "验证签名失败" 想问下有可能是哪里 ...
- java 微信分账POST请求 (java代码调用微信api)
今天用java 调用 微信分账api 由于上传的数据是xml 格式, 用post请求发送 .在网上找的现成函数,微信服务器老是返回签名错误,但是我用postman 发送返回的数据没有问题,于是经过自己 ...
- 微信小程序后端java服务商分账实现
微信小程序后端java服务商分账实现 最近公司申请微信服务商,需要给第三方提供支付.分账功能. 商户调用服务商统一支付 首先,服务商小程序支付,基本与普通商户小程序支付一致 支付使用服务商统一下单接口 ...
最新文章
- java 中lock,java中lock获取锁的四种方法
- 【本人秃顶程序员】使用Spring Cloud Stream和RabbitMQ实现事件驱动的微服务
- 文件上传之传统方式上传代码回顾
- java swing 导出文件_java swing (一) 导出excel文件并打开
- 快速使用Vue3最新的15个常用API
- sql server 登录与用户绑定
- 部署weblogic 12c时遇到的问题
- 【PAT乙】1044 火星数字 (20分)
- 模块d3d12.dll加载失败_语音控制模块
- Fiddler刚使用遇到的4大问题
- 如何备份光猫html文件夹,华为光猫分区备份,还原,制作固件教程
- mysql在财务分析中的作用_财务报表分析的作用和目的
- ClickHouse SAMPLE 采样子句介绍
- 计算机网络核心知识。
- 移位寄存器——数电第六章学习
- 强烈推荐:一款中文AI问答、创作、绘画工具
- echarts之 数据可视化简单页面模板
- vue关闭eslint代码检测
- 更新 macOS Ventura ssh堡垒机报错:no matching host key type found. Their offer: ssh-rsa,ssh-dss
- 迅雷下载显示服务器响应超时?
热门文章
- 第四节(4.4) 维修技巧 电路图识图
- SQL server Date函数
- npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
- python for ArcGIS 绘制上海市环线地图
- 【Codeforces 372A】Counting Kangaroos is Fun
- 取关几十个优质公众号,是否可惜?
- 【SSL】谷仓的安保
- react-native 报错 Text strings must be rendered within a <Text> component.
- Photoshop 2023 支持 M1 Mac下载
- linux twm 窗口调节,CENTOS5.1怎样在命令行模式下改变X窗口启动的方式(TWM)