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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
与文件上传有关的php配置参数总结
Jun 14 PHP
php.ini 配置文件的深入解析
Jun 17 PHP
php使用百度天气接口示例
Apr 22 PHP
PHP实现事件机制的方法
Jul 10 PHP
php简单创建zip压缩文件的方法
Apr 30 PHP
php的api数据接口书写实例(推荐)
Sep 22 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
thinkphp自定义权限管理之名称判断方法
Apr 01 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
PHP PDOStatement::columnCount讲解
Jan 30 PHP
PHP的介绍以及优势详细分析
Sep 05 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
PHP 文件系统详解
2012/09/13 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
BootStrap 动态表单效果
2017/06/02 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
Python中实现对list做减法操作介绍
2015/01/09 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
Python属性和内建属性实例解析
2020/01/14 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
Python中过滤字符串列表的方法
2020/12/22 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
应用艺术毕业生的自我评价
2013/12/04 职场文书
大学生毕业的自我评价分享
2014/01/02 职场文书
财务会计专业个人求职信范本
2014/01/08 职场文书
高级销售求职信
2014/02/21 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
小学生读书笔记
2015/07/01 职场文书
2015中学教学工作总结
2015/07/22 职场文书
创业计划书之酒店
2019/08/30 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
Go语言并发编程 sync.Once
2021/10/16 Golang