php实现微信企业付款到个人零钱功能


Posted in PHP onOctober 09, 2018

本文实例为大家分享了php微信企业付款到个人零钱的具体代码,供大家参考,具体内容如下

1.基本配置

//公众账号appid
 $data["mch_appid"] = 'appid';
//商户号 
 $data["mchid"] = '';
//随机字符串 
 $data["nonce_str"] = 'suiji'.mt_rand(100,999); 
//商户订单号 
 $data["partner_trade_no"]=date('YmdHis').mt_rand(1000,9999); 
//金额 用户输入的提现金额需要乘以100  
 $data["amount"] = $money; 
//企业付款描述
 $data["desc"] = '企业付款到个人零钱'; 
//用户openid   
 $data["openid"] = $openid; 
//不检验用户姓名  
 $data["check_name"] = 'NO_CHECK'; 
//获取IP  
 $data['spbill_create_ip']=$_SERVER['SERVER_ADDR']; 
//商户密钥 
 $data['key']='';
//商户证书 商户平台的API安全证书下载
 $data['apiclient_cert.pem']
 $data['apiclient_key.pem']

2.PHP代码

/**
**开始支付
/
 public function userpay(){
 $money = ‘用户输入提现金额';
 $info['money'] = ‘用户余额';
 if ($this->openid && $money){
  if ($money>$info['money'] ){
  echo json_encode([
   'status' => 1,
   'message' => '余额不足,不能提现!',
   'code'=>'余额不足,不能提现!'
  ]);
  }elseif ($money<1){
  echo json_encode([
   'status' => 2,
   'message' => '提现金额不能小于1元',
   'code'=>'提现金额太低'
  ]);
  }else{
 $openid = $this->openid;
 $trade_no = date('YmdHis').mt_rand(1000,9999);
 $res = $this->pay($openid,$trade_no,$money*100,'微信提现');

 //结果打印
 if($res['result_code']=="SUCCESS"){

   echo json_encode([
   'status' => 3,
   'message' => '提现成功!',
   ]);
  }elseif ($res['err_code']=="SENDNUM_LIMIT"){
   echo json_encode([
   'status' => 4,
   'message' => '提现失败!',
   'code'=>'每日仅能提现一次',
   ]);
  }else{
   echo json_encode([
   'status' => 5,
   'message' => '提现失败!',
   'code'=>$res['err_code'],
   ]);
  }
  }
 }else{
  echo json_encode([
  'status' => 5,
  'message' => '未检测到您当前微信账号~',

  ]);
 }
 }
/**
*支付方法
/
public function pay($openid,$trade_no,$money,$desc){
 $params["mch_appid"]=''; 
 $params["mchid"] = ''; 
 $params["nonce_str"]= 'suiji'.mt_rand(100,999); 
 $params["partner_trade_no"] = $trade_no;  
 $params["amount"]= $money;  
 $params["desc"]= $desc;  
 $params["openid"]= $openid;  
 $params["check_name"]= 'NO_CHECK'; 
 $params['spbill_create_ip'] = $_SERVER['SERVER_ADDR']; 

 //生成签名
 $str = 'amount='.$params["amount"].'&check_name='.$params["check_name"].'&desc='.$params["desc"].'&mch_appid='.$params["mch_appid"].'&mchid='.$params["mchid"].'&nonce_str='.$params["nonce_str"].'&openid='.$params["openid"].'&partner_trade_no='.$params["partner_trade_no"].'&spbill_create_ip='.$params['spbill_create_ip'].'&key=商户密钥';

 //md5加密 转换成大写
 $sign = strtoupper(md5($str));
 //生成签名
 $params['sign'] = $sign;

 //构造XML数据
 $xmldata = $this->array_to_xml($params); //数组转XML
 $url='https://api.mch.weixin.qq.com/mmpaymkttransfers/prom otion/transfers';

 //发送post请求
 $res = $this->curl_post_ssl($url, $xmldata); //curl请求 
 if(!$res){
 return array('status'=>1, 
   'msg'=>"服务器连接失败" );
 }

 //付款结果分析
 $content = $this->xml_to_array($res); //xml转数组
 return $content;
 }
/**
* curl请求
/
public function curl_post_ssl($url, $xmldata,  $second=30,$aHeader=array()){
 $ch = curl_init();
 //超时时间
 curl_setopt($ch,CURLOPT_TIMEOUT,$second);
 curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
 //这里设置代理,如果有的话
 //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
 //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

 //默认格式为PEM,可以注释
 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
//绝对地址可使用 dirname(__DIR__)打印,如果不是绝对地址会报 58 错误
 curl_setopt($ch,CURLOPT_SSLCERT,' 绝对地址/apiclient_cert.pem');
 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
 curl_setopt($ch,CURLOPT_SSLKEY,'绝对地址/apiclient_key.pem');
 if( count($aHeader) >= 1 ){
  curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
 }
 curl_setopt($ch,CURLOPT_POST, 1);
 curl_setopt($ch,CURLOPT_POSTFIELDS,$xmldata);
 $data = curl_exec($ch);
 if($data){
 curl_close($ch);
 return $data;
 }
 else {
 $error = curl_errno($ch);
 echo "call faild, errorCode:$error\n";
 die();
 curl_close($ch);
 return false;
 }
 }
/**
 * array 转 xml
 * 用于生成签名
*/
public function array_to_xml($arr){
 $xml = "<xml>";
 foreach ($arr as $key => $val) {
 if (is_numeric($val)) {
 $xml .= "<" .$key.">".$val."</".$key.">";
 } else
 $xml .= "<".$key."><![CDATA[".$val."]]></".$key.">";
 }
 $xml .= "</xml>";
 return $xml;
 }
/**
* xml 转化为array
*/
public function xml_to_array($xml){
 //禁止引用外部xml实体
 libxml_disable_entity_loader(true);
 $values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
 return $values;
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
基于mysql的论坛(1)
Oct 09 PHP
php创建多级目录代码
Jun 05 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
Aug 24 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
深入探究PHP的多进程编程方法
Aug 18 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
May 20 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
PHP大文件分片上传的实现方法
Oct 28 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
Oct 09 PHP
php实现构建排除当前元素的乘积数组方法
Oct 06 #PHP
php微信公众号开发之微信企业付款给个人
Oct 04 #PHP
PHP获取当前系统时间的方法小结
Oct 03 #PHP
PHP格式化显示时间date()函数代码
Oct 03 #PHP
php实现微信企业转账功能
Oct 02 #PHP
PHP实现微信退款功能
Oct 02 #PHP
PHP实现微信申请退款功能
Oct 01 #PHP
You might like
图形数字验证代码
2006/10/09 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
Laravel模型事件的实现原理详解
2018/03/14 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
javascript下数值型比较难点说明
2010/06/07 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
Python实现从百度API获取天气的方法
2015/03/11 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
职高毕业生自我鉴定
2013/10/21 职场文书
工厂会计员职责
2014/02/06 职场文书
销售主管岗位职责
2014/02/08 职场文书
企业文化宣传标语
2014/06/09 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
2014财务年度工作总结
2014/11/11 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
使用JS实现简易计算器
2021/06/14 Javascript