[本文所描述的内容具有一定的时效性,请以实际开发所处环境为准]
再上一篇中,我们学习了如何建立主动链接,本文,将会给大家介绍如何在回调模式下,建立连接。
那么开始我们的正文部分吧。
--------------------------------------------------------------------------------------------------------------------------------------------------------
1.首先,我们仍然是访问我们的企业号开发者中心,打开建立连接下的回调模式选项:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%9B%9E%E8%B0%83%E6%A8%A1%E5%BC%8F
我们先看看官方文档是如何定义回调模式的:
在上面的描述中,黑体加粗的部分,请大家一定仔细阅读。涉及到我们如何正确的建立连接。这些关键字,我再重复一遍,请大家留意:
a.接收的消息使用XML数据格式。
b.消息使用UTF8编码
c.消息使用AES方式加密
请大家随着文章往下看,我们一步一步的讲解这3条具体的实现方式。
2.官方文档紧接做出如下的说明,这些字段的含义已经给出详细解释,在此我们不在过多解释。请大家仔细阅读即可。
3.紧接着官方文档也给出了这些参数的具体用途。如下所示:
在上面的描述中,我们重点关注以下几个内容:
a.企业在获取时需要做urldecode处理。否则验证不成功
b.企业应用对echostr参数界面并原样返回echostr明文(不能加引号,不能带bom头)
c.后续企业号都会在请求URL中带上以上参数(echostr除外),校验方式与手册验证一致。
这3条是我们正常使用回调模式的基础,请大家一定好好理解,关于上述的名词,不是我们本文叙述的中的。各位看官不懂的地方,请自行搜索资料。
到此为止,仅仅是是我们在理论上,描述录如何接入回调模式。下面,我们从代码实现层面,看看如何接入回调模式。
准备工作:
[1].一台能够被外网访问的服务器,没有这个条件的看官可以申请一台百度或者其他的服务器来做为开发使用。
[2].上面我们有提到AES加密,当然这个代码不用我们自己手动来写,仅需要下载下来使用即可。为了稳定性,安全性,建议尽量的从官网下载。
下载地址:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8A%A0%E8%A7%A3%E5%AF%86%E5%BA%93%E4%B8%8B%E8%BD%BD%E4%B8%8E%E8%BF%94%E5%9B%9E%E7%A0%81
[3].再确认一遍我们程序中的基本内容:
a.GET方式捕获请求
b.接受到的数据格式为XML
c.将接收到的密文解密,并且明文回复
好了,写着准备工作完成之后,我们来看看代码实现吧!
注意:
1.下面的实现方式为Servlet简单实现,想要其他实现方式的读者,请自行调整。在这里,我们只是演示基本流程。
2.实例代码中出现的未知类,即为引用的AES包,请读者从上述内容的下载链接,或者前往官网进行下载,下载时,请仔细阅读下载注意事项。
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 微信加密签名 String msg_signature = request.getParameter("msg_signature"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); // 随机字符串 String echostr = request.getParameter("echostr"); // 流 PrintWriter out = response.getWriter(); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 String result = null; try { WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token,encodingAESKey,corpId); // 验证URL函数 result = wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr); } catch (AesException e) { e.printStackTrace(); } if (result == null) { // result为空,赋予token,即在上文截图中设置的token result = token; } out.print(result); out.close(); out = null; }
将上面的代码再服务器端启动运行,并且设置正确的访问地址。即可看到已经接入回调模式。
-------------------------------------------------------------------------------------------------------------------------------------
至此,微信企业号开发(3)--建立连接(回调)结束。
有的读者会问,我们如何拿到用户发送到企业号中的消息呢?各位看官莫急,欲知后事如何,且听下回分解。今天我们就讲到这里,在这个环节中一定会存在各种各样的问题,请大家耐心尝试,上面的代码是历史版本的简单实现,如果有问题,请积极留言,一定有问必答。
参考资料:
[1]微信公众平台开发者文档:http://mp.weixin.qq.com/wiki/home/index.html
[2]企业号开发者接口文档:http://qydev.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5