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 相关文章推荐
Php获取金书网的书名的实现代码
Jun 11 PHP
PHP异步调用socket实现代码
Jan 12 PHP
php打开文件fopen函数的使用说明
Jul 05 PHP
PHP将XML转数组过程详解
Nov 13 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
用PHP代码给图片加水印
Jul 01 PHP
php上传图片获取路径及给表单字段赋值的方法
Jan 23 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
php中curl和soap方式请求服务超时问题的解决
Jun 11 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 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
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
PHP常用的三种设计模式
2017/02/17 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
多个checkbox被选中时如何判断是否有自己想要的
2014/09/22 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
原生JS轮播图插件
2017/02/09 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
python比较2个xml内容的方法
2015/05/11 Python
Python上下文管理器和with块详解
2017/09/09 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
谈谈python垃圾回收机制
2020/09/27 Python
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
西式婚礼证婚词
2014/01/12 职场文书
公司门卫管理制度
2014/02/01 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
美丽人生观后感
2015/06/03 职场文书
毕业实习单位意见
2015/06/04 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang