首页 > 微信应用  > 

.net微信公众号开发消息与事件

.net微信公众号开发消息与事件
这篇文章主要介绍.net微信公众号开发消息与事件

本文介绍如何处理微信公众号开发中的消息与事件,包括:(1)消息(事件)概况;(2)验证消息的真实性;(3)解析消息;(4)被动回复消息;(5)发送其他消息。1 消息(事件)概况

    当普通微信用户向公众号发消息或者微信服务器向公众号推送事件时,微信服务器将POST消息(事件)的XML数据包到开发者填写的公众号服务器URL上;公众号服务器然后对消息作出响应。1.1 消息的流转过程    为了便于区分,我们将微信服务器发往公众号服务器的消息称为请求(Request)消息;将公众号服务器发往微信服务器的消息称为响应(Response)消息;将推送事件看成特殊的请求消息。    请求与响应消息的流转过程如下图所示:

1.2 请求消息    请求消息有很多种,我们为其一一建立了对应的类,类层次结构如下图所示:

有些请求消息,我们可以做出响应,有些则不能,详见下表:

消息类型是否事件能够被动回复备注文本×√ 图片×√ 声音×√ 视频×未知接收不到视频消息,不知道是否能被动回复地理位置×√ 链接×√ 订阅√√ 取消订阅√× 扫描二维码√× 上报地理位置√× 点击菜单拉取消息√√ 点击菜单跳转链接√× 点击菜单扫码推√× 点击菜单扫码等待回复√√ 点击菜单系统发图√未知接收不到系统发图事件;微信服务器会发送图片消息,可回复点击菜单拍照或相册发图√×微信服务器会发送图片消息,可回复点击菜单微信发图√×微信服务器会发送图片消息,可回复点击菜单选择地理位置√×微信服务器会发送地理位置消息,可回复推送群发消息结果√× 推送发送模板消息结果√× 

 

1.3 响应消息    响应消息的类层次结构如下图所示:

2 验证消息的真实性    公众号服务器接收到微信服务器的请求之后,第一件事情是验证消息的真实性。    Utility.CheckSignature方法用于验证消息签名是否正确。    示例如下:

/// <summary> /// 验证消息的有效性 /// </summary> /// <param name="context"></param> /// <returns>如果消息有效,返回true;否则返回false。</returns> private bool Validate(HttpContext context) { string username = RequestEx.TryGetQueryString("username"); //在接口配置的URL中加入了username参数,表示哪个微信公众号 AccountInfo account = AccountInfoCollection.GetAccountInfo(username); if (account == null) return false; string token = account.Token; string signature = RequestEx.TryGetQueryString("signature"); string timestamp = RequestEx.TryGetQueryString("timestamp"); string nonce = RequestEx.TryGetQueryString("nonce"); if (string.IsNullOrWhiteSpace(signature) || string.IsNullOrWhiteSpace(timestamp) || string.IsNullOrWhiteSpace(nonce)) return false; return xrwang.weixin.PublicAccount.Utility.CheckSignature(signature, token, timestamp, nonce); }验证消息真实性

.net微信公众号开发消息与事件由讯客互联微信应用栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“.net微信公众号开发消息与事件