php实现微信发红包功能


Posted in PHP onJuly 13, 2018

本文实例为大家分享了php实现微信发红包功能的具体代码,供大家参考,具体内容如下

微信商家后台-现金红包开发:

<?php
class wxPay {
  //配置参数信息
  const SHANGHUHAO = "1430998xxx";//商户号
  const PARTNERKEY = "leFyTOXWzUEXxfp47WOu5d9xxxxxx";  //api,商户后台
  //核心支付函数,参数:请求地址和参数
  function pay($url,$obj) {
    $obj['nonce_str'] = $this->create_noncestr();  //创建随机字符串
    $stringA = $this->create_qianming($obj,false);  //创建签名
    $stringSignTemp = $stringA."&key=leFyTOXWzUEXxfp47WOu5xxxxxx";  //签名后加api
    $sign = strtoupper(md5($stringSignTemp));  //签名加密并大写
    $obj['sign'] = $sign;  //将签名传入数组
    $postXml = $this->arrayToXml($obj);  //将参数转为xml格式
    var_dump($postXml);  
    $responseXml = $this->curl_post_ssl($url,$postXml);  //提交请求
    var_dump($responseXml);
    return $responseXml;
  }
  
  //生成签名,参数:生成签名的参数和是否编码
  function create_qianming($arr,$urlencode) {
    $buff = "";
    ksort($arr); //对传进来的数组参数里面的内容按照字母顺序排序,a在前面,z在最后(字典序)
    foreach ($arr as $k=>$v) {
      if(null!=$v && "null" != $v && "sign" != $k) {  //签名不要转码
        if ($urlencode) {
          $v = urlencode($v);
        }
        $buff.=$k."=".$v."&";
      }
    }
    if (strlen($buff)>0) {  
      $reqPar = substr($buff,0,strlen($buff)-1); //去掉末尾符号“&”
    }
    return $reqPar;
  }
  
  //生成随机字符串,默认32位
  function create_noncestr($length=32) {
    //创建随机字符
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    $str = "";
    for($i=0;$i<$length;$i++) {
      $str.=substr($chars, mt_rand(0,strlen($chars)-1),1);
    }
    return $str;  
  }
  //数组转xml
  function arrayToXml($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;
  }
  
  //post请求网站,需要证书
  function curl_post_ssl($url, $vars, $second=30,$aHeader=array())
  {
    $ch = curl_init();
    //超时时间
    curl_setopt($ch,CURLOPT_TIMEOUT,$second);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
    //这里设置代理,如果有的话
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
    //cert 与 key 分别属于两个.pem文件
    //请确保您的libcurl版本是否支持双向认证,版本高于7.20.1
    curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR.
        'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_cert.pem');
    curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR.
        'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_key.pem');
    curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR.
        'zhengshu'.DIRECTORY_SEPARATOR.'rootca.pem');
    if( count($aHeader) >= 1 ){
      curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
    }
    curl_setopt($ch,CURLOPT_POST, 1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
    $data = curl_exec($ch);
    if($data){
      curl_close($ch);
      return $data;
    }
    else {
      $error = curl_errno($ch);
      echo "call faild, errorCode:$error\n";
      curl_close($ch);
      return false;
    }
  }
  
}

证书文件:

请在微信商户后台-API安全下载,PHP请使用php的证书文件

微信红包调用测试文件:

<?php
require 'wxpay.class.php';<br><br>//数组参数
$money = 100; //最低1元,单位分
$sender = "晨缘房产";
$obj2 = array();
$obj2['wxappid'] = ""; //appid
$obj2['mch_id'] = "";//商户id
$obj2['mch_billno'] = "商户id".date('YmdHis').rand(1000,9999);//组合成28位,根据官方开发文档,可以自行设置
$obj2['client_ip'] = $_SERVER['REMOTE_ADDR'];
$obj2['re_openid'] = "oUxO6v26wdyMHThD9kfDW6NB_xbE";//接收红包openid
$obj2['total_amount'] = $money;
$obj2['min_value'] = $money;
$obj2['max_value'] = $money;
$obj2['total_num'] = 1;
$obj2['nick_name'] = $sender;
$obj2['send_name'] = $sender;
$obj2['wishing'] = "恭喜发财";
$obj2['act_name'] = $sender."红包";
$obj2['remark'] = $sender."红包";
 
$url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
$wxpay = new wxPay();
$res = $wxpay->pay($url, $obj2);
var_dump($res);

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

PHP 相关文章推荐
功能齐全的PHP发送邮件类代码附详细说明
Jul 10 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
May 23 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 PHP
php中chdir()函数用法实例
Nov 13 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
mac pecl 安装php7.1扩展教程
Oct 17 PHP
php 使用 __call实现重载功能示例
Nov 18 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
May 01 PHP
thinkphp5 redis缓存新增方法实例讲解
Mar 24 PHP
Yii2框架redis基本应用示例
Jul 13 #PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 #PHP
Yii框架日志记录Logging操作示例
Jul 12 #PHP
php unlink()函数使用教程
Jul 12 #PHP
总结PHP代码规范、流程规范、git规范
Jun 18 #PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 #PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 #PHP
You might like
PHP安装攻略:常见问题解答(二)
2006/10/09 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
Javascript中的delete介绍
2012/09/02 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
python实现定时播放mp3
2015/03/29 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
Python定时器实例代码
2017/11/01 Python
python画双y轴图像的示例代码
2019/07/07 Python
python将数组n等分的实例
2019/12/02 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
Python中的__init__作用是什么
2020/06/09 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
青年标兵事迹材料
2014/08/16 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
小学元宵节活动总结
2015/02/06 职场文书
python全面解析接口返回数据
2022/02/12 Python
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers