ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码

NET微信公众号开发之公众号消息处理(1/3)

来源:网络整理     时间:2016-06-16     关键词:

本篇文章主要介绍了" NET微信公众号开发之公众号消息处理",主要涉及到方面的内容,对于.NETjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: 一.前言 微信公众平台的消息处理还是比较完善的,有最基本的文本消息,到图文消息,到图片消息,语音消息,视频消息,音乐消息其基本原理都是一样的,只不过所post...

一.前言

  微信公众平台的消息处理还是比较完善的,有最基本的文本消息,到图文消息,到图片消息,语音消息,视频消息,音乐消息其基本原理都是一样的,只不过所post的xml数据有所差别,在处理消息之前,我们要认真阅读,官方给我们的文档:http://mp.weixin.qq.com/wiki/14/89b871b5466b19b3efa4ada8e577d45e.html。首先我们从最基本的文本消息处理开始。




12345678




  我们可以看到这是消息处理的一个最基本的模式,有发送者,接受者,创建时间,类型,内容等等。

首先我们来创建一个消息处理的类,这个类用来捕获,所有的消息请求,根据不同的消息请求类型来处理不同的消息回复。

public class WeiXinService
  {
    /// 
    /// TOKEN
    /// 
    private const string TOKEN = "finder";
    /// 
    /// 签名
    /// 
    private const string SIGNATURE = "signature";
    /// 
    /// 时间戳
    /// 
    private const string TIMESTAMP = "timestamp";
    /// 
    /// 随机数
    /// 
    private const string NONCE = "nonce";
    /// 
    /// 随机字符串
    /// 
    private const string ECHOSTR = "echostr";
    /// 
    /// 
    /// 
    private HttpRequest Request { get; set; }
    /// 
    /// 构造函数
    /// 
    /// 
    public WeiXinService(HttpRequest request)
    {
      this.Request = request;
    }
    /// 
    /// 处理请求,产生响应
    /// 
    /// 
    public string Response()
    {
      string method = Request.HttpMethod.ToUpper();
      //验证签名
      if (method == "GET")
      {
        if (CheckSignature())
        {
          return Request.QueryString[ECHOSTR];
        }
        else
        {
          return "error";
        }
      }

      //处理消息
      if (method == "POST")
      {
        return ResponseMsg();
      }
      else
      {
        return "无法处理";
      }
    }

    /// 
    /// 处理请求
    /// 
    /// 
    private string ResponseMsg()
    {
      string requestXml = CommonWeiXin.ReadRequest(this.Request);
      IHandler handler = HandlerFactory.CreateHandler(requestXml);

      if (handler != null)
      {
        return handler.HandleRequest();
      }

      return string.Empty;
    }
    /// 
    /// 检查签名
    /// 
    /// 
    /// 
    private bool CheckSignature()
    {
      string signature = Request.QueryString[SIGNATURE];
      string timestamp = Request.QueryString[TIMESTAMP];
      string nonce = Request.QueryString[NONCE];

      List list = new List();
      list.Add(TOKEN);
      list.Add(timestamp);
      list.Add(nonce);
      //排序
      list.Sort();
      //拼串
      string input = string.Empty;
      foreach (var item in list)
      {
        input += item;
      }
      //加密
      string new_signature = SecurityUtility.SHA1Encrypt(input);
      //验证
      if (new_signature == signature)
      {
        return true;
      }
      else
      {
        return false;
      }
    }
  }

在来看看我们的首先是如何捕获消息的。首页Default.ashx的代码如下

相关图片

相关文章