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

本主题所有内容以软认知服务为技术基础

关于微软人脸识别,请参阅

本节内容请先参阅微软认知服务人脸API接口列表

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

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

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

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

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

参数描述
signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp时间戳
noncenonce
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接口

  • 1
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

王豫翔

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值