如何配置自己的服务器接入微信服务器
来源:互联网 发布:怎么在淘宝社区发帖 编辑:程序博客网 时间:2024/05/17 22:37
要想做微信开发,首先您得有台自己的服务器;当然,您也可以租用服务器,如万网的云服务器或云虚拟主机(不加个“云”都不好意思拿出来说,呵呵),X3型虚拟主机也就88¥/年;亦或是阿里的ECS,免费半年(不过没有带宽不分配公网IP,自己得另外花钱卖)。 以上不是广告,只是本人一直再用而已。总之一句话,有台能部署网站并且能在外网访问的服务器就行。
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 = "test"; 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、验证微信签名有效性
/// <summary> /// 验证微信加密签名有效性 /// <para>加密/校验流程如下:</para> /// <para>1. 将token、timestamp、nonce三个参数进行字典序排序</para> /// <para>2. 将三个参数字符串拼接成一个字符串进行sha1加密</para> /// <para>3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信</para> /// </summary> /// <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 }; Array.Sort(tmpArr); string tmpStr = string.Join("", tmpArr); tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); tmpStr = tmpStr.ToLower(); return tmpStr == 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请求。该请求携带了四个参数,下面是用C#在一般处理程序(ashx)中获取参数的代码:
string signature = context.Request.QueryString["signature"]; string timestamp = context.Request.QueryString["timestamp"]; string nonce = context.Request.QueryString["nonce"]; string echostr = context.Request.QueryString["echostr"];拿到这些参数后,结合您自己设置的Token,您就可以根据微信提供的算法进行验证。具体算法如下:
a、将token、timestamp、nonce三个参数进行字典序排序;
b、 将三个参数字符串拼接成一个字符串进行sha1加密;
c、开发者获得加密后的字符串可与signature对比,标识该请求来源于微信;
A、您算出来的签名字符串
(token, timestamp, nonce)->您算出来的签名字符串
B、比较两个签名字符串
if(您算出来的签名字符串 == signature)
C、原样返回随机字符串
return echostr
当您提交验证通过之后,那么恭喜您,您的服务器就已经成功接入微信服务器,您也就成为了微信开发者。接下来就可以根据微信提供的接口,处理各种微信服务器转发过来的消息和事件了。后继文章将会进行详细介绍,敬请期待!
- 如何配置自己的服务器接入微信服务器
- 微信开启服务器配置,确定是自己的服务器
- 微信服务器接入流程
- 接入微信公众号:验证服务器地址的有效性
- ruby--微信开发(接入服务器)
- 微信开发 公众号接入服务器
- 微信开发,获得自己的服务器
- 新手如何配置自己的Tomcat服务器
- java微信公众号开发01 - 微信服务器的接入和验证
- java微信公众号开发 - 微信服务器的接入和验证
- 小翼微信机器人-如何创建自己的微信机器人挂机网站,WEB服务器设置教程
- 微信 服务器配置 (四)
- c#微信服务器配置
- 微信开发(一)公众号接入服务器
- java微信开发API解析(一)-服务器接入
- java微信开发API解析(一)-服务器接入
- 利用 django+wechat-python-sdk 创建微信服务器接入
- 微信上传图片到自己的服务器
- 麻省理工学院公开课:算法导论15动态规划
- NSString的几种常用方法
- v$sqlarea和v$lock
- SQL SERVER DBA随笔
- 3D打印医疗应用
- 如何配置自己的服务器接入微信服务器
- 按位反转8位数据
- malloc内存分配
- 网页WB.ExecWB控件打印方法
- 网站架构优化与设计模式
- linux SPI结构体
- extern "c"用法解析
- Log4Cplus在Linux下的安装及使用
- 选择排序