最近项目中要对接企业微信,实现通讯录数据同步,即在企业端添加编辑删除用户,部门数据要同步到微信端,同时微信端添加编辑删除用户,部门数据要同步到企业端,实现数据同步功能,需要调用企业微信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,好了通讯录回调就配置好了,后面直接上代码