From 65921f572fb9a2a8aa5da7ebaec7714bd7a6f43f Mon Sep 17 00:00:00 2001 From: pg Date: Sat, 3 Jul 2021 20:45:42 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#2178=20=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E6=9B=B4=E6=96=B0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=BE=A4=E5=88=97=E8=A1=A8=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cp/api/WxCpExternalContactService.java | 19 ++ .../impl/WxCpExternalContactServiceImpl.java | 18 ++ .../WxCpUserExternalGroupChatList.java | 4 + .../WxCpExternalContactServiceImplTest.java | 7 + .../WxPayApplyment4SubCreateRequest.java | 174 ++++++++++++++++++ .../applyment/enums/MicroBizTypeEnum.java | 20 ++ .../bean/applyment/enums/SubjectTypeEnum.java | 4 + 7 files changed, 246 insertions(+) create mode 100644 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/enums/MicroBizTypeEnum.java 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 cd37f9a94..c4fe3b994 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 @@ -321,6 +321,7 @@ public interface WxCpExternalContactService { * 微信文档:https://work.weixin.qq.com/api/doc/90000/90135/92119 * * + * @deprecated 请使用 {@link WxCpExternalContactService#listGroupChat(Integer, String, int, String[])} * @param pageIndex the page index * @param pageSize the page size * @param status the status @@ -329,8 +330,26 @@ public interface WxCpExternalContactService { * @return the wx cp user external group chat list * @throws WxErrorException the wx error exception */ + @Deprecated WxCpUserExternalGroupChatList listGroupChat(Integer pageIndex, Integer pageSize, int status, String[] userIds, String[] partyIds) throws WxErrorException; + /** + *
+   * 该接口用于获取配置过客户群管理的客户群列表。
+   * 企业需要使用“客户联系”secret或配置到“可调用应用”列表中的自建应用secret所获取的accesstoken来调用(accesstoken如何获取?)。
+   * 暂不支持第三方调用。
+   * 微信文档:https://work.weixin.qq.com/api/doc/90000/90135/92119
+   * 
+ * + * @param limit 分页,预期请求的数据量,取值范围 1 ~ 1000 + * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用不填 + * @param status 客户群跟进状态过滤。0 - 所有列表(即不过滤) 1 - 离职待继承 2 - 离职继承中 3 - 离职继承完成 默认为0 + * @param userIds 群主过滤。如果不填,表示获取应用可见范围内全部群主的数据(但是不建议这么用,如果可见范围人数超过1000人,为了防止数据包过大,会报错 81017);用户ID列表。最多100个 + * @return the wx cp user external group chat list + * @throws WxErrorException the wx error exception + */ + WxCpUserExternalGroupChatList listGroupChat(Integer limit, String cursor, int status, String[] userIds) throws WxErrorException; + /** *
    * 通过客户群ID,获取详情。包括群名、群成员列表、群成员入群时间、入群方式。(客户群是由具有客户群使用权限的成员创建的外部群)
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 c14a7c5c1..eec72ef91 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
@@ -248,6 +248,24 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
     return WxCpUserExternalGroupChatList.fromJson(result);
   }
 
+  @Override
+  public WxCpUserExternalGroupChatList listGroupChat(Integer limit, String cursor, int status, String[] userIds) throws WxErrorException {
+    JsonObject json = new JsonObject();
+    json.addProperty("cursor", cursor == null ? "" : cursor);
+    json.addProperty("limit", limit == null ? 100 : limit);
+    json.addProperty("status_filter", status);
+    if (ArrayUtils.isNotEmpty(userIds)) {
+      JsonObject ownerFilter = new JsonObject();
+      if (ArrayUtils.isNotEmpty(userIds)) {
+        ownerFilter.add("userid_list", new Gson().toJsonTree(userIds).getAsJsonArray());
+      }
+      json.add("owner_filter", ownerFilter);
+    }
+    final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GROUP_CHAT_LIST);
+    final String result = this.mainService.post(url, json.toString());
+    return WxCpUserExternalGroupChatList.fromJson(result);
+  }
+
   @Override
   public WxCpUserExternalGroupChatInfo getGroupChat(String chatId) throws WxErrorException {
     JsonObject json = new JsonObject();
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalGroupChatList.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalGroupChatList.java
index 07ac8f69d..a9a9e6b48 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalGroupChatList.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalGroupChatList.java
@@ -16,10 +16,14 @@ import java.util.List;
 @Getter
 @Setter
 public class WxCpUserExternalGroupChatList extends WxCpBaseResp {
+  private static final long serialVersionUID = 1907272035492110236L;
 
   @SerializedName("group_chat_list")
   private List groupChatList;
 
+  @SerializedName("next_cursor")
+  private String nextCursor;
+
   @Getter
   @Setter
   public static class ChatStatus implements Serializable {
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImplTest.java
index 8869a6a02..accd8f270 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImplTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImplTest.java
@@ -241,6 +241,13 @@ public class WxCpExternalContactServiceImplTest {
     assertNotNull(result);
   }
 
+  @Test
+  public void testListGroupChatV3() throws WxErrorException {
+    WxCpUserExternalGroupChatList result = this.wxCpService.getExternalContactService().listGroupChat(100, "" ,0,new String[1]);
+    System.out.println(result);
+    assertNotNull(result);
+  }
+
   @Test
   public void testGetGroupChat() {
   }
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/WxPayApplyment4SubCreateRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/WxPayApplyment4SubCreateRequest.java
index 8fa1aa0ca..bf84d17b0 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/WxPayApplyment4SubCreateRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/WxPayApplyment4SubCreateRequest.java
@@ -177,6 +177,11 @@ public class WxPayApplyment4SubCreateRequest implements Serializable {
     @SpecEncrypt
     private UboInfo uboInfo;
 
+    /**
+     * 小微辅助证明材料(subjectType为小微商户时必填)
+     */
+    @SerializedName("micro_biz_info")
+    private MicroBizInfo microBizInfo;
 
     @Data
     @Builder
@@ -468,6 +473,175 @@ public class WxPayApplyment4SubCreateRequest implements Serializable {
       private String idPeriodEnd;
     }
 
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @Accessors(chain = true)
+    public static class MicroBizInfo implements Serializable{
+      private static final long serialVersionUID = -5679477993681265764L;
+      /**
+       * 小微经营类型
+       */
+      @SerializedName("micro_biz_type")
+      private MicroBizTypeEnum microBizType;
+
+      /**
+       * 门店场所---经营类型为“门店场所”时填写
+       */
+      @SerializedName("micro_store_info")
+      private MicroStoreInfo microStoreInfo;
+
+      /**
+       * 经营类型为“流动经营/便民服务”时填写
+       */
+      @SerializedName("micro_mobile_info")
+      private MicroMobileInfo microMobileInfo;
+
+      /**
+       * 经营类型为“线上商品/服务交易”时填写
+       */
+      @SerializedName("micro_online_info")
+      private MicroOnlineInfo microOnlineInfo;
+
+      /**
+       * 门店场所
+       */
+      @Data
+      @Builder
+      @NoArgsConstructor
+      @AllArgsConstructor
+      @Accessors(chain = true)
+      public static class MicroStoreInfo implements Serializable{
+        private static final long serialVersionUID = 5277440587305558389L;
+        /**
+         * 门店名称
+         */
+        @SerializedName("micro_name")
+        private String microName;
+        /**
+         * 门店省市编码 填写门店省市编码,只能由数字组成,详细参见《微信支付提供的省市对照表》
+         * @see 下载微信支付提供的省市对照表
+         */
+        @SerializedName("micro_address_code")
+        private String microAddressCode;
+        /**
+         * 门店地址(填写店铺详细地址,具体区/县及街道门牌号或大厦楼层)
+         */
+        @SerializedName("micro_address")
+        private String microAddress;
+        /**
+         * 门店门头照片
+         * 
+         *  1、提交门店门口照片,要求招牌清晰可见
+         *  2、可上传1张图片,请填写通过《图片上传API》预先上传图片生成好的MediaID
+         * 
+         *
+         * @see 图片上传API
+         */
+        @SerializedName("store_entrance_pic")
+        private String storeEntrancePic;
+        /**
+         * 店内环境照片
+         * 
+         *  1、提交店内环境照片
+         *  2、可上传1张图片,请填写通过《图片上传API》预先上传图片生成好的MediaID
+         * 
+         *
+         * @see 图片上传API
+         */
+        @SerializedName("micro_indoor_copy")
+        private String microIndoorCopy;
+        /**
+         * 门店经度
+         */
+        @SerializedName("store_longitude")
+        private String storeLongitude;
+        /**
+         * 门店纬度
+         */
+        @SerializedName("store_latitude")
+        private String storeLatitude;
+      }
+
+      /**
+       * 流动经营/便民服务
+       */
+      @Data
+      @Builder
+      @NoArgsConstructor
+      @AllArgsConstructor
+      @Accessors(chain = true)
+      public static class MicroMobileInfo implements Serializable{
+        private static final long serialVersionUID = -1308090894511066935L;
+        /**
+         * 经营/服务名称
+         */
+        @SerializedName("micro_mobile_name")
+        private String microMobileName;
+        /**
+         * 经营/服务所在地省市
+         */
+        @SerializedName("micro_mobile_city")
+        private String microMobileCity;
+        /**
+         * 经营/服务所在地(不含省市) 填写“无"
+         */
+        @SerializedName("micro_mobile_address")
+        private String microMobileAddress;
+        /**
+         * 经营/服务现场照片
+         * 
+         * 1、提交经营/服务现场照片
+         * 2、可上传多张图片,请填写通过《图片上传API》预先上传图片生成好的MediaID
+         * 
+         * @see 图片上传API
+         */
+        @SerializedName("micro_mobile_pics")
+        private String micro_mobile_pics;
+      }
+
+      /**
+       * 线上商品/服务交易
+       */
+      @Data
+      @Builder
+      @NoArgsConstructor
+      @AllArgsConstructor
+      @Accessors(chain = true)
+      public static class MicroOnlineInfo implements Serializable{
+        private static final long serialVersionUID = 9029168841403055743L;
+        /**
+         * 线上店铺名称
+         */
+        @SerializedName("micro_online_store")
+        private String microOnlineStore;
+        /**
+         * 电商平台名称
+         */
+        @SerializedName("micro_ec_name")
+        private String microEcName;
+        /**
+         * 店铺二维码
+         * 
+         * 1、店铺二维码或店铺链接二选一必填
+         * 2、可上传多张图片,请填写通过《图片上传API》预先上传图片生成好的MediaID
+         * 
+         * @see 图片上传API
+         */
+        @SerializedName("micro_qrcode")
+        private String microQrcode;
+        /**
+         * 店铺二维码
+         * 
+         * 1、店铺二维码或店铺链接二选一必填
+         * 2、请填写店铺主页链接,需符合网站规范
+         * 
+         */
+        @SerializedName("micro_link")
+        private String microLink;
+      }
+    }
   }
 
   /**
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/enums/MicroBizTypeEnum.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/enums/MicroBizTypeEnum.java
new file mode 100644
index 000000000..100f83268
--- /dev/null
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/enums/MicroBizTypeEnum.java
@@ -0,0 +1,20 @@
+package com.github.binarywang.wxpay.bean.applyment.enums;
+
+/**
+ * 小微经营类型
+ */
+public enum MicroBizTypeEnum {
+  /**
+   * 门店场所
+   */
+  MICRO_TYPE_STORE,
+  /**
+   * 流动经营/便民服务
+   */
+  MICRO_TYPE_MOBILE,
+  /**
+   * 线上商品/服务交易
+   */
+  MICRO_TYPE_ONLINE,
+  ;
+}
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/enums/SubjectTypeEnum.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/enums/SubjectTypeEnum.java
index 7845c052c..4a6c9d29e 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/enums/SubjectTypeEnum.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/enums/SubjectTypeEnum.java
@@ -25,6 +25,10 @@ public enum SubjectTypeEnum {
    * (其他组织):不属于企业、政府/事业单位的组织机构(如社会团体、民办非企业、基金会),要求机构已办理组织机构代码证。
    */
   SUBJECT_TYPE_OTHERS,
+  /**
+   * (小微):无营业执照、免办理工商注册登记的实体商户
+   */
+  SUBJECT_TYPE_MICRO,
   ;
 
 }