微信完整判断消息类型

稿件来源: 阳光企业网站管理系统   撰稿作者: 太阳光   发表日期: 2014-04-25   阅读次数: 867   查看权限: 游客查看

微信最基本的就是判断消息类型,根据不同的信息我们可以作出不同的反应。

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

在新用户关注公众平台后,所有粉丝发送的信息或者点击菜单都会推送一个事件到服务器微信目前提供了五种消息类型,分别为:

  • 文本消息(text);
  • 图片消息(image);
  • 地理位置消息(location);
  • 链接消息(link);
  • 事件推送(event);

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

<?php
header('Content-Type: text/html; charset=UTF-8');
define("TOKEN", "scscms");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{
	private $fromUsername;
	private $toUsername;
	private $times;
	public function valid()
    {
		if (isset($_GET['echostr'])) {
			if($this->checkSignature()){
				echo $_GET["echostr"];
				exit();
			}
		}else{
			$this-> responseMsg();
		}
    }
	private function checkSignature()
	{
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
		$token = TOKEN;
		$tmpArr = array($token, $timestamp, $nonce);
		sort($tmpArr, SORT_STRING);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
	}
    public function responseMsg()
    {
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
		if (!empty($postStr)){
			$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
			$this->fromUsername = $postObj->FromUserName;//发送信息方ID
			$this->toUsername = $postObj->ToUserName;//接收信息方ID
			$this->times = time();//发送时间
			$Content = trim($postObj->Content);//用户发送的消息                
			$msgType = $postObj->MsgType;//消息类型				
			$MsgId = $postObj->MsgId;	//$msgType == 'event'不存在此值
			$Event = $postObj->Event;//获取事件类型
			if($msgType == 'event'){	//判断微信自定义响应事件
				if($Event == 'subscribe'){	//订阅、关注 事件
					$EventKey = $postObj->EventKey;//同时带入二维码的key
				}else if($Event == 'unsubscribe'){
					//退订阅事件
				}else if($Event == 'SCAN'){			//用户已关注时的事件推送
					$EventKey = $postObj->EventKey;		//是一个32位无符号整数,即创建二维码时的二维码scene_id 
					$Ticket = $postObj->Ticket;			//二维码的ticket,可用来换取二维码图片
				}else if(strtoupper($Event) == 'LOCATION'){		//上报地理位置事件
					$latitude = $postObj->Latitude;		//地理位置纬度
					$longitude = $postObj->Longitude;	//地理位置经度
					$precision = $postObj->Precision;	//地理位置精度
				}else if($Event == 'VIEW'){			//点击菜单跳转链接时的事件推送
					$webUrl = $postObj->EventKey;	//跳转页面地址
				}else if($Event == 'CLICK'){			//点击菜单拉取消息时的事件推送
					$EventKey = $postObj->EventKey;	//菜单对应的key
				}
			}else if($msgType == 'text'){
				//文本消息(text);
			}else if($msgType == 'image'){
				$PicUrl = $postObj->PicUrl;	//图片消息url
				$MediaId = $postObj->MediaId; //图片消息媒体id
			}else if($msgType == 'voice'){
				$MediaId = $postObj->MediaId; //媒体ID
				$Format = $postObj->Format;	//语音文件格式
				$postObj->Recognition; //语音识别结果
			}else if($msgType == 'video'){
				$MediaId = $postObj->MediaId;//语音消息媒体id
				$postObj->ThumbMediaId; //视频消息缩略图的媒体id
			}else if($msgType == 'location'){
				$Location_X = $postObj->Location_X;	//地理位置维度
				$Location_Y = $postObj->Location_Y;	//地理位置经度
				$Scale = $postObj->Scale;	//地图缩放大小
				$Label = $postObj->Label;	//地理位置信息
			}else if($msgType == 'link '){
				$Title = $postObj->Title;
				$Description = $postObj->Description;
				$Url = $postObj->Url;
			}
        }
    }
}
?>

 

关键词: 微信,微信开发,消息类型   编辑时间: 2014-04-25 17:38:16

  • 感到高兴

    0

    高兴
  • 感到支持

    0

    支持
  • 感到搞笑

    0

    搞笑
  • 感到不解

    0

    不解
  • 感到谎言

    0

    谎言
  • 感到枪稿

    0

    枪稿
  • 感到震惊

    0

    震惊
  • 感到无奈

    0

    无奈
  • 感到无聊

    0

    无聊
  • 感到反对

    0

    反对
  • 感到愤怒

    0

    愤怒
0%(0)
0%(0)
共有0 条评论 发言请遵守【相关规定

网友评论

会员头像
发 表同步腾讯微博    验证码:  点击更新请先登陆
  • 暂无评论
关闭模块文章图片 article Pictrue
  • 我的妈妈爸爸
  • 基于koa2+mysql+vue2.0+Element阳光内容管理系统
  • 代码覆盖率工具 Istanbul 入门教程
  • 全栈工程师的武器——MEAN
  • 9款超炫的 CSS3 复选框(Checkbox)
  • 微信开发在线翻译功能
  • CSS3那些不为人知的高级属性
  • 给easyui的datebox添加清空事件
  • flash写字效果
  • kendoUI系列教程之DropDownList下拉菜单
  • kendoUI系列教程之datetimepicker日期时间选择
  • kendoUI系列教程之datepicker日期选择
  • kendoUI系列教程之combobox下拉列表框
  • kendoUI系列教程之colorpicker
  • kendoUI系列教程之calendar日历表
  • kendoUI系列教程之autocomplete自动补齐