- 微信公众平台企业号开发揭秘
- 蒋书平
- 2509字
- 2021-03-24 12:04:29
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=1739357398-ikixCs1eCY3q5P4tWPSFtPOqCXJydZrA-0-63b79f0088470d316480201ed6ca4145)
图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=1739357398-tma2dGvlXQDG5CAAa9WgNPk4Heo0yC51-0-0a80347b240871448ae0312923e2155a)
图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=1739357398-ep0N84afgjfgs54Vv5ZzUrLPYVmeI4sZ-0-71d0a874d71020abc66c069686b920f9)
上述代码是参数类的配置,接下来再编写一个请求类CoreServlet。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P66_65041.jpg?sign=1739357398-HZP8K7YwNY4aiN8btRIcfUfOzjczwDE7-0-1c162bb0ad666c8b62a1934a59454fb9)
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P67_65042.jpg?sign=1739357398-ccvxfYXKSeh9iNmMV5QllinM6b4V1Io8-0-7b65d1334400191db559702f2f180101)
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P68_65043.jpg?sign=1739357398-xQoFsPooyP8VWBt0rxaaoImrRO77ief8-0-3dfaba83a92e04659754f8e9d02ee77b)
这是需要写的核心请求类,写完这个类开始配置xml、index文件。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P68_65044.jpg?sign=1739357398-BjTIn5ug5v0Uu2nQa1WUsRry11ktQNUu-0-4665a43ff553e97a59419c2e3bb777fb)
在index.jsp里配置一下验证信息,信息可以随意填写,如笔者填写的是英文笔名。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P69_65045.jpg?sign=1739357398-mT49YCjTZdhG2tnq1kpzgcH3vUiQQsYt-0-aeffb3deb598c4a30557c61f5fe3bcca)
在body标签对之间输入一些特定的内容,待浏览器打开该页面时,可查看内容是否一致。
整个项目完成之后,需要再部署一次,在本地验证一遍,最后上传到服务器,如图3-16所示。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P69_5469.jpg?sign=1739357398-P1uNjc8R8JtqpgVMViVciuYIEdvtAXKl-0-e3681297321c2e03726d9643397f7a1f)
图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=1739357398-vok5q933ESkGInfCNEOZZt64wCsdCyXA-0-2203ca068737586a368d0f7f6708b6b3)
图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=1739357398-pQejF5OEWI0gOeU4l1rZUxi4cwSSZ1gh-0-536a097286a04d5248e57f77f70f1a0b)
图3-18 项目打包成WAR
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P70_5499.jpg?sign=1739357398-QR5Z0cTIh6nXtBhVTnHVqHEkUxhVThNl-0-03bdab7ee2f42d4c8adbbb148f61bc71)
图3-19 选择WAR file
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P70_5500.jpg?sign=1739357398-sR7k96K0yGgVhwtu7lSpPFk96EMMBevA-0-2031516a77b0145fbd981b2e3a7fc61d)
图3-20 导出WAR文件
在浏览器中输入服务器地址,打开远程服务器管理页面,如图3-21所示,输入用户名和密码,再单击“确定”按钮。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P70_5511.jpg?sign=1739357398-3IIFpUmVflxPVQjYUVJHz0TCXr2D39CY-0-7c3b517814eb3b8ec663a93b639f2039)
图3-21 远程登录管理页面
登录成功后,进入如图3-22所示的界面,拖动页面至底部,单击“选择文件”按钮,弹出文件选择框,找到刚刚导出项目的WAR文件并选中,再单击“打开”按钮,最后单击“Deploy”按钮即可开始上传项目的WAR文件。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P71_5523.jpg?sign=1739357398-a8pWyZL3RB7gz1xFWzzB7GE2xZegyf1k-0-b6eb81706f3cef6e58ad67229e9ede15)
图3-22 上传WAR文件
上传完成后,往上拖动页面至Applications表格并单击WeiXinEnterprises选项,可查看WeiXinEnterprises项目的默认页面。
在浏览器中输入项目地址并访问该地址,项目部署成功的界面如图3-23所示。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P71_5533.jpg?sign=1739357398-MIiA41UMmMONQK7idGEOWwLDwRToEZBN-0-7715db9af3fca182e4c478d9c5abdff5)
图3-23 项目部署成功
第二种方式是直接复制本地webapps目录下的对应项目到服务器Tomcat安装路径下的webapps目录,如图3-24所示。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P71_5544.jpg?sign=1739357398-mTx14XDUlq0BdT7KCcJGxv2yKJuOy15O-0-8ad5d51bcb81660c55f0a5c7a83a63d0)
图3-24 在服务器部署
重启服务器端Tomcat,在浏览器中输入项目访问地址即可查看该项目的默认页面。
3.2.6 开启回调模式
登录企业号,进入企业号管理后台的“企业应用”页面。开启回调模式之前需要选择一个应用,然后填写相关的参数。笔者选择“Android趣味堂”作为开启回调模式的应用,如图3-25所示。当然,其他应用也可以开启回调模式。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P72_5581.jpg?sign=1739357398-liC3KFS018C0FvlsRUeFtGoTc2K4hyOS-0-6a8acc42c1a16ca929db52fd2bf37fcd)
图3-25 选择开启回调模式的应用
单击这个应用,进入该应用的详细信息页面,如图3-26所示。找到接收消息选项,单击“设置API接收”选项,进入如图3-27所示的界面,开始填写开启回调模式的相关信息和配置项。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P72_5558.jpg?sign=1739357398-xAyfxSNIS4XWklULy7QTjdglMcEVtsOx-0-2835fc20732ffae67fa993f8ed7d0375)
图3-26 单击“设置API接收”选项
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P72_5559.jpg?sign=1739357398-yT74EJTAaZ7HrZougrgAvdZQJBCNiEWp-0-9db382e7eadb14c62b20b6abb83e7e9e)
图3-27 填写回调模式配置信息
接下来详细介绍3个参数的意义,以及怎么获取并开启回调模式。
- URL:为发布和部署应用的服务器的域名,具体怎么填写后面会讲。
- Token:为后台验证需要,在这里的Token需要跟后台,即我们写的回调应用里的Token。
- EncodingAESKey:为后台随机生成的。
如图3-28所示的代码为开启回调模式需要的参数。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P72_5573.jpg?sign=1739357398-t7aSlUYjnr0uL9H53izkl8TrNCkb1l96-0-75aaf590308abf5448c43a25e965aa9a)
图3-28 需要的参数
Secret参数的获取方式是,进入企业号管理后台,单击“企业应用”选项,进入“企业应用”页面,如图3-29所示。
在“企业应用”页面单击所要调试的应用后,进入应用详情页面,如图3-30所示,框内的内容就是Secret参数了。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P73_5601.jpg?sign=1739357398-FD6ftyIg3Is5dB6vuK6TwGlQVkmzfoEO-0-a5e5b1f80099240c55a5d30d64c903df)
图3-29 进入“企业应用”页面
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P73_5602.jpg?sign=1739357398-t9nSKUN38WsuF2Nzms1vC1q191aBJ0LC-0-7bcdaec22830c6930e1cc7f22e01888e)
图3-30 获取Secret
需要注意的一点是,EncodingAESKey参数是有时间限制的,如果长时间没有使用,配置回调模式就会失败,需要再次生成新的密钥才行,所以EncodingAESKey生成之后需要尽快使用,如图3-31所示。
参数填写完之后,单击“保存”按钮,等待返回结果。
如图3-32所示的界面为成功开启回调模式。
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P73_5618.jpg?sign=1739357398-JfNvCRtRbQCQD1VujusTygUuBzY1Na44-0-d79951900c8401defabf5cd6ecf4507e)
图3-31 填写参数
![](https://epubservercos.yuewen.com/0DAA23/15253384304103006/epubprivate/OEBPS/Images/Figure-P73_5619.jpg?sign=1739357398-gxS9SiroSgRoCXXwYEPA95egoHQ3o27I-0-52e1cf7ae0a98c2f874f347aa0bebaf8)
图3-32 回调模式开启成功
成功开启回调模式之后,就可以使用回调模式、测试回调模式了。