审批接口调用总是伴随着状态回调的通知,设置接收消息,可以让自建应用和企业微信之间进行双向通信。
当然在此之前,我们需要确定,企业微信后台是否开启了审批状态通知。
二. 企业微信消息交互(重要)
三. 审批状态回调
四. 查询审批状态
注意: 想要成功接收到企业微信回调的信息 ,解密Encrypt,得到明文的消息结构体尤为重要,当然解密后得到的是xml格式文件,我们还需要解析xml文件,才能得到我们想要拿到的字段。
一. 企业微信回调验证
点击保存即会开始验证url的有效性。官方文档关于验证url有效性也是介绍的很仔细。(回想当时,一步一个坑!!!)
验证URL有效性
当点击“保存”提交以上信息时,企业微信会发送一条验证消息到填写的URL,发送方法为GET。
企业的接收消息服务器接收到验证请求后,需要作出正确的响应才能通过URL验证。
企业在获取请求时需要做Urldecode处理,否则可能会验证不成功
你可以访问接口调试工具进行调试,依次选择 建立连接 > 接收消息。
假设接收消息地址设置为:http://api.3dept.com/,企业微信将向该地址发送如下验证请求:
请求方式:GET
请求地址:http://api.3dept.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323&echostr=ENCRYPT_STR
参数说明
参数 | 必须 | 说明 |
---|---|---|
msg_signature | 是 | 企业微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体 |
timestamp | 是 | 时间戳 |
nonce | 是 | 随机数 |
echostr | 是 | 加密的字符串。需要解密得到消息内容明文,解密后有random、msg_len、msg、receiveid四个字段,其中msg即为消息内容明文 |
企业后台收到请求后,需要做如下操作:
- 对收到的请求做Urldecode处理
- 通过参数msg_signature对请求进行校验,确认调用者的合法性。
- 解密echostr参数得到消息内容(即msg字段)
- 在1秒内响应GET请求,响应内容为上一步得到的明文消息内容(不能加引号,不能带bom头,不能带换行符)
以上2~3步骤可以直接使用验证URL函数一步到位。
之后接入验证生效,接收消息开启成功。
(以上来自企业微信官方文档)
在后台编码中,我们需要先下载官方demo,demo里面封装了加密、解密算法,还用验证过程中需要用到对象类。(下载官方demo)https://work.weixin.qq.com/api/doc#90000/90138/90307
//企业微信回调验证
@RequestMapping(value = "callback",method = RequestMethod.GET)
public void connect(HttpServletRequest request, HttpServletResponse response){
//当你提交以上信息时,企业号将发送GET请求到填写的URL上,GET请求携带四个参数,企业在获取时需要做urldecode处理,否则会验证不成功
// 微信加密签名
String msg_signature = request.getParameter("msg_signature");
// 时间戳
String timestamp = request.getParameter("timestamp");
// 随机数
String nonce = request.getParameter("nonce");
// 随机字符串
String echoStr = request.getParameter("echostr");
//回调key值
String sEchoStr = null;
String contacts_token = PropertiesUtil.getProperty("contacts_token");
String contacts_encodingaeskey =