百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

haoteby 2025-09-21 14:49 2 浏览

源自: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进行转换,有些情况下转换还会不成功。

相关推荐

Java多线程问题大揭秘:从底层原理到解决方案

并发编程为什么会出问题?现代计算机为了提高计算机的整体能力,操作系统做出了以下努力:CPU增加了缓存...

一文吃透ConcurrentHashMap的前世与今生

HashMap是线程不安全的类,k-v类型数据操作在多线程下推荐使用ConcurrentHashMap。本文将会延续HashMap的解读思路,对ConcurrentHashMap从关键成员变量,核心方...

一种文件转换器的设计与实现_一种文件转换器的设计与实现方法

摘要:随着计算机技术的飞速发展,数据和信息以各种文件格式被组织并存储在计算机系统中。为了提高对数据和信息的共享效率,需要进行文件格式转换,支持不同软件的处理和应用需要。采用经典的软件开发方法和技术...

聊聊Java8之后的JDK升级内容_jdk8之后的新特性

Java都已经更新到SE12了..公司用的还是Java8,觉得是应该了解下SE8之后的更新内容了,从网上搜集整理了一下核心的功能更新文章概览...

10分钟搭建Linux常用服务器《带视频教程》

详细教程资料+课件关注+后台私信;资料;两个字可以免费视频领取+文档+各大厂面试题资料内容包括:C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdf...

JVM内存结构_jvm内存结构和内存模型

前言Java程序的运行是通过Java虚拟机来实现的。通过类加载器将class字节码文件加载进JVM,然后根据预定的规则执行。Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同...

阿里架构师整理的 Netty 学习笔记之:Java NIO 网络编程

本系列为Netty学习笔记,本篇介绍总结JavaNIO网络编程...

JVM - CMS垃圾收集器(建议收藏)_java垃圾收集器

今天,继续给大家分享关于JVM的文章,今天给大家带来的是一篇关于JVMCMS垃圾收集器的文章,好了,不多说了,进入今天的正题。...

[Maven]Eclipse插件之Maven配置及问题解析.

前言:今天在自己环境装了Maven环境,并且安装了Eclipse插件,在查找插件过程中确实遇到一些问题,好不容易找到一个却又有问题.装好了插件之后,用Eclipse创建Maven项目却出现两...

升级 JDK17 被这 8 个坑坑惨了!附解决方案,程序员必看

别再盲目升级JDK17了!最近帮三个项目从JDK8升到17,踩了一肚子坑,半夜改bug改到怀疑人生。这些坑看着不起眼,掉进去能让你加班到崩溃。今天把最致命的8个坑和解决方案整理出来,...

JVM-垃圾回收算法和垃圾回收器_jvm 垃圾回收算法

一、GC-垃圾回收:stop-the-world(stw):他会在任何一种GC算法中发生。stw意味着jvm因为需要执行GC而停止了应用程序的执行。当stw发生时,出GC所需的线程外,所有的线程都进...

JDK9~11版本和相关特性,建议收藏使用

JDK9(2017.09.21-2018.01.26)功能特性1、modularitySystem模块系统...

MySQL 主从复制、读写分离理论分析+实战演示

引言在企业应用中,成熟的业务通常数据量都比较庞大,如果对MySQL数据库的读和写都在一台数据库服务器上操作,无论是在安全性、高可用性,还是高并发等各个方面都是不能满足实际需求的。因此,一般来说都是...

「年底备战」Java 高级面试题之Java基础(附答案详解)

前言好哥哥们,Redis系列文章可能会先不弄了,目前的话写到了第二十四篇深入理解Redis主从复制,有感兴趣的好哥哥可以翻翻这个系列的文章(看完记得点赞加关注哟)。后面的话应该是会整理一些面试相关...

搭建Java开发环境_搭建java开发环境的基本步骤是什么?

要开发Java程序首先必须要配置好环境变量,而Java的运行环境的配置比较麻烦。下面来看一下JDK的安装过程。在这里JDK选用的是jdk1.7.0_07版本。安装步骤:首先,...