php版微信发红包接口用法示例


Posted in PHP onSeptember 23, 2016

本文实例讲述了php版微信发红包接口用法。分享给大家供大家参考,具体如下:

微信红包功能我相信各位朋友都知道吧,但如果我们要把红包集成到网站那么要如何来做呢?这里小编就来为各位分享一个php 微信发红包接口测试实例,希望文章能够帮助到各位朋友

下面是一个类,使用方法:

$arr['openid']='ojgTTt8oF9VdYcGsJMACHpA-jy1U';
      $arr['hbname']="提现申请";
      $arr['body']="您的提现申请已经成功";
      $arr['fee']=1;
$comm = new Common_util_pub();
$re = $comm->sendhongbaoto($arr);
var_dump($re);

注意证书位置和 商户后台设置的key需要修改.

<?php
header("Content-type: text/html; charset=utf-8");
class Common_util_pub
{
  /**
* hbname 红包名称 fee 红包金额 /元 body 内容 openid 微信用户id
* @param undefined $arr
*
* @return
*/
public function sendhongbaoto($arr){
//$comm = new Common_util_pub();
$data['mch_id'] = '120005402';
$data['mch_billno'] = '120005402'.date("Ymd",time()).date("His",time()).rand(1111,9999);
$data['nonce_str'] = self::createNoncestr();
$data['re_openid'] = $arr['openid'];
$data['wxappid'] = 'wx8axxxxxbac4905';
$data['nick_name'] = $arr['hbname'];
$data['send_name'] = $arr['hbname'];
$data['total_amount'] = $arr['fee']*100;
$data['min_value'] = $arr['fee']*100;
$data['max_value'] = $arr['fee']*100;
$data['total_num'] = 1;
$data['client_ip'] = $_SERVER['REMOTE_ADDR'];
$data['act_name'] = '测试活动';
$data['remark'] = '备注一下';
$data['wishing'] = $arr['body'];
if(!$data['re_openid']) {
   $rearr['return_msg']='缺少用户openid';
   return $rearr;
}
$data['sign'] = self::getSign($data);
$xml = self::arrayToXml($data);
//var_dump($xml);
$url ="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
$re = self::wxHttpsRequestPem($xml,$url);
$rearr = self::xmlToArray($re);
return $rearr;
}
function trimString($value)
  {
    $ret = null;
    if (null != $value)
    {
      $ret = $value;
      if (strlen($ret) == 0)
      {
        $ret = null;
      }
    }
    return $ret;
  }
  /**
   * 作用:产生随机字符串,不长于32位
   */
  public function createNoncestr( $length = 32 )
  {
    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
    $str ="";
    for ( $i = 0; $i < $length; $i++ ) {
      $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
    }
    return $str;
  }
  /**
   * 作用:格式化参数,签名过程需要使用
   */
  function formatBizQueryParaMap($paraMap, $urlencode)
  {
    $buff = "";
    ksort($paraMap);
    foreach ($paraMap as $k => $v)
    {
      if($urlencode)
      {
        $v = urlencode($v);
      }
      //$buff .= strtolower($k) . "=" . $v . "&";
      $buff .= $k . "=" . $v . "&";
    }
    $reqPar;
    if (strlen($buff) > 0)
    {
      $reqPar = substr($buff, 0, strlen($buff)-1);
    }
    return $reqPar;
  }
  /**
   * 作用:生成签名
   */
  public function getSign($Obj)
  {
    foreach ($Obj as $k => $v)
    {
      $Parameters[$k] = $v;
    }
    //签名步骤一:按字典序排序参数
    ksort($Parameters);
    $String = $this->formatBizQueryParaMap($Parameters, false);
    //echo '【string1】'.$String.'</br>';
    //签名步骤二:在string后加入KEY
    $String = $String."&key="."254554sefg4exxxxxxxxs5cds1"; // 商户后台设置的key
    //echo "【string2】".$String."</br>";
    //签名步骤三:MD5加密
    $String = md5($String);
    //echo "【string3】 ".$String."</br>";
    //签名步骤四:所有字符转为大写
    $result_ = strtoupper($String);
    //echo "【result】 ".$result_."</br>";
    return $result_;
  }
  /**
   * 作用:array转xml
   */
  public 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;
  }
  /**
   * 作用:将xml转为array
   */
  public function xmlToArray($xml)
  {
    //将XML转为array
    $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
    return $array_data;
  }
   public function wxHttpsRequestPem( $vars,$url, $second=30,$aHeader=array()){
        $ch = curl_init();
        //超时时间
        curl_setopt($ch,CURLOPT_TIMEOUT,$second);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
        //这里设置代理,如果有的话
        //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
        //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
        //以下两种方式需选择一种
        //第一种方法,cert 与 key 分别属于两个.pem文件
        //默认格式为PEM,可以注释
        curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
        curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).'/hongbao/apiclient_cert.pem');
        //默认格式为PEM,可以注释
        curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
        curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).'/hongbao/apiclient_key.pem');
        curl_setopt($ch,CURLOPT_CAINFO,'PEM');
        curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/hongbao/rootca.pem');
        //第二种方式,两个文件合成一个.pem文件
        //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.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;
        }
    }
}
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
在PHP的图形函数中显示汉字
Oct 09 PHP
第七节 类的静态成员 [7]
Oct 09 PHP
PHP学习笔记之二
Jan 17 PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
php获取apk包信息的方法
Aug 15 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
php使用session二维数组实例
Nov 06 PHP
PHP MPDF中文乱码的解决方式
Dec 08 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
php-7.3.6 编译安装过程
Feb 11 PHP
用php如何解决大文件分片上传问题
Jul 07 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 #PHP
php版微信自动登录并获取昵称的方法
Sep 23 #PHP
php中使用websocket详解
Sep 23 #PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 #PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
Sep 23 #PHP
thinkphp制作404跳转页的简单实现方法
Sep 22 #PHP
thinkphp3.2.3版本的数据库增删改查实现代码
Sep 22 #PHP
You might like
php中++i 与 i++ 的区别
2012/08/08 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
JavaScript访问样式表代码
2010/10/15 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
React组件生命周期详解
2017/07/03 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
python连接字符串的方法小结
2015/07/13 Python
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
python基于openpyxl生成excel文件
2020/12/23 Python
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
银行求职推荐信范文
2013/11/30 职场文书
2014年道德讲堂实施方案
2014/03/05 职场文书
放飞理想演讲稿
2014/09/09 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
广播体操比赛主持词
2015/06/29 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS