PHP:微信公众号的红包发送功能
2016-03-25 21:37
363 查看
更新为v2.0 链接: http://pan.baidu.com/s/1o6rcvME 密码:
67bp
*说明参考续篇 http://snmoney.blog.163.com/blog/static/440058201582141547557/
使用公众号发送红包的准备工作(前提条件)
1.你需要有一个微信服务号(mp.weixin.qq.com 注册,订阅号不行)且进行了企业认证(才能满足下一个条件);
2. 需要申请一个微信商户号(pay.weixin.qq.com登录,需要发邮件申请注册,方法百度),且充值足够发红包用的资金;
3. 回微信公众平台(mp.weixin.qq.com) 完成【微信支付】的功能开通,然后打开【开发者中心】的开发模式。确认在下面接口权限的列表中 【功能服务->微信支付】 为已获得;
4. 从mp.weixin 中记录下微信号的 AppId(开发者中心);
5. 从pay.weixin 记录下商户号(账户概览)、商户的API秘钥(账户设置->API安全),下载API证书(账户设置->API安全),解压得到pem文件备用。
类用法
1. 用编辑器打开wxhongbao.class.php , 参考备注说明根据自己的微信号和商户号的信息设定前40行的变量;
2. 把类文件、pem证书(apiclient_cert.pem/ apiclient_key.pem),上传到相应的路径下;
3. 调用类,以下是一个简单的sample 。
include("wxhongbao.class.php");$usrWXOpenId = "123456987654"; //接收红包的用户的微信OpenId,捕获和辨识方法略~$hb = new WXHongBao();$hb->newhb($usrWXOpenId ,1000); //新建一个10元的红包,第二参数单位是 分,注意取值范围 1-200元//以下若干项可选操作,不指定则使用class脚本顶部的预设值 $hb->setNickName("土豪有限公司"); $hb->setSendName("王富贵"); $hb->setWishing("恭喜发财"); $hb->setActName("发钱活动"); $hb->setRemark("有钱!任性!");//发送红包if(!$hb->send()){ //发送错误 echo $hb->err();}else{ echo "红包发送成功";}
*推荐应用场景:可以在微信公众号的业务接口脚本中,对用户触发的按键、菜单或者交互事件作出响应。具体怎么用可以发挥自己的想象力额。
注意事项
1. act_name、nick_name、send_name 的接口限制是32字节,数据打包提交时中文编码后一个中文字占4字节,所以注意上述3项不要超过8个中文字;否则接口会返回错误。详尽的参数规范见文档 http://pay.weixin.qq.com/wiki/doc/api/cash_coupon.php?chapter=13_5
2. 金额的单位是分,合法取值范围是 100-20000(对应金额为1元~200元)
3.
-------------
*开发备忘(对类的源码构成没有兴趣深究的可以忽略本部分)
依据接口要求算法生成签名的时候返回一直报签名错!
原本的写法是
private function gen_Sign(){
unset($param); //将所有的变量构造成一个数组先
$param["act_name"]=$this->act_name;
... //过程略
$param["wxappid"]=$this->wxappid;
ksort($param); //按照键名排序,sign算法要求
$sign_raw = http_build_query($param); //数组转换串接
$sign_raw .= "&key=".$this->apikey; //黏附最后的api秘钥参数,sign算法要求
$this->sign = strtoupper(md5($sign_raw)); //md5之后转大写,sign算法要求
}
查半天!错误是因为 http_build_query 会对中文进行urlencode,而微信要求的是utf8的原文,难怪md5出来的值不一致!老老实实把数组转换串接的那一行改写,用foreach循环手动串接。就正确了
private function gen_Sign(){
unset($param); //将所有的变量构造成一个数组先
$param["act_name"]=$this->act_name;
... //过程略
$param["wxappid"]=$this->wxappid;
ksort($param); //按照键名排序,sign算法要求
//$sign_raw = http_build_query($param); //数组转换串接 $sign_raw = "";
foreach($param as $k => $v){
$sign_raw .= $k."=".$v."&";
}
$sign_raw .= "key=".$this->apikey; //黏附最后的api秘钥参数,sign算法要求
$this->sign = strtoupper(md5($sign_raw)); //md5之后转大写,sign算法要求
}
阅读(3339)| 评论(17)
67bp
*说明参考续篇 http://snmoney.blog.163.com/blog/static/440058201582141547557/
使用公众号发送红包的准备工作(前提条件)
1.你需要有一个微信服务号(mp.weixin.qq.com 注册,订阅号不行)且进行了企业认证(才能满足下一个条件);
2. 需要申请一个微信商户号(pay.weixin.qq.com登录,需要发邮件申请注册,方法百度),且充值足够发红包用的资金;
3. 回微信公众平台(mp.weixin.qq.com) 完成【微信支付】的功能开通,然后打开【开发者中心】的开发模式。确认在下面接口权限的列表中 【功能服务->微信支付】 为已获得;
4. 从mp.weixin 中记录下微信号的 AppId(开发者中心);
5. 从pay.weixin 记录下商户号(账户概览)、商户的API秘钥(账户设置->API安全),下载API证书(账户设置->API安全),解压得到pem文件备用。
类用法
1. 用编辑器打开wxhongbao.class.php , 参考备注说明根据自己的微信号和商户号的信息设定前40行的变量;
2. 把类文件、pem证书(apiclient_cert.pem/ apiclient_key.pem),上传到相应的路径下;
3. 调用类,以下是一个简单的sample 。
include("wxhongbao.class.php");$usrWXOpenId = "123456987654"; //接收红包的用户的微信OpenId,捕获和辨识方法略~$hb = new WXHongBao();$hb->newhb($usrWXOpenId ,1000); //新建一个10元的红包,第二参数单位是 分,注意取值范围 1-200元//以下若干项可选操作,不指定则使用class脚本顶部的预设值 $hb->setNickName("土豪有限公司"); $hb->setSendName("王富贵"); $hb->setWishing("恭喜发财"); $hb->setActName("发钱活动"); $hb->setRemark("有钱!任性!");//发送红包if(!$hb->send()){ //发送错误 echo $hb->err();}else{ echo "红包发送成功";}
*推荐应用场景:可以在微信公众号的业务接口脚本中,对用户触发的按键、菜单或者交互事件作出响应。具体怎么用可以发挥自己的想象力额。
注意事项
1. act_name、nick_name、send_name 的接口限制是32字节,数据打包提交时中文编码后一个中文字占4字节,所以注意上述3项不要超过8个中文字;否则接口会返回错误。详尽的参数规范见文档 http://pay.weixin.qq.com/wiki/doc/api/cash_coupon.php?chapter=13_5
2. 金额的单位是分,合法取值范围是 100-20000(对应金额为1元~200元)
3.
-------------
*开发备忘(对类的源码构成没有兴趣深究的可以忽略本部分)
依据接口要求算法生成签名的时候返回一直报签名错!
原本的写法是
private function gen_Sign(){
unset($param); //将所有的变量构造成一个数组先
$param["act_name"]=$this->act_name;
... //过程略
$param["wxappid"]=$this->wxappid;
ksort($param); //按照键名排序,sign算法要求
$sign_raw = http_build_query($param); //数组转换串接
$sign_raw .= "&key=".$this->apikey; //黏附最后的api秘钥参数,sign算法要求
$this->sign = strtoupper(md5($sign_raw)); //md5之后转大写,sign算法要求
}
查半天!错误是因为 http_build_query 会对中文进行urlencode,而微信要求的是utf8的原文,难怪md5出来的值不一致!老老实实把数组转换串接的那一行改写,用foreach循环手动串接。就正确了
private function gen_Sign(){
unset($param); //将所有的变量构造成一个数组先
$param["act_name"]=$this->act_name;
... //过程略
$param["wxappid"]=$this->wxappid;
ksort($param); //按照键名排序,sign算法要求
//$sign_raw = http_build_query($param); //数组转换串接 $sign_raw = "";
foreach($param as $k => $v){
$sign_raw .= $k."=".$v."&";
}
$sign_raw .= "key=".$this->apikey; //黏附最后的api秘钥参数,sign算法要求
$this->sign = strtoupper(md5($sign_raw)); //md5之后转大写,sign算法要求
}
阅读(3339)| 评论(17)
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表
- C语言实现的统计php代码行数功能源码(支持文件夹、多目录)
- php xml 入门学习资料