了解MessageHandler

为项目添加一个CustomMessageHandle.cs类

  1. public class CustomMessageHandler : MessageHandler<CustomMessageContext>
  2. {
  3. public CustomMessageHandler(Stream inputStream, PostModel postModel)
  4. : base(inputStream, postModel)
  5. {
  6. }
  7. public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
  8. {
  9. var responseMessage = base.CreateResponseMessage<ResponseMessageText>(); //ResponseMessageText也可以是News等其他类型
  10. responseMessage.Content = "这条消息来自DefaultResponseMessage。";
  11. return responseMessage;
  12. }
  13. }

在建一个 CustomMessageContext,继承自 MessageContext<IRequestMessageBase, IResponseMessageBase>

  1. public class CustomMessageContext: MessageContext<IRequestMessageBase, IResponseMessageBase>
  2. {
  3. public CustomMessageContext()
  4. {
  5. base.MessageContextRemoved += CustomMessageContext_MessageContextRemoved;
  6. }
  7. /// <summary>
  8. /// 当上下文过期,被移除时触发的时间
  9. /// </summary>
  10. /// <param name="sender"></param>
  11. /// <param name="e"></param>
  12. void CustomMessageContext_MessageContextRemoved(object sender, Senparc.NeuChar.Context.WeixinContextRemovedEventArgs<IRequestMessageBase, IResponseMessageBase> e)
  13. {
  14. /* 注意,这个事件不是实时触发的(当然你也可以专门写一个线程监控)
  15. * 为了提高效率,根据WeixinContext中的算法,这里的过期消息会在过期后下一条请求执行之前被清除
  16. */
  17. var messageContext = e.MessageContext as CustomMessageContext;
  18. if (messageContext == null)
  19. {
  20. return;//如果是正常的调用,messageContext不会为null
  21. }
  22. //TODO:这里根据需要执行消息过期时候的逻辑,下面的代码仅供参考
  23. //Log.InfoFormat("{0}的消息上下文已过期",e.OpenId);
  24. //api.SendMessage(e.OpenId, "由于长时间未搭理客服,您的客服状态已退出!");
  25. }
  26. }

我们可以看到必须要重写实现的抽象方法名为DefaultResponseMessage(),这一条信息用于返回一条的消息,假如对应类型(如语音)的微信消息没有被代码处理,那么默认会返回这里的结果。

  1. DefaultResponseMessage()方法中,我们看到这样一句:
  1. var responseMessage = base.CreateResponseMessage<ResponseMessageText>(); //ResponseMessageText也可以是News等其他类型

  这里的CreateResponseMessage方法即创建一个返回对象,T可以为以下类型的任意一个,分别对应了不同的返回类型:

ResponseMessageText - 对应文本消息

ResponseMessageNews - 对应图文消息

ResponseMessageMusic - 对应音乐消息

ResponseMessageXXX - 其他类型以此类推

那么我们如何处理用户发过来的文字信息呢?

很简单——重写一个OnTextRequest方法即可:

  1. public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
  2. {
  3. var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
  4. responseMessage.Content = "您的OpenID是:" + requestMessage.FromUserName //这里的requestMessage.FromUserName也可以直接写成base.WeixinOpenId
  5. + "。\r\n您发送了文字信息:" + requestMessage.Content; //\r\n用于换行,requestMessage.Content即用户发过来的文字内容
  6. return responseMessage;
  7. }

其他可以参考:http://www.cnblogs.com/szw/p/3414862.html

解决用户上下文(Session)问题

资料:

http://www.cnblogs.com/szw/p/3414887.html

用户上下文WeixinContext和MessageContext

Senparc.Weixin微信开发(2) 消息机制和上下文(Session)的更多相关文章

  1. Senparc.Weixin微信开发(1) 开发验证

    官方系列教程 http://www.cnblogs.com/szw/archive/2013/05/20/3089479.html 登录微信公众平台后-左侧找到开发--启用服务器配置 这样,我们才可以 ...

  2. Senparc.Weixin微信开发(3) 自定义菜单与获取用户组

    自定义菜单 代码参考:http://www.cnblogs.com/szw/p/3750517.html 还可以使用他们官网的自定义:https://neuchar.senparc.com/User/ ...

  3. [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)

    目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...

  4. Java企业微信开发_05_消息推送之发送消息(主动)

    一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...

  5. 微信开发之消息接收与回复--weixin-java-tools

    一.前言 在上一篇文章<微信开发之如何使用开发工具--weixin-java-tools>中我给各位介绍了weixin-java-tools,并且介绍了如何使用weixin-java-to ...

  6. Java企业微信开发_05_消息推送之被动回复消息

    一.本节要点 1.消息的加解密 微信加解密包 下载地址:http://qydev.weixin.qq.com/java.zip      ,此包中封装好了AES加解密方法,直接调用方法即可. 其中,解 ...

  7. Java企业微信开发_04_消息推送之发送消息(主动)

    源码请见: Java企业微信开发_00_源码及资源汇总贴 一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息 ...

  8. Android开发之消息机制

    转:http://stackvoid.com/introduction-to-Message-Handler-in-Android/ http://blog.dreamtobe.cn/2016/03/ ...

  9. Android开发学习—— 消息机制

    ###主线程不能被阻塞* 在Android中,主线程被阻塞会导致应用不能刷新ui界面,不能响应用户操作,用户体验将非常差* 主线程阻塞时间过长,系统会抛出ANR异常* ANR:Application ...

随机推荐

  1. canves绘制北京地铁线路图,包括线路绘制,优先路线,单路径选择。

    canves绘制北京地铁线路图,包括线路绘制,优先路线,单路径选择. 即将推出,后台涵盖各种语言,php,C#,java,nodejs等.

  2. python中的多重循环

    列表中会经常用到多重循环. if __name__=='__main__': names = ['xiaoming','wangwu','lisi'] ages = ['] for name,age ...

  3. $Django 多对多-自定义第三张表 基于双下划线的跨表查询(补充)

    自定义第三张表的好处:可以定义多个字段, 缺点:查询不方便(有方法解决) 1.第三张表设置外键,联合唯一(查询不方便) class Books(models.Model): name=models.C ...

  4. MD5加密算法工具类

    import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorith ...

  5. 使用tomcat发布含有shtml文件的web程序

    平常都是使用html或jsp,当导入含有shtml的一个web项目时,向平常一样使用Jetty运行,访问到shtml文件时,直接在浏览器上显示出了源码. 查询,使用tomcat发布,修改tomcat的 ...

  6. ASP.NET MVC5入门2之Ajax实现数据查询

    开发环境:VS2013 数据库:SQL Server2008R2 架构:ASP.NET MVC5 开发语言:C# 代码下载链接:http://download.csdn.net/detail/u010 ...

  7. 修复ogg source端意外宕机造成的数据不同步

    修复ogg source端意外宕机造成的数据不同步 分类: Oracle2016-04-28 11:50:40原文地址:修复ogg source端意外宕机造成的数据不同步 作者:十字螺丝钉 ogg s ...

  8. Confluence 6 修改你站点的外观和感觉

    你可以为你的 Confluence 整个站点修改表现以及外观和感觉,也可以为单独的空间进行修改. 对整个站点进行的修改将会对使用全局外观和感觉(look and feel)的空间一并进行修改.如果某个 ...

  9. SpringBoot获取配置文件的自定义参数

    1.在application.properties中自定义参数 spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datas ...

  10. 【kafka】生产者速度测试

    非常有用的参考博客:http://blog.csdn.net/qq_33160722/article/details/52903380 pykafka文档:http://pykafka.readthe ...