知方号

知方号

对接企业微信4:接收消息与事件<如何进入企业微信后台>

对接企业微信4:接收消息与事件

关于接收消息

为了能够让自建应用和企业微信进行双向通信,企业可以在应用的管理后台开启接收消息模式。 开启接收消息模式的企业,需要提供可用的接收消息服务器URL。 开启接收消息模式后,用户在应用里发送的消息会推送给企业后台。此外,还可配置地理位置上报等事件消息,当事件触发时企业微信会把相应的数据推送到企业的后台。 企业后台接收到消息后,可在回复该消息请求的响应包里带上新消息,企业微信会将该被动回复消息推送给用户。

开启接收消息 设置接收消息的参数

在企业的管理端后台,进入需要设置接收消息的目标应用,点击“接收消息”的“设置API接收”按钮,进入配置页面。  

要求填写应用的URL、Token、EncodingAESKey三个参数

URL是企业后台接收企业微信推送请求的访问协议和地址,支持http或https协议。Token可由企业任意填写,用于生成签名。EncodingAESKey用于消息体的加密,是AES密钥的Base64编码。

这三个参数的用处在加解密方案说明章节会介绍,此处不用细究。

验证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、CorpID四个字段,其中msg即为消息内容明文

企业后台收到请求后,需要做如下操作:

对收到的请求做Urldecode处理通过参数msg_signature对请求进行校验,确认调用者的合法性。解密echostr参数得到消息内容(即msg字段)在1秒内原样返回明文消息内容(不能加引号,不能带bom头,不能带换行符)

以上2~3步骤可以直接使用验证URL函数一步到位。 之后接入验证生效,接收消息开启成功。

使用接收消息

开启接收消息模式后,企业微信会将消息发送给企业填写的URL,企业后台需要做正确的响应。

接收消息协议的说明 企业微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。如果企业在调试中,发现成员无法收到被动回复的消息,可以检查是否消息处理超时。当接收成功后,http头部返回200表示接收ok,其他错误码企业微信后台会一律当做失败并发起重试。关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime排重。假如企业无法保证在五秒内处理并回复,或者不想回复任何内容,可以直接返回200(即以空串为返回包)。企业后续可以使用主动发消息接口进行异步回复。 接收消息请求的说明

假设企业的接收消息的URL设置为http://api.3dept.com。请求方式:POST请求地址 :http://api.3dept.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323

接收数据格式 :

参数说明

参数说明ToUserName企业微信的CorpID,当为第三方套件回调事件时,CorpID的内容为suiteidAgentID接收的应用id,可在应用的设置页面获取Encrypt消息结构体加密后的字符串

企业收到消息后,需要作如下处理:

对msg_signature进行校验解密Encrypt,得到明文的消息结构体(消息结构体后面章节会详说)如果需要被动回复消息,构造被动响应包正确响应本次请求

以上1~2步骤可以直接使用解密函数一步到位。 3步骤其实包含加密被动回复消息、生成新签名、构造被动响应包三个步骤,可以直接使用加密函数一步到位。

被动响应包的数据格式:

timestamp

参数说明

参数是否必须说明Encrypt是经过加密的消息结构体MsgSignature是消息签名TimeStamp是时间戳Nonce是随机数,由企业自行生成

 java解密:

json版本(2023年9月1日更新,点击下载

注意事项:

1.企业微信回调sdk json版本2.comqqweixinmpaes目录下是用户需要用到的接入企业微信的接口,其中WXBizJsonMsgCrypt.java文件提供的WXBizJsonMsgCrypt类封装了用户接入企业微信的三个接口,其它的类文件用户用于实现加解密,用户无须关心。sample.java文件提供了接口的使用求例。3.WXBizJsonMsgCrypt封装了VerifyURL, DecryptMsg, EncryptMsg三个接口,分别用于开发者验证回调url,收到用户回复消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.java文件。4.加解密协议请参考企业微信官方文档。5.请开发者使用jdk1.6以上的版本。针对org.apache.commons.codec.binary.Base64,需要导入架包commons-codec-1.9(或commons-codec-1.8等其他版本),我们有提供,官方下载地址:Codec – Download Apache Commons Codec

6.针对json解析,需要编译导入架包json.jar,我们有提供,官方源码下载地址 : GitHub - stleary/JSON-java: A reference implementation of a JSON package in Java.

7.异常java.security.InvalidKeyException:illegal Key Size的解决方案: 在官方网站下载JCE无限制权限策略文件(JDK7的下载地址:Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 7 Download 下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt。如果安装了JRE,将两个jar文件放到%JRE_HOME%libsecurity目录下覆盖原来的文件,如果安装了JDK,将两个jar文件放到%JDK_HOME%jrelibsecurity目录下覆盖原来文件

此处参考博客:java.security.InvalidKeyException: Illegal key size错误_伫望向北的博客-CSDN博客

记得重启项目哦

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。