第一步,企业可通过此接口获取指定成员添加的客户列表
1.单个用户去获取
官方API文档
请求方式:GET(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list?access_token=ACCESS_TOKEN&userid=USERID
参数说明:
参数 | 必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
userid | 是 | 企业成员的userid |
2、批量获取(推荐)
官方文档
请求方式:POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user?access_token=ACCESS_TOKEN
请求示例:
{
"userid_list":
[
"zhangsan",
"lisi"
],
"cursor":"",
"limit":100
}
第二步,根据外部联系人的userid(如何获取?),拉取客户详情。
官方文档
如果是批量获取的话,就不需要这一步了。
JAVA实现类代码
package com.tj.qywx.service.impl;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.util.MapUtils;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tj.base.service.BaseNumvarService;
import com.tj.qywx.domain.WxExuser;
import com.tj.qywx.domain.WxUserlist;
import com.tj.qywx.service.WxExuserService;
import com.tj.qywx.mapper.WxExuserMapper;
import com.tj.qywx.service.WxUserlistService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 获取客户列表实现类
*/
@Slf4j
@Service
public class WxExuserServiceImpl extends ServiceImpl<WxExuserMapper, WxExuser>
implements WxExuserService {
@Autowired
private BaseNumvarService baseNumvarService;
@Autowired
private WxUserlistService wxUserlistService;
@Autowired
private RestTemplate restTemplate;
/**
* 从企业微信获取数据,进行更新或者新增
*
* @param wxUserlists 根据部门查询出来的用户信息详情
* @return
*/
@Override
public Integer modifyByList(List<WxUserlist> wxUserlists) {
int n = 0;
if (wxUserlists == null) {
wxUserlists = wxUserlistService.list();
}
String token = baseNumvarService.getAccessTokenBySecret(baseNumvarService.getSecretExuser());
String url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user?access_token=" + token;
HashMap<String, Object> map = MapUtils.newHashMap();
// 1. 用户列表不超过100个。若用户超过100个,请分批获取
for (int i = 0; i < wxUserlists.size(); i += 100) {
map.clear();
ArrayList<String> userIdList = ListUtils.newArrayList();
//循环获取用户的id,加入list中
for (int j = 0; j < 100; j++) {
if (j + i < wxUserlists.size()) {
userIdList.add(wxUserlists.get(j + i).getUserid());
}
}
map.put("userid_list", userIdList);
//2.执行POST请求
Map postResultMap = restTemplate.postForObject(url, map, Map.class);
log.info("第{}次查询的结果:{}", i, postResultMap);
List<Map> externalContactList = (List<Map>) postResultMap.get("external_contact_list");
if (externalContactList != null && externalContactList.size() > 0) {
for (Map externalContact : externalContactList) {
//使用FastJson把map对象转换成java对象
WxExuser wxExuser = JSON.parseObject(JSON.toJSONString(externalContact.get("external_contact")), WxExuser.class);
log.info("转换成JAVA对象的结果:{}", wxExuser);
//3.更新到数据库中
saveOrUpdate(wxExuser);
n++;
}
}
}
return n;
}
}