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 相关文章推荐
用Zend Encode编写开发PHP程序
Oct 09 PHP
php 对输入信息的进行安全过滤的函数代码
Jun 29 PHP
基于PHP常用函数的用法详解
May 10 PHP
php cookie中点号(句号)自动转为下划线问题
Oct 21 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
Yii框架表单模型和验证用法
May 20 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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实现货币换算的方法
2014/11/29 PHP
PHP计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
PJBlog插件 防刷新的在线播放器
2006/10/25 Javascript
删除重复数据的算法
2006/11/23 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
Vue异步加载about组件
2017/10/31 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
python发送邮件接收邮件示例分享
2014/01/21 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
深入解析Python编程中super关键字的用法
2016/06/24 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
软件测试企业面试试卷
2016/07/13 面试题
毕业生就业自荐书
2013/12/15 职场文书
村委会贫困证明范文
2014/09/21 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
教师个人师德总结
2015/02/06 职场文书
干部培训工作总结2015
2015/05/25 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python