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中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
用PHP书写安全的脚本代码
Feb 05 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
php命令行用法入门实例教程
Oct 27 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
Dec 17 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 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防注
2007/01/15 PHP
php 无限极分类
2008/03/27 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
php实现快速排序法函数代码
2012/08/27 PHP
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
javascript之bind使用介绍
2011/10/09 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
DOM 高级编程
2015/05/06 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python函数中的函数(闭包)用法实例
2016/03/15 Python
Python heapq使用详解及实例代码
2017/01/25 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
Python之多进程与多线程的使用
2021/02/23 Python
酷瑞网络科技面试题
2012/03/30 面试题
经典商业广告词
2014/03/13 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
世界遗产的导游词
2015/02/13 职场文书
工商局个人工作总结
2015/03/03 职场文书