微信公众平台是腾讯公司在微信的基础上新增的功能模块,通过这一平台,个人和企业都可以打造一个微信的公众号,并实现和特定群体的文字、图片、语音的全方位沟通、互动。
首先注册一个微信公众平台账户,注册地址:https://mp.weixin.qq.com/cgi-bin/readtemplate?t=wxm2-realname-reg&lang=zh_CN
注册后登记了个人信息审核后就可以使用平台了,登陆后进入高级功能开启开发模式:如图腾讯微信公众平台接口

首次进入开发模式需要配置“接口配置信息”
需要Token验证;

腾讯微信公众平台接口

先去看看这个验证的帮助指南,http://mp.weixin.qq.com/wiki/index.php?title=%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E6%8C%87%E5%8D%97
我们定义一个MessageReceiveHandler.ashx一般处理程序来处理这个功能,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Tencent.WeiXin;
namespace Test
{
    /// <summary>
    /// MessageReceiveHandler 的摘要说明
    /// </summary>
    public class MessageReceiveHandler : IHttpHandler
    {

        private static readonly string Token = "中国.NET协会";
        public void ProcessRequest(HttpContext context)
        {
            if (context.Request.RequestType == "GET")//第一次Token验证
            {
                if (CheckSignature(context))
                {
                    context.Response.Write(context.Request.QueryString["echostr"]);
                }
                return;
            }
            
            context.Response.Flush();
        }
        /// <summary>
        /// 加密/校验流程:
        ///1. 将token、timestamp、nonce三个参数进行字典序排序
         ///2. 将三个参数字符串拼接成一个字符串进行sha1加密
        ///3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        protected virtual bool CheckSignature(HttpContext context)
        {
            List<string> list = new List<string>();
            list.Add(context.Request.QueryString["timestamp"]);
            list.Add(context.Request.QueryString["nonce"]);
            list.Add(Token);
            list = list.OrderBy(t => t).ToList();
            var sha1 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(list[0] + list[1] + list[2], "SHA1");
            var signature = context.Request.QueryString["signature"];
            return signature.Equals(sha1, StringComparison.OrdinalIgnoreCase);
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
MessageReceiveHandler

相关文章: