第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 【微信公众号开发】自我学习第二章:关注事件触发的自动回复

【微信公众号开发】自我学习第二章:关注事件触发的自动回复

时间:2019-11-15 01:33:46

相关推荐

【微信公众号开发】自我学习第二章:关注事件触发的自动回复

新用户关注微信公众平台,将产生一个订阅事件,即subscribe事件,默认代码中没有对这一事件进行相应回复处理。

在新用户关注公众平台后,可能想知道该平台提供了哪些功能,以及怎样使用该平台,通俗一点讲就是该平台的“使用说明书”。例如下图两个服务号的处理:

微信目前提供了五种消息类型,分别为:

文本消息(text);

图片消息(image);

地理位置消息(location);

链接消息(link);

事件推送(event);

接收到消息后,首先需要对消息类型做出判断,然后再针对不同类型的消息做出处理。在事件推送中,事件类型又分为三种,subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件),还需要再加一次判断;判断为subscribe事件后,根据设定好的欢迎消息,回复给用户。

代码实现代码如下:

<?php $testObj = new Test(); if(!empty($_GET['echostr'])){ //验证配置信息 $testObj->valid(); }else{ //如果不是验证就不会有echostr这个参数 $testObj->responseMsg(); } exit; class Test {/** * 绑定url、token信息 */ public function valid(){$echoStr = $_GET["echostr"]; if ($this->checkSignature()) { ob_clean();echo $echoStr; } exit(); } /** * 检查签名,确保请求是从微信发过来的 */ private function checkSignature() {$signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"];$token = "lingsg";//与在微信配置的token一致,不可泄露 $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } public function responseMsg(){//验证签名if ($this->checkSignature()){//获取到关注事件推送的XML数据$postArr = $GLOBALS["HTTP_RAW_POST_DATA"];$postObj = simplexml_load_string( $postArr );//判断:消息类型是否是 事件推送if( strtolower( $postObj->MsgType ) == 'event' ){//判断:事件类型是否是 订阅(subscribe)if( strtolower( $postObj->Event == 'subscribe' ) ){$toUser = $postObj->FromUserName;$fromUser = $postObj->ToUserName;$time= time();$msgType = 'text';$content = '微信公众号:'.$fromUser.",\n你的微信openid是:".$toUser;$template = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$info= sprintf( $template, $toUser, $fromUser, $time, $msgType, $content );echo $info;}}}} } ?>

推送信息:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。