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 相关文章推荐
默默简单的写了一个模板引擎
Jan 02 PHP
php下HTTP Response中的Chunked编码实现方法
Nov 19 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 21 PHP
php disk_free_space 返回目录可用空间
May 10 PHP
二招解决php乱码问题
Mar 25 PHP
php模板函数 正则实现代码
Oct 15 PHP
PHP中对于浮点型的数据需要用不同的方法解决
Mar 11 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 PHP
yii的CURD操作实例详解
Dec 04 PHP
在Debian系统下配置LNMP的教程
Jul 09 PHP
PHP简单处理表单输入的特殊字符的方法
Feb 03 PHP
php读取本地json文件的实例
Mar 07 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
Javascript MD4
2006/12/20 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
vue 扩展现有组件的操作
2020/08/14 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
[19:15]DK战队纪录片
2014/09/02 DOTA
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
Python随机函数random()使用方法小结
2018/04/29 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
温泉秘密:Onsen Secret
2020/07/06 全球购物
通信专业个人自我鉴定
2013/10/21 职场文书
企业理念标语
2014/06/09 职场文书
春季运动会开幕词
2015/01/28 职场文书
大学教师个人总结
2015/02/10 职场文书
运动会通讯稿300字
2015/07/20 职场文书
深入解析NumPy中的Broadcasting广播机制
2021/05/30 Python
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫