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 相关文章推荐
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
Aug 26 PHP
深入Memcache的Session数据的多服务器共享详解
Jun 13 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
PHP如何通过AJAX方式实现登录功能
Nov 23 PHP
PHP简单读取PDF页数的实现方法
Jul 21 PHP
PHP session会话操作技巧小结
Sep 27 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
php实现的mysqldb读写分离操作类示例
Feb 07 PHP
PHP获取数组中单列值的方法
Jun 10 PHP
php批量转换文件夹下所有文件编码的函数类
Aug 06 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 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
一个基于PDO的数据库操作类
2011/03/24 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
js 自定义的联动下拉框
2010/02/07 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
js单例模式的两种方案
2013/10/22 Javascript
JavaScript判断DIV内容是否为空的方法
2016/01/29 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
js获取ip和地区
2017/03/10 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
JS实现图片切换效果
2018/11/17 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
Django自定义分页效果
2017/06/27 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
python如何调用php文件中的函数详解
2020/12/29 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
委托证明书
2014/09/17 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
单位租房协议范本
2014/12/03 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
终止合同协议书范本
2016/03/22 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python
JS实现九宫格拼图游戏
2022/06/28 Javascript