第一步,企业可通过此接口获取指定成员添加的客户列表
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@Servicepublic class WxExuserServiceImpl extends ServiceImpl<WxExuserMapper, WxExuser>implements WxExuserService {@Autowiredprivate BaseNumvarService baseNumvarService;@Autowiredprivate WxUserlistService wxUserlistService;@Autowiredprivate RestTemplate restTemplate;/*** 从企业微信获取数据,进行更新或者新增** @param wxUserlists 根据部门查询出来的用户信息详情* @return*/@Overridepublic 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;}}
