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 相关文章推荐
C/S和B/S两种架构区别与优缺点分析
Oct 23 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
Jun 29 PHP
php统计数组元素个数的方法
Jul 02 PHP
crontab无法执行php的解决方法
Jan 25 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
PHP微信开发之模板消息回复
Jun 24 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
详细解读php的命名空间(一)
Feb 21 PHP
php实现微信支付之现金红包
May 30 PHP
PHP实现微信商户支付企业付款到零钱功能
Sep 30 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 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
帅气的琦玉老师
2020/03/02 日漫
PHP 事务处理数据实现代码
2010/05/13 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
JavaScript 字符串连接性能优化
2008/12/20 Javascript
js 日期转换成中文格式的函数
2009/07/07 Javascript
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
nodejs教程之入门
2014/11/21 NodeJs
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
2019/11/07 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
简短证婚人证婚词
2014/01/09 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
文明礼仪标语
2014/06/13 职场文书
2015元旦标语横幅
2014/12/09 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
muduo TcpServer模块源码分析
2022/04/26 Redis