![微信公众平台企业号开发揭秘](https://wfqqreader-1252317822.image.myqcloud.com/cover/489/26793489/b_26793489.jpg)
3.2 回调模式
登录企业号,在页面右上方单击“开发者中心”选项进入开发者中心,然后单击“开发文档”→“开始开发”选项,选择回调模式,参考里面的开发文档。
3.2.1 回调模式概述
关于回调模式,主要概括为两个要点,第一点是处于回调模式下,可以主动调用企业号接口,还可以接收成员的消息和事件,第二点是每个应用都有自己开发回调模式的开关,可以在管理端设置相关参数。
3.2.2 使用回调模式所需加解密库下载
关于回调模式的开启和交互,需要我们下载加解密库,官方提供多种语言版本,可以自行下载。大家也可以关注笔者的微信企业号获取下载地址。
3.2.3 接收消息的加解密处理
企业号在回调企业URL时,会对消息体本身做AES加密,以XML格式POST到企业应用的URL上。企业在被动响应时,也需要对数据加密,以XML格式返回给微信。企业的回复支持文本、图片、语音、视频、图文等格式。下载微信官方提供的加解密库之后,将需要替换的库文件替换掉即可,然后调用加解密函数进行开发。
3.2.4 编写加解密调用函数
为了方便大家学习,笔者新建了一个微信企业号项目,从零开始、一点一滴地把整个开发流程全部详细地讲解和展示出来。新建一个项目,然后下载官方网站提供的加解密Java库并解压,复制到自己新建的项目下。为了方便管理,最好新建一个新的包名,注意命名规范,然后将其复制到该包名下,导入需要用到的第三方jar,后面会告诉大家需要哪些第三方jar。接下来开始编写新的工程。在编写之前一定要替换JDK的jat,官方网站的文档如图3-14所示。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P65_4433.jpg?sign=1739525921-xMlsWsIyDx11csgxsoRllb2whQAMCmJk-0-4a08a762f827afaef107f0099496b603)
图3-14 替换JDK及导入三方jar
图3-14说明的内容如下。
(1)com\qq\weixin\mp\aes目录下是用户需要用到的接入企业微信的接口,其中WXBizMsgCrypt.java文件提供的WXBizMsgCrypt类封装了用户接入企业微信的三个接口,其他类文件用于实现加解密,用户无须关心。sample.java文件提供了接口的使用示例。
(2)WXBizMsgCrypt封装了VerifyURL、DecryptMsg、EncryptMsg三个接口,分别用于开发者验证回调url、接收消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.java文件。
(3)请开发者使用jdk1.6或以上版本。针对org.apache.commons.codec.binary.Base64,需要导入jar包commons-codec-1.9(或comm ons-codec-1.8等其他版本),官方下载地址:http://commons.apache.org/proper/commons-codec/download_codec.cgi。
(4)异常java.security.InvalidKeyException:illegal Key Size的解决方案:在官方网站下载JCE无限制权限策略文件(请到官网下载对应的版本,例如JDK7的下载地址:http://www.oracle.com/ technetwork/java/javase/downloads/jce-7-download-432124.html)。下载后解压,可以看到local_policy.jar、US_export_policy.jar以及readme.txt。如果安装了JRE,就将两个jar文件放到%JRE_HOME% \lib\security目录下覆盖原来的文件;如果安装了JDK,就将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来的文件。
全部完成之后,打开MyEclipse,开始新项目的编写。首先看看项目的主要构成(见图3-15),再开展后面的工作。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P66_4445.jpg?sign=1739525921-GOrkpuqxp0wSCtQdqz3LoF3pss1FZQl8-0-e6cdd24be82ff27d073bbfca2db8a89e)
图3-15 初次编写的项目结构
jsp.weixin.encryption.util下的类都来自微信官方网站下载的加解密库,ParamesAPI主要是一些需要配置的参数,后面需要修改时可以更快地找到对应的参数并修改。CoreServlet为核心的请求、外发类,包括加密、解密消息。注意导入需要的jar,web.xml、index.jsp的相关配置也会详细介绍。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P66_65040.jpg?sign=1739525921-OU4nmu1j7lDzQcaPSM6TxY7x930t7Y5G-0-7b51cbe5b5c59864719851783d8230a3)
上述代码是参数类的配置,接下来再编写一个请求类CoreServlet。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P66_65041.jpg?sign=1739525921-qS4w1xGK6I9WUB1he3jGb9ZjmO1OiGrH-0-0c6dfe5b11978f011f6de373b8ec5265)
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P67_65042.jpg?sign=1739525921-m7LF7L4FzmvkaAvEVYhi5Wa57T83gDAX-0-eae4dcde56e8a484528bd14d687ee170)
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P68_65043.jpg?sign=1739525921-KvNv6Iq2opbMeGRc7NVyG6wE45vOdItH-0-63f8487567751bec83e129ff3d6d4382)
这是需要写的核心请求类,写完这个类开始配置xml、index文件。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P68_65044.jpg?sign=1739525921-Jkhv6BUSVL7uVu1Au8WgbGBPCIxGvaLY-0-2acbc3380e6acd080ca37d35ce880957)
在index.jsp里配置一下验证信息,信息可以随意填写,如笔者填写的是英文笔名。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P69_65045.jpg?sign=1739525921-oPL8yO7WF8qDxBCEHDLRuXCTRl3lOldD-0-2baa492c6090f01efd61c42f1fa0d37e)
在body标签对之间输入一些特定的内容,待浏览器打开该页面时,可查看内容是否一致。
整个项目完成之后,需要再部署一次,在本地验证一遍,最后上传到服务器,如图3-16所示。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P69_5469.jpg?sign=1739525921-EvXkZ1X7tvm6tz3frNya50rmrDH7l2lS-0-69c13022fd7fe772a01ed0c61fd872a3)
图3-16 部署新的项目
按图3-16所示的步骤操作,最后单击“OK”按钮,再打开浏览器,输入地址http://localhost/ WeiXinEnterprises。如果服务器配置端口为8080,地址需要这样写http://localhost:8080/ WeiXinEnterprises,输完后按回车键,跳到默认的index.jsp页面,如图3-17所示。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P69_5477.jpg?sign=1739525921-AbySXLb88zzePzNA1PiTTGYoHP5zOVhb-0-cf8177ed44750dbb9697798fcc8a19aa)
图3-17 本地测试OK
3.2.5 项目提交到服务器
按图3-16操作后,会在Tomcat安装路径下的webapps目录下生成对应的项目,需要把项目上传到服务器部署或打包成WAR,通过Web Manager的方式提交。下面给大家介绍两种上传方式。
第一种方式是Web Manager 上传,首先按图3-18所示操作,把项目导出。
单击Export选项进入如图3-19所示的界面,单击J2EE选项展开其子选项,再选择WAR file选项,然后单击“Next”按钮进入如图3-20所示的界面,最后单击“Finish”按钮即可。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P70_5489.jpg?sign=1739525921-Jsi8zqmwa0Q8FvCUSw2QQpLn58koFuZC-0-718b4f9fbbad86275f7666bdf0b6266c)
图3-18 项目打包成WAR
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P70_5499.jpg?sign=1739525921-tYnhTliWFudrJbrHLj45Fr2RdtQYO7zq-0-39e13f425146c1c410288a1d0142e563)
图3-19 选择WAR file
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P70_5500.jpg?sign=1739525921-s8iBDZjqpgDjzNOHNN9GQ6aDJGh46Ho7-0-49bea656f7bd6276ae83ead170eabf91)
图3-20 导出WAR文件
在浏览器中输入服务器地址,打开远程服务器管理页面,如图3-21所示,输入用户名和密码,再单击“确定”按钮。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P70_5511.jpg?sign=1739525921-ceJNp6iWTacbefZOVLcj6HIPkUyClLHA-0-7656bb33a62ef845afafbc85bba7af27)
图3-21 远程登录管理页面
登录成功后,进入如图3-22所示的界面,拖动页面至底部,单击“选择文件”按钮,弹出文件选择框,找到刚刚导出项目的WAR文件并选中,再单击“打开”按钮,最后单击“Deploy”按钮即可开始上传项目的WAR文件。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P71_5523.jpg?sign=1739525921-DZjuqnewWKAf4vAHPOrWEwXIsiEmGzM0-0-7a1a4373e16011ccdf254f5501f73ca0)
图3-22 上传WAR文件
上传完成后,往上拖动页面至Applications表格并单击WeiXinEnterprises选项,可查看WeiXinEnterprises项目的默认页面。
在浏览器中输入项目地址并访问该地址,项目部署成功的界面如图3-23所示。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P71_5533.jpg?sign=1739525921-XjSrhqo6APgRPZTxzmtRCcVDVws0jN2s-0-43200a1c5565354e59f51061b0fc4b0f)
图3-23 项目部署成功
第二种方式是直接复制本地webapps目录下的对应项目到服务器Tomcat安装路径下的webapps目录,如图3-24所示。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P71_5544.jpg?sign=1739525921-LLkLXhS5KpDBfzAJK2eEn6hOOZ59s1XJ-0-6c56e7fd5dac7fb13f5a7dfad25568ed)
图3-24 在服务器部署
重启服务器端Tomcat,在浏览器中输入项目访问地址即可查看该项目的默认页面。
3.2.6 开启回调模式
登录企业号,进入企业号管理后台的“企业应用”页面。开启回调模式之前需要选择一个应用,然后填写相关的参数。笔者选择“Android趣味堂”作为开启回调模式的应用,如图3-25所示。当然,其他应用也可以开启回调模式。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P72_5581.jpg?sign=1739525921-7nkVv1YHdDYJCxyXWc734kjlWpzGZVfK-0-bad536b294178755a6d79d9c5aaa5dd3)
图3-25 选择开启回调模式的应用
单击这个应用,进入该应用的详细信息页面,如图3-26所示。找到接收消息选项,单击“设置API接收”选项,进入如图3-27所示的界面,开始填写开启回调模式的相关信息和配置项。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P72_5558.jpg?sign=1739525921-MQyKB1hbOmjOcFmqAwojIPonFHXS0NP8-0-112fb15bbfec753a5bf401896333e0f5)
图3-26 单击“设置API接收”选项
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P72_5559.jpg?sign=1739525921-1bsnxj5p42LRBEUIzsL2XhGKdDF1SEnV-0-c687d00a7d90f0ff19257f42952a6efa)
图3-27 填写回调模式配置信息
接下来详细介绍3个参数的意义,以及怎么获取并开启回调模式。
- URL:为发布和部署应用的服务器的域名,具体怎么填写后面会讲。
- Token:为后台验证需要,在这里的Token需要跟后台,即我们写的回调应用里的Token。
- EncodingAESKey:为后台随机生成的。
如图3-28所示的代码为开启回调模式需要的参数。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P72_5573.jpg?sign=1739525921-y3UX9RQZ6vYMcxe1aAS0zeUxaVoIthYd-0-fd5383251c3497cbdd03467fe55536a3)
图3-28 需要的参数
Secret参数的获取方式是,进入企业号管理后台,单击“企业应用”选项,进入“企业应用”页面,如图3-29所示。
在“企业应用”页面单击所要调试的应用后,进入应用详情页面,如图3-30所示,框内的内容就是Secret参数了。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P73_5601.jpg?sign=1739525921-Xf6y7x5IBTKSdy1Hdo73l6IBVq6S9izL-0-c02b3143c8fe4aa2dae809cc6f7b57e2)
图3-29 进入“企业应用”页面
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P73_5602.jpg?sign=1739525921-RgVCVG4DLEgDx12usdgJei1xENbz1tlw-0-b16e0d41a9754fb1326e5ca83d4a4d4e)
图3-30 获取Secret
需要注意的一点是,EncodingAESKey参数是有时间限制的,如果长时间没有使用,配置回调模式就会失败,需要再次生成新的密钥才行,所以EncodingAESKey生成之后需要尽快使用,如图3-31所示。
参数填写完之后,单击“保存”按钮,等待返回结果。
如图3-32所示的界面为成功开启回调模式。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P73_5618.jpg?sign=1739525921-Ue8UcW017F2W1zq7TIZ9JcDNq42FWBd0-0-babd87b50ac544f76eebaeee0958c525)
图3-31 填写参数
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P73_5619.jpg?sign=1739525921-2dA4zfWVwPm6kQetzN6O8vqPPSdKHzsw-0-e64e66a9ce3fcc3ed0942378341d64ef)
图3-32 回调模式开启成功
成功开启回调模式之后,就可以使用回调模式、测试回调模式了。