微信企业号开发(1)WebAPI在回调模式中的URL验证

时间:2015-10-12 07:02:23   收藏:0   阅读:397

微信回调模式的官方文档

开发语言:C#(微信相关功能代码可以从官网下载

首先,必须要明确几个参数,这几个参数在微信企业号中,每次调用都会使用到。

1、msg_signature:签名(已加密,加密方法可从官网下载

2、timestamp:时间戳

3、nonce:随机数

4、echostr:随机字符串(已加密)

注:前面3个参数每次都会自动带上,属于必填项,第4个参数只有在首次校验URL时(意思就是点下图中的“保存”按钮时,可能不准确,先这样理解吧)才会带上。

技术分享

针对上图的说明:

1、URL:任意网址(推荐使用二级域名)

2、Token:随意字符,可点后面的“随机获取”来随机填入几个字符,也可以自己输入,我就是输入的公司英文名称

3、EncodingAESKey:有一定的格式要求,懒得输的可以点后面的“随机获取”,我就是使用这一项

4、在点击上图的“保存”按钮时,页面会根据图中框内输入的内容,自动生成最终请求的URL地址,同时,会自动附带上本文开始时说的那四个参数,并向该URL地址发起GET请求

5、只有上图的“保存”按钮执行成功后,才会看到如下图所示:

技术分享

开始上代码

首先,在Web.config中添加几个AppSetting:

1 <add key="WXCorpID" value="从配置页面获取" />
2 <add key="WXCorpToken" value="自行输入" />
3 <add key="WXCorpAESKey" value="自行输入" />

说明:

1、WXCorpID:企业号唯一的ID,可以从设置页面复制过来,如下图所示

技术分享

2、WXCorpToken:一定要和配置界面的Token框内输入的一致

3、WXCorpAESKey:一定要和配置界面的EncodingAESKey框内输入的一致

其次,配置一个WebAPI的路径:

1 config.Routes.MapHttpRoute(name: "VerifyApi", routeTemplate: "api", defaults: new { controller = "Verify" });

然后,建立一个VerifyController,并添加方法:

 1 [HttpGet]
 2 public void VerifyURL()
 3 {
 4     // 本文顶部说的四个参数,最好进行URL解码
 5     var signature = HttpUtility.UrlDecode(HttpContext.Current.Request["msg_signature"] ?? string.Empty);
 6     var timestamp = HttpUtility.UrlDecode(HttpContext.Current.Request["timestamp"] ?? string.Empty);
 7     var nonce = HttpUtility.UrlDecode(HttpContext.Current.Request["nonce"] ?? string.Empty);
 8     var echo = HttpUtility.UrlDecode(HttpContext.Current.Request["echostr"] ?? string.Empty);
 9 
10     // 验证结束后的返回值,一定不要带引号!!!
11     var echoResult = string.Empty;
12 
13     // 微信提供的验证对象(参数为AppSetting中的三个值)
14     var crypt = new WXBizMsgCrypt(AppSettings.WX_CORP_TOKEN, AppSettings.WX_CORP_AES_KEY, AppSettings.WX_CORP_ID);
15 
16     // 微信提供的验证方法
17     var result = crypt.VerifyURL(signature, timestamp, nonce, echo, ref echoResult);
18     if (result != 0)
19     {
20         return;
21     }
22 
23     // 将验证后的返回值写入响应流,这样可以去掉引号!!!
24     HttpContext.Current.Response.Clear();
25     HttpContext.Current.Response.Write(echoResult);
26     HttpContext.Current.Response.End();
27 }

最后,在企业号界面上点“保存”按钮,即可验证,一般来说,就可以通过了。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!