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中文汉字验证码
Apr 08 PHP
php在线生成ico文件的代码
Oct 09 PHP
php5数字型字符串加解密代码
Apr 24 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
Yii编程开发常见调用技巧集锦
Jul 15 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 PHP
ThinkPHP删除栏目(实现批量删除栏目)
Jun 21 PHP
PHP基于Closure类创建匿名函数的方法详解
Aug 17 PHP
php中关于换行的实例写法
Sep 26 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
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
ASP知识讲座四
2006/10/09 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
PHP中常用的转义函数
2014/02/28 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
vue - props 声明数组和对象操作
2020/07/30 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
Ejb技术面试题
2015/04/29 面试题
支教自我鉴定
2014/01/18 职场文书
2014年创卫实施方案
2014/02/18 职场文书
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis
学会Python数据可视化必须尝试这7个库
2021/06/16 Python
Python基于百度API识别并提取图片中文字
2021/06/27 Python
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS