经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
php微信公众号开发之微信企业付款给个人
来源:jb51  时间:2018/10/8 8:44:13  对本文有异议

本文实例为大家分享了php微信企业付款给个人的具体代码,供大家参考,具体内容如下

以下有关微信支付中企业付款的介绍及编码参考自微信支付开发文档,网址,如图所示

企业付款,提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款。

企业付款业务是基于微信支付商户平台的资金管理能力,为了协助商户方便地实现企业向个人付款,针对部分有开发能力的商户,提供通过API完成企业付款的功能。<

比如目前的保险行业向客户退保、给付、理赔。

以下是PHP用于实现企业付款业务的代码片段,仅供参考。

  1. /*微信企业付款给个人*/
  2. <!--具体细节参考微信支付开发文档-->
  3. <!--参数 $openid个人openid,$re_user_name个人真实姓名,$amount付款金额,$partner_trade_no商户订单号,$desc描述-->
  4. <!--返回 如果付款成功,返回true,否则返回false-->
  5. private function weixin_transfer_money($openid,$re_user_name,$amount,$partner_trade_no,$desc){
  6. //请求参数
  7. //公众号appid(字段名)--mch_appid(变量名)--1(必填)
  8. //输入你的公众号appid
  9. $data['mch_appid']="**************";
  10. //商户号--mchid--1
  11. //输入你的商户号
  12. $data['mchid']="*************";
  13. //设备号--device_info--0
  14. //随机字符串--nonce_str--1
  15. $data['nonce_str']=$this->get_unique_value();
  16. //签名--sign--1
  17. $data['sign']="";
  18. //商户订单号--partner_trade_no--1
  19. $data['partner_trade_no']=$partner_trade_no;
  20. //用户openid--openid--1
  21. $data['openid']=$openid;
  22. //校验用户姓名选项--check_name--1
  23. $data['check_name']="OPTION_CHECK";
  24. //收款用户姓名--re_user_name--0
  25. $data['re_user_name']=$re_user_name;
  26. //金额--amount--1
  27. $data['amount']=$amount;
  28. //企业付款描述信息--desc--1
  29. $data['desc']=$desc;
  30. //IP地址--spbill_create_ip--1
  31. $data['spbill_create_ip']=$_SERVER['LOCAL_ADDR'];
  32. //生成签名
  33. //对数据数组进行处理
  34. //API密钥,输入你的appsecret
  35. $appsecret="*************";
  36. $data=array_filter($data);
  37. ksort($data);
  38. $str="";
  39. foreach($data as $k=>$v){
  40. $str.=$k."=".$v."&";
  41. }
  42. $str.="key=".$appsecret;
  43. $data['sign']=strtoupper(MD5($str));
  44. /*
  45. 付款操作:
  46. 1.将请求数据转换成xml
  47. 2.发送请求
  48. 3.将请求结果转换为数组
  49. 4.将请求信息和请求结果录入到数据库中
  50. 5.判断是否通信成功
  51. 6.判断是否付款成功
  52. */
  53. //企业付款接口地址
  54. $url="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
  55. //1.将请求数据由数组转换成xml
  56. $xml=$this->arraytoxml($data);
  57. //2.进行请求操作
  58. $res=$this->curl($xml,$url);
  59. //3.将请求结果由xml转换成数组
  60. $arr=$this->xmltoarray($res);
  61. //4.将请求信息和请求结果录入到数据库中,可以根据自己的需要进行处理,$arr是返回的结果数组
  62. $transfer['partner_trade_no']=$data['partner_trade_no'];
  63. $transfer['request_data']=serialize($data);
  64. $transfer['response_data']=serialize($arr);
  65. if($arr['return_code']=="SUCCESS" && $arr['result_code']=="SUCCESS"){
  66. //5. 判断是否通讯成功 6.判断是否付款成功
  67. $transfer['success']=1;
  68. $transfer_res['success']=1;
  69. }else{
  70. $transfer['success']=0;
  71. $transfer_res['success']=0;
  72. $transfer_res['desc']=$arr['return_msg'];
  73. }
  74. $transfer['add_time']=time();
  75. D("weixin_transfer")->add($transfer);
  76. return $transfer_res;
  77. }
  78. // 生成32位唯一随机字符串
  79. private function get_unique_value(){
  80. $str=uniqid(mt_rand(),1);
  81. $str=sha1($str);
  82. return md5($str);
  83. }
  84. // 将数组转换成xml
  85. private function arraytoxml($arr){
  86. $xml="<xml>";
  87. foreach($arr as $k=>$v){
  88. $xml.="<".$k.">".$v."</".$k.">";
  89. }
  90. $xml.="</xml>";
  91. return $xml;
  92. }
  93. // 将xml转换成数组
  94. private function xmltoarray($xml){
  95. //禁止引用外部xml实体
  96. libxml_disable_entity_loader(true);
  97. $xmlstring=simplexml_load_string($xml,"SimpleXMLElement",LIBXML_NOCDATA);
  98. $arr=json_decode(json_encode($xmlstring),true);
  99. return $arr;
  100. }
  101. //进行curl操作
  102. private function curl($param="",$url) {
  103. $postUrl = $url;
  104. $curlPost = $param;
  105. //初始化curl
  106. $ch = curl_init();
  107. //抓取指定网页
  108. curl_setopt($ch, CURLOPT_URL,$postUrl);
  109. //设置header
  110. curl_setopt($ch, CURLOPT_HEADER, 0);
  111. //要求结果为字符串且输出到屏幕上
  112. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  113. //post提交方式
  114. curl_setopt($ch, CURLOPT_POST, 1);
  115. // 增加 HTTP Header(头)里的字段
  116. curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  117. // 终止从服务端进行验证
  118. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  119. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  120. //这个是证书的位置
  121. curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'\cert\apiclient_cert.pem');
  122. //这个也是证书的位置
  123. curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'\cert\apiclient_key.pem');
  124. //运行curl
  125. $data = curl_exec($ch);
  126. //关闭curl
  127. curl_close($ch);
  128. //返回结果
  129. return $data;
  130. }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号