ASP.NET WEBAPI实现微信接入验证

ASP.NET WEBAPI实现微信接入验证

首先你需要一个微信公众号,很重要的是你需要完成认证,这点非常重要,如果不认证优先功能无法实现。
当你完成公众号的基本设定后,我们需要为开发做第一件事情:基本配置。下面我摘抄了微信开发文档中关于接入指南的部分图文

登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。
同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需要提前配置好相关加解密代码,详情请参考消息体签名及加解密部分的文档。

ASP.NET WEBAPI实现微信接入验证_第1张图片
微信的意思是,我们需要有一台服务器接收微信发出的一个GET请求,然后验证后返回,如果这个流程走通了,则说明你指定的服务器是有效的,这好像有点手机短信验证码通过的意思。
那么微信将GET我们什么数据呢?

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:

参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce nonce
echostr 随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

但是关于服务器的验证逻辑的实现,微信没有给出ASP.NET的实现,只给了PHP的,网上有些分享是使用了ASP.NET MVC的方案,但我需要做一个WEBAPI,所以花了点时间研究了下,下面是已经验证通过的WEBAPI的代码实现
我定义了一个类:WeixinController,从ApiController继承,这个WEBAPI将提供所有微信的服务,包括现在的接入验证后后期需要的各种微软服务。

‘WeixinController’提供了一个Get服务,实现如下

public HttpResponseMessage Get(string signature, string timestamp, string nonce, string echostr)
{
    string[] ArrTmp = { TOKEN, timestamp, nonce };
    Array.Sort(ArrTmp);
    string tmpStr = string.Join("", ArrTmp);
    var result = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1").ToLower();

    return new HttpResponseMessage (){ 
        Content = new StringContent(result, Encoding.GetEncoding("UTF-8"), "application/x-www-form-urlencoded") 
    };
}

这个Get按微信的要求接受四个参数:signature、timestamp、nonce和echostr,然后将这四个参数进行排序后,连接为一个字符串并进行SHA1加密。上面这段代码的要点是返回值,很多工程师在使用WEBAPI返回给微信验证的时候一直失败,是因为忽略了返回值的编码要求是application/x-www-form-urlencoded。
现在你去公众平台后台管理页面 - 开发者中心页点击提交,过一会会收到验证通过的消息,注意:微信公众号接口只支持80接口

你可能感兴趣的:(asp.net,微信,微软牛津)