微信公众号开发(一)--公众号关注推送
来源:互联网 发布:上古卷轴5天际捏脸数据 编辑:程序博客网 时间:2024/05/18 02:00
用户关注公众号回调
参考资料
- 微信公众平台
- 微信公众号开发文档
基本信息
- AppID:开发者ID,微信公众号的唯一标识
- AppSecret:开发者密码,操作微信公众号的验证
- IP白名单:获取access_token时,需要IP白名单才可以获取
- OpenID:微信用户在当前公众号的唯一标识
- UnionID:微信用户在当前开放平台账号的所有公众号和应用情景下的唯一标识
- 服务器配置:
(1)地址:配置以后,用户对公众号的操作(关注、发消息),微信会转到该链接
(2)令牌:用作生成签名
(3)密钥:消息加密
官方文档教程
7.验证服务器地址,6(1) 配置时要在链接下,原样输出微信发送GET请求的参数echostr,验证成功过后,才能配置完成。
公众号关注后的推送
- 在上一步的服务器地址中,加入以下代码
(1) 接口加密,官方PHP-DEMO
include_once "wxBizMsgCrypt.php";// 第三方发送消息给公众平台$encodingAesKey = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG";$token = "pamtest";$timeStamp = "1409304348";$nonce = "xxxxxx";$appId = "wxb11529c136998cb6";$text = "<xml><ToUserName><![CDATA[oia2Tj我是中文jewbmiOUlr6X-1crbLOvLw]]></ToUserName><FromUserName><![CDATA[gh_7f083739789a]]></FromUserName><CreateTime>1407743423</CreateTime><MsgType><![CDATA[video]]></MsgType><Video><MediaId><![CDATA[eYJ1MbwPRJtOvIEabaxHs7TX2D-HV71s79GUxqdUkjm6Gs2Ed1KF3ulAOA9H1xG0]]></MediaId><Title><![CDATA[testCallBackReplyVideo]]></Title><Description><![CDATA[testCallBackReplyVideo]]></Description></Video></xml>";$pc = new WXBizMsgCrypt($token, $encodingAesKey, $appId);$encryptMsg = '';$errCode = $pc->encryptMsg($text, $timeStamp, $nonce, $encryptMsg);if ($errCode == 0) { print("加密后: " . $encryptMsg . "\n");} else { print($errCode . "\n");}$xml_tree = new DOMDocument();$xml_tree->loadXML($encryptMsg);$array_e = $xml_tree->getElementsByTagName('Encrypt');$array_s = $xml_tree->getElementsByTagName('MsgSignature');$encrypt = $array_e->item(0)->nodeValue;$msg_sign = $array_s->item(0)->nodeValue;$format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";$from_xml = sprintf($format, $encrypt);// 第三方收到公众号平台发送的消息$msg = '';$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);if ($errCode == 0) { print("解密后: " . $msg . "\n");} else { print($errCode . "\n");}
(2) 关注、发送消息的推送 官方文档
$xmlStr = $GLOBALS['HTTP_RAW_POST_DATA'];if(!empty($xmlStr )){ // 解析该xml字符串,利用simpleXML libxml_disable_entity_loader(true); //禁止xml实体解析,防止xml注入 $requestXml = simplexml_load_string($xmlStr , 'SimpleXMLElement', LIBXML_NOCDATA); //判断该消息的类型,通过元素MsgType switch ($requestXml ->MsgType){ case 'event': //判断具体的时间类型(关注、取消、点击) $event = $requestXml->Event; if ($event=='subscribe') { // 关注事件 //查看用户是否首次关注 $content = '欢迎关注!'; if(isset($requestXml->EventKey)) { // 扫特定二维码关注会携带相对应的参数,具体见下一篇 } }elseif ($event=='CLICK') {//菜单点击事件 }elseif ($event=='VIEW') {//连接跳转事件 } break; case 'text'://文本消息 break; case 'image'://图片消息 break; case 'voice'://语音消息 break; case 'video'://视频消息 break; case 'shortvideo'://短视频消息 break; case 'location'://位置消息 break; case 'link'://链接消息 break; }}
(3)接受关注的数据格式
(4) 回复消息
//基本消息模板private $mMsgTemplate = [ 'text' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>',//文本回复XML模板 'image' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>',//图片回复XML模板 'music' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[music]]></MsgType><Music><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><MusicUrl><![CDATA[%s]]></MusicUrl><HQMusicUrl><![CDATA[%s]]></HQMusicUrl><ThumbMediaId><![CDATA[%s]]></ThumbMediaId></Music></xml>',//音乐模板 'news' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>%s</ArticleCount><Articles>%s</Articles></xml>',// 新闻主体 'news_item' => '<item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item>',//某个新闻模板 ];//回复echo sprintf($this->mMsgTemplate ['text'], $requestXml->FromUserName, $requestXml ->ToUserName, time(), $msgContent);
阅读全文
0 0
- 微信公众号开发(一)--公众号关注推送
- 微信开发-获取用户关注公众号的状态(是否关注公众号)
- 微信批量关注公众号,推送消息软件介绍
- 微信公众平台开发(41)一键关注微信公众平台账号
- 微信公众平台开发(41)一键关注微信公众平台账号
- 判断用户是否关注公众号 微信公众平台开发教程(7)
- 微信公众号开发(二、消息推送)
- 微信公众号开发(四)推送消息模板
- 微信公众号开发模板消息推送(一) 获取access_token java
- 【微信公众平台】微信公众号“一键关注”Android版实现
- php开发实现关注公众号事件推送,公众号关注推送图文
- 实现微信公众号“一键关注”功能?
- 微信公众号获取一键关注链接
- 欢迎关注“测试开发进阶”微信公众号
- 微信公众号开发——关注来源
- 使用微信公众号开发<一>
- 微信公众号开发日志(一)
- java 微信公众号开发(一)--微信公众号接入
- 线程池原理及C语言实现线程池
- sourceTree和git和git hub之间的关系以及基本使用(不包含命令行)
- 论文阅读-文本匹配(三)MatchPyramid(构造匹配矩阵)
- 日志系列之接口与实现分离
- Java面试题全集(中)
- 微信公众号开发(一)--公众号关注推送
- 51单片机实验 2017年12月13日
- 在默认hellow world的textview组件上,拖一个按钮组件,这个按钮在textview的正上方很远出,不是紧靠
- [ AC自动机 二进制分组/阈值 ] HDU4787
- LintCode之50 数组剔除元素后的乘积
- [BZOJ4066]简单题(KD-tree)
- ssl2294-打包【dp练习】
- 第八周实践项目4 字符串加密
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".