.net微信公众号开发消息与事件
本文介绍如何处理微信公众号开发中的消息与事件,包括:(1)消息(事件)概况;(2)验证消息的真实性;(3)解析消息;(4)被动回复消息;(5)发送其他消息。 1 消息(事件)概况 当普通微信用户向公众号发消息或者微信服务器向公众号推送事件时,微信服务器将POST消息(事件)的XML数据包到开发者填写的公众号服务器URL上;公众号服务器然后对消息作出响应。 1.2 请求消息 有些请求消息,我们可以做出响应,有些则不能,详见下表:
1.3 响应消息
/// <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); }验证消息真实性 验证消息真实性
3 解析消息 如果消息签名通过验证,我们需要将XML格式的消息文本解析成请求消息对象,RequestMessageHelper类用于完成这项工作。 RequestMessageHelper helper = new RequestMessageHelper(context.Request);if(helper.Message != null){ //消息解析成功,对它进行处理}
消息解析成功之后,helper.Message为消息基类RequestBaseMessage,我们可以根据属性MsgType及Event判断到底是哪种消息(事件),并转换成适当的子类型。例如: RequestBaseMessage bm=helper.Message;switch(bm.MsgType){ case RequestMessageTypeEnum.text: //文本消息 HandleTextMessage((RequestTextMessage)bm); break; case RequestMessageTypeEnum.image: //图片消息 HandleImageMessage((RequestImageMessage)bm); break; //处理其他消息 case RequestMessageTypeEnum.event: //事件 RequestEventMessage ev=(RequestEventMessage)bm; switch(ev.Event) { case RequestEventTypeEnum.subscribe: //订阅 HandleSubscribeMessage((RequestSubscribeMessage)ev); break; case RequestEventTypeEnum.unsubscribe: //取消订阅 HandleUnsubscribeMessage((RequestUnsubscribeMessage)ev); break; //处理其他事件 } break; default: break;} 解析消息的细节请参看源代码:http://git.oschina.net/xrwang2/xrwang.weixin.PublicAccount/blob/master/PublicAccount/RequestMessage/RequestMessageHelper.cs 4 被动回复消息 /// <summary> /// 处理微信的POST请求 /// </summary> /// <param name="context"></param> /// <returns>返回xml响应</returns> private string HandlePost(HttpContext context) { RequestMessageHelper helper = new RequestMessageHelper(context.Request); if (helper.Message != null) { ResponseBaseMessage responseMessage = HandleRequestMessage(helper.Message); return responseMessage.ToXml(helper.EncryptType); } else return string.Empty; } /// <summary> /// 处理请求消息,返回响应消息 /// </summary> /// <returns>返回响应消息</returns> private ResponseBaseMessage HandleRequestMessage(RequestBaseMessage requestMessage) { ResponseTextMessage response = new ResponseTextMessage(requestMessage.FromUserName, requestMessage.ToUserName, DateTime.Now, string.Format("自动回复,请求内容如下:/r/n{0}", requestMessage)); return response; } 5 发送其他消息 除了被动回复消息之外,我们还可以发送客服消息、群发消息、发送模板消息,这些内容将在后续文章中一一道来。 以上就是.net微信公众号开发消息与事件的详细内容,更多请关注php中文网其它相关文章! |
- 上一篇:微信公众平台开发一键关注微信公众平台账号
- 下一篇:用c#开发微信自定义菜单设置工具