第一步,企业可通过此接口获取指定成员添加的客户列表

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
请求示例:

  1. {
  2. "userid_list":
  3. [
  4. "zhangsan",
  5. "lisi"
  6. ],
  7. "cursor":"",
  8. "limit":100
  9. }

第二步,根据外部联系人的userid(如何获取?),拉取客户详情。

官方文档
如果是批量获取的话,就不需要这一步了。

JAVA实现类代码

  1. package com.tj.qywx.service.impl;
  2. import com.alibaba.excel.util.ListUtils;
  3. import com.alibaba.excel.util.MapUtils;
  4. import com.alibaba.fastjson.JSON;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.tj.base.service.BaseNumvarService;
  7. import com.tj.qywx.domain.WxExuser;
  8. import com.tj.qywx.domain.WxUserlist;
  9. import com.tj.qywx.service.WxExuserService;
  10. import com.tj.qywx.mapper.WxExuserMapper;
  11. import com.tj.qywx.service.WxUserlistService;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.web.client.RestTemplate;
  16. import java.util.ArrayList;
  17. import java.util.HashMap;
  18. import java.util.List;
  19. import java.util.Map;
  20. /**
  21. * 获取客户列表实现类
  22. */
  23. @Slf4j
  24. @Service
  25. public class WxExuserServiceImpl extends ServiceImpl<WxExuserMapper, WxExuser>
  26. implements WxExuserService {
  27. @Autowired
  28. private BaseNumvarService baseNumvarService;
  29. @Autowired
  30. private WxUserlistService wxUserlistService;
  31. @Autowired
  32. private RestTemplate restTemplate;
  33. /**
  34. * 从企业微信获取数据,进行更新或者新增
  35. *
  36. * @param wxUserlists 根据部门查询出来的用户信息详情
  37. * @return
  38. */
  39. @Override
  40. public Integer modifyByList(List<WxUserlist> wxUserlists) {
  41. int n = 0;
  42. if (wxUserlists == null) {
  43. wxUserlists = wxUserlistService.list();
  44. }
  45. String token = baseNumvarService.getAccessTokenBySecret(baseNumvarService.getSecretExuser());
  46. String url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user?access_token=" + token;
  47. HashMap<String, Object> map = MapUtils.newHashMap();
  48. // 1. 用户列表不超过100个。若用户超过100个,请分批获取
  49. for (int i = 0; i < wxUserlists.size(); i += 100) {
  50. map.clear();
  51. ArrayList<String> userIdList = ListUtils.newArrayList();
  52. //循环获取用户的id,加入list中
  53. for (int j = 0; j < 100; j++) {
  54. if (j + i < wxUserlists.size()) {
  55. userIdList.add(wxUserlists.get(j + i).getUserid());
  56. }
  57. }
  58. map.put("userid_list", userIdList);
  59. //2.执行POST请求
  60. Map postResultMap = restTemplate.postForObject(url, map, Map.class);
  61. log.info("第{}次查询的结果:{}", i, postResultMap);
  62. List<Map> externalContactList = (List<Map>) postResultMap.get("external_contact_list");
  63. if (externalContactList != null && externalContactList.size() > 0) {
  64. for (Map externalContact : externalContactList) {
  65. //使用FastJson把map对象转换成java对象
  66. WxExuser wxExuser = JSON.parseObject(JSON.toJSONString(externalContact.get("external_contact")), WxExuser.class);
  67. log.info("转换成JAVA对象的结果:{}", wxExuser);
  68. //3.更新到数据库中
  69. saveOrUpdate(wxExuser);
  70. n++;
  71. }
  72. }
  73. }
  74. return n;
  75. }
  76. }