最近项目中要对接企业微信,实现通讯录数据同步,即在企业端添加编辑删除用户,部门数据要同步到微信端,同时微信端添加编辑删除用户,部门数据要同步到企业端,实现数据同步功能,需要调用企业微信API和通讯录回调接口,下面就把对接过程中遇到的各种问题,各种坑记录下来分享给需要的同学
本博客属作者原创,未经允许禁止转载,请尊重原创!如有问题请联系QQ509961766
企业微信对接目录
Java企业微信对接(一)企业端同步到微信端
 Java企业微信对接(二)微信端回调到企业端
开发前准备
wechat:
  # 企业Id
  appid: appidxxxxxxxxxxx
  # 查询用的API秘钥
  appsecret: appsecretxxxxxxxxxxxxx
  # 增删改用的API秘钥
  apisecret: apisecretxxxxxxxxxxxxxxxxx
  # 是否使用代理
  useProxy: false
  # 是否开启同步至企业微信
  enableToWeXin: false
  # 代理地址端口
  wechatProxy: 10.1.1.1
  # 代理地址端口
  wechatPort: 6666
  # 回调地址的token
  callback-token: tokenxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  # 回调地址的秘钥
  callback-aesKey: aesKeyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
appid获取方式登录企业微信-我的企业页面下面有企业ID就是
 
定义常量
	//添加用户接口
    private static final String HTTP_URL_CREATE_USER = "https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token=";
    //修改用户接口
    private static final String HTTP_URL_UPDATE_USER = "https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token=";
    //删除用户接口
    private static final String HTTP_URL_DELETE_USER = "https://qyapi.weixin.qq.com/cgi-bin/user/batchdelete?access_token=";
    //添加部门接口
    private static final String HTTP_URL_CREATE_ORG = "https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token=";
    //编辑部门接口
    private static final String HTTP_URL_UPDATE_ORG = "https://qyapi.weixin.qq.com/cgi-bin/department/update?access_token=";
    //token redis key
    private static final String WEIXIN_API_TOKEN = "token:weixin_api_token";
 
获取access_token
corpid就是上面配置项中的appid
 apiSecret就是上面配置项中的apisecret
 这个access_token 是用于 用户增删改,部门增删改时需要拼到url后面的参数
    /**
     * 获取微信AccessToken
     *
     * @author: what
     */
    private String getApiAccessToken(String corpid) {
        // 获取企业微信token请求地址拼接
        String requestUrl = YzyConstants.GET_WECOM_TOKEN_URL.replace("CORPID", corpid).replace("CORPSECRET", apiSecret);
        String accessToken = null;
        try {
            HttpGet httpget = new HttpGet(requestUrl);
            // 获得Http客户端
            CloseableHttpClient client = HttpClients.createDefault();
            // 企业微信返回值
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            if (useProxy) {
                //设置代理IP、端口
                HttpHost proxy = new HttpHost(wecomProxy, Integer.parseInt(wecomPort), "http");
                RequestConfig requestConfig= RequestConfig.custom().setProxy(proxy).build();
                httpget.setConfig(requestConfig);
                log.info("使用代理-{}:{},访问接口-{}", wecomProxy, wecomPort, requestUrl);
            }
            String response = client.execute(httpget, responseHandler);
            JSONObject jsonObject = JSONUtil.parseObj(response);
            // 记录日志:企业微信返回信息
            log.info("wecom token response:{}", jsonObject);
            // 返回结果示例:
            // {
            //        "errcode": 0,
            //        "errmsg": "ok",
            //        "access_token": "accesstoken000001",
            //        "expires_in": 7200
            // }
            Integer errCode = jsonObject.getInt(YzyConstants.ERR_CODE);
            String errMsg = jsonObject.getStr(YzyConstants.ERR_MSG);
            // 判断返回值是否正确
            if (ObjectUtil.isNotNull(errCode) && 0 != errCode) {
                throw new WechatException(errCode, errMsg);
            }
            accessToken = jsonObject.getStr("access_token");
            client.close();
        } catch (Exception e) {
            throw new WechatException(e.getMessage());
        }
        return accessToken;
    }
 
重要内容(通讯录回调)

 首先需要登录企业微信管理工具中,打开通讯录回调,然后还需要加入ip可信名单,例如本机IP,生产环境,测试环境ip 都需要配置,然后点击设置接受事件服务器,这里的url必须是备案域名,不能使用公网ip,否则会失效,然后下面Token就是对应配置项callback-token,EncodingAESKey就是对应配置项callback-aesKey,好了通讯录回调就配置好了,后面直接上代码




















