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 396bbe4a9..40e7741a9 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 @@ -109,7 +109,7 @@ public interface WxCpExternalContactService { * @param userId 外部联系人的userid * @return . external contact * @throws WxErrorException the wx error exception - * @deprecated 建议使用 {@link #getContactDetail(String)} + * @deprecated 建议使用 {@link #getContactDetail(String, String)} */ @Deprecated WxCpExternalContactInfo getExternalContact(String userId) throws WxErrorException; @@ -130,10 +130,11 @@ public interface WxCpExternalContactService { * * * @param userId 外部联系人的userid,注意不是企业成员的帐号 + * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填 * @return . contact detail * @throws WxErrorException . */ - WxCpExternalContactInfo getContactDetail(String userId) throws WxErrorException; + WxCpExternalContactInfo getContactDetail(String userId, String cursor) throws WxErrorException; /** * 企业和服务商可通过此接口,将微信外部联系人的userid转为微信openid,用于调用支付相关接口。暂不支持企业微信外部联系人(ExternalUserid为wo开头)的userid转openid。 @@ -190,7 +191,7 @@ public interface WxCpExternalContactService { * @throws WxErrorException . */ String opengidToChatid(@NotNull String opengid) throws WxErrorException; - + /** * 批量获取客户详情. *
@@ -789,4 +790,31 @@ public interface WxCpExternalContactService {
* @throws WxErrorException the wx error exception
*/
WxCpBaseResp delGroupWelcomeTemplate(@NotNull String templateId, String agentId) throws WxErrorException;
+
+ /**
+ *
+ * 获取商品图册
+ * https://work.weixin.qq.com/api/doc/90000/90135/95096#获取商品图册列表
+ *
+ *
+ * @param limit 返回的最大记录数,整型,最大值100,默认值50,超过最大值时取默认值
+ * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填
+ * @return wx cp base resp
+ * @throws WxErrorException the wx error exception
+ */
+ WxCpProductAlbumListResult getProductAlbumList(Integer limit, String cursor) throws WxErrorException;
+
+ /**
+ *
+ * 获取商品图册
+ * https://work.weixin.qq.com/api/doc/90000/90135/95096#获取商品图册
+ *
+ *
+ * @param productId 商品id
+ * @return wx cp base resp
+ * @throws WxErrorException the wx error exception
+ */
+ WxCpProductAlbumResult getProductAlbum(String productId) 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 19937e382..d9426a834 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
@@ -102,8 +102,12 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
}
@Override
- public WxCpExternalContactInfo getContactDetail(String userId) throws WxErrorException {
- final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_CONTACT_DETAIL + userId);
+ public WxCpExternalContactInfo getContactDetail(String userId, String cursor) throws WxErrorException {
+ String params = userId;
+ if(StringUtils.isNotEmpty(cursor)){
+ params = params + "&cursor=" + cursor;
+ }
+ final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_CONTACT_DETAIL + params);
String responseContent = this.mainService.get(url, null);
return WxCpExternalContactInfo.fromJson(responseContent);
}
@@ -702,4 +706,45 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
final String result = this.mainService.post(url, json.toString());
return WxCpBaseResp.fromJson(result);
}
+
+ /**
+ *
+ * 获取商品图册
+ * https://work.weixin.qq.com/api/doc/90000/90135/95096#获取商品图册列表
+ *
+ *
+ * @param limit 返回的最大记录数,整型,最大值100,默认值50,超过最大值时取默认值
+ * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填
+ * @return wx cp base resp
+ * @throws WxErrorException the wx error exception
+ */
+ @Override
+ public WxCpProductAlbumListResult getProductAlbumList(Integer limit, String cursor) throws WxErrorException {
+ JsonObject json = new JsonObject();
+ json.addProperty("limit", limit);
+ json.addProperty("cursor", cursor);
+ final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_PRODUCT_ALBUM_LIST);
+ final String result = this.mainService.post(url, json.toString());
+ return WxCpProductAlbumListResult.fromJson(result);
+ }
+
+ /**
+ *
+ * 获取商品图册
+ * https://work.weixin.qq.com/api/doc/90000/90135/95096#获取商品图册
+ *
+ *
+ * @param productId 商品id
+ * @return wx cp base resp
+ * @throws WxErrorException the wx error exception
+ */
+ @Override
+ public WxCpProductAlbumResult getProductAlbum(String productId) throws WxErrorException {
+ JsonObject json = new JsonObject();
+ json.addProperty("product_id", productId);
+ final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_PRODUCT_ALBUM);
+ final String result = this.mainService.post(url, json.toString());
+ return WxCpProductAlbumResult.fromJson(result);
+ }
+
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpProductAlbumInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpProductAlbumInfo.java
new file mode 100644
index 000000000..d84b9f232
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpProductAlbumInfo.java
@@ -0,0 +1,53 @@
+package me.chanjar.weixin.cp.bean.external;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.bean.external.product.Attachment;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ *
+ * 获取商品图册
+ * 参考文档:https://work.weixin.qq.com/api/doc/90000/90135/95096#获取商品图册
+ *
+ *
+ * @author Lo_ading
+ */
+@Getter
+@Setter
+public class WxCpProductAlbumInfo implements Serializable {
+
+ private static final long serialVersionUID = -8338202601802366899L;
+
+ @SerializedName("product_id")
+ private String productId;
+
+ @SerializedName("product_sn")
+ private String productSn;
+
+ @SerializedName("description")
+ private String description;
+
+ /**
+ * NOTE: 20211110 价钱返回全部为0
+ */
+ @SerializedName("price")
+ private Integer price;
+
+ /**
+ * NOTE: 20211110 商品列表接口不返回此字段, 商品详情接口返回
+ */
+ @SerializedName("create_time")
+ private Long createTime;
+
+ @SerializedName("attachments")
+ private List attachments;
+
+ public static WxCpProductAlbumInfo fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpProductAlbumInfo.class);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpProductAlbumListResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpProductAlbumListResult.java
new file mode 100644
index 000000000..29b9d4c57
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpProductAlbumListResult.java
@@ -0,0 +1,35 @@
+package me.chanjar.weixin.cp.bean.external;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ *
+ * 获取商品图册列表执行结果
+ * 参考文档:https://work.weixin.qq.com/api/doc/90000/90135/95096#获取商品图册列表
+ *
+ *
+ * @author Lo_ading
+ */
+@Getter
+@Setter
+public class WxCpProductAlbumListResult extends WxCpBaseResp implements Serializable {
+
+ private static final long serialVersionUID = 121265727802015428L;
+
+ @SerializedName("product_list")
+ private List productList;
+
+ @SerializedName("next_cursor")
+ private String nextCursor;
+
+ public static WxCpProductAlbumListResult fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpProductAlbumListResult.class);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpProductAlbumResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpProductAlbumResult.java
new file mode 100644
index 000000000..74e5fc3be
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpProductAlbumResult.java
@@ -0,0 +1,31 @@
+package me.chanjar.weixin.cp.bean.external;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ *
+ * 获取商品图册执行结果
+ * 参考文档:https://work.weixin.qq.com/api/doc/90000/90135/95096#获取商品图册
+ *
+ *
+ * @author Lo_ading
+ */
+@Getter
+@Setter
+public class WxCpProductAlbumResult extends WxCpBaseResp implements Serializable {
+
+ private static final long serialVersionUID = 4076734101839851497L;
+
+ @SerializedName("product")
+ private WxCpProductAlbumInfo product;
+
+ public static WxCpProductAlbumResult fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpProductAlbumResult.class);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/ExternalContact.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/ExternalContact.java
index 5b7f9e67b..f19584ed9 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/ExternalContact.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/ExternalContact.java
@@ -51,10 +51,30 @@ public class ExternalContact implements Serializable {
public static class ExternalProfile implements Serializable {
private static final long serialVersionUID = -2899906589789022765L;
+ @SerializedName("external_corp_name")
+ private String externalCorpName;
+
+ @SerializedName("wechat_channels")
+ private WechatChannel wechatChannels;
+
@SerializedName("external_attr")
private List externalAttrs;
}
+ @Data
+ @Builder
+ @NoArgsConstructor
+ @AllArgsConstructor
+ public static class WechatChannel implements Serializable {
+
+ @SerializedName("nickname")
+ private String nickname;
+
+ @SerializedName("status")
+ private Integer status;
+
+ }
+
@Data
@Builder
@NoArgsConstructor
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/product/Attachment.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/product/Attachment.java
new file mode 100644
index 000000000..cfcb688c2
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/product/Attachment.java
@@ -0,0 +1,31 @@
+package me.chanjar.weixin.cp.bean.external.product;
+
+import java.io.Serializable;
+import lombok.Data;
+import me.chanjar.weixin.cp.constant.WxCpConsts;
+
+/**
+ * 商品画册附件
+ *
+ * @author Lo_ading
+ */
+@Data
+public class Attachment implements Serializable {
+
+ private static final long serialVersionUID = -4545283630169056262L;
+
+ /**
+ * NOTE: 20211110 字段接口未返回
+ */
+ private String type;
+
+ /**
+ * 附件类型,目前仅支持image
+ */
+ private Image image;
+
+ public void setImage(Image image) {
+ this.image = image;
+ this.type = WxCpConsts.ProductAttachmentType.IMAGE;
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/product/Image.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/product/Image.java
new file mode 100644
index 000000000..d56f0b270
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/product/Image.java
@@ -0,0 +1,20 @@
+package me.chanjar.weixin.cp.bean.external.product;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 商品画册图片
+ *
+ * @author Lo_ading
+ */
+@Data
+public class Image implements Serializable {
+
+ private static final long serialVersionUID = -2737415903252627814L;
+
+ @SerializedName("media_id")
+ private String mediaId;
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java
index ddc56d133..71eadb63a 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java
@@ -219,6 +219,9 @@ public interface WxCpApiPathConsts {
String GET_GROUP_MSG_TASK = "/cgi-bin/externalcontact/get_groupmsg_task";
String GET_GROUP_MSG_LIST_V2 = "/cgi-bin/externalcontact/get_groupmsg_list_v2";
+ String GET_PRODUCT_ALBUM = "/cgi-bin/externalcontact/get_product_album";
+ String GET_PRODUCT_ALBUM_LIST = "/cgi-bin/externalcontact/get_product_album_list";
+
String GROUP_WELCOME_TEMPLATE_ADD = "/cgi-bin/externalcontact/group_welcome_template/add";
String GROUP_WELCOME_TEMPLATE_EDIT = "/cgi-bin/externalcontact/group_welcome_template/edit";
String GROUP_WELCOME_TEMPLATE_GET = "/cgi-bin/externalcontact/group_welcome_template/get";
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java
index 601c7dbb3..f706c1899 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java
@@ -359,4 +359,15 @@ public class WxCpConsts {
*/
public static final String FILE = "file";
}
+
+ @UtilityClass
+ public static class ProductAttachmentType {
+
+ /**
+ * 图片消息.
+ */
+ public static final String IMAGE = "image";
+
+ }
+
}
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 60fdeb9b2..f9f90192d 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
@@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
+import org.testng.collections.CollectionUtils;
import static org.testng.Assert.assertNotNull;
@@ -111,7 +112,7 @@ public class WxCpExternalContactServiceImplTest {
@Test
public void testGetContactDetail() throws WxErrorException {
String externalUserId = this.configStorage.getExternalUserId();
- WxCpExternalContactInfo result = this.wxCpService.getExternalContactService().getContactDetail(externalUserId);
+ WxCpExternalContactInfo result = this.wxCpService.getExternalContactService().getContactDetail(externalUserId, null);
System.out.println(result);
assertNotNull(result);
}
@@ -314,4 +315,18 @@ public class WxCpExternalContactServiceImplTest {
.remarkPicMediaId("aaa")
.build());
}
+
+ @Test
+ public void testGetProductListAlbum() throws WxErrorException {
+ WxCpProductAlbumListResult result = this.wxCpService.getExternalContactService()
+ .getProductAlbumList(100, null);
+ System.out.println(result);
+ assertNotNull(result);
+ if(CollectionUtils.hasElements(result.getProductList())){
+ WxCpProductAlbumResult result1 = this.wxCpService.getExternalContactService().getProductAlbum(result.getProductList().get(0).getProductId());
+ System.out.println(result1);
+ assertNotNull(result1);
+ }
+ }
+
}