最近项目中要对接企业微信,实现通讯录数据同步,即在企业端添加编辑删除用户,部门数据要同步到微信端,同时微信端添加编辑删除用户,部门数据要同步到企业端,实现数据同步功能,需要调用企业微信API和通讯录回调接口,下面就把对接过程中遇到的各种问题,各种坑记录下来分享给需要的同学
本博客属作者原创,未经允许禁止转载,请尊重原创!如有问题请联系QQ509961766
企业微信对接目录
Java企业微信对接(一)企业端同步到微信端
Java企业微信对接(二)微信端回调到企业端
开发前准备
wechat:# 企业Idappid: appidxxxxxxxxxxx# 查询用的API秘钥appsecret: appsecretxxxxxxxxxxxxx# 增删改用的API秘钥apisecret: apisecretxxxxxxxxxxxxxxxxx# 是否使用代理useProxy: false# 是否开启同步至企业微信enableToWeXin: false# 代理地址端口wechatProxy: 10.1.1.1# 代理地址端口wechatPort: 6666# 回调地址的tokencallback-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 keyprivate 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,好了通讯录回调就配置好了,后面直接上代码