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学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
php定时计划任务的实现方法详解
Jun 06 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
PHPThumb图片处理实例
May 03 PHP
php实现可用于mysql,mssql,pg数据库操作类
Dec 13 PHP
PHP中调用SVN命令更新网站方法
Jan 07 PHP
PHP动态输出JavaScript代码实例
Feb 12 PHP
PHP书写格式详解(必看)
May 23 PHP
Laravel重写用户登录简单示例
Oct 08 PHP
php7 安装yar 生成docker镜像
May 09 PHP
PHP中常见的密码处理方式和建议总结
Oct 14 PHP
Memcached介绍及php-memcache扩展安装
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实现维护文件代码
2007/06/14 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
Angular 实现输入框中显示文章标签的实例代码
2018/11/07 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
python双向链表实现实例代码
2013/11/21 Python
初步剖析C语言编程中的结构体
2016/01/16 Python
Python制作Windows系统服务
2017/03/25 Python
python机器学习实战之K均值聚类
2017/12/20 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
高校教师岗位职责
2014/03/18 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS
Python实现Hash算法
2022/03/18 Python
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技