微信支付普通商户分账-添加分账接收方

  • 写在前面:
    • 微信官方文档
    • SIGN值校验检查地址
    • 调试中可能遇到的问题
    • 直接上代码

写在前面:

微信官方文档

https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=27_3&index=4

SIGN值校验检查地址

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

调试中可能遇到的问题

SIGN_ERROR : https://developers.weixin.qq.com/community/develop/doc/0002cc86c603b006fd4a4c65f59c00?highLine=SIGN_ERROR
SYSTEMERROR: https://developers.weixin.qq.com/community/develop/doc/0006eec6274db8ddd619cf6105bc00

直接上代码

<?phpnamespace app\admin\lib\weixin;use function Composer\Autoload\includeFile;
use think\Controller;class Weixin extends Controller
{private $add_divide_accounts_url;              // 添加分账接收方请求URLprivate $add_divide_accounts_type;             // 分账接收方类型 此处是个人openid类型private $add_divide_accounts_relation_type;    // 分账关系类型private $mch_id;                            // 商户号private $appid;                             // 公众号appidprivate $mch_secrect;                       // 此处是商户key!!!function __construct(){$this->add_divide_accounts_url = 'https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver';$this->add_divide_accounts_type = 'PERSONAL_OPENID';$this->add_divide_accounts_relation_type = 'PARTNER';$this->mch_id = config('wechat.pay_config.mch_id');$this->appid = config('wechat.pay_config.app_id');$this->mch_secrect = config('wechat.pay_config.key');}/*** Notes: 添加微信分账接收方* User: googol* Date: 2020-07-15* Time: 04:53* Url: 调用该方法 传入openid*/public function addDivideAccountsReceiver($openid){$tmp_receive_data = ['mch_id' => $this->mch_id,'appid' => $this->appid,'nonce_str' => $this->getNonceStr(),'sign_type' => 'HMAC-SHA256','receiver' => $this->receiver($openid)];$tmp_receive_data['sign'] = $this->makeSign($tmp_receive_data, $this->mch_secrect);$xml = $this->arrayToXml($tmp_receive_data);$curl_arr = $this->postXmlCurl($xml, $this->add_divide_accounts_url);$result = $this->xmlToArray($curl_arr);return $result;}/*** Notes: 接收方信息* @param $openid* @return false|string*/private function receiverInfo($openid){$tmp_receiver_arr = ['type' => 'PERSONAL_OPENID','account' => $openid,'relation_type' => $this->add_divide_accounts_relation_type,];return json_encode($tmp_receiver_arr);}/*** Notes: 获取随机数* @param int $length* @return string*/private function getNonceStr($length = 32){$chars = "abcdefghijklmnopqrstuvwxyz0123456789";$str = "";for ($i = 0; $i < $length; $i++) {$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);}return $str;}/*** Notes: 生成sign* @param $arr* @param $secret* @return string*/private function makeSign($arr, $secret){//签名步骤一:按字典序排序参数ksort($arr);$str = $this->toUrlParams($arr);//签名步骤二:在str后加入KEY$str = $str . "&key=" . $secret;//签名步骤三:HMAC-SHA256 类型  加密的字符串 key是商户秘钥$str = hash_hmac('sha256', $str, $this->mch_secrect);//签名步骤四:所有字符转为大写$result = strtoupper($str);return $result;}/*** Notes: 数组转字符串* @param $arr* @return string*/private function toUrlParams($arr){$str = "";foreach ($arr as $k => $v) {if (!empty($v) && ($k != 'sign')) {$str .= "$k" . "=" . $v . "&";}}$str = rtrim($str, "&");return $str;}/*** Notes: 数组转XML* @param $arr* @return string*/private function arrayToXml($arr){$xml = '<?xml version="1.0" encoding="UTF-8"?><xml>';foreach ($arr as $key => $val) {$xml.="<".$key.">$val</".$key.">";}$xml.="</xml>";return $xml;}/*** Notes: XML转数组* @param $xml* @return mixed*/private function xmlToArray($xml){libxml_disable_entity_loader(true);$arr= json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);return $arr;}/*** Notes: POST 请求 此处不需要证书* @param $xml* @param $url* @param int $second* @return bool|string*/private function postXmlCurl($xml, $url, $second = 30){//初始化curl$ch = curl_init();//设置超时curl_setopt($ch, CURLOPT_TIMEOUT, $second);curl_setopt($ch,CURLOPT_URL, $url);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//设置headercurl_setopt($ch, CURLOPT_HEADER, FALSE);//要求结果为字符串且输出到屏幕上curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);//post提交方式curl_setopt($ch, CURLOPT_POST, TRUE);curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);//运行curl$data = curl_exec($ch);//curl_close($ch);//返回结果if($data){curl_close($ch);return $data;}else{$error = curl_errno($ch);echo "curl出错,错误码:$error"."<br>";echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";curl_close($ch);return false;}}
}

微信支付普通商户分账-添加分账接收方相关推荐

  1. 浅析微信支付:商户平台代金券或立减优惠开通、指定用户代金券发放、查询等

    本文是[浅析微信支付]系列文章的第十四篇,主要讲解在如何开通商户平台的代金券或立减优惠功能,商家向指定用户发送代金券,查询发送记录,代金券信息等. 浅析微信支付系列已经更新十四篇了哟-,没有看过的朋友 ...

  2. 微信支付普通商户分账-请求单次分账

    注意事项 下预付单时 务必要添加 profit_sharing 为 Y 否则该笔订单不支持分账. 参考链接 https://pay.weixin.qq.com/wiki/doc/api/allocat ...

  3. 微信支付 - 构建商户订单

    // 微信支付成功 -> 支付中心 -> 吃货平台 // |-> 回调通知的url String payReturnUrl = "http://api.z.xuexi.co ...

  4. 微信支付二维码上添加logo

    工具类的使用,分享给大家.先看效果: 无logo时: 有logo时: import java.awt.image.BufferedImage; import java.io.File; import ...

  5. 微信小程序踩坑之微信支付提示商户未开通支付权限

    继上次踩坑事件后 我们现在API秘药都是采用数字+小写字母 后面不多久公司就成为了微信服务商 工作起来 效率提高不少 然鹅我今天又踩了一个坑 给客户开通了微信支付客户不给账号给我登录 拿不到里面的一些 ...

  6. 微信支付报出 商户订单号重复 错误问题

    问题描述: 使用微信支付时,在支付页面,由于用户第一次点击了取消或余额不足等原因,没有进行支付.这时,订单已经生成,订单状态为"待支付",当用户继续支付时,微信报出了"2 ...

  7. 微信小程序 微信支付的商户绑定流程及开发必要条件

    一 基本流程 商户申请接入微信支付(见链接1) 商户申请绑定微信小程序(见链接2) 微信小程序审核通过商户的绑定申请 (登录微信公众平台---选择对应小程序----功能----微信支付----待关联商 ...

  8. 小程序微信支付提示:商户订单号重复

    最近在有用户反馈,点击订单结束无反应. 去后台看了看报错, 是这个样子的 <xml><return_code><![CDATA[SUCCESS]]></ret ...

  9. jsapi支付签名_微信支付JSAPI:商户签名错误

    $params = array( 'body' => '商品简单描述', 'out_trade_no' => '1217752501201407033233368018', 'total_ ...

最新文章

  1. 时间一天一天过去,很快;时间如果过的慢,更是没有意思
  2. 第三周项目四-穷举法解决组合问题
  3. Matlab分布式和并行编程
  4. RocketMQ-初体验RocketMQ(06)-使用API操作RocketMQ ,理解RocketMQ的存储结构
  5. lintcode-171-乱序字符串
  6. 中国智能控制器行业运营分析与竞争趋势展望报告2022-2027年版
  7. c:forEach循环的List为String时的写法
  8. 2.利用计算机进行信息加工的一般过程是:,[信息技术教案]《计算机信息加工的一般过程》教案...
  9. http://www.gamesofdesire.com/
  10. 开发用户导航栏和权限信息接口
  11. java职业教育考试题_Java认证考试中Java构造方法题目解答
  12. 数组、链表、哈希……Qt中丰富的容器类
  13. 请教如何保存matlab仿真出来的图,如何保存Matlab绘制出来的图像
  14. 验证码一(验证码生成)
  15. 小米11全系机型补齐,超大杯压场,但Pro版也不容忽视
  16. 02-最基本的SELECT语句
  17. es搜索同义词近义词技术方案
  18. 美元符号 ($) 在 jQuery 中是什么意思?
  19. 基于TSUNG对MQTT进行压力测试-测试结果
  20. SVG黑科技微信排版『Apple连续向上滑动』模板代码

热门文章

  1. linux 查看内存和硬盘(free -m|df -h)及释放缓存
  2. Druid密码加解密
  3. 判断横屏竖屏方式(三种)
  4. [AntV G2] 图表横坐标显示不全
  5. 各大IT公司名字的由来
  6. Python输出带逗号,不带中括号的列表
  7. ​分享35条大佬赚钱心得!建议收藏
  8. 轻松搞定-根据当前日期获取今日、昨日、本周、上周、本月、上月开始结束时间
  9. 关于代理协程爬虫的问题总结
  10. Sdp Plan-b UnifiedPlan