一般处理程序ashx接入微信服务器配置
首先在威信后台填写服务器相关配置,这里按照说明直接填写就好了。配置提交前在需要在我们服务端先准备号接受微信请求的url,对请求内容做验证。
1、准备接口配置信息
A、服务器URL
该URL用于开发者接入时微信验证的GET请求地址,后继普通用户通过您的微信公众账号发送的信息或各种操作产生的事件,微信服务器也会转发并POST到这个URL上。这样您就可以根据不同的消息类型做URL路由,分别处理不同的消息或事件。要注意的是,目前只支持http方式,不支持https方式,而且只支持默认的80端口。
B、Token字符串
Token是用来生成签名的一个字符串,您可以随便填写(必须是英文字母或数字,最少3个字符,最多32个字符),只要你验证微信加密签名有效性时使用这个Token就可以了。它生成微信加密签名的一个参数,主要用于验证接入的安全性。
提示:如果您用的是测试号,配置上述信息即可;但如果是正式开发中,微信最新的要求还需要填写“消息加密密钥”并选择“消息加解密方式”。
C、消息加密密钥
消息加密密钥(EncodingAESKey)是微信最新的要求,其由43个字符组成,你可以自己手动填写,也可以点击“随机生成”。消息加密密钥只能是英文字母或数字,它的作用是“给消息体加密和解密”。
D、消息加解密方式
消息加解密的方式有三种,即“明文方式”、“兼容模式”和“安全模式”。
明文模式下消息加密密钥就废了,消息体不会使用上述密钥进行加密,安全系统较低;
兼容模式主要用于开发者调试程序,此时明明文和密文共同存在;
安全模式是微信推荐使用的方式,消息体被加密成纯密文,安全系统较高,但开发者需要自己加密和解密。
2、编写响应微信GET请求的代码
A、Get请求
// <summary> /// 开发者指定的Token /// </summary> const string token = "pmlaomao"; public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; switch (context.Request.HttpMethod) { case "GET": //接入成功后可以注释此行 JoinWeixin(context); break; case "POST": //解析微信请求的XML消息文档 ParseXmlDocument(context); break; default: context.Response.Write("不支持" + context.Request.HttpMethod + "方式!"); break; } context.Response.End(); }
B、验证微信签名有效性
/// <param name="signature"> /// 微信加密签名 /// <para>signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。</para> /// </param> /// <param name="timestamp">时间戳</param> /// <param name="nonce">随机数</param> /// <returns></returns> private bool CheckSignature(string signature, string timestamp, string nonce) { string[] tmpArr = { token, timestamp, nonce };//将token、timestamp、nonce三个参数进行字典序排序 Array.Sort(tmpArr); string tmpStr = string.Join("", tmpArr); tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");//将三个参数字符串拼接成一个字符串进行sha1加密 tmpStr = tmpStr.ToLower(); return tmpStr == signature;//开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 }
C、原样返回echostr参数
/// <summary> /// 接入微信 /// <para>返回echostr参数内容,则接入生效,否则接入失败。 </para> /// </summary> /// <param name="context"></param> private void JoinWeixin(HttpContext context) { string signature = context.Request.QueryString["signature"]; string timestamp = context.Request.QueryString["timestamp"]; string nonce = context.Request.QueryString["nonce"]; string echostr = context.Request.QueryString["echostr"]; if (CheckSignature(signature, timestamp, nonce)) { if (!string.IsNullOrEmpty(echostr)) { context.Response.Write(echostr); } else { context.Response.Write("随机字符串为空!"); } } else { context.Response.Write("微信加密签名验证失败!"); } context.Response.End(); }
3、配置页面提交申请
完成上述代码编写并部署到您的服务器后,您就可以在微信公众平台“开发者中心”->“配置项”中填写上述准备好的接口配置信息,然后点击“提交”按钮将配置信息提交给微信服务器。微信服务器收到信息之后,会向您提交的URL地址发送一条GET请求.
完成上述工作后,在微信后台提交配置就可以进行验证,注意Token一定要与微信配置中的一直。