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 相关文章推荐
一个从别的网站抓取信息的例子(域名查询)
Oct 09 PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
浅谈PHP强制类型转换,慎用!
Jun 06 PHP
php生成短网址示例
May 05 PHP
PHP获取时间排除周六、周日的两个方法
Jun 30 PHP
CI框架Session.php源码分析
Nov 03 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
使用Thinkphp框架开发移动端接口
Aug 05 PHP
php实现Mysql简易操作类
Oct 11 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
laravel框架实现去掉URL中index.php的方法
Oct 12 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
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
两行代码轻松搞定JavaScript日期验证
2016/08/03 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
实践Vim配置python开发环境
2018/07/02 Python
django富文本编辑器的实现示例
2019/04/10 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
大专毕业生自我评价分享
2013/11/10 职场文书
入党申请自荐书范文
2014/02/11 职场文书
四查四看剖析材料
2014/02/14 职场文书
党支部综合考察材料
2014/05/19 职场文书
求职信内容怎么写
2014/05/26 职场文书
中央空调节能方案
2014/06/15 职场文书
植树造林的宣传标语
2014/06/23 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
病危通知单
2015/04/17 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书