PHP开发的微信现金红包功能示例


Posted in PHP onJune 29, 2017

本文实例讲述了PHP开发的微信现金红包功能。分享给大家供大家参考,具体如下:

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

sdk

<?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 相关文章推荐
PHP MemCached 高级缓存应用代码
Aug 05 PHP
分享一个PHP数据流应用的简单例子
Jun 01 PHP
php获取目录所有文件并将结果保存到数组(实例)
Oct 25 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
php实现的微信红包算法分析(非官方)
Sep 25 PHP
PHP实现二维数组根据key进行排序的方法
Dec 30 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
Yii框架日志记录Logging操作示例
Jul 12 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 PHP
laravel 中某一字段自增、自减的例子
Oct 11 PHP
YII2框架中behavior行为的理解与使用方法示例
Mar 13 PHP
swoole锁的机制代码实例讲解
Mar 04 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 #PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 #PHP
Symfony2针对输入时间进行查询的方法分析
Jun 28 #PHP
Symfony查询方法实例小结
Jun 28 #PHP
关于PHP转换超过2038年日期出错的问题解决
Jun 28 #PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 #PHP
php的常量和变量实例详解
Jun 27 #PHP
You might like
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
Python实现发送email的几种常用方法
2014/08/18 Python
Python 26进制计算实现方法
2015/05/28 Python
python生成验证码图片代码分享
2016/01/28 Python
python读写LMDB文件的方法
2018/07/02 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
python批量处理txt文件的实例代码
2020/01/13 Python
python如何求100以内的素数
2020/05/27 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
元旦文艺汇演主持词
2014/03/26 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
村党支部书记承诺书
2014/05/29 职场文书
新学期标语
2014/06/30 职场文书
护理工作个人总结
2015/03/03 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers