来源:自学PHP网 时间:2015-04-14 12:58 作者: 阅读:次
[导读] 上一篇《Senparc Weixin MP SDK微信公众平台开发教程(五):使用Senparc Weixin MP SDK》我们讲述了如何使用Senparc Weixin MP SDK对接微信最基础的验证API,这一篇我们将具体讲一下这个SDK处理微信...
上一篇《Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK》我们讲述了如何使用Senparc.Weixin.MP SDK对接微信最基础的验证API,这一篇我们将具体讲一下这个SDK处理微信消息的核心:MessageHandler。
有关MessageHandler的实现原理和说明,在这篇Wiki中已经说得比较详细了,这里用代码演示一下。
延续上一篇的代码,我们继续为项目添加一个CustomMessageHandle.cs类: CustomMessageHandle.cs需要继承Senparc.Weixin.MP.MessageHandlers<TC>这个抽象类,并实现部分方法。最初步的CustomMessageHandle.cs代码 我们可以看到必须要重写实现的抽象方法名为DefaultResponseMessage(),这一条信息用于返回一条的消息,假如对应类型(如语音)的微信消息没有被代码处理,那么默认会返回这里的结果。 在DefaultResponseMessage()方法中,我们看到这样一句: 这里的CreateResponseMessage<T>方法即创建一个返回对象,T可以为以下类型的任意一个,分别对应了不同的返回类型: ResponseMessageText - 对应文本消息 ResponseMessageNews - 对应图文消息 ResponseMessageMusic - 对应音乐消息
关于上述3种类型参数的设置方法,可以看开源项目的Demo,这里不再重复:https://github.com/JeffreySu/WeiXinMPSDK。
那么我们如何处理用户发过来的文字信息呢? 很简单——重写一个OnTextRequest方法即可: 与OnTextRequest对应,如果我们要处理语音、地理位置、菜单等类型的消息,只需要重写对应的方法,可以重写的方法如下:
public virtual IResponseMessageBase OnImageRequest(RequestMessageImage requestMessage); public virtual IResponseMessageBase OnLinkRequest(RequestMessageLink requestMessage); public virtual IResponseMessageBase OnLocationRequest(RequestMessageLocation requestMessage); public virtual IResponseMessageBase OnTextRequest(RequestMessageText requestMessage); public virtual IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage); public virtual IResponseMessageBase OnVideoRequest(RequestMessageVideo requestMessage); public virtual IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage); public virtual IResponseMessageBase OnEvent_ViewRequest(RequestMessageEvent_View requestMessage); public virtual IResponseMessageBase OnEvent_EnterRequest(RequestMessageEvent_Enter requestMessage); public virtual IResponseMessageBase OnEvent_LocationRequest(RequestMessageEvent_Location requestMessage); public virtual IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage); public virtual IResponseMessageBase OnEvent_UnsubscribeRequest(RequestMessageEvent_Unsubscribe requestMessage); public virtual IResponseMessageBase OnEvent_ScanRequest(RequestMessageEvent_Scan requestMessage) public virtual IResponseMessageBase OneEvent_MassSendJobFinisRequest(RequestMessageEvent_MassSendJobFinish requestMessage) 其中OnEvent_XX对应的都是Event请求的子类型。 在CustomMessageHandler的基类设置的时候,我们看到使用了一个叫MessageContext的泛型(MessageHandler<MessageContext>),这个MessageContext是SDK提供的一个默认的消息上下文处理类,这个类已经能够处理最基础的情况,如果您的应用不是很复杂,那么直接用这个类就行了。如果项目比较复杂,您也可以根据自己的需要写一个自己的类(继承IMessageContext接口),或继承这个类在扩展一些更多的属性(例如工作流和分布式缓存等等)。
至此我们已经使用MassageHandler处理所有微信用户发送过来的请求。 下面介绍一些MassageHandler的“秘密武器”。
我们可以直接重写这两个方法。其中OnExecuting会在所有消息处理方法(如OnTextRequest,OnVoiceRequest等)执行之前执行,这个过程中,我们可以把CancelExecute设为true,来中断后面所有方法的执行(包括OnExecuted),例如:
这一个功能我们会放到下一篇单独讲述:《Senparc.Weixin.MP SDK 微信公众平台开发教程(七):解决用户上下文(Session)问题》。
新浪微博:@苏震巍 QQ:498977166 http://szw.cnblogs.com/ |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com