PHP微信红包API接口


Posted in PHP onDecember 05, 2015

首先给大家看一看这个表格:

PHP微信红包API接口

根据微信高级红包接口,开发PHP版本的API接口,现在进行主要代码分析。

红包接口调用请求代码,所有请求参数为必填参数与文档对应:

class Wxapi {
 private $app_id = 'wxXXXXXXXXXXXX'; //公众账号appid,首先申请与之配套的公众账号
 private $app_secret = 'XXXXXXXXXXXXXXXXXXXXXXXX';//公众号secret,用户获取用户授权token
 private $app_mchid = 'XXXXXXXX';//商户号id
 function __construct(){
 //do sth here....
 }
 /**
  * 微信支付
  * @param string $openid 用户openid
  */
 public function pay($re_openid)
 {
  include_once('WxHongBaoHelper.php');
  $commonUtil = new CommonUtil();
  $wxHongBaoHelper = new WxHongBaoHelper();
  $wxHongBaoHelper->setParameter("nonce_str", $this->great_rand());//随机字符串,丌长于 32 位
  $wxHongBaoHelper->setParameter("mch_billno", $this->app_mchid.date('YmdHis').rand(1000, 9999));//订单号
  $wxHongBaoHelper->setParameter("mch_id", $this->app_mchid);//商户号
  $wxHongBaoHelper->setParameter("wxappid", $this->app_id);
  $wxHongBaoHelper->setParameter("nick_name", '红包');//提供方名称
  $wxHongBaoHelper->setParameter("send_name", '红包');//红包发送者名称
  $wxHongBaoHelper->setParameter("re_openid", $re_openid);//相对于医脉互通的openid
  $wxHongBaoHelper->setParameter("total_amount", 100);//付款金额,单位分
  $wxHongBaoHelper->setParameter("min_value", 100);//最小红包金额,单位分
  $wxHongBaoHelper->setParameter("max_value", 100);//最大红包金额,单位分
  $wxHongBaoHelper->setParameter("total_num", 1);//红包?Х抛苋耸
  $wxHongBaoHelper->setParameter("wishing", '感谢您参与红包派发活动,祝您新年快乐!');//红包祝福诧
  $wxHongBaoHelper->setParameter("client_ip", '127.0.0.1');//调用接口的机器 Ip 地址
  $wxHongBaoHelper->setParameter("act_name", '红包活动');//活劢名称
  $wxHongBaoHelper->setParameter("remark", '快来抢!');//备注信息
  $postXml = $wxHongBaoHelper->create_hongbao_xml();
  $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
  $responseXml = $wxHongBaoHelper->curl_post_ssl($url, $postXml);
  //用作结果调试输出
  //echo htmlentities($responseXml,ENT_COMPAT,'UTF-8');
 $responseObj = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);
 return $responseObj->return_code;
 }

获取随机字符串方法:

/**
 * 生成随机数
 */  
public function great_rand(){
 $str = '1234567890abcdefghijklmnopqrstuvwxyz';
 for($i=0;$i<30;$i++){
  $j=rand(0,35);
  $t1 .= $str[$j];
 }
 return $t1; 
}

 签名算法:

/**
例如:
appid: wxd111665abv58f4f
mch_id: 10000100
device_info: 1000
Body: test
nonce_str: ibuaiVcKdpRxkhJA
第一步:对参数按照 key=value 的格式,并按照参数名 ASCII 字典序排序如下:
stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_i
d=10000100&nonce_str=ibuaiVcKdpRxkhJA";
第二步:拼接支付密钥:
stringSignTemp="stringA&key=192006250b4c09247ec02edce69f6a2d"
sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A
9CF3B7"
*/
protected function get_sign(){
 define('PARTNERKEY',"QSRXXXXXXXXXXXXXXXXXXXXX");
 try {
  if (null == PARTNERKEY || "" == PARTNERKEY ) {
   throw new SDKRuntimeException("密钥不能为空!" . "<br>");
  }
  if($this->check_sign_parameters() == false) { //检查生成签名参数
   throw new SDKRuntimeException("生成签名参数缺失!" . "<br>");
  }
  $commonUtil = new CommonUtil();
  ksort($this->parameters);
  $unSignParaString = $commonUtil->formatQueryParaMap($this->parameters, false);
  $md5SignUtil = new MD5SignUtil();
  return $md5SignUtil->sign($unSignParaString,$commonUtil->trimString(PARTNERKEY));
 }catch (SDKRuntimeException $e)
 {
  die($e->errorMessage());
 }
 
}

CURL请求以及发送证书:

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;
 }
}

入口文件:

@require "pay.php";
//获取用户信息
$get = $_GET['param'];
$code = $_GET['code'];
//判断code是否存在
if($get=='access_token' && !empty($code)){
 $param['param'] = 'access_token';
 $param['code'] = $code;
 $packet = new Packet();
 //获取用户openid信息
 $userinfo = $packet->_route('userinfo',$param);
 if(empty($userinfo['openid'])){
  exit("NOAUTH");
 }
 //调取支付方法
 $packet->_route('wxpacket',array('openid'=>$userinfo['openid']));
}else{
 $packet->_route('userinfo');
}

以上就是关于PHP微信红包API接口的详细代码,分享给大家,希望对大家的学习有所帮助。

PHP 相关文章推荐
建立动态的WML站点(二)
Oct 09 PHP
一个取得文件扩展名的函数
Oct 09 PHP
php empty() 检查一个变量是否为空
Nov 10 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
CI框架中cookie的操作方法分析
Dec 12 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
PHP图片加水印实现方法
May 06 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
常用PHP封装分页工具类
Jan 14 PHP
php使用crypt()函数进行加密
Jun 08 PHP
PHP Swoole异步读取、写入文件操作示例
Oct 24 PHP
php实现微信发红包
Dec 05 #PHP
详解php比较操作符的安全问题
Dec 03 #PHP
thinkPHP模型初始化实例分析
Dec 03 #PHP
ZF框架实现发送邮件的方法
Dec 03 #PHP
PHP实现的蚂蚁爬杆路径算法代码
Dec 03 #PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 #PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 #PHP
You might like
使用PHP制作新闻系统的思路
2006/10/09 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
CI框架Session.php源码分析
2014/11/03 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
js select常用操作控制代码
2010/03/16 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
2016/05/10 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
Python如何调用JS文件中的函数
2019/08/16 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
python如何调用java类
2020/07/05 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
公务员保密承诺书
2014/03/27 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
安全第一课观后感
2015/06/18 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers