一、封装微信企业付款类WeiXinPayToUser,如下图代码所示:

class WeixinPayToUser
{/*** API 参数* @var array* 'mch_appid'         # 公众号APPID* 'mchid'             # 商户号* 'device_info'       # 设备号* 'nonce_str'         # 随机字符串* 'partner_trade_no'  # 商户订单号* 'openid'            # 收款用户openid* 'check_name'        # 校验用户姓名选项 针对实名认证的用户* 're_user_name'      # 收款用户姓名* 'amount'            # 付款金额* 'desc'              # 企业付款描述信息* 'spbill_create_ip'  # Ip地址* 'sign'              # 签名*/public $parameters = [];public $SSLROOTCA_PATH='';public $SSLCERT_PATH='';public $SSLKEY_PATH='';public $appid='';public $secret='';public $mchid='';public $key='';//商户密钥public function __construct(){$this->url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';$this->curl_timeout = 10;$this->SSLROOTCA_PATH=dirname(__FILE__).'/weixin/cert/rootca.pem';$this->SSLCERT_PATH=dirname(__FILE__).'/weixin/cert/apiclient_cert.pem';$this->SSLKEY_PATH=dirname(__FILE__).'/weixin/cert/apiclient_key.pem';}public function setParameter($key,$value){$this->parameters[$key]=$value;}function arrayToXml($arr,$dom=0,$item=0){if (!$dom){$dom = new DOMDocument("1.0");}if(!$item){$item = $dom->createElement("xml");$dom->appendChild($item);}foreach ($arr as $key=>$val){$itemx = $dom->createElement(is_string($key)?$key:"item");$item->appendChild($itemx);if (!is_array($val)){$text = $dom->createTextNode($val);$itemx->appendChild($text);}else {$this->arrayToXml($val,$dom,$itemx);}}$dom->encoding = 'UTF-8'; // insert properreturn $dom->saveXML();}public function getSign($paramArr){//print_r($paramArr);ksort($paramArr);$paramStr = http_build_query($paramArr);$paramStr=urldecode($paramStr);$param_temp=$paramStr.'&key='.$this->key;//echo $param_temp.'<br>';$signValue=strtoupper(md5($param_temp));//echo $signValue.'<br>';return $signValue;}/*** 生成请求xml数据* @return string*/public function createXml(){$this->parameters['mch_appid'] = $this->appid;$this->parameters['mchid']     = $this->mchid;// $this->parameters['nonce_str'] = md5(time());$this->parameters['nonce_str'] = 'dddfff';$this->parameters['sign']      = $this->getSign($this->parameters);$a= $this->arrayToXml($this->parameters);//echo $a;return $a;}public function pay(){$xml=$this->createXml();$url=$this->url;return $this->postXmlSSLCurl($xml,$url,$second=30);}/***     作用:使用证书,以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);//设置headercurl_setopt($ch,CURLOPT_HEADER,FALSE);//要求结果为字符串且输出到屏幕上curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);//设置证书//curl_setopt($ch,CURLOPT_CAINFO, $this->SSLROOTCA_PATH);//使用证书:cert 与 key 分别属于两个.pem文件//默认格式为PEM,可以注释curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');curl_setopt($ch,CURLOPT_SSLCERT, $this->SSLCERT_PATH);//默认格式为PEM,可以注释curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');curl_setopt($ch,CURLOPT_SSLKEY, $this->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"."<br>";echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";curl_close($ch);return false;}}}
?>

二、调用WeiXinPayToUser,如下图所示:

 /*** 企业付款测试*/public function payToUser(){

        $mchPay = new WeiXinPayToUser();// 用户openid$mchPay->setParameter('openid', 'oy2lbszskklaslEKThrzqEziKEBzqU');// 商户订单号$mchPay->setParameter('partner_trade_no', 'test-'.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('re_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('return_code' => 'FAIL', 'return_msg' => 'transfers_接口出错', 'return_ext' => array()) );}}
}

转载于:https://www.cnblogs.com/phperlinxinlan/p/9605530.html

PHP实现微信企业付款相关推荐

  1. java 企业付款_java实现微信企业付款到个人功能

    微信官方提供了微信企业账户付款到微信个人零钱接口,提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款.该接口并不是直接所有的商户都拥有,企业要开启必须满足以下 ...

  2. java实现微信企业付款到个人零钱(微信红包)

    今天公司打算做一个活动,就是可以让用户领取平台发送的红包,根据微信官方文档实现微信企业付款到零钱(因为商户号不满足一些条件无法使用红包,红包跟零钱实现方法基本一样),然后又加入了一些简单的红包算法.微 ...

  3. java实现微信企业付款到个人账户

    微信官方提供了微信企业账户付款到微信个人零钱接口,提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款.该接口并不是直接所有的商户都拥有,企业要开启必须满足以下 ...

  4. 微信企业付款至零钱包实现详细流程Demo

    微信企业付款实现详细流程Demo 大家好,我是 梦辛工作室的灵,下面来讲一下微信企业付款实现的流程 1.准备数据 微信企业付款需要 准备 微信支付API秘钥.支付证书:下面是获取流程: 先登录微信支付 ...

  5. 微信支付、微信企业付款到零钱工具类

    微信支付.微信企业付款到零钱工具类 主要依赖:apache httpclient 4.5 jdk1.8 工具类主要功能: xml参数拼接 签名算法实现 post加密请求 import lombok.e ...

  6. 微信企业付款至银行卡 设置转账备注信息问题

    最近发现一个问题,还是用户反馈的,就是我们调起微信企业付款的接口,按照API中的参数都赋予响应的值之后,发现在一个参数desc(转账备注)中添加文字说明后,转账到微信零钱,收款方上面有我的备注信息,但 ...

  7. 微信零钱数据在服务器,关于微信企业付款到零钱X509Certificate2读取证书信息,发布到服务器访问不到的解决方案...

    前言: 最近做了一个通过调用微信企业付款到用户零钱的功能,真的挺奇怪的,在我本地调试的时候都没有问题,但是当我发布到服务上的时候却一直无法读取到我的证书信息.读取的代码如下,使用的是微信官方文档提供的 ...

  8. Java 微信企业付款到个人钱包

    Java 微信企业付款到个人钱包 希望可以帮助到你 文章目录 **Java 微信企业付款到个人钱包** 前言 一.需要准备的配置 二.开发 总结 前言 微信企业付款到个人钱包,此功能模块需要提前在微信 ...

  9. JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载

    最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信提现功能开发的流程, 主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验: A.接口流程 获取用户OPENI ...

最新文章

  1. 【转】mysql增量备份恢复实战企业案例
  2. python 关键字 及代码
  3. python api是什么_Python/C API
  4. php 模板解析,关于模板的原理和解析
  5. 微软“.Net社区虚拟大会”dotnetConf2015:关键词:.NET 创新、开源、跨平台
  6. 和华为杯_新闻|“华为杯”足球赛正式开展:我院女足小组赛拿下首胜
  7. android系统密码文件夹,安卓手机如何隐藏(加密)文件夹(软件) 安卓手机隐藏(加密)文件夹(软件)的方法...
  8. C++ 返回类型协变
  9. aix oracle调整逻辑卷的大小,AIX上增加逻辑卷时报错误0516-787 extendlv: Maximum allocation for logical volume(示例代码)...
  10. tf-openpose人体姿态估计标签生成--heatmap--vectormap
  11. 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList
  12. 最新可用双端美化版在线音乐播放器网站源码
  13. 硬盘被计算机限制如果解锁,硬盘被锁怎么办
  14. 大数据时代,如何做商业智能产品选型
  15. 老男孩网络安全第八期
  16. Django(14)-应用及分布式路由
  17. Matlab代码区出现中文乱码的情况
  18. 腾讯(表格OCR)API调用流程
  19. [agc015f]Kenus the Ancient Greek
  20. 大学生必须掌握的计算机软件基础

热门文章

  1. 黑苹果 2分钟 重启_一分钟了解苹果iPad Pro 2020的激光雷达到底是什么黑科技?...
  2. uc浏览器手机模拟_UC、华为、OPPO等8款手机浏览器被重点集中整治!原因是.........
  3. mac apache php.ini,Mac自带的Apache使用详解
  4. php 说说,PHP程序员:你过来,给我说说 $this,self,static 有什么区别?
  5. python 路径拼接字符串_字符串游戏之拼接字符串
  6. android9.0 uri,Android9.0源码学习 - Launcher Activity(一)
  7. eclipse如何开发python
  8. 笔记︱信用风险模型(申请评分、行为评分)与数据准备(违约期限、WOE转化)
  9. 数据分析和数据挖掘相关模块
  10. 30款油漆纹理Photoshop笔刷