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 相关文章推荐
1.PHP简介
Oct 09 PHP
在php中取得image按钮传递的name值
Oct 09 PHP
PHP个人网站架设连环讲(三)
Oct 09 PHP
php中根据变量的类型 选择echo或dump
Jul 05 PHP
php不写闭合标签的好处
Mar 04 PHP
php通过数组实现多条件查询实现方法(字符串分割)
May 06 PHP
php去除数组中重复数据
Nov 18 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 PHP
PHP验证码无法显示的原因及解决办法
Aug 11 PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
详解PHP Swoole与TCP三次握手
May 27 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
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
Extjs 几个方法的讨论
2010/01/28 Javascript
基于jquery的监控数据是否发生改变
2011/04/11 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
wxPython学习之主框架实例
2014/09/28 Python
python中反射用法实例
2015/03/27 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
Python实现快速计算词频功能示例
2018/06/25 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
应用化学专业本科生求职信
2013/09/29 职场文书
董事长秘书岗位职责
2013/11/29 职场文书
创业计划书的主要内容有哪些
2014/01/29 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
导游词之安徽九华山
2019/09/18 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
源码分析Redis中 set 和 sorted set 的使用方法
2022/03/22 Redis
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技
DQL数据查询语句使用示例
2022/12/24 MySQL