diff --git a/spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/storage/AbstractWxCpConfigStorageConfiguration.java b/spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/storage/AbstractWxCpConfigStorageConfiguration.java index 17e940928d0591fd79442e6aabecf67bdc2e0fd9..cfcb16fe0a9c2d37a0fa6b3bf77fdb7a5b0ba2f2 100644 --- a/spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/storage/AbstractWxCpConfigStorageConfiguration.java +++ b/spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/storage/AbstractWxCpConfigStorageConfiguration.java @@ -7,7 +7,7 @@ import org.apache.commons.lang3.StringUtils; /** * WxCpConfigStorage 抽象配置类 * - * @author yl + * @author yl & Wang_Wong * @date 2021/12/6 */ public abstract class AbstractWxCpConfigStorageConfiguration { @@ -18,6 +18,8 @@ public abstract class AbstractWxCpConfigStorageConfiguration { String token = properties.getToken(); Integer agentId = properties.getAgentId(); String aesKey = properties.getAesKey(); + // 企业微信,会话存档路径 + String msgAuditLibPath = properties.getMsgAuditLibPath(); config.setCorpId(corpId); config.setCorpSecret(corpSecret); @@ -30,6 +32,9 @@ public abstract class AbstractWxCpConfigStorageConfiguration { if (StringUtils.isNotBlank(aesKey)) { config.setAesKey(aesKey); } + if (StringUtils.isNotBlank(msgAuditLibPath)) { + config.setMsgAuditLibPath(msgAuditLibPath); + } WxCpProperties.ConfigStorage storage = properties.getConfigStorage(); String httpProxyHost = storage.getHttpProxyHost(); @@ -50,4 +55,5 @@ public abstract class AbstractWxCpConfigStorageConfiguration { } return config; } + } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java index 8e04977ff41c68e5b56b4f3604733d596ccfdd42..ae6b59ed6b542e45fb0277a7a652608ac1638d28 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java @@ -361,14 +361,19 @@ public interface WxCpExternalContactService { List listFollowers() throws WxErrorException; /** - * 企业和第三方可通过此接口,获取所有离职成员的客户列表,并可进一步调用离职成员的外部联系人再分配接口将这些客户重新分配给其他企业成员。 + * 获取待分配的离职成员列表 + * 企业和第三方可通过此接口,获取所有离职成员的客户列表,并可进一步调用分配离职成员的客户接口将这些客户重新分配给其他企业成员。 * - * @param page the page - * @param pageSize the page size - * @return wx cp user external unassign list - * @throws WxErrorException the wx error exception + * 请求方式:POST(HTTPS) + * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_unassigned_list?access_token=ACCESS_TOKEN + * + * @param pageId 分页查询,要查询页号,从0开始 + * @param cursor 分页查询游标,字符串类型,适用于数据量较大的情况,如果使用该参数则无需填写page_id,该参数由上一次调用返回 + * @param pageSize 每次返回的最大记录数,默认为1000,最大值为1000 + * @return + * @throws WxErrorException */ - WxCpUserExternalUnassignList listUnassignedList(Integer page, Integer pageSize) throws WxErrorException; + WxCpUserExternalUnassignList listUnassignedList(Integer pageId, String cursor, Integer pageSize) throws WxErrorException; /** * 企业可通过此接口,将已离职成员的外部联系人分配给另一个成员接替联系。 diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java index 3997f50768ffdd8328b9b47c5c4e1f5ec3d9df38..def24cf8bd243caa4a070b22a4642e9a5fdbcf49 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java @@ -32,7 +32,7 @@ import java.util.List; import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.ExternalContact.*; /** - * @author 曹祖鹏 & yuanqixun & Mr.Pan + * @author 曹祖鹏 & yuanqixun & Mr.Pan & Wang_Wong */ @RequiredArgsConstructor public class WxCpExternalContactServiceImpl implements WxCpExternalContactService { @@ -245,10 +245,13 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic } @Override - public WxCpUserExternalUnassignList listUnassignedList(Integer pageIndex, Integer pageSize) throws WxErrorException { + public WxCpUserExternalUnassignList listUnassignedList(Integer pageIndex, String cursor, Integer pageSize) throws WxErrorException { JsonObject json = new JsonObject(); - json.addProperty("page_id", pageIndex == null ? 0 : pageIndex); - json.addProperty("page_size", pageSize == null ? 100 : pageSize); + if(pageIndex != null){ + json.addProperty("page_id", pageIndex); + } + json.addProperty("cursor", StringUtils.isEmpty(cursor) ? "" : cursor); + json.addProperty("page_size", pageSize == null ? 1000 : pageSize); final String url = this.mainService.getWxCpConfigStorage().getApiUrl(LIST_UNASSIGNED_CONTACT); final String result = this.mainService.post(url, json.toString()); return WxCpUserExternalUnassignList.fromJson(result); diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalUnassignList.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalUnassignList.java index 68d065a2d4a75ceb9badd33f76ebefe4ade46287..d273348363c908a6243a0abe9a6adafc4bf01fb9 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalUnassignList.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalUnassignList.java @@ -12,7 +12,7 @@ import java.util.List; /** * 离职员工外部联系人列表 * - * @author yqx + * @author yqx & Wang_Wong * @date 2020/3/15 */ @Getter @@ -25,6 +25,9 @@ public class WxCpUserExternalUnassignList extends WxCpBaseResp { @SerializedName("is_last") private boolean isLast; + @SerializedName("next_cursor") + private String nextCursor; + @Getter @Setter public static class UnassignInfo implements Serializable { @@ -52,4 +55,9 @@ public class WxCpUserExternalUnassignList extends WxCpBaseResp { public static WxCpUserExternalUnassignList fromJson(String json) { return WxCpGsonBuilder.create().fromJson(json, WxCpUserExternalUnassignList.class); } + + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpDefaultConfigImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpDefaultConfigImpl.java index b7304628a7d0d712563e0f2c9a0a0d0d0109622a..c716eb73590a4149670b040a10b8c056c06b989a 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpDefaultConfigImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpDefaultConfigImpl.java @@ -285,6 +285,15 @@ public class WxCpDefaultConfigImpl implements WxCpConfigStorage, Serializable { this.agentId = agentId; } + /** + * 设置企微会话存档路径. + * + * @param msgAuditLibPath 会话存档具体路径 + */ + public void setMsgAuditLibPath(String msgAuditLibPath) { + this.msgAuditLibPath = msgAuditLibPath; + } + @Override public String getOauth2redirectUri() { return this.oauth2redirectUri; diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpExternalContactTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpExternalContactTest.java new file mode 100644 index 0000000000000000000000000000000000000000..7fb1650dad2887c2fcf46f2ed4950454102f1bd0 --- /dev/null +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpExternalContactTest.java @@ -0,0 +1,54 @@ +package me.chanjar.weixin.cp.api; + +import com.google.common.collect.Lists; +import com.google.inject.Inject; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.cp.bean.WxCpBaseResp; +import me.chanjar.weixin.cp.bean.external.*; +import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactBatchInfo; +import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo; +import me.chanjar.weixin.cp.bean.external.msg.Attachment; +import me.chanjar.weixin.cp.bean.external.msg.Image; +import me.chanjar.weixin.cp.bean.external.msg.Video; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; +import org.testng.collections.CollectionUtils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import static org.testng.Assert.assertNotNull; + +/** + * 离职继承测试类 + * + * 官方文档: + * https://developer.work.weixin.qq.com/document/path/92124 + */ +@Slf4j +@Guice(modules = ApiTestModule.class) +public class WxCpExternalContactTest { + + @Inject + private WxCpService wxCpService; + @Inject + protected ApiTestModule.WxXmlCpInMemoryConfigStorage configStorage; + + @Test + public void testGetExternalContact() throws WxErrorException { + String externalUserId = this.configStorage.getExternalUserId(); + WxCpUserExternalUnassignList unassignList = this.wxCpService.getExternalContactService().listUnassignedList(null, null, 100); + log.info(unassignList.toJson()); + + // test str + String result = "{\"errcode\":0,\"errmsg\":\"ok\",\"info\":[{\"handover_userid\":\"zhangsan\",\"external_userid\":\"woAJ2GCAAAd4uL12hdfsdasassdDmAAAAA\",\"dimission_time\":1550838571},{\"handover_userid\":\"lisi\",\"external_userid\":\"wmAJ2GCAAAzLTI123ghsdfoGZNqqAAAA\",\"dimission_time\":1550661468}],\"is_last\":false,\"next_cursor\":\"aSfwejksvhToiMMfFeIGZZ\"}"; + WxCpUserExternalUnassignList json = WxCpUserExternalUnassignList.fromJson(result); + log.info(json.toJson()); + + } + +} diff --git a/weixin-java-cp/src/test/resources/test-config.sample.xml b/weixin-java-cp/src/test/resources/test-config.sample.xml index 76a74a25a38dea69e3499d6620d37dede5f262e9..23e83e942a06e5927ca347f9cbeaeb6da42081b5 100644 --- a/weixin-java-cp/src/test/resources/test-config.sample.xml +++ b/weixin-java-cp/src/test/resources/test-config.sample.xml @@ -11,4 +11,6 @@ 企业号通讯录里的某个tagid 网页授权获取用户信息回调地址 webhook链接地址的key值 + + /www/osfile/libcrypto-1_1-x64.dll,libssl-1_1-x64.dll,libcurl-x64.dll,WeWorkFinanceSdk.dll,libWeWorkFinanceSdk_Java.so