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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
搜索引擎技术核心揭密
Oct 09 PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
May 15 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
php 启动报错如何解决
Jan 17 PHP
PHP捕获Fatal error错误的方法
Jun 11 PHP
destoon文章模块调用企业会员资料的方法
Aug 22 PHP
Laravel中使用自己编写类库的3种方法
Feb 10 PHP
PHP处理postfix邮件内容的方法
Jun 16 PHP
php基于Redis消息队列实现的消息推送的方法
Nov 28 PHP
PHP 代码简洁之道(小结)
Oct 16 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 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项目打包方法
2008/02/18 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
javascript取消文本选定的实现代码
2010/11/14 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
Seajs的学习笔记
2014/03/04 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
详解vscode中vue代码颜色插件
2018/10/11 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
微信小程序实现批量倒计时功能
2020/11/01 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
React服务端渲染原理解析与实践
2021/03/04 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
python爬虫之百度API调用方法
2017/06/11 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
Django权限控制的使用
2021/01/07 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers