文章目录
- 一、 验证URL有效性
- 1. 阅读文档
- 2. 文档分析
- 3. 加解密方案说明
- 4. 下载加解密算法
- 5. 案例分析
- 二、实战集成
- 2.1. 工具类拷贝
- 2.2. 依赖引入
- 2.3. 案例1集成
- 2.4. 参数处理
- 2.5. 重启项目
- 2.6. 验证URL有效性
- 2.7. 验证
- 三、消息接收与处理
- 3.1. 文档阅读
- 3.2. 案例2拷贝
- 3.3. 参数处理
- 3.4. 重启项目
- 3.5. 发送消息
- 3.6. 验证
- 3.7. 日志监控
- 3.8. 收到回复消息
- 四、源码分享
- 4.1. 后端源码
- 4.2. 前端源码
一、 验证URL有效性
官网文档:https://developer.work.weixin.qq.com/document/path/90238
1. 阅读文档
当点击“保存”提交以上信息时,企业微信会发送一条验证消息到填写的URL,请求方式为GET。
企业的接收消息服务器接收到验证请求后,需要作出正确的响应才能通过URL验证
2. 文档分析
从文档可以知道,咱们再应用管理配置的接收消息服务期配置的url,企业微信会发送一个get请求携带4个参数(msg_signature、timestamp、nonce、echostr)来验证URL有效性
3. 加解密方案说明
点击进入 加解密方案说明
4. 下载加解密算法
鉴于加解密算法相对复杂,企业微信提供了算法库,目前已有c++/python/php/java/golang/c#等语言版本。均提供了解密、加密、验证URL三个接口,企业可根据自身需要下载,下载下载地址
5. 案例分析
打开Readme.txt
注意事项
1.com\qq\weixin\mp\aes目录下是用户需要用到的接入企业微信的接口,其中WXBizMsgCrypt.java文件提供的WXBizMsgCrypt类封装了用户接入企业微信的三个接口,其它的类文件用户用于实现加解密,用户无须关心。sample.java文件提供了接口的使用求例。
2.WXBizMsgCrypt封装了VerifyURL, DecryptMsg, EncryptMsg三个接口,分别用于开发者验证回调url,收到用户回复消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.java文件。
3.加解密协议请参考企业微信官方文档。
4.请开发者使用jdk1.6以上的版本。针对org.apache.commons.codec.binary.Base64,需要导入架包commons-codec-1.9(或commons-codec-1.8等其他版本),我们有提供,官方下载地址:http://commons.apache.org/proper/commons-codec/download_codec.cgi****请特别注意******
5.异常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目录下覆盖原来文件
从Readme.txt文件内容我们分析如下:
1.com\qq\weixin\mp\aes目录下提供了一些加解密的工具类
2.WXBizMsgCrypt用途在于回调url,收到用户回复消息的解密以及开发者回复消息的加密过程。Sample.java文件为案例代码
3.commons-codec-1.9的依赖
二、实战集成
2.1. 工具类拷贝
将com\qq\weixin\mp\aes目录下的工具类复制到项目的com.gblfy.qywxinner.qywxdecode包下面
2.2. 依赖引入
在项目的pom.xml文件中引入commons-codec依赖
2.3. 案例1集成
在项目com.gblfy.qywxinner.controller包下的MessageController类中添加callback方法,将Sample.java类中将案例1代码复制过来,将sToken、sCorpID、sEncodingAESKey配置信息替换为自己的
2.4. 参数处理
由于企业微信会携带4个参数(msg_signature、timestamp、nonce、echostr)请求咱们的配置验证url有效性的地址(http://4663588nl3.zicp.vip/message/callback),因此,咱们需要从callback方法中接收企业微信传过来的参数sVerifyMsgSig、sVerifyTimeStamp、sVerifyNonce、sVerifyEchoStr
写法如图
2.5. 重启项目
略
2.6. 验证URL有效性
然后,执行以下操作,重新保存
2.7. 验证
点击保存机会请求咱们的配置的url地址,进入咱们callback的方法中,进行加解密操作,然后,返回。
三、消息接收与处理
3.1. 文档阅读
接收企业微信传递过来的参数和回复
请求方式为POST,同一个地址(http://4663588nl3.zicp.vip/message/callback)
3.2. 案例2拷贝
在项目com.gblfy.qywxinner.controller包下的MessageController类中添加callbackData方法,将Sample.java类中将案例2代码复制过来,将sToken、sCorpID、sEncodingAESKey配置信息替换为自己的
3.3. 参数处理
由于企业微信会携带4个参数(msg_signature、timestamp、nonce)请求咱们的配置验证url有效性的地址(http://4663588nl3.zicp.vip/message/callback),因此,咱们需要从callback方法中接收企业微信传过来的参数sVerifyMsgSig, sReqTimeStamp, sReqNonce, sRespData,其中sRespData是咱们的消息体
写法如图
3.4. 重启项目
略
3.5. 发送消息
3.6. 验证
3.7. 日志监控
控制台日志
解密decrypt企业微信推送的消息->sMsg:<xml><ToUserName><![CDATA[wwea98220fdcd8a38d]]></ToUserName><FromUserName><![CDATA[ZeXin]]></FromUserName><CreateTime>1646043916</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你好,测试企业微信处理消息]]></Content><MsgId>7069704788922636053</MsgId><AgentID>1000002</AgentID></xml>
Content:你好,测试企业微信处理消息
回复->data:<xml><ToUserName><![CDATA[ZeXin]]></ToUserName><FromUserName><![CDATA[ZeXin]]></FromUserName><CreateTime>1646043916</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[this is a test]]></Content></xml>
3.8. 收到回复消息
四、源码分享
4.1. 后端源码
后端:https://gitee.com/gblfy/qywx-inner-java
4.2. 前端源码
前端:https://gitee.com/gblfy/qywx-vuejs