优秀的编程知识分享平台

网站首页 > 技术文章 正文

企业微信通讯录回调通知开发-成员变更

nanyue 2025-03-04 13:23:01 技术文章 5 ℃

源自:http://www.jylt.cc/#/detail?id=
e1c59639475dba2003f95c5370c1e976

回调配置




url配置说明

  1. 验证URL有效性(https://work.weixin.qq.com/api/doc/90000/90135/90930#3.1%20%E6%94%AF%E6%8C%81Http%20Get%E8%AF%B7%E6%B1%82%E9%AA%8C%E8%AF%81URL%E6%9C%89%E6%95%88%E6%80%A7)
  2. 官方开发库下载(https://work.weixin.qq.com/api/doc/90000/90138/90307),使用该开发库能够快速的完成url有效性校验及数据的加解密操作

java库文件说明com\qq\weixin\mp\aes目录下是用户需要用到的接入企业微信的接口,其中WXBizMsgCrypt.java文件提供的WXBizMsgCrypt类封装了用户接入企业微信的三个接口,其它的类文件用户用于实现加解密,用户无须关心。


sample.java文件提供了接口的使用示例。WXBizMsgCrypt封装了VerifyURL, DecryptMsg, EncryptMsg三个接口,分别用于开发者验证接收消息的url、接收消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.java文件。


请开发者使用jdk1.6或以上的版本。针对
org.apache.commons.codec.binary.Base64,需要导入jar包commons-codec-1.9(或comm ons-codec-1.8等其他版本),我们有提供,官方下载地址:下载


异常
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目录下覆盖原来文件。

  1. 服务器端写一个接口,供验证URL有效性的时候使用
    示例:比如用户设置的URL为https://demo.qq.com
    @ResponseBody
    @RequestMapping("/")
    public String request(HttpServletRequest request) throws AesException, ParserConfigurationException, IOException, SAXException {
        parameterMap.forEach((key, value) -> log.info("param:name={}, value={}", key, Arrays.toString(value)));

        WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);
        String sVerifyMsgSig = request.getParameter("msg_signature");
        String sVerifyTimeStamp = request.getParameter("timestamp");
        String sVerifyNonce = request.getParameter("nonce");
        String sVerifyEchoStr = request.getParameter("echostr");

        String sEchoStr; //需要返回的明文
        try {
            // 验证URL成功,将sEchoStr返回
            return wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,
                    sVerifyNonce, sVerifyEchoStr);
        } catch (Exception e) {
            //验证URL失败,错误原因请查看异常
            e.printStackTrace();
        }
        return null;
    }
12345678910111213141516171819202122

官方接口说明

  • 接口地址:成员变更通知(https://work.weixin.qq.com/api/doc/90000/90135/90970)
  • 具体通知实现请参考:https://gitee.com/gitwcx/codes/kjce1zdpgt3xrwo4lbfhn31

遇到的问题

新增用户时无法获取用户的openid

新增用户时,虽然可以获取到用户的userid,但是此时用户没有使用微信登录企业微信并且也没有关注微工作台,导致通过使用接口[userid转openid](
https://work.weixin.qq.com/api/doc/90001/90143/90338)时出现错误,错误信息如下:

“errcode”:43004,“errmsg”:“require subscribe, hint: [1602639092_53_8a5db05a924c2a8ab7d1e5d4bb5c13a1], from ip: *********, more info at https://open.work.weixin.qq.com/devtool/query?e=43004”

解决方案
此时可以先记录下用户的userid,当用户登录企业微信后会触发[更新成员事件](
https://work.weixin.qq.com/api/doc/90000/90135/90970#
%E6%9B%B4%E6%96%B0%E6%88%90%E5%91%98%E4%BA%8B%E4%BB%B6),此时就可以根据userid获取到用户的openid了。

使用建议

经过这次开发,发现使用企业微信用户信息时使用userid要比使用openid更方便些,用户userid在获取用户信息的时候是可以直接拿的到的,而openid需要经过userid进行转换,有些情况下转换还会不成功。

最近发表
标签列表