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 相关文章推荐
Oracle Faq(Oracle的版本)
Oct 09 PHP
PHP file_get_contents 函数超时的几种解决方法
Jul 30 PHP
关于PHP语言构造器介绍
Jul 08 PHP
php检索或者复制远程文件的方法
Mar 13 PHP
ThinkPHP路由机制简介
Mar 23 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
浅析PHP7新功能及语法变化总结
Jun 17 PHP
利用PHP判断文件是否为图片的方法总结
Jan 06 PHP
PHP解决中文乱码
Apr 28 PHP
详细解读php的命名空间(一)
Feb 21 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
Apr 27 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 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
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
JavaScript 特殊字符
2007/04/05 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
微信小程序webSocket的使用方法
2020/02/20 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
Python yield 使用方法浅析
2017/05/20 Python
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
应届生求职推荐信
2013/10/28 职场文书
模具专业自荐信
2014/05/29 职场文书
宣传稿格式范文
2015/07/23 职场文书
初一数学教学反思
2016/02/17 职场文书
感谢信
2019/04/11 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android