微信支付普通商户分账-添加分账接收方
微信支付普通商户分账-添加分账接收方
- 写在前面:
- 微信官方文档
- 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;}}
}
微信支付普通商户分账-添加分账接收方相关推荐
- 浅析微信支付:商户平台代金券或立减优惠开通、指定用户代金券发放、查询等
本文是[浅析微信支付]系列文章的第十四篇,主要讲解在如何开通商户平台的代金券或立减优惠功能,商家向指定用户发送代金券,查询发送记录,代金券信息等. 浅析微信支付系列已经更新十四篇了哟-,没有看过的朋友 ...
- 微信支付普通商户分账-请求单次分账
注意事项 下预付单时 务必要添加 profit_sharing 为 Y 否则该笔订单不支持分账. 参考链接 https://pay.weixin.qq.com/wiki/doc/api/allocat ...
- 微信支付 - 构建商户订单
// 微信支付成功 -> 支付中心 -> 吃货平台 // |-> 回调通知的url String payReturnUrl = "http://api.z.xuexi.co ...
- 微信支付二维码上添加logo
工具类的使用,分享给大家.先看效果: 无logo时: 有logo时: import java.awt.image.BufferedImage; import java.io.File; import ...
- 微信小程序踩坑之微信支付提示商户未开通支付权限
继上次踩坑事件后 我们现在API秘药都是采用数字+小写字母 后面不多久公司就成为了微信服务商 工作起来 效率提高不少 然鹅我今天又踩了一个坑 给客户开通了微信支付客户不给账号给我登录 拿不到里面的一些 ...
- 微信支付报出 商户订单号重复 错误问题
问题描述: 使用微信支付时,在支付页面,由于用户第一次点击了取消或余额不足等原因,没有进行支付.这时,订单已经生成,订单状态为"待支付",当用户继续支付时,微信报出了"2 ...
- 微信小程序 微信支付的商户绑定流程及开发必要条件
一 基本流程 商户申请接入微信支付(见链接1) 商户申请绑定微信小程序(见链接2) 微信小程序审核通过商户的绑定申请 (登录微信公众平台---选择对应小程序----功能----微信支付----待关联商 ...
- 小程序微信支付提示:商户订单号重复
最近在有用户反馈,点击订单结束无反应. 去后台看了看报错, 是这个样子的 <xml><return_code><![CDATA[SUCCESS]]></ret ...
- jsapi支付签名_微信支付JSAPI:商户签名错误
$params = array( 'body' => '商品简单描述', 'out_trade_no' => '1217752501201407033233368018', 'total_ ...
最新文章
- 时间一天一天过去,很快;时间如果过的慢,更是没有意思
- 第三周项目四-穷举法解决组合问题
- Matlab分布式和并行编程
- RocketMQ-初体验RocketMQ(06)-使用API操作RocketMQ ,理解RocketMQ的存储结构
- lintcode-171-乱序字符串
- 中国智能控制器行业运营分析与竞争趋势展望报告2022-2027年版
- c:forEach循环的List为String时的写法
- 2.利用计算机进行信息加工的一般过程是:,[信息技术教案]《计算机信息加工的一般过程》教案...
- http://www.gamesofdesire.com/
- 开发用户导航栏和权限信息接口
- java职业教育考试题_Java认证考试中Java构造方法题目解答
- 数组、链表、哈希……Qt中丰富的容器类
- 请教如何保存matlab仿真出来的图,如何保存Matlab绘制出来的图像
- 验证码一(验证码生成)
- 小米11全系机型补齐,超大杯压场,但Pro版也不容忽视
- 02-最基本的SELECT语句
- es搜索同义词近义词技术方案
- 美元符号 ($) 在 jQuery 中是什么意思?
- 基于TSUNG对MQTT进行压力测试-测试结果
- SVG黑科技微信排版『Apple连续向上滑动』模板代码