php微信公众号开发之微信企业付款给个人


Posted in PHP onOctober 04, 2018

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

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

php微信公众号开发之微信企业付款给个人

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

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

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

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

/*微信企业付款给个人*/
<!--具体细节参考微信支付开发文档-->
<!--参数 $openid个人openid,$re_user_name个人真实姓名,$amount付款金额,$partner_trade_no商户订单号,$desc描述-->
<!--返回 如果付款成功,返回true,否则返回false-->
private function weixin_transfer_money($openid,$re_user_name,$amount,$partner_trade_no,$desc){
 //请求参数
 //公众号appid(字段名)--mch_appid(变量名)--1(必填)
 //输入你的公众号appid
 $data['mch_appid']="**************"; 
 
 //商户号--mchid--1
 //输入你的商户号
 $data['mchid']="*************";
 
 //设备号--device_info--0
 //随机字符串--nonce_str--1
 $data['nonce_str']=$this->get_unique_value();
 
 //签名--sign--1
 $data['sign']="";
 
 //商户订单号--partner_trade_no--1
 $data['partner_trade_no']=$partner_trade_no;
 
 //用户openid--openid--1
 $data['openid']=$openid;
 
 //校验用户姓名选项--check_name--1
 $data['check_name']="OPTION_CHECK";
 
 //收款用户姓名--re_user_name--0
 $data['re_user_name']=$re_user_name;
 
 //金额--amount--1
 $data['amount']=$amount;
 
 //企业付款描述信息--desc--1
 $data['desc']=$desc;
 
 //IP地址--spbill_create_ip--1
 $data['spbill_create_ip']=$_SERVER['LOCAL_ADDR'];
 
 //生成签名
 //对数据数组进行处理
 //API密钥,输入你的appsecret
 $appsecret="*************";
 $data=array_filter($data);
 ksort($data);
 $str="";
 foreach($data as $k=>$v){
   $str.=$k."=".$v."&";
 }
 $str.="key=".$appsecret;
 $data['sign']=strtoupper(MD5($str));
 
 /*
 付款操作:
  1.将请求数据转换成xml
  2.发送请求
  3.将请求结果转换为数组
  4.将请求信息和请求结果录入到数据库中
  5.判断是否通信成功
  6.判断是否付款成功
 */
 
 
 
 //企业付款接口地址
 $url="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
 
 //1.将请求数据由数组转换成xml
 $xml=$this->arraytoxml($data);
 //2.进行请求操作
 $res=$this->curl($xml,$url);
 //3.将请求结果由xml转换成数组
 $arr=$this->xmltoarray($res);
 
 //4.将请求信息和请求结果录入到数据库中,可以根据自己的需要进行处理,$arr是返回的结果数组
 $transfer['partner_trade_no']=$data['partner_trade_no'];
 $transfer['request_data']=serialize($data);  
 $transfer['response_data']=serialize($arr);
 if($arr['return_code']=="SUCCESS" && $arr['result_code']=="SUCCESS"){
   //5. 判断是否通讯成功 6.判断是否付款成功
 $transfer['success']=1;
 $transfer_res['success']=1;
 }else{
 $transfer['success']=0;
 $transfer_res['success']=0;
 $transfer_res['desc']=$arr['return_msg'];
 }
 $transfer['add_time']=time();
 
 D("weixin_transfer")->add($transfer);
  
 return $transfer_res;
}
 
// 生成32位唯一随机字符串
private function get_unique_value(){
  $str=uniqid(mt_rand(),1);
  $str=sha1($str);
  return md5($str);
}
// 将数组转换成xml
private function arraytoxml($arr){
  $xml="<xml>";
  foreach($arr as $k=>$v){
    $xml.="<".$k.">".$v."</".$k.">";
  }
  $xml.="</xml>";
  return $xml;
}
// 将xml转换成数组
private function xmltoarray($xml){
  //禁止引用外部xml实体
  libxml_disable_entity_loader(true);
  $xmlstring=simplexml_load_string($xml,"SimpleXMLElement",LIBXML_NOCDATA);
  $arr=json_decode(json_encode($xmlstring),true);
  return $arr;
}
 
//进行curl操作
private function curl($param="",$url) {
  $postUrl = $url;
  $curlPost = $param;
  //初始化curl
  $ch = curl_init();                   
  //抓取指定网页
  curl_setopt($ch, CURLOPT_URL,$postUrl);         
  //设置header
  curl_setopt($ch, CURLOPT_HEADER, 0);          
  //要求结果为字符串且输出到屏幕上
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);      
  //post提交方式
  curl_setopt($ch, CURLOPT_POST, 1);           
  // 增加 HTTP Header(头)里的字段 
  curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);      
  // 终止从服务端进行验证
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 
  //这个是证书的位置
  curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'\cert\apiclient_cert.pem'); 
  //这个也是证书的位置
  curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'\cert\apiclient_key.pem'); 
  //运行curl
  $data = curl_exec($ch);                 
  //关闭curl
  curl_close($ch);
  //返回结果
  return $data;
}

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

PHP 相关文章推荐
PHP 上传文件的方法(类)
Jul 30 PHP
php中转义mysql语句的实现代码
Jun 24 PHP
PHP 读取Postgresql中的数组
Apr 14 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
PHP批量上传图片的具体实现方法介绍.
Feb 26 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
基于win2003虚拟机中apache服务器的访问
Aug 01 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
PHP按一定比例压缩图片的方法
Oct 12 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
php+iframe 实现上传文件功能示例
Mar 04 PHP
php引用传递
Apr 01 PHP
PHP获取当前系统时间的方法小结
Oct 03 #PHP
PHP格式化显示时间date()函数代码
Oct 03 #PHP
php实现微信企业转账功能
Oct 02 #PHP
PHP实现微信退款功能
Oct 02 #PHP
PHP实现微信申请退款功能
Oct 01 #PHP
微信企业转账之入口类分装php代码
Oct 01 #PHP
PHP实现微信对账单处理
Oct 01 #PHP
You might like
php中的MVC模式运用技巧
2007/05/03 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
浅谈PHP进程管理
2019/03/08 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
Javascript 面向对象 重载
2010/05/13 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
python获取外网ip地址的方法总结
2015/07/02 Python
总结Python编程中函数的使用要点
2016/03/20 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
通过cmd进入python的实例操作
2019/06/26 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
Python datetime 如何处理时区信息
2020/09/02 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
2014年化验室工作总结
2014/11/21 职场文书
学生保证书
2015/01/16 职场文书
担保书范本
2015/01/20 职场文书
行政文员岗位职责
2015/02/04 职场文书
道歉的话怎么说
2015/05/12 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书