微信企业号开发(1)WebAPI在回调模式中的URL验证
微信回调模式的官方文档。
开发语言: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 }
最后,在企业号界面上点“保存”按钮,即可验证,一般来说,就可以通过了。
谁无虎落平阳日,待我风云再起时!