失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 微信开发企业付款 PHP代码实现

微信开发企业付款 PHP代码实现

时间:2021-12-28 13:25:28

相关推荐

微信开发企业付款 PHP代码实现

微信小程序|微信开发

微信开发

微信小程序-微信开发

写这篇文章的目的主要是由于在微信公众平台提供的SDK中并没有提供此功能的SDK实现,

微信小说分销平台源码,vscode的终端是什么,ubuntu运行bat,tomcat网页加载很慢,爬虫BT磁力,php没有工作经验,鸡泽seo关键词优化,手机网站图片 触摸 放大代码 js,dedecms更改模板lzw

其实最后实现还是借助 微信公众平台开发文档 和 SDK 。

云付钱包源码,为什么下载vscode很慢,ubuntu链接显卡,tomcat 设置线程池,爬虫windows登录,php 访问共享文件,仙桃外包seo推广开户,手机网站居中,cms后台登录模板lzw

企业付款的应用场景: 公众号向已关注用户付款,比如处理退款、财务结算等

竞价订单系统 源码,ubuntu只能输入中文,tomcat的发布目录在,urllib异步爬虫,安徽php培训怎么选,井陉seolzw

先说一下实现思路:

在SDK中自带类库的基础上扩展WxMchPay组件, 实现企业付款功能的扩展。

话不多说,上代码, 下面是继承SDK,实现企业付款的组件:

$parameters参数参考: 企业付款API的文档

<?php// 引入SDKimport(Common.Util.WxPay);/** * 微信企业付款操作类 * Author : Max.wen * DateTime: */class WxMchPay extends Wxpay_client_pub{ /*** API 参数* @var array* mch_appid # 公众号APPID* mchid # 商户号* device_info # 设备号* once_str # 随机字符串* partner_trade_no # 商户订单号* openid # 收款用户openid* check_name # 校验用户姓名选项 针对实名认证的用户* e_user_name# 收款用户姓名* amount # 付款金额* desc # 企业付款描述信息* spbill_create_ip # Ip地址* sign # 签名*/ public $parameters = []; public function __construct() { $this->url = https://api.mch./mmpaymkttransfers/promotion/transfers; $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /*** 生成请求xml数据* @return string*/ public function createXml() { $this->parameters[mch_appid] = WxPayConf_pub::APPID; $this->parameters[mchid]= WxPayConf_pub::MCHID; $this->parameters[ once_str] = $this->createNoncestr(); $this->parameters[sign]= $this->getSign($this->parameters); return $this->arrayToXml($this->parameters); } /***作用:使用证书,以post方式提交xml到对应的接口url*/ function postXmlSSLCurl($xml,$url,$second=30) { $ch = curl_init(); //超时时间 curl_setopt($ch,CURLOPT_TIMEOUT,$second); //这里设置代理,如果有的话 //curl_setopt($ch,CURLOPT_PROXY, 8.8.8.8); //curl_setopt($ch,CURLOPT_PROXYPORT, 8080); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); //设置header curl_setopt($ch,CURLOPT_HEADER,FALSE); //要求结果为字符串且输出到屏幕上 curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); //设置证书 curl_setopt($ch,CURLOPT_CAINFO, WxPayConf_pub::SSLROOTCA_PATH); //使用证书:cert 与 key 分别属于两个.pem文件 //默认格式为PEM,可以注释 curl_setopt($ch,CURLOPT_SSLCERTTYPE,PEM); curl_setopt($ch,CURLOPT_SSLCERT, WxPayConf_pub::SSLCERT_PATH); //默认格式为PEM,可以注释 curl_setopt($ch,CURLOPT_SSLKEYTYPE,PEM); curl_setopt($ch,CURLOPT_SSLKEY, WxPayConf_pub::SSLKEY_PATH); //post提交方式 curl_setopt($ch,CURLOPT_POST, true); curl_setopt($ch,CURLOPT_POSTFIELDS,$xml); $data = curl_exec($ch); //返回结果 if($data){ curl_close($ch); return $data; } else { $error = curl_errno($ch); echo "curl出错,错误码:$error"."

"; echo "错误原因查询"; curl_close($ch); return false; } }}

Controller层功能实现:

<?php/** * Author : Max.wen * DateTime: */namespace Home\Controller;class TestController extends CommonController{ /*** 企业付款测试*/ public function rebate() { import(Common.Util.WxMchPay); $mchPay = new \WxMchPay(); // 用户openid $mchPay->setParameter(openid, oy2lbszXkgvlEKThrzqEziKEBzqU); // 商户订单号 $mchPay->setParameter(partner_trade_no, est-.time()); // 校验用户姓名选项 $mchPay->setParameter(check_name, NO_CHECK); // 企业付款金额 单位为分 $mchPay->setParameter(amount, 100); // 企业付款描述信息 $mchPay->setParameter(desc, 开发测试); // 调用接口的机器IP地址 自定义 $mchPay->setParameter(spbill_create_ip, 127.0.0.1); # getClientIp() // 收款用户姓名 // $mchPay->setParameter( e_user_name, Max wen); // 设备信息 // $mchPay->setParameter(device_info, dev_server); $response = $mchPay->postXmlSSL(); if( !empty($response) ) { $data = simplexml_load_string($response, null, LIBXML_NOCDATA); echo json_encode($data); }else{ echo json_encode( array( eturn_code => FAIL, eturn_msg => ransfers_接口出错, eturn_ext => array()) ); } }}

完成上述两部分代码,基本就可以成功调用企业付款API了。

返回结果的数据结构示例:

{ "return_code": "SUCCESS", "return_msg": { }, "mch_appid": "wx519cae424099ed6b", "mchid": "1228636402", "device_info": { }, "nonce_str": "qjupk84q4iqxkb578hb5h2qiatgcwxwg", "result_code": "SUCCESS", "partner_trade_no": "test-1442801966", "payment_no": "100001830109210739170397", "payment_time": "-09-21 10:19:26"}

可能遇到的问题:

1、CA证书错误

在WxMchPay中大家可以看到,我重写了SDK中 Wxpay_client_pub 的 postXmlSSLCurl()方法

因为默认在SDK中的这个方法在CURL POST请求的时候没有附带CA证书。

相比之下就多了

curl_setopt($ch,CURLOPT_CAINFO, WxPayConf_pub::SSLROOTCA_PATH);这么一行代码。

作用就是请求时附带CA证书。

2、对同一用户转账操作过于频繁,请稍候重试.

这个错误属于微信服务端的限制,具体限制频率也没有找到那里有说明,不过经过实际测试大概在1分钟左右。

所以在开发的时候还需要多注意。

更多微信开发企业付款 PHP代码实现相关文章请关注PHP中文网!

如果觉得《微信开发企业付款 PHP代码实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。