From d70b9074071f4f08cb23697e43ec132a9f21619b Mon Sep 17 00:00:00 2001 From: JCLee <452415615@qq.com> Date: Fri, 17 Dec 2021 11:57:15 +0800 Subject: [PATCH 0001/1155] =?UTF-8?q?:new:=20#2451=20=E3=80=90=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91=E5=A2=9E=E5=8A=A0=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E8=AE=A2=E9=98=85=E6=B6=88=E6=81=AF=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/WxMaDeviceSubscribeService.java | 40 +++++++++++ .../wx/miniapp/api/WxMaService.java | 7 ++ .../miniapp/api/impl/BaseWxMaServiceImpl.java | 4 ++ .../impl/WxMaDeviceSubscribeServiceImpl.java | 50 +++++++++++++ .../WxMaDeviceSubscribeMessageRequest.java | 72 +++++++++++++++++++ .../bean/device/WxMaDeviceTicketRequest.java | 41 +++++++++++ .../miniapp/constant/WxMaApiUrlConstants.java | 14 ++++ .../WxMaDeviceSubscribeServiceImplTest.java | 59 +++++++++++++++ 8 files changed, 287 insertions(+) create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaDeviceSubscribeService.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaDeviceSubscribeServiceImpl.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/device/WxMaDeviceSubscribeMessageRequest.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/device/WxMaDeviceTicketRequest.java create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaDeviceSubscribeServiceImplTest.java diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaDeviceSubscribeService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaDeviceSubscribeService.java new file mode 100644 index 0000000000..f44f64e48d --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaDeviceSubscribeService.java @@ -0,0 +1,40 @@ +package cn.binarywang.wx.miniapp.api; + +import cn.binarywang.wx.miniapp.bean.device.WxMaDeviceSubscribeMessageRequest; +import cn.binarywang.wx.miniapp.bean.device.WxMaDeviceTicketRequest; +import me.chanjar.weixin.common.error.WxErrorException; + +/** + * 小程序设备订阅消息相关 API + * 文档: + * + * @author JCLee + * @since 2021-12-16 17:13:35 + */ +public interface WxMaDeviceSubscribeService { + + /** + *
+ * 获取设备票据 + * 应用场景: + * 小程序前端界面拉起设备消息授权订阅弹框界面 + * 注意: + * 设备ticket有效时间为5分钟 + *+ * @param deviceTicketRequest + * @return + * @throws WxErrorException + */ + String getSnTicket(WxMaDeviceTicketRequest deviceTicketRequest) throws WxErrorException; + + /** + *
+ * 发送设备订阅消息 + *+ * + * @param deviceSubscribeMessageRequest 订阅消息 + * @throws WxErrorException . + */ + void sendDeviceSubscribeMsg(WxMaDeviceSubscribeMessageRequest deviceSubscribeMessageRequest) throws WxErrorException; + +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java index d0b2dcf12b..b22f865381 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java @@ -462,4 +462,11 @@ public interface WxMaService extends WxService { * @return */ WxMaReimburseInvoiceService getReimburseInvoiceService(); + + /** + * 返回设备订阅消息相关接口服务对象 + * + * @return WxMaDeviceSubscribeService plugin service + */ + WxMaDeviceSubscribeService getDeviceSubscribeService(); } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java index ecbce2ee05..e6ab2b9887 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java @@ -75,6 +75,7 @@ public abstract class BaseWxMaServiceImpl
* 字段名:账单下载地址
From 228c71c42a3d24ed49224b4c3e9896aed13f0b9e Mon Sep 17 00:00:00 2001
From: 0katekate0 <32161300+0katekate0@users.noreply.github.com>
Date: Fri, 17 Dec 2021 16:16:48 +0800
Subject: [PATCH 0004/1155] =?UTF-8?q?:art:=20#2452=20=E3=80=90=E4=BC=81?=
=?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1=E3=80=91=E8=8E=B7=E5=8F=96=E9=83=A8?=
=?UTF-8?q?=E9=97=A8=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=AD=97=E6=AE=B5=20departmentLeader?=
=?UTF-8?q?=EF=BC=88=E9=83=A8=E9=97=A8=E8=B4=9F=E8=B4=A3=E4=BA=BA=E7=9A=84?=
=?UTF-8?q?UserID=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../me/chanjar/weixin/cp/bean/WxCpDepart.java | 5 ++-
.../cp/util/json/WxCpDepartGsonAdapter.java | 29 +++++++++-----
.../WxCpUserExternalContactInfoTest.java | 38 +++++++++++++++++++
3 files changed, 61 insertions(+), 11 deletions(-)
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpDepart.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpDepart.java
index f5b9b32592..5c640c51ce 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpDepart.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpDepart.java
@@ -1,10 +1,10 @@
package me.chanjar.weixin.cp.bean;
-import java.io.Serializable;
-
import lombok.Data;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.io.Serializable;
+
/**
* 企业微信的部门.
*
@@ -17,6 +17,7 @@ public class WxCpDepart implements Serializable {
private Long id;
private String name;
private String enName;
+ private String[] departmentLeader;
private Long parentId;
private Long order;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpDepartGsonAdapter.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpDepartGsonAdapter.java
index 4340855fda..af9344b701 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpDepartGsonAdapter.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpDepartGsonAdapter.java
@@ -8,18 +8,12 @@
*/
package me.chanjar.weixin.cp.util.json;
-import java.lang.reflect.Type;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
+import com.google.gson.*;
import me.chanjar.weixin.common.util.json.GsonHelper;
import me.chanjar.weixin.cp.bean.WxCpDepart;
+import java.lang.reflect.Type;
+
/**
* WxCpDepart的gson适配器.
*
@@ -29,6 +23,7 @@ public class WxCpDepartGsonAdapter implements JsonSerializer, JsonDe
private static final String ID = "id";
private static final String NAME = "name";
private static final String EN_NAME = "name_en";
+ private static final String DEPARTMENT_LEADER = "department_leader";
private static final String PARENT_ID = "parentid";
private static final String ORDER = "order";
@@ -44,6 +39,13 @@ public JsonElement serialize(WxCpDepart group, Type typeOfSrc, JsonSerialization
if (group.getEnName() != null) {
json.addProperty(EN_NAME, group.getEnName());
}
+ if (group.getDepartmentLeader() != null) {
+ JsonArray jsonArray = new JsonArray();
+ for (String department : group.getDepartmentLeader()) {
+ jsonArray.add(new JsonPrimitive(department));
+ }
+ json.add(DEPARTMENT_LEADER, jsonArray);
+ }
if (group.getParentId() != null) {
json.addProperty(PARENT_ID, group.getParentId());
}
@@ -67,6 +69,15 @@ public WxCpDepart deserialize(JsonElement json, Type typeOfT, JsonDeserializatio
if (departJson.get(EN_NAME) != null && !departJson.get(EN_NAME).isJsonNull()) {
depart.setEnName(GsonHelper.getAsString(departJson.get(EN_NAME)));
}
+ if (departJson.getAsJsonArray(DEPARTMENT_LEADER) != null && !departJson.get(DEPARTMENT_LEADER).isJsonNull()) {
+ JsonArray jsonArray = departJson.getAsJsonArray(DEPARTMENT_LEADER);
+ String[] departments = new String[jsonArray.size()];
+ int i = 0;
+ for (JsonElement jsonElement : jsonArray) {
+ departments[i++] = jsonElement.getAsString();
+ }
+ depart.setDepartmentLeader(departments);
+ }
if (departJson.get(ORDER) != null && !departJson.get(ORDER).isJsonNull()) {
depart.setOrder(GsonHelper.getAsLong(departJson.get(ORDER)));
}
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java
index c666c1b94d..d0003ccd8f 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java
@@ -78,6 +78,44 @@ public void testFromJson() {
" }\n" +
" ]\n" +
"}";
+
+ final String testJson = "{\n" +
+ " \"errcode\": 0,\n" +
+ " \"errmsg\": \"ok\",\n" +
+ " \"department\": [\n" +
+ " {\n" +
+ " \"id\": 2,\n" +
+ " \"name\": \"广州研发中心\",\n" +
+ " \"name_en\": \"RDGZ\",\n" +
+ " \"department_leader\":[\"zhangsan\",\"lisi\"],\n" +
+ " \"parentid\": 1,\n" +
+ " \"order\": 10\n" +
+ " },\n" +
+ " {\n" +
+ " \"id\": 3,\n" +
+ " \"name\": \"邮箱产品部\",\n" +
+ " \"name_en\": \"mail\",\n" +
+ " \"department_leader\":[\"lisi\",\"wangwu\"],\n" +
+ " \"parentid\": 2,\n" +
+ " \"order\": 40\n" +
+ " }\n" +
+ " ]\n" +
+ "}\n";
+
+ // 测试序列化
+ val depart = new WxCpDepart();
+ depart.setId(8L);
+ depart.setName("name");
+ depart.setEnName("enName");
+ depart.setDepartmentLeader(new String[]{"zhangsan", "lisi"});
+ depart.setParentId(88L);
+ depart.setOrder(99L);
+
+ String toJson = depart.toJson();
+
+ // 测试企业微信字段返回
+ List department = WxCpGsonBuilder.create().fromJson(GsonParser.parse(two).get("department"), new TypeToken>() {
+ }.getType());
final WxCpExternalContactInfo contactInfo = WxCpExternalContactInfo.fromJson(json);
assertThat(contactInfo).isNotNull();
From 8449f2f942589eb8debd56f4a64c1d2202643bdb Mon Sep 17 00:00:00 2001
From: Aron
Date: Fri, 17 Dec 2021 15:00:39 +0000
Subject: [PATCH 0005/1155] =?UTF-8?q?:memo:=20=E6=9B=B4=E6=AD=A3=E6=B3=A8?=
=?UTF-8?q?=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../binarywang/wxpay/bean/request/WxPayRefundV3Request.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3Request.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3Request.java
index 4ebb10fba1..b534416257 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3Request.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3Request.java
@@ -143,7 +143,7 @@ public static class Amount implements Serializable {
*
* 字段名:币类型
* 变量名:currency
- * 是否必填:否
+ * 是否必填:是
* 类型:string[1, 16]
* 描述:
* 符合ISO 4217标准的三位字母代码,目前只支持人民币:CNY。
From d6d0e3598427bb6a6db9a7965e95f94320db4f16 Mon Sep 17 00:00:00 2001
From: Wong <1960779692@qq.com>
Date: Mon, 20 Dec 2021 15:34:35 +0000
Subject: [PATCH 0006/1155] =?UTF-8?q?:art:=20=E4=BF=AE=E5=A4=8D=E6=B5=8B?=
=?UTF-8?q?=E8=AF=95=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../external/WxCpUserExternalContactInfoTest.java | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java
index d0003ccd8f..ce5475358a 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java
@@ -1,8 +1,13 @@
package me.chanjar.weixin.cp.bean.external;
+import com.google.gson.reflect.TypeToken;
+import lombok.val;
+import me.chanjar.weixin.common.util.json.GsonParser;
+import me.chanjar.weixin.cp.bean.WxCpDepart;
import me.chanjar.weixin.cp.bean.external.contact.ExternalContact;
import me.chanjar.weixin.cp.bean.external.contact.FollowedUser;
import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
import org.testng.annotations.*;
import java.util.List;
@@ -78,8 +83,8 @@ public void testFromJson() {
" }\n" +
" ]\n" +
"}";
-
- final String testJson = "{\n" +
+
+ final String testJson = "{\n" +
" \"errcode\": 0,\n" +
" \"errmsg\": \"ok\",\n" +
" \"department\": [\n" +
@@ -114,7 +119,7 @@ public void testFromJson() {
String toJson = depart.toJson();
// 测试企业微信字段返回
- List department = WxCpGsonBuilder.create().fromJson(GsonParser.parse(two).get("department"), new TypeToken>() {
+ List department = WxCpGsonBuilder.create().fromJson(GsonParser.parse(testJson).get("department"), new TypeToken>() {
}.getType());
final WxCpExternalContactInfo contactInfo = WxCpExternalContactInfo.fromJson(json);
From 43594d71b1cdbaa7f90a0b07bc20ea84a3c339bc Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Wed, 22 Dec 2021 12:41:29 +0800
Subject: [PATCH 0007/1155] Update README.md
---
README.md | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index 694758d6a3..18db207f70 100644
--- a/README.md
+++ b/README.md
@@ -40,11 +40,12 @@
### 重要信息
1. **2021-11-01 发布 [【4.2.0正式版】](https://mp.weixin.qq.com/s/nIk_xOf6dxkhKfqq830Cuw)**!
-1. 新手重要提示:本项目仅是一个SDK开发工具包,未提供Web实现,建议使用 `maven` 或 `gradle` 引用本项目即可使用本SDK提供的各种功能,详情可参考 **[【Demo项目】](demo.md)** 或本项目中的部分单元测试代码;另外微信开发新手请务必阅读[【开发文档 Wiki 首页】](https://github.com/Wechat-Group/WxJava/wiki)的常见问题部分,可以少走很多弯路,节省不少时间。
-1. 技术交流群:想获得QQ群/微信群/钉钉企业群等信息的同学,请使用微信扫描上面的微信公众号二维码关注 `WxJava` 后点击相关菜单即可获取加入方式,同时也可以在微信中搜索 `weixin-java-tools` 或 `WxJava` 后选择正确的公众号进行关注,该公众号会及时通知SDK相关更新信息,并不定期分享微信Java开发相关技术知识;
-1. 钉钉技术交流群:`32206329`(技术交流2群), `30294972`(技术交流1群,目前已满),`35724728`(通知群,实时通知Github项目变更记录)。
-1. 微信开发新手或者Java开发新手在群内提问或新开Issue提问前,请先阅读[【提问的智慧】](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md),并确保已查阅过 [【开发文档Wiki】](https://github.com/wechat-group/WxJava/wiki) ,避免浪费大家的宝贵时间;
-1. 寻求帮助时需贴代码或大长串异常信息的,请利用 http://paste.ubuntu.com
+2. 贡献源码,请参考视频:[【贡献源码全过程(上集)】](https://mp.weixin.qq.com/s/3xUZSATWwHR_gZZm207h7Q)、[【贡献源码全过程(下集)】](https://mp.weixin.qq.com/s/nyzJwVVoYSJ4hSbwyvTx9A) ,友情提供:[程序员小山与Bug](https://space.bilibili.com/473631007)
+3. 新手重要提示:本项目仅是一个SDK开发工具包,未提供Web实现,建议使用 `maven` 或 `gradle` 引用本项目即可使用本SDK提供的各种功能,详情可参考 **[【Demo项目】](demo.md)** 或本项目中的部分单元测试代码;另外微信开发新手请务必阅读[【开发文档 Wiki 首页】](https://github.com/Wechat-Group/WxJava/wiki)的常见问题部分,可以少走很多弯路,节省不少时间。
+4. 技术交流群:想获得QQ群/微信群/钉钉企业群等信息的同学,请使用微信扫描上面的微信公众号二维码关注 `WxJava` 后点击相关菜单即可获取加入方式,同时也可以在微信中搜索 `weixin-java-tools` 或 `WxJava` 后选择正确的公众号进行关注,该公众号会及时通知SDK相关更新信息,并不定期分享微信Java开发相关技术知识;
+5. 钉钉技术交流群:`32206329`(技术交流2群), `30294972`(技术交流1群,目前已满),`35724728`(通知群,实时通知Github项目变更记录)。
+6. 微信开发新手或者Java开发新手在群内提问或新开Issue提问前,请先阅读[【提问的智慧】](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md),并确保已查阅过 [【开发文档Wiki】](https://github.com/wechat-group/WxJava/wiki) ,避免浪费大家的宝贵时间;
+7. 寻求帮助时需贴代码或大长串异常信息的,请利用 http://paste.ubuntu.com
--------------------------------
### 其他说明
From 2e4d73e8b796bb1c573e4e55ee3ca9492c0673cd Mon Sep 17 00:00:00 2001
From: jamy888
Date: Thu, 23 Dec 2021 08:47:44 +0000
Subject: [PATCH 0008/1155] =?UTF-8?q?:new:=20=E3=80=90=E4=BC=81=E4=B8=9A?=
=?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E4=BF=AE=E6=94=B9=E8=A7=A3=E6=9E=90?=
=?UTF-8?q?=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1=E6=8E=A8=E9=80=81=E6=B6=88?=
=?UTF-8?q?=E6=81=AF=E7=B1=BB=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=AF=B9=E4=BC=81?=
=?UTF-8?q?=E5=BE=AE=E5=AE=A2=E6=88=B7=E8=81=94=E7=B3=BB=E5=8F=98=E6=9B=B4?=
=?UTF-8?q?=E5=9B=9E=E8=B0=83=E4=BA=8B=E4=BB=B6=E7=9A=84=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cp/bean/message/WxCpXmlMessage.java | 41 +++++-
.../bean/message/WxCpXmlOutEventMessage.java | 83 +++++++++++
.../cp/bean/message/WxCpXmlOutMessage.java | 7 +
.../cp/bean/outxmlbuilder/EventBuilder.java | 131 ++++++++++++++++++
.../weixin/cp/constant/WxCpConsts.java | 119 ++++++++++++++--
.../cp/util/xml/XStreamTransformer.java | 8 ++
6 files changed, 379 insertions(+), 10 deletions(-)
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutEventMessage.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/EventBuilder.java
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
index 51beb27eee..a95870590f 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
@@ -138,6 +138,29 @@ public class WxCpXmlMessage implements Serializable {
@XStreamConverter(value = XStreamCDataConverter.class)
private String event;
+ @XStreamAlias("UpdateDetail")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String updateDetail;
+
+ @XStreamAlias("JoinScene")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String joinScene;
+
+ @XStreamAlias("QuitScene")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String quitScene;
+
+ @XStreamAlias("MemChangeCnt")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String memChangeCnt;
+
+ @XStreamAlias("Source")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String source;
+
+ @XStreamAlias("StrategyId")
+ private String strategyId;
+
@XStreamAlias("EventKey")
@XStreamConverter(value = XStreamCDataConverter.class)
private String eventKey;
@@ -453,6 +476,14 @@ protected static WxCpXmlMessage fromXml(String xml) {
return xmlMessage;
}
+ public static WxCpXmlMessage fromXml(String xml, Integer agentId) {
+ //修改微信变态的消息内容格式,方便解析
+ xml = xml.replace("", "");
+ final WxCpXmlMessage xmlMessage = fromXml(xml);
+ xmlMessage.setAgentId(agentId);
+ return xmlMessage;
+ }
+
protected static WxCpXmlMessage fromXml(InputStream is) {
return XStreamTransformer.fromXml(WxCpXmlMessage.class, is);
}
@@ -463,9 +494,15 @@ protected static WxCpXmlMessage fromXml(InputStream is) {
public static WxCpXmlMessage fromEncryptedXml(String encryptedXml, WxCpConfigStorage wxCpConfigStorage,
String timestamp, String nonce, String msgSignature) {
WxCpCryptUtil cryptUtil = new WxCpCryptUtil(wxCpConfigStorage);
- String plainText = cryptUtil.decryptXml(msgSignature, timestamp, nonce, encryptedXml);
+ WxCpXmlMessage wxCpXmlMessage = fromXml(encryptedXml);
+ String plainText = cryptUtil.decrypt(msgSignature, timestamp, nonce, encryptedXml);
log.debug("解密后的原始xml消息内容:{}", plainText);
- return fromXml(plainText);
+ if (null != wxCpXmlMessage.getAgentId()) {
+ return fromXml(plainText, wxCpXmlMessage.getAgentId());
+ } else {
+ return fromXml(plainText);
+ }
+
}
public static WxCpXmlMessage fromEncryptedXml(InputStream is, WxCpConfigStorage wxCpConfigStorage,
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutEventMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutEventMessage.java
new file mode 100644
index 0000000000..2b32d9c40e
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutEventMessage.java
@@ -0,0 +1,83 @@
+package me.chanjar.weixin.cp.bean.message;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamConverter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.util.xml.*;
+
+/**
+ * @author eYoung
+ * @description:
+ * @date create at 2021/12/3 16:36
+ */
+@XStreamAlias("xml")
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class WxCpXmlOutEventMessage extends WxCpXmlOutMessage {
+
+ @XStreamAlias("Event")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String event;
+
+ @XStreamAlias("ChatId")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String chatId;
+
+ @XStreamAlias("ChangeType")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String changeType;
+
+ @XStreamAlias("UpdateDetail")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String updateDetail;
+
+ @XStreamAlias("JoinScene")
+ private String joinScene;
+
+ @XStreamAlias("QuitScene")
+ private String quitScene;
+
+ @XStreamAlias("MemChangeCnt")
+ private String memChangeCnt;
+
+ @XStreamAlias("TagType")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String tagType;
+
+ @XStreamAlias("StrategyId")
+ private String strategyId;
+
+ @XStreamAlias("UserID")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String userID;
+
+ @XStreamAlias("ExternalUserID")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String externalUserID;
+
+ @XStreamAlias("State")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String state;
+
+ @XStreamAlias("WelcomeCode")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String welcomeCode;
+
+ @XStreamAlias("Source")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String source;
+
+ @XStreamAlias("FailReason")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String failReason;
+
+ @XStreamAlias("Id")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String id;
+
+ public WxCpXmlOutEventMessage() {
+ this.msgType = WxConsts.XmlMsgType.EVENT;
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java
index 70882561b7..f1c9831b92 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java
@@ -86,6 +86,13 @@ public static UpdateButtonBuilder UPDATE_BUTTON() {
return new UpdateButtonBuilder();
}
+ /**
+ * 获得事件消息builder.
+ */
+ public static EventBuilder EVENT() {
+ return new EventBuilder();
+ }
+
protected String toXml() {
return XStreamTransformer.toXml((Class) this.getClass(), this);
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/EventBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/EventBuilder.java
new file mode 100644
index 0000000000..5e2ee481fc
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/EventBuilder.java
@@ -0,0 +1,131 @@
+package me.chanjar.weixin.cp.bean.outxmlbuilder;
+
+import me.chanjar.weixin.cp.bean.message.WxCpXmlOutEventMessage;
+
+/**
+ * @author eYoung
+ * @description:
+ * @date create at 2021/12/3 16:34
+ */
+public class EventBuilder extends BaseBuilder {
+
+ private String event;
+ private String chatId;
+ private String changeType;
+ private String updateDetail;
+ private String joinScene;
+ private String quitScene;
+ private String memChangeCnt;
+ private String tagType;
+ private String strategyId;
+ private String userID;
+ private String externalUserID;
+ private String state;
+ private String welcomeCode;
+ private String source;
+ private String failReason;
+ private String id;
+
+ public EventBuilder chatId(String chatId) {
+ this.chatId = chatId;
+ return this;
+ }
+
+ public EventBuilder event(String event) {
+ this.event = event;
+ return this;
+ }
+
+ public EventBuilder changeType(String changeType) {
+ this.changeType = changeType;
+ return this;
+ }
+
+ public EventBuilder updateDetail(String updateDetail) {
+ this.updateDetail = updateDetail;
+ return this;
+ }
+
+ public EventBuilder joinScene(String joinScene) {
+ this.joinScene = joinScene;
+ return this;
+ }
+
+ public EventBuilder quitScene(String quitScene) {
+ this.quitScene = quitScene;
+ return this;
+ }
+
+ public EventBuilder memChangeCnt(String memChangeCnt) {
+ this.memChangeCnt = memChangeCnt;
+ return this;
+ }
+
+ public EventBuilder tagType(String tagType) {
+ this.tagType = tagType;
+ return this;
+ }
+
+ public EventBuilder strategyId(String strategyId) {
+ this.strategyId = strategyId;
+ return this;
+ }
+
+ public EventBuilder userID(String userID) {
+ this.userID = userID;
+ return this;
+ }
+
+ public EventBuilder externalUserID(String externalUserID) {
+ this.externalUserID = externalUserID;
+ return this;
+ }
+
+ public EventBuilder state(String state) {
+ this.state = state;
+ return this;
+ }
+
+ public EventBuilder source(String source){
+ this.source = source;
+ return this;
+ }
+
+ public EventBuilder welcomeCode(String welcomeCode) {
+ this.welcomeCode = welcomeCode;
+ return this;
+ }
+
+ public EventBuilder failReason(String failReason){
+ this.failReason = failReason;
+ return this;
+ }
+
+ public EventBuilder id(String id){
+ this.id = id;
+ return this;
+ }
+
+ @Override
+ public WxCpXmlOutEventMessage build() {
+ WxCpXmlOutEventMessage m = new WxCpXmlOutEventMessage();
+ super.setCommon(m);
+ m.setEvent(this.event);
+ m.setChatId(this.chatId);
+ m.setChangeType(this.changeType);
+ m.setUpdateDetail(this.updateDetail);
+ m.setJoinScene(this.joinScene);
+ m.setQuitScene(this.quitScene);
+ m.setMemChangeCnt(this.memChangeCnt);
+ m.setTagType(this.tagType);
+ m.setStrategyId(this.strategyId);
+ m.setUserID(this.userID);
+ m.setExternalUserID(this.externalUserID);
+ m.setState(this.state);
+ m.setWelcomeCode(this.welcomeCode);
+ m.setSource(this.source);
+ m.setFailReason(this.failReason);
+ m.setId(this.id);
+ return m;
+ }
+}
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 f706c18991..0c7648a9e9 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
@@ -98,6 +98,16 @@ public static class EventType {
*/
public static final String CHANGE_EXTERNAL_CONTACT = "change_external_contact";
+ /**
+ * 客户群事件推送
+ */
+ public static final String CHANGE_EXTERNAL_CHAT = "change_external_chat";
+
+ /**
+ * 企业客户标签事件推送
+ */
+ public static final String CHANGE_EXTERNAL_TAG = "change_external_tag";
+
/**
* 企业微信审批事件推送(自建应用审批)
*/
@@ -144,6 +154,10 @@ public static class ExternalContactChangeType {
* 新增外部联系人
*/
public static final String ADD_EXTERNAL_CONTACT = "add_external_contact";
+ /**
+ * 编辑外部联系人
+ */
+ public static final String EDIT_EXTERNAL_CONTACT = "edit_external_contact";
/**
* 删除外部联系人
*/
@@ -157,7 +171,96 @@ public static class ExternalContactChangeType {
* 删除跟进成员事件
*/
public static final String DEL_FOLLOW_USER = "del_follow_user";
+ /**
+ * 客户接替失败事件
+ */
+ public static final String TRANSFER_FAIL = "transfer_fail";
+
+ @UtilityClass
+ public static class ExternalContactTransferFailReason {
+ /**
+ * 客户拒绝
+ */
+ public static final String CUSTOMER_REFUSED = "customer_refused";
+ /**
+ * 接替成员的客户数达到上限
+ */
+ public static final String CUSTOMER_LIMIT_EXCEED = "customer_limit_exceed";
+ }
+ }
+
+ @UtilityClass
+ public static class ExternalChatChangeType {
+ /**
+ * 客户群变更事件
+ */
+ public static final String CREATE = "create";
+ /**
+ * 客户群变更事件
+ */
+ public static final String UPDATE = "update";
+ /**
+ * 客户群解散事件
+ */
+ public static final String DISMISS = "dismiss";
+
+ @UtilityClass
+ public static class ExternalChatUpdateDetail {
+ /**
+ * 成员入群
+ */
+ public static final String ADD_MEMBER = "add_member";
+ /**
+ * 成员退群
+ */
+ public static final String DEL_MEMBER = "del_member";
+ /**
+ * 成员退群
+ */
+ public static final String CHANGE_OWNER = "change_owner";
+ /**
+ * 群名变更
+ */
+ public static final String CHANGE_NAME = "change_name";
+ /**
+ * 群公告变更
+ */
+ public static final String CHANGE_NOTICE = "change_notice";
+ }
}
+ @UtilityClass
+ public static class ExternalTagChangeType{
+
+ /**
+ * 创建企业客户标签
+ */
+ public static final String CREATE = "create";
+ /**
+ * 变更企业客户标签
+ */
+ public static final String UPDATE = "update";
+ /**
+ * 删除企业客户标签
+ */
+ public static final String DELETE = "delete";
+ /**
+ * 重排企业客户标签
+ */
+ public static final String SHUFFLE = "shuffle";
+ }
+
+ @UtilityClass
+ public static class TageType{
+ /**
+ * 标签
+ */
+ public static final String TAG = "tag";
+ /**
+ * 标签组
+ */
+ public static final String TAG_GROUP = "tag_group";
+ }
+
/**
* 企业微信通讯录变更事件.
@@ -318,20 +421,20 @@ public static class AppChatMsgType {
@UtilityClass
public static class WorkBenchType {
/*
- * 关键数据型
- * */
+ * 关键数据型
+ * */
public static final String KEYDATA = "keydata";
/*
- * 图片型
- * */
+ * 图片型
+ * */
public static final String IMAGE = "image";
/*
- * 列表型
- * */
+ * 列表型
+ * */
public static final String LIST = "list";
/*
- * webview型
- * */
+ * webview型
+ * */
public static final String WEBVIEW = "webview";
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java
index 421765bc0f..62ea5072ee 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java
@@ -57,6 +57,7 @@ private static Map configXStreamInstance() {
map.put(WxCpXmlOutUpdateBtnMessage.class, configWxCpXmlOutUpdateBtnMessage());
map.put(WxCpTpXmlPackage.class, configWxCpTpXmlPackage());
map.put(WxCpTpXmlMessage.class, configWxCpTpXmlMessage());
+ map.put(WxCpXmlOutEventMessage.class, configWxCpXmlOutEventMessage());
return map;
}
@@ -141,4 +142,11 @@ private static XStream configWxCpTpXmlMessage() {
return xstream;
}
+ private static XStream configWxCpXmlOutEventMessage() {
+ XStream xstream = XStreamInitializer.getInstance();
+ xstream.processAnnotations(WxCpXmlOutMessage.class);
+ xstream.processAnnotations(WxCpXmlOutEventMessage.class);
+ return xstream;
+ }
+
}
From 2175e94158a44c757bc03722d67f58fdeb7e2548 Mon Sep 17 00:00:00 2001
From: Wong <1960779692@qq.com>
Date: Fri, 24 Dec 2021 01:29:52 +0000
Subject: [PATCH 0009/1155] =?UTF-8?q?:new:=20=E3=80=90=E4=BC=81=E4=B8=9A?=
=?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E5=A2=9E=E5=8A=A0=E7=9B=B4=E6=92=AD?=
=?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../weixin/cp/api/WxCpLivingService.java | 125 ++++++++++++++++++
.../me/chanjar/weixin/cp/api/WxCpService.java | 7 +
.../cp/api/impl/BaseWxCpServiceImpl.java | 6 +
.../cp/api/impl/WxCpLivingServiceImpl.java | 118 +++++++++++++++++
.../bean/living/WxCpLivingCreateRequest.java | 86 ++++++++++++
.../weixin/cp/bean/living/WxCpLivingInfo.java | 80 +++++++++++
.../bean/living/WxCpLivingModifyRequest.java | 56 ++++++++
.../cp/bean/living/WxCpLivingResult.java | 55 ++++++++
.../cp/bean/living/WxCpLivingShareInfo.java | 40 ++++++
.../weixin/cp/bean/living/WxCpWatchStat.java | 90 +++++++++++++
.../weixin/cp/constant/WxCpApiPathConsts.java | 15 ++-
.../chanjar/weixin/cp/api/WxCpLivingTest.java | 99 ++++++++++++++
12 files changed, 775 insertions(+), 2 deletions(-)
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpLivingService.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpLivingServiceImpl.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingCreateRequest.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingInfo.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingModifyRequest.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingResult.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingShareInfo.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpWatchStat.java
create mode 100644 weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpLivingTest.java
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpLivingService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpLivingService.java
new file mode 100644
index 0000000000..4b417e90f2
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpLivingService.java
@@ -0,0 +1,125 @@
+package me.chanjar.weixin.cp.api;
+
+import lombok.NonNull;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.bean.living.*;
+
+/**
+ * 企业微信直播接口.
+ * 官方文档:https://work.weixin.qq.com/api/doc/90000/90135/93633
+ *
+ * @author Wang_Wong
+ * @date 2021-12-21
+ */
+public interface WxCpLivingService {
+
+ /**
+ * 获取微信观看直播凭证
+ * 请求方式: POST(HTTPS)
+ * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/living/get_living_code?access_token=ACCESS_TOKEN
+ *
+ * @param openId 用户openid
+ * @param livingId 直播id
+ * @return living_code 微信观看直播凭证
+ * @throws WxErrorException the wx error exception
+ */
+ String getLivingCode(@NonNull String openId, @NonNull String livingId) throws WxErrorException;
+
+ /**
+ * 获取直播详情
+ * 请求方式:GET(HTTPS)
+ * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/living/get_living_info?access_token=ACCESS_TOKEN&livingid=LIVINGID
+ *
+ * @param livingId 直播id
+ * @return 获取的直播详情
+ * @throws WxErrorException the wx error exception
+ */
+ WxCpLivingInfo getLivingInfo(@NonNull String livingId) throws WxErrorException;
+
+ /**
+ * 获取直播观看明细
+ * 通过该接口可以获取所有观看直播的人员统计
+ *
+ * 请求方式:POST(HTTPS)
+ * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/living/get_watch_stat?access_token=ACCESS_TOKEN
+ *
+ * @param livingId 直播id
+ * @param nextKey 上一次调用时返回的next_key,初次调用可以填”0”
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpWatchStat getWatchStat(@NonNull String livingId, Integer nextKey) throws WxErrorException;
+
+ /**
+ * 获取成员直播ID列表
+ * 通过此接口可以获取指定成员的所有直播ID
+ *
+ * 请求方式:POST(HTTPS)
+ * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/living/get_user_all_livingid?access_token=ACCESS_TOKEN
+ *
+ * @param userId 企业成员的userid
+ * @param cursor 上一次调用时返回的next_cursor,第一次拉取可以不填
+ * @param limit 每次拉取的数据量,默认值和最大值都为100
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpLivingResult.LivingIdResult getUserAllLivingId(@NonNull String userId, String cursor, Integer limit) throws WxErrorException;
+
+ /**
+ * 获取跳转小程序商城的直播观众信息
+ * 通过此接口,开发者可获取跳转小程序商城的直播间(“推广产品”直播)观众id、邀请人id及对应直播间id,以打通卖货直播的“人货场”信息闭环。
+ *
+ * 请求方式:POST(HTTPS)
+ * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/living/get_living_share_info?access_token=ACCESS_TOKEN
+ *
+ * @param wwShareCode "推广产品"直播观众跳转小程序商城时会在小程序path中带上ww_share_code=xxxxx参数
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpLivingShareInfo getLivingShareInfo(@NonNull String wwShareCode) throws WxErrorException;
+
+ /**
+ * 创建预约直播
+ * 请求方式: POST(HTTPS)
+ * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/living/create?access_token=ACCESS_TOKEN
+ *
+ * @param request 创建预约直播请求参数.
+ * @return
+ * @throws WxErrorException
+ */
+ String livingCreate(WxCpLivingCreateRequest request) throws WxErrorException;
+
+ /**
+ * 修改预约直播
+ * 请求方式: POST(HTTPS)
+ * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/living/modify?access_token=ACCESS_TOKEN
+ *
+ * @param request 修改预约直播请求参数.
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpLivingResult livingModify(WxCpLivingModifyRequest request) throws WxErrorException;
+
+ /**
+ * 取消预约直播
+ * 请求方式: POST(HTTPS)
+ * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/living/cancel?access_token=ACCESS_TOKEN
+ *
+ * @param livingId 直播id,仅允许取消预约状态下的直播id
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpLivingResult livingCancel(@NonNull String livingId) throws WxErrorException;
+
+ /**
+ * 删除直播回放
+ * 请求方式: POST(HTTPS)
+ * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/living/delete_replay_data?access_token=ACCESS_TOKEN
+ *
+ * @param livingId 直播id
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpLivingResult deleteReplayData(@NonNull String livingId) throws WxErrorException;
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
index 94cd212637..123697b8ed 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
@@ -392,6 +392,13 @@ public interface WxCpService extends WxService {
*/
WxCpOaService getOaService();
+ /**
+ * 获取直播相关接口的服务类对象
+ *
+ * @return the Living service
+ */
+ WxCpLivingService getLivingService();
+
/**
* 获取日历相关接口的服务类对象
*
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java
index 89221f1a1e..210d54f540 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java
@@ -49,6 +49,7 @@ public abstract class BaseWxCpServiceImpl implements WxCpService, RequestH
private WxCpTagService tagService = new WxCpTagServiceImpl(this);
private WxCpAgentService agentService = new WxCpAgentServiceImpl(this);
private WxCpOaService oaService = new WxCpOaServiceImpl(this);
+ private WxCpLivingService livingService = new WxCpLivingServiceImpl(this);
private WxCpTaskCardService taskCardService = new WxCpTaskCardServiceImpl(this);
private WxCpExternalContactService externalContactService = new WxCpExternalContactServiceImpl(this);
private WxCpGroupRobotService groupRobotService = new WxCpGroupRobotServiceImpl(this);
@@ -477,6 +478,11 @@ public WxCpOaService getOaService() {
return oaService;
}
+ @Override
+ public WxCpLivingService getLivingService() {
+ return livingService;
+ }
+
@Override
public WxCpOaCalendarService getOaCalendarService() {
return this.oaCalendarService;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpLivingServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpLivingServiceImpl.java
new file mode 100644
index 0000000000..5fdf18cf88
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpLivingServiceImpl.java
@@ -0,0 +1,118 @@
+package me.chanjar.weixin.cp.api.impl;
+
+import com.google.gson.JsonObject;
+import com.google.gson.reflect.TypeToken;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.json.GsonHelper;
+import me.chanjar.weixin.common.util.json.GsonParser;
+import me.chanjar.weixin.cp.api.WxCpLivingService;
+import me.chanjar.weixin.cp.api.WxCpService;
+import me.chanjar.weixin.cp.bean.living.*;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Living.*;
+
+/**
+ * 企业微信直播接口实现类.
+ *
+ * @author Wang_Wong
+ * @date 2021-12-21
+ */
+@Slf4j
+@RequiredArgsConstructor
+public class WxCpLivingServiceImpl implements WxCpLivingService {
+ private final WxCpService cpService;
+
+ @Override
+ public String getLivingCode(String openId, String livingId) throws WxErrorException {
+ final String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(GET_LIVING_CODE);
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("openid", openId);
+ jsonObject.addProperty("livingid", livingId);
+ String responseContent = this.cpService.post(apiUrl, jsonObject.toString());
+ return GsonHelper.getString(GsonParser.parse(responseContent), "living_code");
+ }
+
+ @Override
+ public WxCpLivingInfo getLivingInfo(String livingId) throws WxErrorException {
+ String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(GET_LIVING_INFO) + livingId;
+ String responseContent = this.cpService.get(apiUrl, null);
+ return WxCpGsonBuilder.create()
+ .fromJson(GsonParser.parse(responseContent).get("living_info"),
+ new TypeToken() {
+ }.getType()
+ );
+ }
+
+ @Override
+ public WxCpWatchStat getWatchStat(String livingId, Integer nextKey) throws WxErrorException {
+ String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(GET_WATCH_STAT);
+ JsonObject jsonObject = new JsonObject();
+ if (nextKey != null) {
+ jsonObject.addProperty("next_key", String.valueOf(nextKey));
+ }
+ jsonObject.addProperty("livingid", livingId);
+ String responseContent = this.cpService.post(apiUrl, jsonObject.toString());
+ return WxCpWatchStat.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpLivingResult.LivingIdResult getUserAllLivingId(String userId, String cursor, Integer limit) throws WxErrorException {
+ String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(GET_USER_ALL_LIVINGID);
+ JsonObject jsonObject = new JsonObject();
+ if (cursor != null) {
+ jsonObject.addProperty("cursor", cursor);
+ }
+ if (limit != null) {
+ jsonObject.addProperty("limit", limit);
+ }
+ jsonObject.addProperty("userid", userId);
+ String responseContent = this.cpService.post(apiUrl, jsonObject.toString());
+ return WxCpLivingResult.LivingIdResult.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpLivingShareInfo getLivingShareInfo(String wwShareCode) throws WxErrorException {
+ String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(GET_LIVING_SHARE_INFO);
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("ww_share_code", wwShareCode);
+ String responseContent = this.cpService.post(apiUrl, jsonObject.toString());
+ return WxCpLivingShareInfo.fromJson(responseContent);
+ }
+
+ @Override
+ public String livingCreate(WxCpLivingCreateRequest request) throws WxErrorException {
+ String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(CREATE);
+ String responseContent = this.cpService.post(apiUrl, request.toJson());
+ return GsonHelper.getString(GsonParser.parse(responseContent), "livingid");
+ }
+
+ @Override
+ public WxCpLivingResult livingModify(WxCpLivingModifyRequest request) throws WxErrorException {
+ String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(MODIFY);
+ String responseContent = this.cpService.post(apiUrl, request.toJson());
+ return WxCpLivingResult.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpLivingResult livingCancel(@NonNull String livingId) throws WxErrorException {
+ String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(CANCEL);
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("livingid", livingId);
+ String responseContent = this.cpService.post(apiUrl, jsonObject.toString());
+ return WxCpLivingResult.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpLivingResult deleteReplayData(@NonNull String livingId) throws WxErrorException {
+ String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(DELETE_REPLAY_DATA);
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("livingid", livingId);
+ String responseContent = this.cpService.post(apiUrl, jsonObject.toString());
+ return WxCpLivingResult.fromJson(responseContent);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingCreateRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingCreateRequest.java
new file mode 100644
index 0000000000..6da6b81e55
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingCreateRequest.java
@@ -0,0 +1,86 @@
+package me.chanjar.weixin.cp.bean.living;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 创建预约直播请求.
+ *
+ * @author Wang_Wong
+ * @date 2021-12-23
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+public class WxCpLivingCreateRequest implements Serializable {
+ private static final long serialVersionUID = -4960239393895754138L;
+
+ @SerializedName("anchor_userid")
+ private String anchorUserid;
+
+ @SerializedName("theme")
+ private String theme;
+
+ @SerializedName("living_start")
+ private Long livingStart;
+
+ @SerializedName("living_duration")
+ private Long livingDuration;
+
+ @SerializedName("remind_time")
+ private Long remindTime;
+
+ @SerializedName("description")
+ private String description;
+
+ @SerializedName("type")
+ private Integer type;
+
+ @SerializedName("agentid")
+ private Integer agentId;
+
+ @SerializedName("activity_cover_mediaid")
+ private String activityCoverMediaid;
+
+ @SerializedName("activity_share_mediaid")
+ private String activityShareMediaid;
+
+ @SerializedName("activity_detail")
+ private ActivityDetail activityDetail;
+
+ public static class ActivityDetail implements Serializable {
+
+ @SerializedName("image_list")
+ private String[] imageList;
+
+ @SerializedName("description")
+ private String description;
+
+ public static ActivityDetail fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, ActivityDetail.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+ public static WxCpLivingCreateRequest fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpLivingCreateRequest.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingInfo.java
new file mode 100644
index 0000000000..b7010e57e1
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingInfo.java
@@ -0,0 +1,80 @@
+package me.chanjar.weixin.cp.bean.living;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 直播详情信息.
+ *
+ * @author Wang_Wong
+ */
+@Data
+public class WxCpLivingInfo implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("theme")
+ private String theme;
+
+ @SerializedName("living_start")
+ private Long livingStart;
+
+ @SerializedName("living_duration")
+ private Long livingDurationme;
+
+ @SerializedName("status")
+ private Integer status;
+
+ @SerializedName("reserve_living_duration")
+ private Long reserveLivingDuration;
+
+ @SerializedName("reserve_start")
+ private Long reserveStart;
+
+ @SerializedName("description")
+ private String description;
+
+ @SerializedName("anchor_userid")
+ private String anchorUserid;
+
+ @SerializedName("main_department")
+ private Long mainDepartment;
+
+ @SerializedName("viewer_num")
+ private Integer viewerNum;
+
+ @SerializedName("comment_num")
+ private Integer commentNum;
+
+ @SerializedName("mic_num")
+ private Integer micNum;
+
+ @SerializedName("open_replay")
+ private Integer openReplay;
+
+ @SerializedName("replay_status")
+ private Integer replayStatus;
+
+ @SerializedName("type")
+ private Integer type;
+
+ @SerializedName("push_stream_url")
+ private String pushStreamUrl;
+
+ @SerializedName("online_count")
+ private Integer onlineCount;
+
+ @SerializedName("subscribe_count")
+ private Integer subscribeCount;
+
+ public static WxCpLivingInfo fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpLivingInfo.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingModifyRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingModifyRequest.java
new file mode 100644
index 0000000000..00d1938209
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingModifyRequest.java
@@ -0,0 +1,56 @@
+package me.chanjar.weixin.cp.bean.living;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 创建预约直播请求.
+ *
+ * @author Wang_Wong
+ * @date 2021-12-23
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+public class WxCpLivingModifyRequest implements Serializable {
+ private static final long serialVersionUID = -4960239393895754138L;
+
+ @SerializedName("livingid")
+ private String livingId;
+
+ @SerializedName("theme")
+ private String theme;
+
+ @SerializedName("living_start")
+ private Long livingStart;
+
+ @SerializedName("living_duration")
+ private Long livingDuration;
+
+ @SerializedName("remind_time")
+ private Long remindTime;
+
+ @SerializedName("description")
+ private String description;
+
+ @SerializedName("type")
+ private Integer type;
+
+ public static WxCpLivingModifyRequest fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpLivingModifyRequest.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingResult.java
new file mode 100644
index 0000000000..3312eec779
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingResult.java
@@ -0,0 +1,55 @@
+package me.chanjar.weixin.cp.bean.living;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 直播返回对象.
+ *
+ * @author Wang_Wong
+ */
+@Data
+public class WxCpLivingResult implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("errcode")
+ private Integer errcode;
+
+ @SerializedName("errmsg")
+ private String errmsg;
+
+ @Getter
+ @Setter
+ public static class LivingIdResult implements Serializable {
+ private static final long serialVersionUID = -5696099236344075582L;
+
+ @SerializedName("next_cursor")
+ private String nextCursor;
+
+ @SerializedName("livingid_list")
+ private String[] livingidList;
+
+ public static LivingIdResult fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, LivingIdResult.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+ public static WxCpLivingResult fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpLivingResult.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingShareInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingShareInfo.java
new file mode 100644
index 0000000000..f0b96cc961
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpLivingShareInfo.java
@@ -0,0 +1,40 @@
+package me.chanjar.weixin.cp.bean.living;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 跳转小程序商城的直播观众信息.
+ *
+ * @author Wang_Wong
+ */
+@Data
+public class WxCpLivingShareInfo implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ private String livingid;
+
+ @SerializedName("viewer_userid")
+ private String viewerUserid;
+
+ @SerializedName("viewer_external_userid")
+ private String viewerExternalUserid;
+
+ @SerializedName("invitor_userid")
+ private String invitorUserid;
+
+ @SerializedName("invitor_external_userid")
+ private String invitorExternalUserid;
+
+ public static WxCpLivingShareInfo fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpLivingShareInfo.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpWatchStat.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpWatchStat.java
new file mode 100644
index 0000000000..4a77bdd450
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/living/WxCpWatchStat.java
@@ -0,0 +1,90 @@
+package me.chanjar.weixin.cp.bean.living;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 直播观看明细.
+ *
+ * @author Wang_Wong
+ */
+@Data
+public class WxCpWatchStat implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ private Integer ending;
+
+ @SerializedName("next_key")
+ private String nextKey;
+
+ @SerializedName("stat_info")
+ private StatInfo statInfo;
+
+ @Getter
+ @Setter
+ public static class StatInfo implements Serializable {
+ private static final long serialVersionUID = -5696099236344075582L;
+
+ @SerializedName("users")
+ private List users;
+
+ @SerializedName("external_users")
+ private List externalUsers;
+
+ }
+
+ @Getter
+ @Setter
+ public static class User implements Serializable {
+ private static final long serialVersionUID = -5696099236344075582L;
+
+ private String userid;
+
+ @SerializedName("watch_time")
+ private Long watchTime;
+
+ @SerializedName("is_comment")
+ private Integer isComment;
+
+ @SerializedName("is_mic")
+ private Integer isMic;
+
+ }
+
+ @Getter
+ @Setter
+ public static class ExternalUser implements Serializable {
+ private static final long serialVersionUID = -5696099236344075582L;
+
+ private String name;
+ private Integer type;
+
+ @SerializedName("external_userid")
+ private String externalUserid;
+
+ @SerializedName("watch_time")
+ private Long watchTime;
+
+ @SerializedName("is_comment")
+ private Integer isComment;
+
+ @SerializedName("is_mic")
+ private Integer isMic;
+
+ }
+
+ public static WxCpWatchStat fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpWatchStat.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
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 710f7f6a78..c807b0f048 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
@@ -1,8 +1,6 @@
package me.chanjar.weixin.cp.constant;
-import lombok.experimental.UtilityClass;
-
/**
*
* 企业微信api地址常量类
@@ -118,6 +116,19 @@ interface Oa {
String COPY_TEMPLATE = "/cgi-bin/oa/approval/copytemplate";
}
+ interface Living {
+ String GET_LIVING_CODE = "/cgi-bin/living/get_living_code";
+ String GET_LIVING_INFO = "/cgi-bin/living/get_living_info?livingid=";
+ String GET_WATCH_STAT = "/cgi-bin/living/get_watch_stat";
+ String GET_LIVING_SHARE_INFO = "/cgi-bin/living/get_living_share_info";
+ String GET_USER_ALL_LIVINGID = "/cgi-bin/living/get_user_all_livingid";
+
+ String CREATE = "/cgi-bin/living/create";
+ String MODIFY = "/cgi-bin/living/modify";
+ String CANCEL = "/cgi-bin/living/cancel";
+ String DELETE_REPLAY_DATA = "/cgi-bin/living/delete_replay_data";
+ }
+
interface Tag {
String TAG_CREATE = "/cgi-bin/tag/create";
String TAG_UPDATE = "/cgi-bin/tag/update";
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpLivingTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpLivingTest.java
new file mode 100644
index 0000000000..295f0497ff
--- /dev/null
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpLivingTest.java
@@ -0,0 +1,99 @@
+package me.chanjar.weixin.cp.api;
+
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
+import me.chanjar.weixin.cp.bean.living.*;
+import me.chanjar.weixin.cp.config.WxCpConfigStorage;
+import me.chanjar.weixin.cp.demo.WxCpDemoInMemoryConfigStorage;
+import org.eclipse.jetty.util.ajax.JSON;
+import org.testng.annotations.Test;
+
+import java.io.InputStream;
+import java.util.Date;
+
+/**
+ * 企业微信直播测试类.
+ * 官方文档:https://open.work.weixin.qq.com/api/doc/90000/90135/93632
+ *
+ * @author Wang_Wong
+ */
+@Slf4j
+public class WxCpLivingTest {
+
+ private static WxCpConfigStorage wxCpConfigStorage;
+ private static WxCpService wxCpService;
+
+ @Test
+ public void test() throws WxErrorException {
+
+ InputStream inputStream = ClassLoader.getSystemResourceAsStream("test-config.xml");
+ WxCpDemoInMemoryConfigStorage config = WxCpDemoInMemoryConfigStorage.fromXml(inputStream);
+
+ wxCpConfigStorage = config;
+ wxCpService = new WxCpServiceImpl();
+ wxCpService.setWxCpConfigStorage(config);
+
+ String livingCode = wxCpService.getLivingService().getLivingCode("o50by5NezHciWnoexJsrI49ILNqI", "lvOQpTDwAAD2MYuOq9y_bmLNMJfbbdGw");
+ log.info(JSON.toString(livingCode));
+
+ // 直播详情
+ WxCpLivingInfo livingInfo = wxCpService.getLivingService().getLivingInfo("lvOQpTDwAAcP9wNOSSxTwpbni-TMPNSg");
+ log.info(livingInfo.toJson());
+
+ // 直播观看明细
+ WxCpWatchStat watchStat = wxCpService.getLivingService().getWatchStat("lvOQpTDwAAcP9wNOSSxTwpbni-TMPNSg", 0);
+ log.info(watchStat.toJson());
+
+ final String watchStateJson = "{\"errcode\":0,\"errmsg\":\"ok\",\"ending\":1,\"next_key\":\"NEXT_KEY\",\"stat_info\":{\"users\":[{\"userid\":\"userid\",\"watch_time\":30,\"is_comment\":1,\"is_mic\":1}],\"external_users\":[{\"external_userid\":\"external_userid1\",\"type\":1,\"name\":\"user name\",\"watch_time\":30,\"is_comment\":1,\"is_mic\":1},{\"external_userid\":\"external_userid2\",\"type\":2,\"name\":\"user_name\",\"watch_time\":30,\"is_comment\":1,\"is_mic\":1}]}}";
+
+ WxCpWatchStat wxCpWatchStat = WxCpWatchStat.fromJson(watchStateJson);
+ log.info(wxCpWatchStat.toJson());
+
+ // 直播观众信息
+ final String livingShareInfo = "{\"errcode\":0,\"errmsg\":\"ok\",\"livingid\":\"livingid\",\"viewer_userid\":\"viewer_userid\",\"viewer_external_userid\":\"viewer_external_userid\",\"invitor_userid\":\"invitor_userid\",\"invitor_external_userid\":\"invitor_external_userid\"}";
+
+ WxCpLivingShareInfo wxCpLivingShareInfo = WxCpLivingShareInfo.fromJson(livingShareInfo);
+ log.info(wxCpLivingShareInfo.toJson());
+
+ // 获取成员直播ID列表
+ WxCpLivingResult.LivingIdResult livingResult = wxCpService.getLivingService().getUserAllLivingId("ChenHu", null, null);
+ log.info(livingResult.toJson());
+
+ String livinglist = "{\"errcode\":0,\"errmsg\":\"ok\",\"next_cursor\":\"next_cursor\",\"livingid_list\":[\"livingid1\",\"livingid2\"]}";
+ WxCpLivingResult.LivingIdResult livingIdResult = WxCpLivingResult.LivingIdResult.fromJson(livinglist);
+ log.info(livingIdResult.toJson());
+
+
+ log.info("{}", new Date().getTime());
+ // 创建预约直播
+ String create = "{\"anchor_userid\":\"ChenHu\",\"theme\":\"theme\",\"living_start\":164037820420,\"living_duration\":3600,\"description\":\"test description\",\"type\":4,\"remind_time\":60,\"activity_cover_mediaid\":\"MEDIA_ID\",\"activity_share_mediaid\":\"MEDIA_ID\",\"activity_detail\":{\"description\":\"活动描述,非活动类型的直播不用传\",\"image_list\":[\"xxxx1\",\"xxxx1\"]}}";
+ WxCpLivingCreateRequest request = WxCpLivingCreateRequest.fromJson(create);
+ String livingId = wxCpService.getLivingService().livingCreate(request);
+ log.info("livingId为:{}", livingId);
+
+
+ String modify = "{\"livingid\": \""+ livingId +"\",\"theme\":\"theme\",\"living_start\":164047820420,\"living_duration\":3600,\"description\":\"描述:description\",\"type\":1,\"remind_time\":60}";
+ WxCpLivingModifyRequest modifyReq = WxCpLivingModifyRequest.fromJson(modify);
+ WxCpLivingResult result = wxCpService.getLivingService().livingModify(modifyReq);
+ log.info("result:{}", result.toJson());
+
+
+ // 取消预约直播
+// WxCpLivingResult result2 = wxCpService.getLivingService().livingCancel("lvOQpTDwAA0KyLmWZhf_LIENzYIBVD2g");
+ WxCpLivingResult result2 = wxCpService.getLivingService().livingCancel(livingId);
+ log.info("取消预约直播为:{}", result2.toJson());
+
+
+ // 删除直播回放
+// WxCpLivingResult response = wxCpService.getLivingService().deleteReplayData("lvOQpTDwAAVdCHyXMgSK63TKPfKDII7w");
+// log.info(response.toJson());
+
+
+ }
+
+ public static void main(String[] args){
+ log.info("{}", new Date().getTime());
+ }
+
+}
From bcd5806cdcdaa84e5adeac18b9532fd3c7bf1db5 Mon Sep 17 00:00:00 2001
From: Scruel Tao
Date: Mon, 27 Dec 2021 15:01:25 +0800
Subject: [PATCH 0010/1155] =?UTF-8?q?:recycle:=20=E6=97=A0=E6=95=88?=
=?UTF-8?q?=E5=AD=97=E6=AE=B5=E8=BF=87=E6=97=B6=E6=A0=87=E8=AE=B0=E5=A4=84?=
=?UTF-8?q?=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/me/chanjar/weixin/mp/bean/result/WxMpUser.java | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java
index 6edf351d44..45b13a97bf 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java
@@ -21,8 +21,16 @@ public class WxMpUser implements Serializable {
private Boolean subscribe;
private String openId;
+ /**
+ * @deprecated 2021年12月27日之后不再输出
+ */
+ @Deprecated
private String nickname;
private String language;
+ /**
+ * @deprecated 2021年12月27日之后不再输出
+ */
+ @Deprecated
private String headImgUrl;
private Long subscribeTime;
/**
@@ -60,7 +68,6 @@ public class WxMpUser implements Serializable {
*/
private String qrSceneStr;
-
public static WxMpUser fromJson(String json) {
return WxMpGsonBuilder.create().fromJson(json, WxMpUser.class);
}
From 31984c130f8946d699c9369a8128f09b43227abd Mon Sep 17 00:00:00 2001
From: Scruel Tao
Date: Mon, 27 Dec 2021 15:02:14 +0800
Subject: [PATCH 0011/1155] =?UTF-8?q?:bulb:=20=E5=A2=9E=E5=8A=A0=20ADD=5FS?=
=?UTF-8?q?CENE=5FWECHAT=5FADVERTISEMENT=20=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java
index 45b13a97bf..bfd8b6d8dd 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java
@@ -53,8 +53,7 @@ public class WxMpUser implements Serializable {
private String[] privileges;
/**
- * subscribe_scene 返回用户关注的渠道来源.
- * ADD_SCENE_SEARCH 公众号搜索,ADD_SCENE_ACCOUNT_MIGRATION 公众号迁移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 扫描二维码,ADD_SCENEPROFILE LINK 图文页内名称点击,ADD_SCENE_PROFILE_ITEM 图文页右上角菜单,ADD_SCENE_PAID 支付后关注,ADD_SCENE_OTHERS 其他
+ * subscribe_scene 返回用户关注的渠道来源,ADD_SCENE_SEARCH 公众号搜索,ADD_SCENE_ACCOUNT_MIGRATION 公众号迁移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 扫描二维码,ADD_SCENE_PROFILE_LINK 图文页内名称点击,ADD_SCENE_PROFILE_ITEM 图文页右上角菜单,ADD_SCENE_PAID 支付后关注,ADD_SCENE_WECHAT_ADVERTISEMENT 微信广告,ADD_SCENE_OTHERS 其他
*/
private String subscribeScene;
From c66ecbfd4da62406fab4114f05e2295ceb706952 Mon Sep 17 00:00:00 2001
From: linlinjava
Date: Mon, 27 Dec 2021 15:03:02 +0800
Subject: [PATCH 0012/1155] =?UTF-8?q?:art:=20#2461=20=E3=80=90=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91=E8=87=AA=E5=AE=9A=E4=B9=89=E4=BA=A4?=
=?UTF-8?q?=E6=98=93=E7=BB=84=E4=BB=B6=E4=B8=8A=E4=BC=A0=E6=8E=A5=E5=8F=A3?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9B=BE=E7=89=87=E9=93=BE=E6=8E=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...inishopUploadRequestCustomizeExecutor.java | 19 +++++++++----
...opMediaUploadRequestCustomizeExecutor.java | 20 +++++++++++---
...opMediaUploadRequestCustomizeExecutor.java | 15 ++++++++---
...opMediaUploadRequestCustomizeExecutor.java | 27 +++++++++++++------
.../wx/miniapp/api/WxMaShopImgService.java | 10 +++++++
.../api/impl/WxMaShopImgServiceImpl.java | 11 ++++++--
.../api/impl/WxMaShopImgServiceImplTest.java | 7 +++++
7 files changed, 88 insertions(+), 21 deletions(-)
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java
index 23309202d7..e94b2d8d6a 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java
@@ -13,10 +13,19 @@
public abstract class MinishopUploadRequestCustomizeExecutor implements RequestExecutor {
protected RequestHttp requestHttp;
protected String respType;
+ protected String uploadType;
+ protected String imgUrl;
- public MinishopUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) {
+ public MinishopUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType, String imgUrl) {
this.requestHttp = requestHttp;
this.respType = respType;
+ if (imgUrl == null || imgUrl.isEmpty()) {
+ this.uploadType = "0";
+ }
+ else {
+ this.uploadType = "1";
+ this.imgUrl = imgUrl;
+ }
}
@Override
@@ -24,14 +33,14 @@ public void execute(String uri, File data, ResponseHandler create(RequestHttp requestHttp, String respType) {
+ public static RequestExecutor create(RequestHttp requestHttp, String respType, String imgUrl) {
switch (requestHttp.getRequestType()) {
case APACHE_HTTP:
- return new ApacheMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType);
+ return new ApacheMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType, imgUrl);
case JODD_HTTP:
- return new JoddHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType);
+ return new JoddHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType, imgUrl);
case OK_HTTP:
- return new OkHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType);
+ return new OkHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType, imgUrl);
default:
return null;
}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java
index 64888c08d6..9af02af5d0 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java
@@ -24,8 +24,8 @@
*/
@Slf4j
public class ApacheMinishopMediaUploadRequestCustomizeExecutor extends MinishopUploadRequestCustomizeExecutor {
- public ApacheMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) {
- super(requestHttp, respType);
+ public ApacheMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType, String imgUrl) {
+ super(requestHttp, respType, imgUrl);
}
@Override
@@ -35,15 +35,29 @@ public WxMinishopImageUploadCustomizeResult execute(String uri, File file, WxTyp
RequestConfig config = RequestConfig.custom().setProxy(requestHttp.getRequestHttpProxy()).build();
httpPost.setConfig(config);
}
- if (file != null) {
+ if (this.uploadType.equals("0")) {
+ if (file == null) {
+ throw new WxErrorException("上传文件为空");
+ }
HttpEntity entity = MultipartEntityBuilder
.create()
.addBinaryBody("media", file)
.addTextBody("resp_type", this.respType)
+ .addTextBody("upload_type", this.uploadType)
.setMode(HttpMultipartMode.RFC6532)
.build();
httpPost.setEntity(entity);
}
+ else {
+ HttpEntity entity = MultipartEntityBuilder
+ .create()
+ .addTextBody("resp_type", this.respType)
+ .addTextBody("upload_type", this.uploadType)
+ .addTextBody("img_url", this.imgUrl)
+ .setMode(HttpMultipartMode.RFC6532)
+ .build();
+ httpPost.setEntity(entity);
+ }
try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpPost)) {
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
WxError error = WxError.fromJson(responseContent, wxType);
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java
index a79eb8eda5..e36f5a7a18 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java
@@ -22,8 +22,8 @@
*/
@Slf4j
public class JoddHttpMinishopMediaUploadRequestCustomizeExecutor extends MinishopUploadRequestCustomizeExecutor {
- public JoddHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) {
- super(requestHttp, respType);
+ public JoddHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType, String imgUrl) {
+ super(requestHttp, respType, imgUrl);
}
@Override
@@ -33,7 +33,16 @@ public WxMinishopImageUploadCustomizeResult execute(String uri, File file, WxTyp
requestHttp.getRequestHttpClient().useProxy(requestHttp.getRequestHttpProxy());
}
request.withConnectionProvider(requestHttp.getRequestHttpClient());
- request.form("media", file);
+ if (this.uploadType.equals("0")) {
+ request.form("resp_type", this.respType,
+ "upload_type", this.uploadType,
+ "media", file);
+ }
+ else {
+ request.form("resp_type", this.respType,
+ "upload_type", this.uploadType,
+ "img_url", this.imgUrl);
+ }
HttpResponse response = request.send();
response.charset(StandardCharsets.UTF_8.name());
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java
index 45d112cd6c..367bddd60a 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java
@@ -18,19 +18,30 @@
*/
@Slf4j
public class OkHttpMinishopMediaUploadRequestCustomizeExecutor extends MinishopUploadRequestCustomizeExecutor {
- public OkHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) {
- super(requestHttp, respType);
+ public OkHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType, String imgUrl) {
+ super(requestHttp, respType, imgUrl);
}
@Override
public WxMinishopImageUploadCustomizeResult execute(String uri, File file, WxType wxType) throws WxErrorException, IOException {
- RequestBody body = new MultipartBody.Builder()
- .setType(MediaType.parse("multipart/form-data"))
- .addFormDataPart("media",
- file.getName(),
- RequestBody.create(MediaType.parse("application/octet-stream"), file))
- .build();
+ RequestBody body = null;
+ if (this.uploadType.equals("0")) {
+ body = new MultipartBody.Builder()
+ .setType(MediaType.parse("multipart/form-data"))
+ .addFormDataPart("resp_type", this.respType)
+ .addFormDataPart("upload_type", this.uploadType)
+ .addFormDataPart("media", file.getName(), RequestBody.create(MediaType.parse("application/octet-stream"), file))
+ .build();
+ }
+ else {
+ body = new MultipartBody.Builder()
+ .setType(MediaType.parse("multipart/form-data"))
+ .addFormDataPart("resp_type", this.respType)
+ .addFormDataPart("upload_type", this.uploadType)
+ .addFormDataPart("img_url", this.imgUrl)
+ .build();
+ }
Request request = new Request.Builder().url(uri).post(body).build();
Response response = requestHttp.getRequestHttpClient().newCall(request).execute();
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java
index 2cb9334fc2..0bb4d31987 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java
@@ -29,4 +29,14 @@ public interface WxMaShopImgService {
* @throws WxErrorException
*/
WxMinishopImageUploadCustomizeResult uploadImg(File file, String respType) throws WxErrorException;
+
+ /**
+ * 上传图片链接,带respType参数
+ *
+ * @param imgUrl
+ * @param respType
+ * @return WxMinishopImageUploadCustomizeResult
+ * @throws WxErrorException
+ */
+ WxMinishopImageUploadCustomizeResult uploadImg(String imgUrl, String respType) throws WxErrorException;
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java
index 1c69f8dc80..33e2a5de57 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java
@@ -23,14 +23,21 @@ public class WxMaShopImgServiceImpl implements WxMaShopImgService {
@Override
public WxMinishopImageUploadCustomizeResult uploadImg(File file) throws WxErrorException {
WxMinishopImageUploadCustomizeResult result = this.service.execute(
- MinishopUploadRequestCustomizeExecutor.create(this.service.getRequestHttp(), "0"), IMG_UPLOAD, file);
+ MinishopUploadRequestCustomizeExecutor.create(this.service.getRequestHttp(), "0", null), IMG_UPLOAD, file);
return result;
}
@Override
public WxMinishopImageUploadCustomizeResult uploadImg(File file, String respType) throws WxErrorException {
WxMinishopImageUploadCustomizeResult result = this.service.execute(
- MinishopUploadRequestCustomizeExecutor.create(this.service.getRequestHttp(), respType), IMG_UPLOAD, file);
+ MinishopUploadRequestCustomizeExecutor.create(this.service.getRequestHttp(), respType, null), IMG_UPLOAD, file);
+ return result;
+ }
+
+ @Override
+ public WxMinishopImageUploadCustomizeResult uploadImg(String imgUrl, String respType) throws WxErrorException {
+ WxMinishopImageUploadCustomizeResult result = this.service.execute(
+ MinishopUploadRequestCustomizeExecutor.create(this.service.getRequestHttp(), respType, imgUrl), IMG_UPLOAD, null);
return result;
}
}
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java
index 060896ab09..9999c14ab6 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java
@@ -35,4 +35,11 @@ public void testUploadImg2() throws WxErrorException {
WxMinishopImageUploadCustomizeResult result = wxService.getShopImgService().uploadImg(file, "1");
assertThat(result).isNotNull();
}
+
+ @Test
+ public void testUploadImg3() throws WxErrorException {
+ String imgUrl = "https://www.example.com/demo.jpg";
+ WxMinishopImageUploadCustomizeResult result = wxService.getShopImgService().uploadImg(imgUrl, "1");
+ assertThat(result).isNotNull();
+ }
}
From 7116fe5ae21318bee4a1665736c1b09b053b6657 Mon Sep 17 00:00:00 2001
From: zp961466717 <43167276+zp961466717@users.noreply.github.com>
Date: Mon, 27 Dec 2021 15:09:42 +0800
Subject: [PATCH 0013/1155] =?UTF-8?q?:new:=20#2459=20=E3=80=90=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91=E6=8E=88=E6=9D=83=E8=B5=84=E6=96=99?=
=?UTF-8?q?=E5=8F=98=E6=9B=B4=E4=BA=8B=E4=BB=B6=E6=B6=88=E6=81=AF=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0OpenPID=EF=BC=8CPluginID=EF=BC=8COpenID=EF=BC=8CRevoke?=
=?UTF-8?q?Info=E7=AD=89=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../wx/miniapp/bean/WxMaMessage.java | 21 +++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
index ff7a48e471..4a8713cad5 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
@@ -145,6 +145,27 @@ public class WxMaMessage implements Serializable {
@XStreamConverter(value = XStreamCDataConverter.class)
private String query;
+ @SerializedName("RevokeInfo")
+ @XStreamAlias("RevokeInfo")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String revokeInfo;
+
+ @SerializedName("OpenID")
+ @XStreamAlias("OpenID")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String openId;
+
+ @SerializedName("PluginID")
+ @XStreamAlias("PluginID")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String pluginId;
+
+ @SerializedName("OpenPID")
+ @XStreamAlias("OpenPID")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String openPid;
+
+
public static WxMaMessage fromXml(String xml) {
return XStreamTransformer.fromXml(WxMaMessage.class, xml);
}
From 1bda3eee1539e22c7421b914f8458cc0a5bae02e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=97=A0=E5=A4=84=E4=B8=8D=E5=9C=A82015?=
<464097+wuchubuzai@user.noreply.gitee.com>
Date: Mon, 27 Dec 2021 15:53:14 +0000
Subject: [PATCH 0014/1155] =?UTF-8?q?:art:=20#2467=20=E3=80=90=E5=BE=AE?=
=?UTF-8?q?=E4=BF=A1=E6=94=AF=E4=BB=98=E3=80=91=E5=BE=AE=E4=BF=A1=E6=94=AF?=
=?UTF-8?q?=E4=BB=98V3=E6=8E=A5=E5=8F=A3=E8=AF=B7=E6=B1=82=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E4=BB=A3=E7=90=86=E8=AE=BE=E7=BD=AE=E5=8F=82=E6=95=B0?=
=?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../binarywang/wxpay/config/WxPayConfig.java | 34 +++++++++++++++++--
.../impl/BaseWxPayServiceImplTest.java | 21 ++++++++++++
2 files changed, 52 insertions(+), 3 deletions(-)
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java
index 6756b0b4ba..641ee9a53a 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java
@@ -9,7 +9,13 @@
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpHost;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.ssl.SSLContexts;
import javax.net.ssl.SSLContext;
@@ -259,11 +265,15 @@ public CloseableHttpClient initApiV3HttpClient() throws WxPayException {
new WxPayCredentials(mchId, new PrivateKeySigner(certSerialNo, merchantPrivateKey)),
apiV3Key.getBytes(StandardCharsets.UTF_8), this.getCertAutoUpdateTime());
- CloseableHttpClient httpClient = WxPayV3HttpClientBuilder.create()
+ WxPayV3HttpClientBuilder wxPayV3HttpClientBuilder = WxPayV3HttpClientBuilder.create()
.withMerchant(mchId, certSerialNo, merchantPrivateKey)
.withWechatpay(Collections.singletonList(certificate))
- .withValidator(new WxPayValidator(verifier))
- .build();
+ .withValidator(new WxPayValidator(verifier));
+ //初始化V3接口正向代理设置
+ initHttpProxy(wxPayV3HttpClientBuilder);
+
+ CloseableHttpClient httpClient = wxPayV3HttpClientBuilder.build();
+
this.apiV3HttpClient = httpClient;
this.verifier=verifier;
this.privateKey = merchantPrivateKey;
@@ -274,7 +284,25 @@ public CloseableHttpClient initApiV3HttpClient() throws WxPayException {
}
}
+ /**
+ * 配置 http 正向代理
+ * 参考代码: WxPayServiceApacheHttpImpl 中的方法 createHttpClientBuilder
+ * @param httpClientBuilder http构造参数
+ */
+ private void initHttpProxy(HttpClientBuilder httpClientBuilder) {
+ if (StringUtils.isNotBlank(this.getHttpProxyHost()) && this.getHttpProxyPort() > 0) {
+ if (StringUtils.isEmpty(this.getHttpProxyUsername())) {
+ this.setHttpProxyUsername("whatever");
+ }
+ // 使用代理服务器 需要用户认证的代理服务器
+ CredentialsProvider provider = new BasicCredentialsProvider();
+ provider.setCredentials(new AuthScope(this.getHttpProxyHost(), this.getHttpProxyPort()),
+ new UsernamePasswordCredentials(this.getHttpProxyUsername(), this.getHttpProxyPassword()));
+ httpClientBuilder.setDefaultCredentialsProvider(provider);
+ httpClientBuilder.setProxy(new HttpHost(this.getHttpProxyHost(), this.getHttpProxyPort()));
+ }
+ }
private InputStream loadConfigInputStream(String configPath, byte[] configContent, String fileName) throws WxPayException {
InputStream inputStream;
diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java
index 920d917ffc..e25efe5cb1 100644
--- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java
+++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java
@@ -10,6 +10,7 @@
import com.github.binarywang.wxpay.bean.request.*;
import com.github.binarywang.wxpay.bean.result.*;
import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
+import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.constant.WxPayConstants.AccountType;
import com.github.binarywang.wxpay.constant.WxPayConstants.BillType;
import com.github.binarywang.wxpay.constant.WxPayConstants.SignType;
@@ -775,4 +776,24 @@ public void testRefundQueryV3() throws WxPayException {
System.out.println(GSON.toJson(result));
}
+ /**
+ * 测试包含正向代理的测试
+ * @throws WxPayException
+ */
+ @Test
+ public void testQueryOrderV3WithProxy() {
+ try {
+ WxPayOrderQueryV3Request request = new WxPayOrderQueryV3Request();
+ request.setOutTradeNo("n1ZvYqjAg3D3LUBa");
+ WxPayConfig config = this.payService.getConfig();
+ config.setPayBaseUrl("http://api.mch.weixin.qq.com");
+ config.setHttpProxyHost("12.11.1.113");
+ config.setHttpProxyPort(8015);
+ WxPayOrderQueryV3Result result = this.payService.queryOrderV3(request);
+ System.out.println(GSON.toJson(result));
+ } catch (WxPayException e) {
+ }
+
+ }
+
}
From 739c222586f10b80c04d7fce7bba14d64b46561d Mon Sep 17 00:00:00 2001
From: luxiang0412 <1374920889@qq.com>
Date: Mon, 27 Dec 2021 23:58:01 +0800
Subject: [PATCH 0015/1155] =?UTF-8?q?:new:=20#2468=E3=80=90=E4=BC=81?=
=?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1=E3=80=91=E8=8E=B7=E5=8F=96=E5=AE=A1?=
=?UTF-8?q?=E6=89=B9=E7=94=B3=E8=AF=B7=E8=AF=A6=E6=83=85=E6=8E=A5=E5=8F=A3?=
=?UTF-8?q?=E8=BF=94=E5=9B=9E=E6=95=B0=E6=8D=AE=E5=A2=9E=E5=8A=A0=E5=85=B3?=
=?UTF-8?q?=E8=81=94=E5=AE=A1=E6=89=B9=E5=8D=95=E6=8E=A7=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cp/bean/oa/applydata/ContentValue.java | 42 +++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java
index 1ad07bf2a8..23a8749620 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java
@@ -35,6 +35,9 @@ public class ContentValue implements Serializable {
private List children;
+ @SerializedName("related_approval")
+ private List relatedApproval;
+
private Attendance attendance;
private Vacation vacation;
@@ -124,4 +127,43 @@ public static class Vacation implements Serializable {
private Attendance attendance;
}
+ /**
+ * 关联审批单控件
+ */
+ @Data
+ public static class RelatedApproval implements Serializable{
+ private static final long serialVersionUID = 8629601623267510738L;
+ /**
+ *关联审批单的模板名
+ */
+ @SerializedName("template_names")
+ private List templateNames;
+ /**
+ * 关联审批单的状态
+ */
+ @SerializedName("sp_status")
+ private Integer spStatus;
+ /**
+ * 关联审批单的提单者
+ */
+ private String name;
+ /**
+ * 关联审批单的提单时间
+ */
+ @SerializedName("create_time")
+ private Long createTime;
+ /**
+ * 关联审批单的审批单号
+ */
+ @SerializedName("sp_no")
+ private String spNo;
+ }
+
+ @Data
+ public static class TemplateName implements Serializable{
+ private static final long serialVersionUID = 3152481506054355937L;
+ private String text;
+ private String lang;
+ }
+
}
From 7101c22899c954525f33cb314d81c642e55a10f6 Mon Sep 17 00:00:00 2001
From: wuchubuzai2018 <42382506+wuchubuzai2018@users.noreply.github.com>
Date: Tue, 28 Dec 2021 17:59:38 +0800
Subject: [PATCH 0016/1155] =?UTF-8?q?:art:=20#2467=20=E3=80=90=E5=BE=AE?=
=?UTF-8?q?=E4=BF=A1=E6=94=AF=E4=BB=98=E3=80=91=E5=BE=AE=E4=BF=A1=E6=94=AF?=
=?UTF-8?q?=E4=BB=98V3=E6=8E=A5=E5=8F=A3=E8=AF=B7=E6=B1=82=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E4=BB=A3=E7=90=86=E8=AE=BE=E7=BD=AE=E5=8F=82=E6=95=B0?=
=?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../binarywang/wxpay/config/WxPayConfig.java | 26 +++----
.../wxpay/config/WxPayHttpProxy.java | 75 +++++++++++++++++++
.../binarywang/wxpay/util/HttpProxyUtils.java | 49 ++++++++++++
.../auth/AutoUpdateCertificatesVerifier.java | 34 ++++++++-
4 files changed, 165 insertions(+), 19 deletions(-)
create mode 100755 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayHttpProxy.java
create mode 100755 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/HttpProxyUtils.java
mode change 100644 => 100755 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/AutoUpdateCertificatesVerifier.java
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java
index 641ee9a53a..59733944ae 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java
@@ -1,6 +1,7 @@
package com.github.binarywang.wxpay.config;
import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.util.HttpProxyUtils;
import com.github.binarywang.wxpay.util.ResourcesUtils;
import com.github.binarywang.wxpay.v3.WxPayV3HttpClientBuilder;
import com.github.binarywang.wxpay.v3.auth.*;
@@ -260,17 +261,19 @@ public CloseableHttpClient initApiV3HttpClient() throws WxPayException {
if(StringUtils.isBlank(serialNo)){
this.certSerialNo = certificate.getSerialNumber().toString(16).toUpperCase();
}
+ //构造Http Proxy正向代理
+ WxPayHttpProxy wxPayHttpProxy = getWxPayHttpProxy();
AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
new WxPayCredentials(mchId, new PrivateKeySigner(certSerialNo, merchantPrivateKey)),
- apiV3Key.getBytes(StandardCharsets.UTF_8), this.getCertAutoUpdateTime());
+ apiV3Key.getBytes(StandardCharsets.UTF_8), this.getCertAutoUpdateTime(),wxPayHttpProxy);
WxPayV3HttpClientBuilder wxPayV3HttpClientBuilder = WxPayV3HttpClientBuilder.create()
.withMerchant(mchId, certSerialNo, merchantPrivateKey)
.withWechatpay(Collections.singletonList(certificate))
.withValidator(new WxPayValidator(verifier));
//初始化V3接口正向代理设置
- initHttpProxy(wxPayV3HttpClientBuilder);
+ HttpProxyUtils.initHttpProxy(wxPayV3HttpClientBuilder,wxPayHttpProxy);
CloseableHttpClient httpClient = wxPayV3HttpClientBuilder.build();
@@ -285,23 +288,14 @@ public CloseableHttpClient initApiV3HttpClient() throws WxPayException {
}
/**
- * 配置 http 正向代理
- * 参考代码: WxPayServiceApacheHttpImpl 中的方法 createHttpClientBuilder
- * @param httpClientBuilder http构造参数
+ * 初始化一个WxPayHttpProxy对象
+ * @return 返回封装的WxPayHttpProxy对象。如未指定代理主机和端口,则默认返回null
*/
- private void initHttpProxy(HttpClientBuilder httpClientBuilder) {
+ private WxPayHttpProxy getWxPayHttpProxy() {
if (StringUtils.isNotBlank(this.getHttpProxyHost()) && this.getHttpProxyPort() > 0) {
- if (StringUtils.isEmpty(this.getHttpProxyUsername())) {
- this.setHttpProxyUsername("whatever");
- }
-
- // 使用代理服务器 需要用户认证的代理服务器
- CredentialsProvider provider = new BasicCredentialsProvider();
- provider.setCredentials(new AuthScope(this.getHttpProxyHost(), this.getHttpProxyPort()),
- new UsernamePasswordCredentials(this.getHttpProxyUsername(), this.getHttpProxyPassword()));
- httpClientBuilder.setDefaultCredentialsProvider(provider);
- httpClientBuilder.setProxy(new HttpHost(this.getHttpProxyHost(), this.getHttpProxyPort()));
+ return new WxPayHttpProxy(getHttpProxyHost(), getHttpProxyPort(), getHttpProxyUsername(), getHttpProxyPassword());
}
+ return null;
}
private InputStream loadConfigInputStream(String configPath, byte[] configContent, String fileName) throws WxPayException {
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayHttpProxy.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayHttpProxy.java
new file mode 100755
index 0000000000..2b3b1c937d
--- /dev/null
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayHttpProxy.java
@@ -0,0 +1,75 @@
+package com.github.binarywang.wxpay.config;
+
+
+import java.io.Serializable;
+
+/**
+ * 微信支付 HTTP Proxy 正向代理配置
+ *
+ * @author Long Yu
+ * @date 2021-12-28 15:49:03
+ */
+public class WxPayHttpProxy implements Serializable {
+
+ /**
+ * 代理主机
+ */
+ private String httpProxyHost;
+ /**
+ * 代理端口
+ */
+ private Integer httpProxyPort;
+ /**
+ * 代理用户名称
+ */
+ private String httpProxyUsername;
+ /**
+ * 代理密码
+ */
+ private String httpProxyPassword;
+
+ public WxPayHttpProxy() {
+ }
+
+ public WxPayHttpProxy(String httpProxyHost, Integer httpProxyPort, String httpProxyUsername, String httpProxyPassword) {
+ this.httpProxyHost = httpProxyHost;
+ this.httpProxyPort = httpProxyPort;
+ this.httpProxyUsername = httpProxyUsername;
+ this.httpProxyPassword = httpProxyPassword;
+ }
+
+ public String getHttpProxyHost() {
+ return httpProxyHost;
+ }
+
+ public void setHttpProxyHost(String httpProxyHost) {
+ this.httpProxyHost = httpProxyHost;
+ }
+
+ public Integer getHttpProxyPort() {
+ return httpProxyPort;
+ }
+
+ public void setHttpProxyPort(Integer httpProxyPort) {
+ this.httpProxyPort = httpProxyPort;
+ }
+
+ public String getHttpProxyUsername() {
+ return httpProxyUsername;
+ }
+
+ public void setHttpProxyUsername(String httpProxyUsername) {
+ this.httpProxyUsername = httpProxyUsername;
+ }
+
+ public String getHttpProxyPassword() {
+ return httpProxyPassword;
+ }
+
+ public void setHttpProxyPassword(String httpProxyPassword) {
+ this.httpProxyPassword = httpProxyPassword;
+ }
+
+
+
+}
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/HttpProxyUtils.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/HttpProxyUtils.java
new file mode 100755
index 0000000000..7e24cde80c
--- /dev/null
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/HttpProxyUtils.java
@@ -0,0 +1,49 @@
+package com.github.binarywang.wxpay.util;
+
+import com.github.binarywang.wxpay.config.WxPayHttpProxy;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpHost;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.HttpClientBuilder;
+
+/**
+ * 微信支付 HTTP Proxy 工具类
+ *
+ * @author Long Yu
+ * @date 2021-12-28 15:58:03
+ */
+public class HttpProxyUtils {
+
+ /**
+ * 配置 http 正向代理 可以实现内网服务通过代理调用接口
+ * 参考代码: WxPayServiceApacheHttpImpl 中的方法 createHttpClientBuilder
+ *
+ * @param wxPayHttpProxy 代理配置
+ * @param httpClientBuilder http构造参数
+ */
+ public static void initHttpProxy(HttpClientBuilder httpClientBuilder, WxPayHttpProxy wxPayHttpProxy) {
+ if(wxPayHttpProxy == null){
+ return;
+ }
+ if (StringUtils.isNotBlank(wxPayHttpProxy.getHttpProxyHost()) && wxPayHttpProxy.getHttpProxyPort() > 0) {
+ if (StringUtils.isEmpty(wxPayHttpProxy.getHttpProxyUsername())) {
+ wxPayHttpProxy.setHttpProxyUsername("whatever");
+ }
+
+ // 使用代理服务器 需要用户认证的代理服务器
+ CredentialsProvider provider = new BasicCredentialsProvider();
+ provider.setCredentials(new AuthScope(wxPayHttpProxy.getHttpProxyHost(), wxPayHttpProxy.getHttpProxyPort()),
+ new UsernamePasswordCredentials(wxPayHttpProxy.getHttpProxyUsername(), wxPayHttpProxy.getHttpProxyPassword()));
+ httpClientBuilder.setDefaultCredentialsProvider(provider);
+ httpClientBuilder.setProxy(new HttpHost(wxPayHttpProxy.getHttpProxyHost(), wxPayHttpProxy.getHttpProxyPort()));
+ }
+ }
+
+
+
+
+
+}
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/AutoUpdateCertificatesVerifier.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/AutoUpdateCertificatesVerifier.java
old mode 100644
new mode 100755
index d365ccaf4f..ca8b30bc80
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/AutoUpdateCertificatesVerifier.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/AutoUpdateCertificatesVerifier.java
@@ -1,5 +1,7 @@
package com.github.binarywang.wxpay.v3.auth;
+import com.github.binarywang.wxpay.config.WxPayHttpProxy;
+import com.github.binarywang.wxpay.util.HttpProxyUtils;
import com.github.binarywang.wxpay.v3.Credentials;
import com.github.binarywang.wxpay.v3.Validator;
import com.github.binarywang.wxpay.v3.WxPayV3HttpClientBuilder;
@@ -35,6 +37,7 @@
* 在原有CertificatesVerifier基础上,增加自动更新证书功能
*
* @author doger.wang
+ * @author Long Yu
*/
@Slf4j
public class AutoUpdateCertificatesVerifier implements Verifier {
@@ -61,6 +64,11 @@ public class AutoUpdateCertificatesVerifier implements Verifier {
private final ReentrantLock lock = new ReentrantLock();
+ /**
+ * 微信支付代理对象
+ */
+ private WxPayHttpProxy wxPayHttpProxy;
+
/**
* 时间间隔枚举,支持一小时、六小时以及十二小时
*/
@@ -88,9 +96,14 @@ public AutoUpdateCertificatesVerifier(Credentials credentials, byte[] apiV3Key)
}
public AutoUpdateCertificatesVerifier(Credentials credentials, byte[] apiV3Key, int minutesInterval) {
+ this(credentials,apiV3Key,minutesInterval,null);
+ }
+
+ public AutoUpdateCertificatesVerifier(Credentials credentials, byte[] apiV3Key, int minutesInterval,WxPayHttpProxy wxPayHttpProxy) {
this.credentials = credentials;
this.apiV3Key = apiV3Key;
this.minutesInterval = minutesInterval;
+ this.wxPayHttpProxy = wxPayHttpProxy;
//构造时更新证书
try {
autoUpdateCert();
@@ -126,15 +139,22 @@ private void checkAndAutoUpdateCert() {
}
private void autoUpdateCert() throws IOException, GeneralSecurityException {
- CloseableHttpClient httpClient = WxPayV3HttpClientBuilder.create()
+ WxPayV3HttpClientBuilder wxPayV3HttpClientBuilder = WxPayV3HttpClientBuilder.create()
.withCredentials(credentials)
.withValidator(verifier == null ? new Validator() {
@Override
public boolean validate(CloseableHttpResponse response) throws IOException {
return true;
}
- } : new WxPayValidator(verifier))
- .build();
+ } : new WxPayValidator(verifier));
+
+ //调用自定义扩展设置设置HTTP PROXY对象
+ HttpProxyUtils.initHttpProxy(wxPayV3HttpClientBuilder,this.wxPayHttpProxy);
+
+ //增加自定义扩展点,子类可以设置其他构造参数
+ this.customHttpClientBuilder(wxPayV3HttpClientBuilder);
+
+ CloseableHttpClient httpClient = wxPayV3HttpClientBuilder.build();
HttpGet httpGet = new HttpGet(CERT_DOWNLOAD_PATH);
httpGet.addHeader("Accept", "application/json");
@@ -154,6 +174,14 @@ public boolean validate(CloseableHttpResponse response) throws IOException {
}
}
+
+ /**
+ * 子类可以自定义添加Http client builder的信息
+ * @param builder httpclient构造器
+ */
+ public void customHttpClientBuilder(WxPayV3HttpClientBuilder builder) {
+ }
+
/**
* 反序列化证书并解密
*/
From 94ad8169fa10460b673260495717971d3b6ee9aa Mon Sep 17 00:00:00 2001
From: hb0730 <1278032416@qq.com>
Date: Tue, 28 Dec 2021 18:01:22 +0800
Subject: [PATCH 0017/1155] =?UTF-8?q?:new:=20#2455=20=E3=80=90=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91=E5=A2=9E=E5=8A=A0=E6=96=B0=E7=9A=84?=
=?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=89=8B=E6=9C=BA=E5=8F=B7=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
---
.../wx/miniapp/api/WxMaUserService.java | 9 +++++++++
.../miniapp/api/impl/WxMaUserServiceImpl.java | 17 +++++++++++++++++
.../miniapp/constant/WxMaApiUrlConstants.java | 9 +++++----
.../api/impl/WxMaUserServiceImplTest.java | 5 +++++
4 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaUserService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaUserService.java
index 0c513789cd..0a0d66f6e0 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaUserService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaUserService.java
@@ -54,6 +54,15 @@ public interface WxMaUserService {
*/
WxMaPhoneNumberInfo getPhoneNoInfo(String sessionKey, String encryptedData, String ivStr);
+ /**
+ * 获取手机号信息,基础库:2.21.2及以上
+ *
+ * @param code 动态令牌
+ * @return .
+ * @throws WxErrorException .
+ */
+ WxMaPhoneNumberInfo getNewPhoneNoInfo(String code) throws WxErrorException;
+
/**
* 验证用户信息完整性.
*
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImpl.java
index 97c2d196a1..fe513368c7 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImpl.java
@@ -6,16 +6,19 @@
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import cn.binarywang.wx.miniapp.config.WxMaConfig;
+import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
import cn.binarywang.wx.miniapp.util.crypt.WxMaCryptUtils;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.SignUtils;
+import me.chanjar.weixin.common.util.json.GsonParser;
import org.apache.commons.codec.digest.DigestUtils;
import java.util.Map;
+import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.User.GET_PHONE_NUMBER_URL;
import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.User.SET_USER_STORAGE;
/**
@@ -58,6 +61,20 @@ public WxMaPhoneNumberInfo getPhoneNoInfo(String sessionKey, String encryptedDat
return WxMaPhoneNumberInfo.fromJson(WxMaCryptUtils.decrypt(sessionKey, encryptedData, ivStr));
}
+ @Override
+ public WxMaPhoneNumberInfo getNewPhoneNoInfo(String code) throws WxErrorException {
+ JsonObject param = new JsonObject();
+ param.addProperty("code", code);
+ String responseContent = this.service.post(GET_PHONE_NUMBER_URL, param.toString());
+ JsonObject response = GsonParser.parse(responseContent);
+ boolean hasPhoneInfo = response.has("phone_info");
+ if (hasPhoneInfo) {
+ return WxMaGsonBuilder.create().fromJson(response.getAsJsonObject("phone_info"), WxMaPhoneNumberInfo.class);
+ } else {
+ return null;
+ }
+ }
+
@Override
public boolean checkUserInfo(String sessionKey, String rawData, String signature) {
final String generatedSignature = DigestUtils.sha1Hex(rawData + sessionKey);
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
index 0ab0d279d3..ae57072068 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
@@ -288,6 +288,7 @@ public interface Subscribe {
public interface User {
String SET_USER_STORAGE = "https://api.weixin.qq.com/wxa/set_user_storage?appid=%s&signature=%s&openid=%s&sig_method=%s";
+ String GET_PHONE_NUMBER_URL = "https://api.weixin.qq.com/wxa/business/getuserphonenumber";
}
public interface Ocr {
@@ -357,20 +358,20 @@ interface Audit {
interface Delivery {
String GET_COMPANY_LIST = "https://api.weixin.qq.com/shop/delivery/get_company_list";
String DELIVERY_SEND = "https://api.weixin.qq.com/shop/delivery/send";
- String DELIVERY_RECEIVE = "https://api.weixin.qq.com/shop/delivery/recieve";
+ String DELIVERY_RECEIVE = "https://api.weixin.qq.com/shop/delivery/recieve";
}
interface Aftersale {
String AFTERSALE_ADD = "https://api.weixin.qq.com/shop/aftersale/add";
String AFTERSALE_GET = "https://api.weixin.qq.com/shop/aftersale/get";
- String AFTERSALE_UPDATE = "https://api.weixin.qq.com/shop/aftersale/update";
+ String AFTERSALE_UPDATE = "https://api.weixin.qq.com/shop/aftersale/update";
}
}
/**
* 电子发票报销方
*/
- public interface Invoice{
+ public interface Invoice {
/**
* 报销方查询报销发票信息
@@ -393,7 +394,7 @@ public interface Invoice{
String UPDATE_STATUS_BATCH = "https://api.weixin.qq.com/card/invoice/reimburse/updatestatusbatch";
}
- public interface Internet{
+ public interface Internet {
String GET_USER_ENCRYPT_KEY = "https://api.weixin.qq.com/wxa/business/getuserencryptkey";
}
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplTest.java
index fe3fa1675c..dbee3f9c90 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplTest.java
@@ -71,4 +71,9 @@ public void testSetUserStorage() throws WxErrorException {
this.wxService.getUserService().setUserStorage(ImmutableMap.of("1","2"),
"r7BXXKkLb8qrSNn05n0qiA",((TestConfig)this.wxService.getWxMaConfig()).getOpenid());
}
+
+ @Test
+ public void testGetNewPhoneNoInfo() throws Exception{
+ assertNotNull(wxService.getUserService().getNewPhoneNoInfo("test"));
+ }
}
From 1474e727b2c0a27a0286c8a7dab6c333e613dd13 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Tue, 28 Dec 2021 18:10:48 +0800
Subject: [PATCH 0018/1155] =?UTF-8?q?:bookmark:=20=E5=8F=91=E5=B8=83=204.2?=
=?UTF-8?q?.3.B=20=E6=B5=8B=E8=AF=95=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
spring-boot-starters/pom.xml | 2 +-
spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml | 2 +-
.../wx-java-miniapp-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml | 2 +-
weixin-graal/pom.xml | 2 +-
weixin-java-common/pom.xml | 2 +-
weixin-java-cp/pom.xml | 2 +-
weixin-java-miniapp/pom.xml | 2 +-
weixin-java-mp/pom.xml | 2 +-
weixin-java-open/pom.xml | 2 +-
weixin-java-pay/pom.xml | 2 +-
weixin-java-qidian/pom.xml | 2 +-
16 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/pom.xml b/pom.xml
index 9695198cf4..553a4f2936 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.github.binarywang
wx-java
- 4.2.2.B
+ 4.2.3.B
pom
WxJava - Weixin/Wechat Java SDK
微信开发Java SDK
diff --git a/spring-boot-starters/pom.xml b/spring-boot-starters/pom.xml
index 1cabe75c01..c7fd4b0075 100644
--- a/spring-boot-starters/pom.xml
+++ b/spring-boot-starters/pom.xml
@@ -4,7 +4,7 @@
com.github.binarywang
wx-java
- 4.2.2.B
+ 4.2.3.B
pom
wx-java-spring-boot-starters
diff --git a/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
index 47f4c1d7c7..8a1c8b7024 100644
--- a/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
@@ -4,7 +4,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.2.B
+ 4.2.3.B
4.0.0
diff --git a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
index b565682220..dd00a70a88 100644
--- a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.2.B
+ 4.2.3.B
4.0.0
diff --git a/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
index a0784c7819..769c5ee4ea 100644
--- a/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.2.B
+ 4.2.3.B
4.0.0
diff --git a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
index e05b84550c..e4cd456da1 100644
--- a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.2.B
+ 4.2.3.B
4.0.0
diff --git a/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
index 3c7daeea13..cfbc3b83e9 100644
--- a/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.2.B
+ 4.2.3.B
4.0.0
diff --git a/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
index f6bd676779..a506de185d 100644
--- a/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
@@ -3,7 +3,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.2.B
+ 4.2.3.B
4.0.0
diff --git a/weixin-graal/pom.xml b/weixin-graal/pom.xml
index 2245e84d69..47abb3890c 100644
--- a/weixin-graal/pom.xml
+++ b/weixin-graal/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
wx-java
- 4.2.2.B
+ 4.2.3.B
weixin-graal
diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml
index 471dac4948..ccb96d30a3 100644
--- a/weixin-java-common/pom.xml
+++ b/weixin-java-common/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
wx-java
- 4.2.2.B
+ 4.2.3.B
weixin-java-common
diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml
index 712659e69b..b726737dd7 100644
--- a/weixin-java-cp/pom.xml
+++ b/weixin-java-cp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.2.B
+ 4.2.3.B
weixin-java-cp
diff --git a/weixin-java-miniapp/pom.xml b/weixin-java-miniapp/pom.xml
index c510836191..16e3da3300 100644
--- a/weixin-java-miniapp/pom.xml
+++ b/weixin-java-miniapp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.2.B
+ 4.2.3.B
weixin-java-miniapp
diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml
index d12beb7b9c..b5440d093c 100644
--- a/weixin-java-mp/pom.xml
+++ b/weixin-java-mp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.2.B
+ 4.2.3.B
weixin-java-mp
diff --git a/weixin-java-open/pom.xml b/weixin-java-open/pom.xml
index ea7954110e..ddad8cf810 100644
--- a/weixin-java-open/pom.xml
+++ b/weixin-java-open/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.2.B
+ 4.2.3.B
weixin-java-open
diff --git a/weixin-java-pay/pom.xml b/weixin-java-pay/pom.xml
index 6767779950..3d5dbcd37c 100644
--- a/weixin-java-pay/pom.xml
+++ b/weixin-java-pay/pom.xml
@@ -5,7 +5,7 @@
com.github.binarywang
wx-java
- 4.2.2.B
+ 4.2.3.B
4.0.0
diff --git a/weixin-java-qidian/pom.xml b/weixin-java-qidian/pom.xml
index c1ffd88fbf..f3131dc19e 100644
--- a/weixin-java-qidian/pom.xml
+++ b/weixin-java-qidian/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.2.B
+ 4.2.3.B
weixin-java-qidian
From 1309e9e2dc7327aa7021da88eb1a05b489ddf9c5 Mon Sep 17 00:00:00 2001
From: 184759547 <96714930+184759547@users.noreply.github.com>
Date: Thu, 30 Dec 2021 09:16:10 +0800
Subject: [PATCH 0019/1155] =?UTF-8?q?:new:=20#2473=20=E3=80=90=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91=E6=8E=A5=E5=85=A5=E5=B0=8F=E7=A8=8B?=
=?UTF-8?q?=E5=BA=8F=E5=B9=BF=E5=91=8A=E5=AE=9E=E7=8E=B0=EF=BC=8C=E5=AE=9E?=
=?UTF-8?q?=E7=8E=B0=E5=88=9B=E5=BB=BA=E6=95=B0=E6=8D=AE=E6=BA=90=E5=92=8C?=
=?UTF-8?q?=E5=9B=9E=E4=BC=A0=E6=95=B0=E6=8D=AE=E4=B8=A4=E4=B8=AA=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: wywy12300
---
.../wx/miniapp/api/WxMaMarketingService.java | 35 +++++++++
.../wx/miniapp/api/WxMaService.java | 7 ++
.../miniapp/api/impl/BaseWxMaServiceImpl.java | 4 +
.../api/impl/WxMaMarketingServiceImpl.java | 42 +++++++++++
.../bean/marketing/WxMaUserAction.java | 74 +++++++++++++++++++
5 files changed, 162 insertions(+)
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMarketingService.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMarketingServiceImpl.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMarketingService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMarketingService.java
new file mode 100644
index 0000000000..be40288d6e
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMarketingService.java
@@ -0,0 +1,35 @@
+package cn.binarywang.wx.miniapp.api;
+
+import cn.binarywang.wx.miniapp.bean.marketing.WxMaUserAction;
+import me.chanjar.weixin.common.error.WxErrorException;
+import java.util.List;
+
+/**
+ *
+ * @Description :微信营销接口
+ * @author 184759547
+ * @since : 2021/12/28
+ */
+public interface WxMaMarketingService {
+ /**
+ *
+ * 创建数据源.
+ * 接口调用请求说明
+ * https://ad.weixin.qq.com/guide/457
+ *
+ *
+ * @param type 用户行为源类型
+ * @param name 用户行为源名称 必填
+ * @param description 用户行为源描述,字段长度最小 1 字节,长度最大 128 字节
+ */
+ long addUserActionSets(String type, String name, String description) throws WxErrorException;
+
+ /**
+ * 回传数据.
+ * 接口调用请求说明
+ * https://ad.weixin.qq.com/guide/457
+ *
+ * @param actions 用户行为源类型
+ */
+ String addUserAction(List actions, Long userActionSetId) throws WxErrorException;
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
index b22f865381..225a52a558 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
@@ -469,4 +469,11 @@ public interface WxMaService extends WxService {
* @return WxMaDeviceSubscribeService plugin service
*/
WxMaDeviceSubscribeService getDeviceSubscribeService();
+
+ /**
+ * 返回小程序广告接入相关接口服务对象
+ *
+ * @return WxMaDeviceSubscribeService plugin service
+ */
+ WxMaMarketingService getMarketingService();
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
index e6ab2b9887..bf8e1e9033 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
@@ -76,6 +76,7 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH
private final WxMaLinkService linkService = new WxMaLinkServiceImpl(this);
private final WxMaReimburseInvoiceService reimburseInvoiceService = new WxMaReimburseInvoiceServiceImpl(this);
private final WxMaDeviceSubscribeService deviceSubscribeService = new WxMaDeviceSubscribeServiceImpl(this);
+ private final WxMaMarketingService marketingService = new WxMaMarketingServiceImpl(this);
private Map configMap;
private int retrySleepMillis = 1000;
private int maxRetryTimes = 5;
@@ -577,4 +578,7 @@ public WxMaReimburseInvoiceService getReimburseInvoiceService() {
@Override
public WxMaDeviceSubscribeService getDeviceSubscribeService(){ return this.deviceSubscribeService; }
+
+ @Override
+ public WxMaMarketingService getMarketingService() {return this.marketingService; }
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMarketingServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMarketingServiceImpl.java
new file mode 100644
index 0000000000..001519e56c
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMarketingServiceImpl.java
@@ -0,0 +1,42 @@
+package cn.binarywang.wx.miniapp.api.impl;
+
+import cn.binarywang.wx.miniapp.api.WxMaMarketingService;
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.marketing.WxMaUserAction;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.json.GsonParser;
+
+import java.util.List;
+
+/**
+ * @author 184759547
+ * @Description :微信营销接口
+ * @since : 2021/12/28
+ */
+@Slf4j
+@RequiredArgsConstructor
+public class WxMaMarketingServiceImpl implements WxMaMarketingService {
+ private final WxMaService wxMaService;
+ private final String USER_ACTION_SETS_ADD = "https://api.weixin.qq.com/marketing/user_action_sets/add?version=v1.0";
+ private final String USER_ACTIONS_ADD = "https://api.weixin.qq.com/marketing/user_actions/add?version=v1.0";
+
+ @Override
+ public long addUserActionSets(String type, String name, String description) throws WxErrorException {
+ JsonObject json = new JsonObject();
+ json.addProperty("type", type);
+ json.addProperty("name", name);
+ json.addProperty("description", description);
+ String responseContent = wxMaService.post(USER_ACTION_SETS_ADD, json.toString());
+ JsonObject tmpJson = GsonParser.parse(responseContent);
+ return tmpJson.get("data").getAsJsonObject().get("user_action_set_id").getAsLong();
+ }
+
+ @Override
+ public String addUserAction(List actions, Long userActionSetId) throws WxErrorException {
+ return wxMaService.post(USER_ACTIONS_ADD, WxMaUserAction.listToJson(actions, userActionSetId));
+ }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java
new file mode 100644
index 0000000000..5427aa2ab5
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java
@@ -0,0 +1,74 @@
+package cn.binarywang.wx.miniapp.bean.marketing;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import sun.rmi.runtime.Log;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description :微信营销接口
+ * @author 184759547
+ * @since : 2021/12/28
+ */
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class WxMaUserAction implements Serializable {
+ private static final long serialVersionUID = 7482378011709983616L;
+ private String url;
+ private Integer actionTime;
+ private String actionType;
+ private String leadsType;
+ private String clickId;
+ private Integer actionParam;
+
+ private JsonObject toJsonObject() {
+ JsonObject json = new JsonObject();
+ json.addProperty("url", this.url);
+ json.addProperty("action_time", this.actionTime);
+ json.addProperty("action_type", this.actionType);
+
+ if (this.clickId != null) {
+ JsonObject traceJson = new JsonObject();
+ traceJson.addProperty("click_id", this.clickId);
+ json.add("trace", traceJson);
+ }
+
+ if (this.actionParam != null) {
+ JsonObject actionParamJson = new JsonObject();
+ actionParamJson.addProperty("value", actionParam);
+ if (this.leadsType != null) {
+ actionParamJson.addProperty("leads_type", leadsType);
+ }
+ json.add("action_param", actionParamJson);
+ }
+
+ return json;
+ }
+
+ /**
+ * list对象转换为json字符串
+ *
+ * @param actions .
+ * @return .
+ */
+ public static String listToJson(List actions, Long userActionSetId) {
+ JsonArray array = new JsonArray();
+ for (WxMaUserAction action : actions) {
+ array.add(action.toJsonObject());
+ }
+
+ JsonObject result = new JsonObject();
+ result.addProperty("user_action_set_id", userActionSetId);
+ result.add("actions", array);
+ return result.toString();
+ }
+}
From a647fe8c5b096a4bbd50be81cce07e699055e396 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A9=97=E8=8B=97=E5=AD=90?= <994599447@qq.com>
Date: Thu, 30 Dec 2021 09:17:19 +0800
Subject: [PATCH 0020/1155] =?UTF-8?q?:art:=20#2474=E3=80=90=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91createWxaCodeUnlimit=20=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=E6=96=B9=E6=B3=95=E6=94=AF=E6=8C=81=E8=AE=BE=E7=BD=AE?=
=?UTF-8?q?check=5Fpath=E5=8F=82=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../wx/miniapp/api/WxMaQrcodeService.java | 12 +++++++++---
.../api/impl/WxMaQrcodeServiceImpl.java | 19 ++++++++++---------
.../wx/miniapp/bean/WxaCodeUnlimit.java | 3 +++
.../api/impl/WxMaQrcodeServiceImplTest.java | 2 +-
4 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java
index 32e4e78cad..46fc97d2b5 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java
@@ -193,6 +193,8 @@ File createWxaCode(String path, int width, boolean autoColor, WxMaCodeLineColor
* @param scene 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,
* 其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
* @param page 必须是已经发布的小程序页面,例如 "pages/index/index" ,如果不填写这个字段,默认跳主页面
+ * @param checkPath 默认true 检查 page 是否存在,为 true 时 page 必须是已经发布的小程序存在的页面(否则报错);
+ * 为 false 时允许小程序未发布或者 page 不存在,但 page 有数量上限(60000个)请勿滥用
* @param envVersion 默认"release" 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
* @param width 默认430 二维码的宽度
* @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
@@ -201,7 +203,7 @@ File createWxaCode(String path, int width, boolean autoColor, WxMaCodeLineColor
* @return 文件内容字节数组
* @throws WxErrorException 异常
*/
- byte[] createWxaCodeUnlimitBytes(String scene, String page, String envVersion, int width, boolean autoColor,
+ byte[] createWxaCodeUnlimitBytes(String scene, String page, boolean checkPath, String envVersion, int width, boolean autoColor,
WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException;
/**
@@ -217,6 +219,8 @@ byte[] createWxaCodeUnlimitBytes(String scene, String page, String envVersion, i
* 其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
* @param page 必须是已经发布的小程序页面,例如 "pages/index/index" ,如果不填写这个字段,默认跳主页面
* @param filePath 二维码生成的文件路径,例如: /var/temp
+ * @param checkPath 默认true 检查 page 是否存在,为 true 时 page 必须是已经发布的小程序存在的页面(否则报错);
+ * 为 false 时允许小程序未发布或者 page 不存在,但 page 有数量上限(60000个)请勿滥用
* @param envVersion 默认"release" 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
* @param width 默认430 二维码的宽度
* @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
@@ -225,7 +229,7 @@ byte[] createWxaCodeUnlimitBytes(String scene, String page, String envVersion, i
* @return 文件对象
* @throws WxErrorException 异常
*/
- File createWxaCodeUnlimit(String scene, String page, String filePath, String envVersion, int width, boolean autoColor,
+ File createWxaCodeUnlimit(String scene, String page, String filePath, boolean checkPath, String envVersion, int width, boolean autoColor,
WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException;
/**
@@ -240,6 +244,8 @@ File createWxaCodeUnlimit(String scene, String page, String filePath, String env
* @param scene 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,
* 其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
* @param page 必须是已经发布的小程序页面,例如 "pages/index/index" ,如果不填写这个字段,默认跳主页面
+ * @param checkPath 默认true 检查 page 是否存在,为 true 时 page 必须是已经发布的小程序存在的页面(否则报错);
+ * 为 false 时允许小程序未发布或者 page 不存在,但 page 有数量上限(60000个)请勿滥用
* @param envVersion 默认"release" 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
* @param width 默认430 二维码的宽度
* @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
@@ -248,7 +254,7 @@ File createWxaCodeUnlimit(String scene, String page, String filePath, String env
* @return 文件对象
* @throws WxErrorException 异常
*/
- File createWxaCodeUnlimit(String scene, String page, String envVersion, int width, boolean autoColor,
+ File createWxaCodeUnlimit(String scene, String page, boolean checkPath, String envVersion, int width, boolean autoColor,
WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException;
/**
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java
index ccfac099b3..072119bc2a 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java
@@ -76,24 +76,25 @@ public File createWxaCode(String path) throws WxErrorException {
}
@Override
- public byte[] createWxaCodeUnlimitBytes(String scene, String page, String envVersion, int width, boolean autoColor,
+ public byte[] createWxaCodeUnlimitBytes(String scene, String page, boolean checkPath, String envVersion, int width, boolean autoColor,
WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException {
return this.service.execute(QrcodeBytesRequestExecutor.create(this.service.getRequestHttp()),
- GET_WXACODE_UNLIMIT_URL, this.buildWxaCodeUnlimit(scene, page, envVersion, width, autoColor, lineColor, isHyaline));
+ GET_WXACODE_UNLIMIT_URL, this.buildWxaCodeUnlimit(scene, page, checkPath, envVersion, width, autoColor, lineColor, isHyaline));
}
@Override
- public File createWxaCodeUnlimit(String scene, String page, String envVersion, int width, boolean autoColor,
+ public File createWxaCodeUnlimit(String scene, String page, boolean checkPath, String envVersion, int width, boolean autoColor,
WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException {
return this.service.execute(QrcodeRequestExecutor.create(this.service.getRequestHttp()),
- GET_WXACODE_UNLIMIT_URL, this.buildWxaCodeUnlimit(scene, page, envVersion, width, autoColor, lineColor, isHyaline));
+ GET_WXACODE_UNLIMIT_URL, this.buildWxaCodeUnlimit(scene, page, checkPath, envVersion, width, autoColor, lineColor, isHyaline));
}
- private WxaCodeUnlimit buildWxaCodeUnlimit(String scene, String page, String envVersion, int width, boolean autoColor,
+ private WxaCodeUnlimit buildWxaCodeUnlimit(String scene, String page, boolean checkPath, String envVersion, int width, boolean autoColor,
WxMaCodeLineColor lineColor, boolean isHyaline) {
WxaCodeUnlimit wxaCodeUnlimit = new WxaCodeUnlimit();
wxaCodeUnlimit.setScene(scene);
wxaCodeUnlimit.setPage(page);
+ wxaCodeUnlimit.setCheckPath(checkPath);
wxaCodeUnlimit.setEnvVersion(envVersion);
wxaCodeUnlimit.setWidth(width);
wxaCodeUnlimit.setAutoColor(autoColor);
@@ -105,7 +106,7 @@ private WxaCodeUnlimit buildWxaCodeUnlimit(String scene, String page, String env
@Override
public File createWxaCodeUnlimit(String scene, String page) throws WxErrorException {
- return this.createWxaCodeUnlimit(scene, page, "release", 430, true, null, false);
+ return this.createWxaCodeUnlimit(scene, page, true, "release", 430, true, null, false);
}
@Override
@@ -144,15 +145,15 @@ public File createWxaCode(String path, String filePath) throws WxErrorException
}
@Override
- public File createWxaCodeUnlimit(String scene, String page, String filePath, String envVersion, int width, boolean autoColor,
+ public File createWxaCodeUnlimit(String scene, String page, String filePath, boolean checkPath, String envVersion, int width, boolean autoColor,
WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException {
return this.service.execute(QrcodeRequestExecutor.create(this.service.getRequestHttp(), filePath),
- GET_WXACODE_UNLIMIT_URL, this.buildWxaCodeUnlimit(scene, page, envVersion, width, autoColor, lineColor, isHyaline));
+ GET_WXACODE_UNLIMIT_URL, this.buildWxaCodeUnlimit(scene, page, checkPath, envVersion, width, autoColor, lineColor, isHyaline));
}
@Override
public File createWxaCodeUnlimit(String scene, String page, String filePath) throws WxErrorException {
- return this.createWxaCodeUnlimit(scene, page, filePath, "release", 430, true, null, false);
+ return this.createWxaCodeUnlimit(scene, page, filePath, true, "release", 430, true, null, false);
}
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCodeUnlimit.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCodeUnlimit.java
index f9c902efd4..32e713ad84 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCodeUnlimit.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCodeUnlimit.java
@@ -20,6 +20,9 @@ public class WxaCodeUnlimit extends AbstractWxMaQrcodeWrapper implements Seriali
private String scene;
private String page;
+ @SerializedName("check_path")
+ private boolean checkPath = true;
+
@SerializedName("env_version")
private String envVersion = "release";
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java
index cf500c2b2d..25988f5fd5 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java
@@ -52,7 +52,7 @@ public void testCreateWxaCodeBytes() throws WxErrorException {
@Test
public void testCreateWxaCodeUnlimitBytes() throws WxErrorException {
- final byte[] wxCode = this.wxService.getQrcodeService().createWxaCodeUnlimitBytes("111", null, "trial", 122, true, null, false);
+ final byte[] wxCode = this.wxService.getQrcodeService().createWxaCodeUnlimitBytes("111", "pages/unknown", false, "trial", 122, true, null, false);
assertThat(wxCode).isNotNull();
}
From fd8e02a81a208066332a70c8b7317f63cad75217 Mon Sep 17 00:00:00 2001
From: JCLee <452415615@qq.com>
Date: Fri, 31 Dec 2021 15:04:07 +0800
Subject: [PATCH 0021/1155] =?UTF-8?q?:art:=20#2476=E3=80=90=E5=85=AC?=
=?UTF-8?q?=E4=BC=97=E5=8F=B7=E3=80=91=E5=AE=A2=E6=9C=8D=E6=B6=88=E6=81=AF?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8D=89=E7=A8=BF=E7=AE=B1=E5=9B=BE=E6=96=87?=
=?UTF-8?q?=E6=B6=88=E6=81=AF=E7=B1=BB=E5=9E=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../chanjar/weixin/common/api/WxConsts.java | 5 +++
.../weixin/mp/bean/kefu/WxMpKefuMessage.java | 9 +++++
.../mp/builder/kefu/MpNewsArticleBuilder.java | 33 +++++++++++++++++++
.../util/json/WxMpKefuMessageGsonAdapter.java | 5 +++
.../mp/bean/kefu/WxMpKefuMessageTest.java | 9 +++++
5 files changed, 61 insertions(+)
create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/MpNewsArticleBuilder.java
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java
index 01b1d36483..b6b94a7641 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java
@@ -126,6 +126,11 @@ public static class KefuMsgType {
* 模板卡片消息.
*/
public static final String TEMPLATE_CARD = "template_card";
+
+ /**
+ * 发送图文消息(点击跳转到图文消息页面)使用通过 “发布” 系列接口得到的 article_id(草稿箱功能上线后不再支持客服接口中带 media_id 的 mpnews 类型的图文消息)
+ */
+ public static final String MP_NEWS_ARTICLE = "mpnewsarticle";
}
/**
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java
index 37beb77e78..7ac8bee4f6 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java
@@ -37,6 +37,7 @@ public class WxMpKefuMessage implements Serializable {
private String headContent;
private String tailContent;
private List articles = new ArrayList<>();
+ private String mpNewsArticleId;
/**
* 菜单消息里的菜单内容.
@@ -113,6 +114,13 @@ public static MiniProgramPageBuilder MINIPROGRAMPAGE() {
return new MiniProgramPageBuilder();
}
+ /**
+ * 发送图文消息(点击跳转到图文消息页面)使用通过 “发布” 系列接口得到的 article_id(草稿箱功能上线后不再支持客服接口中带 media_id 的 mpnews 类型的图文消息)
+ */
+ public static MpNewsArticleBuilder MPNEWSARTICLE() {
+ return new MpNewsArticleBuilder();
+ }
+
/**
*
* 请使用
@@ -127,6 +135,7 @@ public static MiniProgramPageBuilder MINIPROGRAMPAGE() {
* {@link WxConsts.KefuMsgType#MINIPROGRAMPAGE}
* {@link WxConsts.KefuMsgType#TASKCARD}
* {@link WxConsts.KefuMsgType#MSGMENU}
+ * {@link WxConsts.KefuMsgType#MP_NEWS_ARTICLE}
*
*/
public void setMsgType(String msgType) {
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/MpNewsArticleBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/MpNewsArticleBuilder.java
new file mode 100644
index 0000000000..2d6babcf8a
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/MpNewsArticleBuilder.java
@@ -0,0 +1,33 @@
+package me.chanjar.weixin.mp.builder.kefu;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
+
+/**
+ * 图文消息builder
+ *
+ * 用法:
+ * WxMpKefuMessage m = WxMpKefuMessage.MPNEWSARTICLE().articleId("xxxxx").toUser(...).build();
+ *
+ *
+ * @author JCLee
+ */
+public final class MpNewsArticleBuilder extends BaseBuilder{
+ private String articleId;
+
+ public MpNewsArticleBuilder() {
+ this.msgType = WxConsts.KefuMsgType.MP_NEWS_ARTICLE;
+ }
+
+ public MpNewsArticleBuilder articleId(String articleId) {
+ this.articleId = articleId;
+ return this;
+ }
+
+ @Override
+ public WxMpKefuMessage build() {
+ WxMpKefuMessage m = super.build();
+ m.setMpNewsArticleId(this.articleId);
+ return m;
+ }
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java
index 679f8db1ac..c4b1244526 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java
@@ -96,6 +96,11 @@ public JsonElement serialize(WxMpKefuMessage message, Type typeOfSrc, JsonSerial
messageJson.add("msgmenu", msgmenuJsonObject);
break;
}
+ case KefuMsgType.MP_NEWS_ARTICLE:
+ JsonObject mpNewsArticleJson = new JsonObject();
+ mpNewsArticleJson.addProperty("article_id", message.getMpNewsArticleId());
+ messageJson.add("mpnewsarticle", mpNewsArticleJson);
+ break;
default: {
throw new WxRuntimeException("非法消息类型,暂不支持");
}
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessageTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessageTest.java
index ec754875da..e74f200b44 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessageTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessageTest.java
@@ -166,4 +166,13 @@ public void testMsgMenuBuild() {
"{\"touser\":\"OPENID\",\"msgtype\":\"msgmenu\",\"msgmenu\":{\"head_content\":\"head_content\",\"list\":[{\"id\":\"101\",\"content\":\"msgmenu1\"},{\"id\":\"102\",\"content\":\"msgmenu2\"}],\"tail_content\":\"tail_content\"}}");
}
+ public void testMpNewsArticleBuilder() {
+ WxMpKefuMessage reply = WxMpKefuMessage.MPNEWSARTICLE()
+ .toUser("OPENID")
+ .articleId("ARTICLE_ID")
+ .build();
+ Assert.assertEquals(reply.toJson(),
+ "{\"touser\":\"OPENID\",\"msgtype\":\"mpnewsarticle\",\"mpnewsarticle\":{\"article_id\":\"ARTICLE_ID\"}}");
+ }
+
}
From 0c35f778dbbbeb6528f193cfa7e7d18615097eaa Mon Sep 17 00:00:00 2001
From: zp961466717 <43167276+zp961466717@users.noreply.github.com>
Date: Mon, 3 Jan 2022 23:09:27 +0800
Subject: [PATCH 0022/1155] =?UTF-8?q?:art:=20#2481=20=E3=80=90=E4=BC=81?=
=?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1=E3=80=91=E5=8F=91=E9=80=81=E5=BA=94?=
=?UTF-8?q?=E7=94=A8=E6=B6=88=E6=81=AF=E6=8E=A5=E5=8F=A3=E9=87=8C=E7=9A=84?=
=?UTF-8?q?=E6=96=87=E6=9C=AC=E9=80=9A=E7=9F=A5=E5=9E=8B=E7=9A=84=E6=A8=A1?=
=?UTF-8?q?=E6=9D=BF=E5=8D=A1=E7=89=87=E6=B6=88=E6=81=AF=E5=A2=9E=E5=8A=A0?=
=?UTF-8?q?=E5=BC=95=E7=94=A8=E6=96=87=E6=9C=AC=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../weixin/cp/bean/message/WxCpMessage.java | 11 +++
.../messagebuilder/TemplateCardBuilder.java | 11 +++
.../cp/bean/templatecard/QuoteArea.java | 74 +++++++++++++++++++
.../cp/bean/message/WxCpMessageTest.java | 12 ++-
4 files changed, 106 insertions(+), 2 deletions(-)
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/QuoteArea.java
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java
index a2f6e6c5c6..027a518837 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java
@@ -199,6 +199,11 @@ public class WxCpMessage implements Serializable {
*/
private List selects;
+ /**
+ * 引用文献样式
+ */
+ private QuoteArea quoteArea;
+
/**
* 获得文本消息builder.
*/
@@ -606,6 +611,12 @@ private void handleMsgType(JsonObject messageJson) {
template.add("select_list", selectJsonArray);
}
+ QuoteArea quoteArea = this.getQuoteArea();
+ if (null != quoteArea){
+ JsonObject quoteAreaJson = quoteArea.toJson();
+ template.add("quote_area",quoteAreaJson);
+ }
+
messageJson.add("template_card", template);
break;
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/TemplateCardBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/TemplateCardBuilder.java
index 7a29491ab1..ecee5108ea 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/TemplateCardBuilder.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/TemplateCardBuilder.java
@@ -146,6 +146,11 @@ public class TemplateCardBuilder extends BaseBuilder{
*/
private List selects;
+ /**
+ * 引用文献样式
+ */
+ private QuoteArea quoteArea;
+
public TemplateCardBuilder() {
this.msgType = WxConsts.KefuMsgType.TEMPLATE_CARD;
@@ -266,6 +271,11 @@ public TemplateCardBuilder selects(List selects) {
return this;
}
+ public TemplateCardBuilder quoteArea(QuoteArea quoteArea) {
+ this.quoteArea = quoteArea;
+ return this;
+ }
+
@Override
public WxCpMessage build() {
WxCpMessage m = super.build();
@@ -295,6 +305,7 @@ public WxCpMessage build() {
m.setSubmit_button_text(this.submit_button_text);
m.setSubmit_button_key(this.submit_button_key);
m.setSelects(this.selects);
+ m.setQuoteArea(this.quoteArea);
return m;
}
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/QuoteArea.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/QuoteArea.java
new file mode 100644
index 0000000000..564500a45f
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/QuoteArea.java
@@ -0,0 +1,74 @@
+package me.chanjar.weixin.cp.bean.templatecard;
+
+import com.google.gson.JsonObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+
+/**
+ * 引用文献样式
+ *
+ * @author zp
+ * @date 2022/1/2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class QuoteArea implements Serializable {
+
+ private static final long serialVersionUID = -2209656515382964356L;
+
+ /**
+ * 非必填 引用文献样式区域点击事件,0或不填代表没有点击事件,1 代表跳转url,2 代表跳转小程序
+ */
+ private Integer type;
+ /**
+ * 点击跳转的url,quote_area.type是1时必填
+ */
+ private String url;
+ /**
+ * 点击跳转的小程序的appid,必须是与当前应用关联的小程序,quote_area.type是2时必填
+ */
+ private String appid;
+ /**
+ * 点击跳转的小程序的pagepath,quote_area.type是2时选填
+ */
+ private String pagepath;
+ /**
+ * 引用文献样式的标题
+ */
+ private String title;
+ /**
+ * 引用文献样式的引用文案
+ */
+ private String quoteText;
+
+ public JsonObject toJson() {
+ JsonObject quoteAreaJson = new JsonObject();
+ if (null != this.getType()) {
+ quoteAreaJson.addProperty("type", this.getType());
+ }
+ if (StringUtils.isNotBlank(this.getUrl())) {
+ quoteAreaJson.addProperty("url", this.getUrl());
+ }
+ if (StringUtils.isNotBlank(this.getAppid())) {
+ quoteAreaJson.addProperty("appid", this.getAppid());
+ }
+ if (StringUtils.isNotBlank(this.getPagepath())) {
+ quoteAreaJson.addProperty("pagepath", this.getPagepath());
+ }
+ if (StringUtils.isNotBlank(this.getTitle())) {
+ quoteAreaJson.addProperty("title", this.getTitle());
+ }
+ if (StringUtils.isNotBlank(this.getQuoteText())) {
+ quoteAreaJson.addProperty("quote_text", this.getQuoteText());
+ }
+ return quoteAreaJson;
+ }
+
+}
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpMessageTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpMessageTest.java
index a1cfee801b..552fe3d5ab 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpMessageTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpMessageTest.java
@@ -178,7 +178,14 @@ public void TestTemplateCardBuilder_text_notice() {
.appid("小程序的appid")
.pagepath("/index.html")
.build();
-
+ QuoteArea quoteArea=QuoteArea.builder()
+ .type(1)
+ .title("引用文献标题")
+ .appid("小程序的appid")
+ .pagepath("/index.html")
+ .url("https://work.weixin.qq.com")
+ .quoteText("引用文献样式的引用文案")
+ .build();
WxCpMessage reply = WxCpMessage.TEMPLATECARD().toUser("OPENID")
.agentId(1000002)
.card_type(WxConsts.TemplateCardType.TEXT_NOTICE)
@@ -195,13 +202,14 @@ public void TestTemplateCardBuilder_text_notice() {
.card_action_appid("小程序的appid")
.card_action_url("https://work.weixin.qq.com")
.card_action_pagepath("/index.html")
+ .quoteArea(quoteArea)
.build();
reply.setEnableIdTrans(false);
reply.setEnableDuplicateCheck(false);
reply.setDuplicateCheckInterval(1800);
// System.out.println(reply.toJson());
assertThat(reply.toJson())
- .isEqualTo("{\"agentid\":1000002,\"touser\":\"OPENID\",\"msgtype\":\"template_card\",\"duplicate_check_interval\":1800,\"template_card\":{\"card_type\":\"text_notice\",\"source\":{\"icon_url\":\"图片的url\",\"desc\":\"企业微信\"},\"main_title\":{\"title\":\"欢迎使用企业微信\",\"desc\":\"您的好友正在邀请您加入企业微信\"},\"emphasis_content\":{\"title\":\"100\",\"desc\":\"核心数据\"},\"sub_title_text\":\"下载企业微信还能抢红包!\",\"horizontal_content_list\":[{\"keyname\":\"邀请人\",\"value\":\"张三\"},{\"type\":1,\"keyname\":\"企业微信官网\",\"value\":\"点击访问\",\"url\":\"https://work.weixin.qq.com\"},{\"type\":2,\"keyname\":\"企业微信下载\",\"value\":\"企业微信.apk\",\"media_id\":\"文件的media_id\"}],\"jump_list\":[{\"type\":1,\"title\":\"企业微信官网\",\"url\":\"https://work.weixin.qq.com\"},{\"type\":2,\"title\":\"跳转小程序\",\"appid\":\"小程序的appid\",\"pagepath\":\"/index.html\"}],\"card_action\":{\"type\":2,\"url\":\"https://work.weixin.qq.com\",\"appid\":\"小程序的appid\",\"pagepath\":\"/index.html\"}}}");
+ .isEqualTo("{\"agentid\":1000002,\"touser\":\"OPENID\",\"msgtype\":\"template_card\",\"duplicate_check_interval\":1800,\"template_card\":{\"card_type\":\"text_notice\",\"source\":{\"icon_url\":\"图片的url\",\"desc\":\"企业微信\"},\"main_title\":{\"title\":\"欢迎使用企业微信\",\"desc\":\"您的好友正在邀请您加入企业微信\"},\"emphasis_content\":{\"title\":\"100\",\"desc\":\"核心数据\"},\"sub_title_text\":\"下载企业微信还能抢红包!\",\"horizontal_content_list\":[{\"keyname\":\"邀请人\",\"value\":\"张三\"},{\"type\":1,\"keyname\":\"企业微信官网\",\"value\":\"点击访问\",\"url\":\"https://work.weixin.qq.com\"},{\"type\":2,\"keyname\":\"企业微信下载\",\"value\":\"企业微信.apk\",\"media_id\":\"文件的media_id\"}],\"jump_list\":[{\"type\":1,\"title\":\"企业微信官网\",\"url\":\"https://work.weixin.qq.com\"},{\"type\":2,\"title\":\"跳转小程序\",\"appid\":\"小程序的appid\",\"pagepath\":\"/index.html\"}],\"card_action\":{\"type\":2,\"url\":\"https://work.weixin.qq.com\",\"appid\":\"小程序的appid\",\"pagepath\":\"/index.html\"},\"quote_area\":{\"type\":1,\"url\":\"https://work.weixin.qq.com\",\"appid\":\"小程序的appid\",\"pagepath\":\"/index.html\",\"title\":\"引用文献标题\",\"quote_text\":\"引用文献样式的引用文案\"}}}");
}
From 4b92f94a41ea00af9c3e60e916c76536e555cb44 Mon Sep 17 00:00:00 2001
From: Tim Sims
Date: Mon, 3 Jan 2022 23:11:19 +0800
Subject: [PATCH 0023/1155] =?UTF-8?q?:new:=20#2479=20=E3=80=90=E4=BC=81?=
=?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1=E3=80=91=E5=A2=9E=E5=8A=A0=E8=8E=B7?=
=?UTF-8?q?=E5=8F=96=E4=BC=81=E4=B8=9A=E7=BE=A4=E5=8F=91=E6=88=90=E5=91=98?=
=?UTF-8?q?=E6=89=A7=E8=A1=8C=E7=BB=93=E6=9E=9C=E7=9A=84=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cp/api/WxCpExternalContactService.java | 14 +++++
.../impl/WxCpExternalContactServiceImpl.java | 24 ++++++++
.../external/contact/WxCpGroupMsgResult.java | 59 +++++++++++++++++++
.../weixin/cp/constant/WxCpApiPathConsts.java | 1 +
.../contact/WxCpGroupMsgResultTest.java | 37 ++++++++++++
5 files changed, 135 insertions(+)
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResult.java
create mode 100644 weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResultTest.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 ef3cc2a3ad..76ab62350e 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
@@ -818,6 +818,20 @@ WxCpGetMomentComments getMomentComments(String momentId, String userId)
*/
WxCpGroupMsgSendResult getGroupMsgSendResult(String msgid, String userid, Integer limit, String cursor) throws WxErrorException;
+ /**
+ *
+ * 企业跟第三方应用可通过该接口获取到创建企业群发的群发发送结果。
+ * https://work.weixin.qq.com/api/doc/16251
+ *
+ *
+ * @param msgid 群发消息的id,通过创建企业群发接口返回
+ * @param limit 返回的最大记录数,整型,最大值10000,默认值10000
+ * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填
+ * @return wx cp base resp
+ * @throws WxErrorException the wx error exception
+ */
+ public WxCpGroupMsgResult getGroupMsgResult(String msgid, Integer limit, String cursor) 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 6cf6172a88..87e9895784 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
@@ -648,6 +648,30 @@ public WxCpGroupMsgSendResult getGroupMsgSendResult(String msgid, String userid,
return WxCpGroupMsgSendResult.fromJson(result);
}
+ /**
+ *
+ * 企业跟第三方应用可通过该接口获取到创建企业群发的群发发送结果。
+ * https://work.weixin.qq.com/api/doc/16251
+ *
+ *
+ * @param msgid 群发消息的id,通过创建企业群发接口返回
+ * @param limit 返回的最大记录数,整型,最大值10000,默认值10000
+ * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填
+ * @return wx cp base resp
+ * @throws WxErrorException the wx error exception
+ */
+ @Override
+ public WxCpGroupMsgResult getGroupMsgResult(String msgid, Integer limit, String cursor) throws WxErrorException {
+ JsonObject json = new JsonObject();
+ json.addProperty("msgid", msgid);
+ json.addProperty("limit", limit);
+ json.addProperty("cursor", cursor);
+
+ final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_GROUP_MSG_RESULT);
+ final String result = this.mainService.post(url, json.toString());
+ return WxCpGroupMsgResult.fromJson(result);
+ }
+
/**
*
* 获取群发成员发送任务列表。
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResult.java
new file mode 100644
index 0000000000..5cae404f05
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResult.java
@@ -0,0 +1,59 @@
+package me.chanjar.weixin.cp.bean.external.contact;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ *
+ * 获取企业群发成员执行结果
+ * 参考文档:https://work.weixin.qq.com/api/doc/16251
+ *
+ *
+ * @author Tim Sims
+ */
+@Getter
+@Setter
+public class WxCpGroupMsgResult extends WxCpBaseResp implements Serializable {
+ private static final long serialVersionUID = -5166048319463473186L;
+
+ @SerializedName("detail_list")
+ private List detailList;
+
+ @SerializedName("next_cursor")
+ private String nextCursor;
+
+ @Getter
+ @Setter
+ public static class ExternalContactGroupMsgDetailInfo implements Serializable {
+ private static final long serialVersionUID = 1500416806087532531L;
+
+ // 外部联系人userid,群发消息到企业的客户群不吐出该字段
+ @SerializedName("external_userid")
+ private String externalUserId;
+
+ // 外部客户群id,群发消息到客户不吐出该字段
+ @SerializedName("chat_id")
+ private String chatId;
+
+ // 企业服务人员的userid
+ @SerializedName("userid")
+ private String userId;
+
+ // 发送状态 0-未发送 1-已发送 2-因客户不是好友导致发送失败 3-因客户已经收到其他群发消息导致发送失败
+ private Integer status;
+
+ // 发送时间,发送状态为1时返回
+ @SerializedName("send_time")
+ private Long sendTime;
+ }
+
+ public static WxCpGroupMsgResult fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpGroupMsgResult.class);
+ }
+}
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 c807b0f048..cea1bcb9ba 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
@@ -233,6 +233,7 @@ interface ExternalContact {
String GET_GROUP_MSG_SEND_RESULT = "/cgi-bin/externalcontact/get_groupmsg_send_result";
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_GROUP_MSG_RESULT = "/cgi-bin/externalcontact/get_group_msg_result";
String GET_PRODUCT_ALBUM = "/cgi-bin/externalcontact/get_product_album";
String GET_PRODUCT_ALBUM_LIST = "/cgi-bin/externalcontact/get_product_album_list";
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResultTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResultTest.java
new file mode 100644
index 0000000000..a0bc98b105
--- /dev/null
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResultTest.java
@@ -0,0 +1,37 @@
+package me.chanjar.weixin.cp.bean.external.contact;
+
+import org.testng.annotations.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class WxCpGroupMsgResultTest {
+
+ @Test
+ public void testToJson() {
+ /*
+ @see https://work.weixin.qq.com/api/doc/16251
+ */
+ String json = "{ " +
+ "\"errcode\": 0, " +
+ "\"errmsg\": \"ok\", " +
+ "\"detail_list\": [ " +
+ " { " +
+ " \"external_userid\": \"wmqfasd1e19278asdasAAAA\", " +
+ " \"chat_id\":\"wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA\", " +
+ " \"userid\": \"zhangsan\", " +
+ " \"status\": 1, " +
+ " \"send_time\": 1552536375 " +
+ " } " +
+ " ] " +
+ "}";
+
+ WxCpGroupMsgResult result = WxCpGroupMsgResult.fromJson(json);
+ assertThat(result.getDetailList().size()).isEqualTo(1);
+ WxCpGroupMsgResult.ExternalContactGroupMsgDetailInfo detail = result.getDetailList().get(0);
+ assertThat(detail.getChatId()).isEqualTo("wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA");
+ assertThat(detail.getExternalUserId()).isEqualTo("wmqfasd1e19278asdasAAAA");
+ assertThat(detail.getUserId()).isEqualTo("zhangsan");
+ assertThat(detail.getStatus()).isEqualTo(1);
+ assertThat(detail.getSendTime()).isEqualTo(1552536375L);
+ }
+}
From 76ea7fe2a8097f77cc9436a22324b31a11e6192d Mon Sep 17 00:00:00 2001
From: dany1
Date: Mon, 3 Jan 2022 23:15:31 +0800
Subject: [PATCH 0024/1155] =?UTF-8?q?:art:=20#2477=20=E3=80=90=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91=E5=A2=9E=E5=8A=A0=E8=AE=A2=E9=98=85?=
=?UTF-8?q?=E6=B6=88=E6=81=AF=E9=80=9A=E7=9F=A5=E4=BA=8B=E4=BB=B6=E7=9A=84?=
=?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=B1=9E=E6=80=A7=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../wx/miniapp/bean/WxMaMessage.java | 48 ++++-
.../miniapp/bean/WxMaSubscribeMsgEvent.java | 118 ++++++++++++
.../wx/miniapp/json/WxMaGsonBuilder.java | 2 +
.../WxMaSubscribeMsgEventJsonAdapter.java | 104 ++++++++++
.../wx/miniapp/bean/WxMaMessageTest.java | 179 ++++++++++++++++++
5 files changed, 450 insertions(+), 1 deletion(-)
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaSubscribeMsgEvent.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/adaptor/WxMaSubscribeMsgEventJsonAdapter.java
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
index 4a8713cad5..76017659f3 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
@@ -11,6 +11,7 @@
import me.chanjar.weixin.common.error.WxRuntimeException;
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.io.InputStream;
@@ -165,6 +166,39 @@ public class WxMaMessage implements Serializable {
@XStreamConverter(value = XStreamCDataConverter.class)
private String openPid;
+ @XStreamAlias("SubscribeMsgPopupEvent")
+ private WxMaSubscribeMsgEvent.SubscribeMsgPopupEvent subscribeMsgPopupEvent;
+
+ @XStreamAlias("SubscribeMsgChangeEvent")
+ private WxMaSubscribeMsgEvent.SubscribeMsgChangeEvent subscribeMsgChangeEvent;
+
+ @XStreamAlias("SubscribeMsgSentEvent")
+ private WxMaSubscribeMsgEvent.SubscribeMsgSentEvent subscribeMsgSentEvent;
+
+ /**
+ * 不要直接使用这个字段,
+ * 这个字段只是为了适配 SubscribeMsgPopupEvent SubscribeMsgChangeEvent SubscribeMsgSentEvent
+ * 在json里面名称都是List并且有时候是对象有时候是数组的问题
+ * 当List只有一个对象的时候,微信服务器推送过来的的List是对象而非数组,当有多个对象的时候推送过来的才是数组
+ * 当只有一个对象的时候
+ * "List": {
+ * "TemplateId": "hD-ixGOhYmUfjOnI8MCzQMPshzGVeux_2vzyvQu7O68",
+ * "SubscribeStatusString": "accept",
+ * "PopupScene": "0"
+ * }
+ * 当有多条数据的时候
+ * "List": [ {
+ * "TemplateId": "hD-ixGOhYmUfjOnI8MCzQMPshzGVeux_2vzyvQu7O68",
+ * "SubscribeStatusString": "accept",
+ * "PopupScene": "0"
+ * }, {
+ * "TemplateId": "hD-ixGOhYmUfjOnI8MCzQMPshzGVeux_2vzyvQu7O68",
+ * "SubscribeStatusString": "accept",
+ * "PopupScene": "0"
+ * }]
+ */
+ @SerializedName("List")
+ private WxMaSubscribeMsgEvent.WxMaSubscribeMsgEventJson uselessMsg;
public static WxMaMessage fromXml(String xml) {
return XStreamTransformer.fromXml(WxMaMessage.class, xml);
@@ -201,7 +235,19 @@ public static WxMaMessage fromEncryptedXml(InputStream is, WxMaConfig wxMaConfig
}
public static WxMaMessage fromJson(String json) {
- return WxMaGsonBuilder.create().fromJson(json, WxMaMessage.class);
+ WxMaMessage message = WxMaGsonBuilder.create().fromJson(json, WxMaMessage.class);
+ // 在这里处理 event的json格式时候的 list 问题,让json和xml的程序接口可以保持一致, 详见 uselessMsg 字段的注释
+ if (message.getUselessMsg() != null) {
+ if (StringUtils.equals(message.getEvent(), "subscribe_msg_popup_event")) {
+ message.setSubscribeMsgPopupEvent(message.getUselessMsg().getPopupEvents());
+ } else if (StringUtils.equals(message.getEvent(), "subscribe_msg_change_event")) {
+ message.setSubscribeMsgChangeEvent(message.getUselessMsg().getChangeEvents());
+ } else if (StringUtils.equals(message.getEvent(), "subscribe_msg_sent_event")) {
+ message.setSubscribeMsgSentEvent(message.getUselessMsg().getSentEvent());
+ }
+ message.setUselessMsg(null);
+ }
+ return message;
}
public static WxMaMessage fromEncryptedJson(String encryptedJson, WxMaConfig config) {
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaSubscribeMsgEvent.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaSubscribeMsgEvent.java
new file mode 100644
index 0000000000..2191dd8386
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaSubscribeMsgEvent.java
@@ -0,0 +1,118 @@
+package cn.binarywang.wx.miniapp.bean;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamConverter;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+import lombok.Data;
+import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * WxMaSubscribeMsgEvent class
+ * 客户端订阅,服务端收到的通知
+ * @author dany
+ * @date 2021/12/31
+ */
+public class WxMaSubscribeMsgEvent {
+ /**
+ * https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html
+ */
+ @Data
+ @XStreamAlias("SubscribeMsgPopupEvent")
+ public static class SubscribeMsgPopupEvent implements Serializable {
+ private static final long serialVersionUID = 6319723189257161326L;
+ @XStreamImplicit(itemFieldName = "List")
+ private List list = new LinkedList<>();
+ }
+
+ @Data
+ @XStreamAlias("SubscribeMsgChangeEvent")
+ public static class SubscribeMsgChangeEvent implements Serializable {
+ private static final long serialVersionUID = 7705686111539437751L;
+ @XStreamImplicit(itemFieldName = "List")
+ private List list = new LinkedList<>();
+ }
+
+ @Data
+ @XStreamAlias("SubscribeMsgSentEvent")
+ public static class SubscribeMsgSentEvent implements Serializable {
+ private static final long serialVersionUID = 7705686111539437751L;
+ @XStreamAlias("List")
+ private SentEvent list;
+ }
+
+
+ @Data
+ public static class PopupEvent implements Serializable {
+ private static final long serialVersionUID = 4934029303241387226L;
+ /**
+ * 模板id
+ */
+ @XStreamAlias("TemplateId")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String templateId;
+ /**
+ * 订阅结果(accept接收;reject拒收)
+ */
+ @XStreamAlias("SubscribeStatusString")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String subscribeStatusString;
+ /**
+ * 弹框场景,0代表在小程序页面内
+ */
+ @XStreamAlias("PopupScene")
+ private String popupScene;
+ }
+
+ @Data
+ public static class ChangeEvent implements Serializable {
+ private static final long serialVersionUID = 1523634146232757624L;
+ /**
+ * 模板id
+ */
+ @XStreamAlias("TemplateId")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String templateId;
+ /**
+ * 订阅结果(accept接收;reject拒收)
+ */
+ @XStreamAlias("SubscribeStatusString")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String subscribeStatusString;
+ }
+
+ @Data
+ public static class SentEvent implements Serializable {
+ private static final long serialVersionUID = -8734478345463177940L;
+ /**
+ * 模板id
+ */
+ @XStreamAlias("TemplateId")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String templateId;
+
+ @XStreamAlias("MsgID")
+ private String msgId;
+
+ @XStreamAlias("ErrorCode")
+ private String errorCode;
+
+ @XStreamAlias("ErrorStatus")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String errorStatus;
+ }
+
+ @Data
+ public static class WxMaSubscribeMsgEventJson implements Serializable {
+ private static final long serialVersionUID = -4820758280837190275L;
+
+ private SubscribeMsgPopupEvent popupEvents;
+
+ private SubscribeMsgChangeEvent changeEvents;
+
+ private SubscribeMsgSentEvent sentEvent;
+ }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
index e6f6842fa2..0918935ee9 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
@@ -1,6 +1,7 @@
package cn.binarywang.wx.miniapp.json;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
+import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMsgEvent;
import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage;
import cn.binarywang.wx.miniapp.bean.analysis.WxMaRetainInfo;
import cn.binarywang.wx.miniapp.bean.analysis.WxMaUserPortrait;
@@ -26,6 +27,7 @@ public class WxMaGsonBuilder {
INSTANCE.registerTypeAdapter(WxMaVisitDistribution.class, new WxMaVisitDistributionGsonAdapter());
INSTANCE.registerTypeAdapter(WxMaRetainInfo.class, new WxMaRetainInfoGsonAdapter());
INSTANCE.registerTypeAdapter(WxMaUserPortrait.class, new WxMaUserPortraitGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMaSubscribeMsgEvent.WxMaSubscribeMsgEventJson.class, new WxMaSubscribeMsgEventJsonAdapter());
}
public static Gson create() {
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/adaptor/WxMaSubscribeMsgEventJsonAdapter.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/adaptor/WxMaSubscribeMsgEventJsonAdapter.java
new file mode 100644
index 0000000000..d489f14a7b
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/adaptor/WxMaSubscribeMsgEventJsonAdapter.java
@@ -0,0 +1,104 @@
+package cn.binarywang.wx.miniapp.json.adaptor;
+
+import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMsgEvent;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParseException;
+import lombok.extern.slf4j.Slf4j;
+
+import java.lang.reflect.Type;
+
+/**
+ * WxMaSubscribeMsgEventJsonAdapter class
+ *
+ * @author dany
+ * @date 2021/12/31
+ */
+@Slf4j
+public class WxMaSubscribeMsgEventJsonAdapter implements JsonDeserializer {
+ @Override
+ public WxMaSubscribeMsgEvent.WxMaSubscribeMsgEventJson deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
+ WxMaSubscribeMsgEvent.WxMaSubscribeMsgEventJson result = new WxMaSubscribeMsgEvent.WxMaSubscribeMsgEventJson();
+ if (json.isJsonArray()) {
+ JsonArray array = json.getAsJsonArray();
+ if (array.size() > 0) {
+ JsonObject obj = array.get(0).getAsJsonObject();
+ MsgEventTypeEnum eventType = detectMsgEventType(obj);
+ for (int i = 0; i < array.size(); ++i) {
+ obj = array.get(i).getAsJsonObject();
+ setField(result, eventType, obj);
+ }
+ }
+ } else {
+ JsonObject obj = json.getAsJsonObject();
+ MsgEventTypeEnum eventType = detectMsgEventType(obj);
+ setField(result, eventType, obj);
+ }
+ return result;
+ }
+
+ public enum MsgEventTypeEnum {
+ EVENT_POPUP,EVENT_CHANGE,EVENT_SENT;
+ }
+ private MsgEventTypeEnum detectMsgEventType(JsonObject obj) {
+ JsonElement popupScene = obj.get("PopupScene");
+ if (popupScene != null) {
+ return MsgEventTypeEnum.EVENT_POPUP;
+ }
+
+ JsonElement msgId = obj.get("MsgID");
+ if (msgId != null) {
+ return MsgEventTypeEnum.EVENT_SENT;
+ }
+ JsonElement errorCode = obj.get("ErrorCode");
+ if (errorCode != null) {
+ return MsgEventTypeEnum.EVENT_SENT;
+ }
+ JsonElement errorStatus = obj.get("ErrorStatus");
+ if (errorStatus != null) {
+ return MsgEventTypeEnum.EVENT_SENT;
+ }
+
+ return MsgEventTypeEnum.EVENT_CHANGE;
+ }
+
+ private WxMaSubscribeMsgEvent.WxMaSubscribeMsgEventJson setField(WxMaSubscribeMsgEvent.WxMaSubscribeMsgEventJson target,
+ MsgEventTypeEnum eventType, JsonObject json) {
+ switch (eventType) {
+ case EVENT_POPUP:
+ if (target.getPopupEvents() == null) {
+ target.setPopupEvents(new WxMaSubscribeMsgEvent.SubscribeMsgPopupEvent());
+ }
+ WxMaSubscribeMsgEvent.PopupEvent popupEvent = new WxMaSubscribeMsgEvent.PopupEvent();
+ popupEvent.setTemplateId(json.get("TemplateId").getAsString());
+ popupEvent.setSubscribeStatusString(json.get("SubscribeStatusString").getAsString());
+ popupEvent.setPopupScene(json.get("PopupScene").getAsString());
+ target.getPopupEvents().getList().add(popupEvent);
+ break;
+ case EVENT_CHANGE:
+ if (target.getChangeEvents() == null) {
+ target.setChangeEvents(new WxMaSubscribeMsgEvent.SubscribeMsgChangeEvent());
+ }
+ WxMaSubscribeMsgEvent.ChangeEvent changeEvent = new WxMaSubscribeMsgEvent.ChangeEvent();
+ changeEvent.setTemplateId(json.get("TemplateId").getAsString());
+ changeEvent.setSubscribeStatusString(json.get("SubscribeStatusString").getAsString());
+ target.getChangeEvents().getList().add(changeEvent);
+ break;
+ case EVENT_SENT:
+ if (target.getSentEvent() == null) {
+ target.setSentEvent(new WxMaSubscribeMsgEvent.SubscribeMsgSentEvent());
+ }
+ WxMaSubscribeMsgEvent.SentEvent sentEvent = new WxMaSubscribeMsgEvent.SentEvent();
+ sentEvent.setTemplateId(json.get("TemplateId").getAsString());
+ sentEvent.setMsgId(json.get("MsgID").getAsString());
+ sentEvent.setErrorCode(json.get("ErrorCode").getAsString());
+ sentEvent.setErrorStatus(json.get("ErrorStatus").getAsString());
+ target.getSentEvent().setList(sentEvent);
+ break;
+ }
+ return target;
+ }
+}
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java
index 26855b36ef..1269734842 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java
@@ -4,6 +4,7 @@
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
/**
* @author Binary Wang
@@ -47,4 +48,182 @@ public void testFromXml() {
assertEquals(wxMessage.getSessionFrom(), "sessionFrom");
}
+ public void testSubscribeMsgPopupEvent() {
+ // xml 格式
+ String xml = "" +
+ " \n" +
+ " \n" +
+ "1610969440 \n" +
+ " \n" +
+ " \n" +
+ "\n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " 0 \n" +
+ "
\n" +
+ " " +
+ " ";
+
+ WxMaMessage wxMessage = WxMaMessage.fromXml(xml);
+ checkSubscribeMsgPopupEvent(wxMessage);
+
+ // 订阅单个模板 json格式 (对象)
+ String json = "{\n" +
+ " \"ToUserName\": \"gh_123456789abc\",\n" +
+ " \"FromUserName\": \"otFpruAK8D-E6EfStSYonYSBZ8_4\",\n" +
+ " \"CreateTime\": \"1610969440\",\n" +
+ " \"MsgType\": \"event\",\n" +
+ " \"Event\": \"subscribe_msg_popup_event\",\n" +
+ " \"List\": {\n" +
+ " \"TemplateId\": \"VRR0UEO9VJOLs0MHlU0OilqX6MVFDwH3_3gz3Oc0NIc\",\n" +
+ " \"SubscribeStatusString\": \"accept\",\n" +
+ " \"PopupScene\": \"0\"\n" +
+ " }\n" +
+ " }";
+ wxMessage = WxMaMessage.fromJson(json);
+ checkSubscribeMsgPopupEvent(wxMessage);
+ // 订阅多条模板的 json格式(数组)
+ json = "{\n" +
+ " \"ToUserName\": \"gh_123456789abc\",\n" +
+ " \"FromUserName\": \"otFpruAK8D-E6EfStSYonYSBZ8_4\",\n" +
+ " \"CreateTime\": \"1610969440\",\n" +
+ " \"MsgType\": \"event\",\n" +
+ " \"Event\": \"subscribe_msg_popup_event\",\n" +
+ " \"List\": [{\n" +
+ " \"TemplateId\": \"VRR0UEO9VJOLs0MHlU0OilqX6MVFDwH3_3gz3Oc0NIc\",\n" +
+ " \"SubscribeStatusString\": \"accept\",\n" +
+ " \"PopupScene\": \"0\"\n" +
+ " }]\n" +
+ " }";
+ wxMessage = WxMaMessage.fromJson(json);
+ checkSubscribeMsgPopupEvent(wxMessage);
+ }
+
+ private void checkSubscribeMsgPopupEvent(WxMaMessage wxMessage) {
+ assertEquals(wxMessage.getToUser(), "gh_123456789abc");
+ assertEquals(wxMessage.getFromUser(), "otFpruAK8D-E6EfStSYonYSBZ8_4");
+ assertEquals(wxMessage.getCreateTime(),new Integer(1610969440));
+ assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT);
+ assertEquals(wxMessage.getEvent(), "subscribe_msg_popup_event");
+ assertEquals(wxMessage.getSubscribeMsgPopupEvent().getList().size(), 1);
+ WxMaSubscribeMsgEvent.PopupEvent event = wxMessage.getSubscribeMsgPopupEvent().getList().get(0);
+ assertEquals(event.getTemplateId(), "VRR0UEO9VJOLs0MHlU0OilqX6MVFDwH3_3gz3Oc0NIc");
+ assertEquals(event.getSubscribeStatusString(),"accept");
+ assertEquals(event.getPopupScene(), "0");
+ }
+
+ public void testSubscribeMsgChangeEvent() {
+ // xml 格式
+ String xml = "\n" +
+ " \n" +
+ " \n" +
+ " 1610968440 \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " " +
+ " \n" +
+ " \n" +
+ "
\n" +
+ " \n" +
+ " ";
+
+ WxMaMessage wxMessage = WxMaMessage.fromXml(xml);
+ checkSubscribeMsgChangeEvent(wxMessage);
+
+ // json格式 (对象)
+ String json = "{\n" +
+ " \"ToUserName\": \"gh_123456789abc\",\n" +
+ " \"FromUserName\": \"o7esq5OI1Uej6Xixw1lA2H7XDVbc\",\n" +
+ " \"CreateTime\": \"1610968440\",\n" +
+ " \"MsgType\": \"event\",\n" +
+ " \"Event\": \"subscribe_msg_change_event\",\n" +
+ " \"List\": {\n" +
+ " \"TemplateId\":\"BEwX0BOT3MqK3Uc5oTU3CGBqzjpndk2jzUf7VfExd8\",\n" +
+ " \"SubscribeStatusString\": \"reject\"\n" +
+ " }\n" +
+ "}\n";
+ wxMessage = WxMaMessage.fromJson(json);
+ checkSubscribeMsgChangeEvent(wxMessage);
+ // json格式(数组)
+ json = "{\n" +
+ " \"ToUserName\": \"gh_123456789abc\",\n" +
+ " \"FromUserName\": \"o7esq5OI1Uej6Xixw1lA2H7XDVbc\",\n" +
+ " \"CreateTime\": \"1610968440\",\n" +
+ " \"MsgType\": \"event\",\n" +
+ " \"Event\": \"subscribe_msg_change_event\",\n" +
+ " \"List\": [ {\n" +
+ " \"TemplateId\":\"BEwX0BOT3MqK3Uc5oTU3CGBqzjpndk2jzUf7VfExd8\",\n" +
+ " \"SubscribeStatusString\": \"reject\"\n" +
+ " }]" +
+ "}";
+ wxMessage = WxMaMessage.fromJson(json);
+ checkSubscribeMsgChangeEvent(wxMessage);
+ }
+
+ private void checkSubscribeMsgChangeEvent(WxMaMessage wxMessage) {
+ assertEquals(wxMessage.getToUser(), "gh_123456789abc");
+ assertEquals(wxMessage.getFromUser(), "o7esq5OI1Uej6Xixw1lA2H7XDVbc");
+ assertEquals(wxMessage.getCreateTime(),new Integer(1610968440));
+ assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT);
+ assertEquals(wxMessage.getEvent(), "subscribe_msg_change_event");
+ assertEquals(wxMessage.getSubscribeMsgChangeEvent().getList().size(), 1);
+ WxMaSubscribeMsgEvent.ChangeEvent event = wxMessage.getSubscribeMsgChangeEvent().getList().get(0);
+ assertEquals(event.getTemplateId(), "BEwX0BOT3MqK3Uc5oTU3CGBqzjpndk2jzUf7VfExd8");
+ assertEquals(event.getSubscribeStatusString(),"reject");
+ }
+
+ public void testSubscribeMsgSentEvent() {
+ // xml 格式
+ String xml = "\n" +
+ " \n" +
+ " \n" +
+ " 1620963428 \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " " +
+ " \n" +
+ " 1864323726461255680 \n" +
+ " 0 \n" +
+ " \n" +
+ "
\n" +
+ " \n" +
+ " ";
+
+ WxMaMessage wxMessage = WxMaMessage.fromXml(xml);
+ checkSubscribeMsgSentEvent(wxMessage);
+
+ // json格式 (对象)
+ String json = "{\n" +
+ " \"ToUserName\": \"gh_123456789abc\",\n" +
+ " \"FromUserName\": \"o7esq5PHRGBQYmeNyfG064wEFVpQ\",\n" +
+ " \"CreateTime\": \"1620963428\",\n" +
+ " \"MsgType\": \"event\",\n" +
+ " \"Event\": \"subscribe_msg_sent_event\",\n" +
+ " \"List\": {\n" +
+ " \"TemplateId\": \"BEwX0BO-T3MqK3Uc5oTU3CGBqzjpndk2jzUf7VfExd8\",\n" +
+ " \"MsgID\": \"1864323726461255680\",\n" +
+ " \"ErrorCode\": \"0\",\n" +
+ " \"ErrorStatus\": \"success\"\n" +
+ " }\n" +
+ "}";
+ wxMessage = WxMaMessage.fromJson(json);
+ checkSubscribeMsgSentEvent(wxMessage);
+ }
+ private void checkSubscribeMsgSentEvent(WxMaMessage wxMessage) {
+ assertEquals(wxMessage.getToUser(), "gh_123456789abc");
+ assertEquals(wxMessage.getFromUser(), "o7esq5PHRGBQYmeNyfG064wEFVpQ");
+ assertEquals(wxMessage.getCreateTime(),new Integer(1620963428));
+ assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT);
+ assertEquals(wxMessage.getEvent(), "subscribe_msg_sent_event");
+ assertNotNull(wxMessage.getSubscribeMsgSentEvent());
+ WxMaSubscribeMsgEvent.SentEvent event = wxMessage.getSubscribeMsgSentEvent().getList();
+ assertEquals(event.getTemplateId(), "BEwX0BO-T3MqK3Uc5oTU3CGBqzjpndk2jzUf7VfExd8");
+ assertEquals(event.getMsgId(),"1864323726461255680");
+ assertEquals(event.getErrorCode(),"0");
+ assertEquals(event.getErrorStatus(),"success");
+ }
+
}
From bb9a1857c8926ec1ed3314f8402e8f043d73ebbf Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Wed, 5 Jan 2022 08:53:25 +0800
Subject: [PATCH 0025/1155] =?UTF-8?q?:bookmark:=20=E5=8F=91=E5=B8=83=204.2?=
=?UTF-8?q?.4.B=20=E6=B5=8B=E8=AF=95=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
spring-boot-starters/pom.xml | 2 +-
spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml | 2 +-
.../wx-java-miniapp-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml | 2 +-
weixin-graal/pom.xml | 2 +-
weixin-java-common/pom.xml | 2 +-
weixin-java-cp/pom.xml | 2 +-
weixin-java-miniapp/pom.xml | 2 +-
weixin-java-mp/pom.xml | 2 +-
weixin-java-open/pom.xml | 2 +-
weixin-java-pay/pom.xml | 2 +-
weixin-java-qidian/pom.xml | 2 +-
16 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/pom.xml b/pom.xml
index 553a4f2936..8ddf83161d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.github.binarywang
wx-java
- 4.2.3.B
+ 4.2.4.B
pom
WxJava - Weixin/Wechat Java SDK
微信开发Java SDK
diff --git a/spring-boot-starters/pom.xml b/spring-boot-starters/pom.xml
index c7fd4b0075..be3ffa29ed 100644
--- a/spring-boot-starters/pom.xml
+++ b/spring-boot-starters/pom.xml
@@ -4,7 +4,7 @@
com.github.binarywang
wx-java
- 4.2.3.B
+ 4.2.4.B
pom
wx-java-spring-boot-starters
diff --git a/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
index 8a1c8b7024..403d110e92 100644
--- a/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
@@ -4,7 +4,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.3.B
+ 4.2.4.B
4.0.0
diff --git a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
index dd00a70a88..bc0df80a34 100644
--- a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.3.B
+ 4.2.4.B
4.0.0
diff --git a/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
index 769c5ee4ea..6f39cf83a6 100644
--- a/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.3.B
+ 4.2.4.B
4.0.0
diff --git a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
index e4cd456da1..c88de56372 100644
--- a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.3.B
+ 4.2.4.B
4.0.0
diff --git a/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
index cfbc3b83e9..00b0b47e97 100644
--- a/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.3.B
+ 4.2.4.B
4.0.0
diff --git a/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
index a506de185d..74685629b7 100644
--- a/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
@@ -3,7 +3,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.3.B
+ 4.2.4.B
4.0.0
diff --git a/weixin-graal/pom.xml b/weixin-graal/pom.xml
index 47abb3890c..dd74121d63 100644
--- a/weixin-graal/pom.xml
+++ b/weixin-graal/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
wx-java
- 4.2.3.B
+ 4.2.4.B
weixin-graal
diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml
index ccb96d30a3..78a97e7346 100644
--- a/weixin-java-common/pom.xml
+++ b/weixin-java-common/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
wx-java
- 4.2.3.B
+ 4.2.4.B
weixin-java-common
diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml
index b726737dd7..0d8750d186 100644
--- a/weixin-java-cp/pom.xml
+++ b/weixin-java-cp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.3.B
+ 4.2.4.B
weixin-java-cp
diff --git a/weixin-java-miniapp/pom.xml b/weixin-java-miniapp/pom.xml
index 16e3da3300..e7017eb0b0 100644
--- a/weixin-java-miniapp/pom.xml
+++ b/weixin-java-miniapp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.3.B
+ 4.2.4.B
weixin-java-miniapp
diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml
index b5440d093c..a9db15a504 100644
--- a/weixin-java-mp/pom.xml
+++ b/weixin-java-mp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.3.B
+ 4.2.4.B
weixin-java-mp
diff --git a/weixin-java-open/pom.xml b/weixin-java-open/pom.xml
index ddad8cf810..c587b86cf1 100644
--- a/weixin-java-open/pom.xml
+++ b/weixin-java-open/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.3.B
+ 4.2.4.B
weixin-java-open
diff --git a/weixin-java-pay/pom.xml b/weixin-java-pay/pom.xml
index 3d5dbcd37c..76a2f816d5 100644
--- a/weixin-java-pay/pom.xml
+++ b/weixin-java-pay/pom.xml
@@ -5,7 +5,7 @@
com.github.binarywang
wx-java
- 4.2.3.B
+ 4.2.4.B
4.0.0
diff --git a/weixin-java-qidian/pom.xml b/weixin-java-qidian/pom.xml
index f3131dc19e..0b93578b43 100644
--- a/weixin-java-qidian/pom.xml
+++ b/weixin-java-qidian/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.3.B
+ 4.2.4.B
weixin-java-qidian
From 6fb083aeea02ba2c5fb05e6d12195640d9f21eae Mon Sep 17 00:00:00 2001
From: shouyuwang <93957183+shouyuwang@users.noreply.github.com>
Date: Thu, 6 Jan 2022 14:48:32 +0800
Subject: [PATCH 0026/1155] =?UTF-8?q?:art:=20=E3=80=90=E5=BE=AE=E4=BF=A1?=
=?UTF-8?q?=E6=94=AF=E4=BB=98=E3=80=91=E6=94=AF=E4=BB=98=E5=88=86=E8=AF=B7?=
=?UTF-8?q?=E6=B1=82=E6=8E=A5=E5=8F=A3=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/impl/PayScoreServiceImpl.java | 55 ++++++++++++++-----
1 file changed, 40 insertions(+), 15 deletions(-)
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImpl.java
index 0b237fda34..4181e74f26 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImpl.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImpl.java
@@ -10,6 +10,7 @@
import com.github.binarywang.wxpay.service.PayScoreService;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.v3.util.AesUtils;
+import com.google.common.base.Strings;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.RequiredArgsConstructor;
@@ -38,17 +39,23 @@ public class PayScoreServiceImpl implements PayScoreService {
public WxPayScoreResult permissions(WxPayScoreRequest request) throws WxPayException {
WxPayConfig config = this.payService.getConfig();
String url = this.payService.getPayBaseUrl() + "/v3/payscore/permissions";
- request.setAppid(config.getAppId());
- request.setServiceId(config.getServiceId());
- String permissionNotifyUrl = config.getPayScorePermissionNotifyUrl();
- if (StringUtils.isBlank(permissionNotifyUrl)) {
- throw new WxPayException("授权回调地址未配置");
+ if(Strings.isNullOrEmpty(request.getAppid())){
+ request.setAppid(config.getAppId());
+ }
+ if(Strings.isNullOrEmpty(request.getServiceId())){
+ request.setServiceId(config.getServiceId());
+ }
+ if(Strings.isNullOrEmpty(request.getNotifyUrl())){
+ String permissionNotifyUrl = config.getPayScorePermissionNotifyUrl();
+ if (StringUtils.isBlank(permissionNotifyUrl)) {
+ throw new WxPayException("授权回调地址未配置");
+ }
+ request.setNotifyUrl(permissionNotifyUrl);
}
String authorizationCode = request.getAuthorizationCode();
if (StringUtils.isBlank(authorizationCode)) {
throw new WxPayException("authorizationCode不允许为空");
}
- request.setNotifyUrl(permissionNotifyUrl);
String result = this.payService.postV3(url, request.toJson());
return WxPayScoreResult.fromJson(result);
@@ -139,9 +146,15 @@ public WxPayScoreResult createServiceOrder(WxPayScoreRequest request) throws WxP
boolean needUserConfirm = request.getNeedUserConfirm();
WxPayConfig config = this.payService.getConfig();
String url = this.payService.getPayBaseUrl() + "/v3/payscore/serviceorder";
- request.setAppid(config.getAppId());
- request.setServiceId(config.getServiceId());
- request.setNotifyUrl(config.getPayScoreNotifyUrl());
+ if(Strings.isNullOrEmpty(request.getAppid())){
+ request.setAppid(config.getAppId());
+ }
+ if(Strings.isNullOrEmpty(request.getServiceId())){
+ request.setServiceId(config.getServiceId());
+ }
+ if(Strings.isNullOrEmpty(request.getNotifyUrl())){
+ request.setNotifyUrl(config.getPayScoreNotifyUrl());
+ }
String result = this.payService.postV3(url, request.toJson());
WxPayScoreResult wxPayScoreCreateResult = WxPayScoreResult.fromJson(result);
@@ -213,8 +226,12 @@ public WxPayScoreResult modifyServiceOrder(WxPayScoreRequest request) throws WxP
WxPayConfig config = this.payService.getConfig();
String outOrderNo = request.getOutOrderNo();
String url = String.format("%s/v3/payscore/serviceorder/%s/modify", this.payService.getPayBaseUrl(), outOrderNo);
- request.setAppid(config.getAppId());
- request.setServiceId(config.getServiceId());
+ if(Strings.isNullOrEmpty(request.getAppid())){
+ request.setAppid(config.getAppId());
+ }
+ if(Strings.isNullOrEmpty(config.getServiceId())){
+ request.setServiceId(config.getServiceId());
+ }
request.setOutOrderNo(null);
String result = payService.postV3(url, request.toJson());
return WxPayScoreResult.fromJson(result);
@@ -225,8 +242,12 @@ public WxPayScoreResult completeServiceOrder(WxPayScoreRequest request) throws W
WxPayConfig config = this.payService.getConfig();
String outOrderNo = request.getOutOrderNo();
String url = String.format("%s/v3/payscore/serviceorder/%s/complete", this.payService.getPayBaseUrl(), outOrderNo);
- request.setAppid(config.getAppId());
- request.setServiceId(config.getServiceId());
+ if(Strings.isNullOrEmpty(request.getAppid())){
+ request.setAppid(config.getAppId());
+ }
+ if(Strings.isNullOrEmpty(request.getServiceId())){
+ request.setServiceId(config.getServiceId());
+ }
request.setOutOrderNo(null);
String result = payService.postV3(url, request.toJson());
return WxPayScoreResult.fromJson(result);
@@ -248,8 +269,12 @@ public WxPayScoreResult syncServiceOrder(WxPayScoreRequest request) throws WxPay
WxPayConfig config = this.payService.getConfig();
String outOrderNo = request.getOutOrderNo();
String url = String.format("%s/v3/payscore/serviceorder/%s/sync", this.payService.getPayBaseUrl(), outOrderNo);
- request.setAppid(config.getAppId());
- request.setServiceId(config.getServiceId());
+ if(Strings.isNullOrEmpty(request.getAppid())){
+ request.setAppid(config.getAppId());
+ }
+ if(Strings.isNullOrEmpty(request.getServiceId())){
+ request.setServiceId(config.getServiceId());
+ }
request.setOutOrderNo(null);
String result = payService.postV3(url, request.toJson());
return WxPayScoreResult.fromJson(result);
From be40eb7c14002a3f34f3a7ac6d11229ac22eef7b Mon Sep 17 00:00:00 2001
From: wongswoon
Date: Thu, 6 Jan 2022 16:12:38 +0800
Subject: [PATCH 0027/1155] =?UTF-8?q?:art:=20=E3=80=90=E5=B0=8F=E7=A8=8B?=
=?UTF-8?q?=E5=BA=8F=E3=80=91WxMaMessage=E5=A2=9E=E5=8A=A0=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E6=92=A4=E9=94=80=E6=8E=88=E6=9D=83AppID?=
=?UTF-8?q?=E4=BA=8B=E4=BB=B6=E9=83=A8=E5=88=86=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cn/binarywang/wx/miniapp/bean/WxMaMessage.java | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
index 76017659f3..85df2e458b 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
@@ -145,7 +145,19 @@ public class WxMaMessage implements Serializable {
@XStreamAlias("Query")
@XStreamConverter(value = XStreamCDataConverter.class)
private String query;
+
+ @SerializedName("AppID")
+ @XStreamAlias("AppID")
+ @XStreamConverter(value = XStreamCDataConverter.class)
+ private String appID;
+ public String getAppID() {
+ return appID;
+ }
+ public void setAppID(String appID) {
+ this.appID = appID;
+ }
+
@SerializedName("RevokeInfo")
@XStreamAlias("RevokeInfo")
@XStreamConverter(value = XStreamCDataConverter.class)
From 4c781ee7ee424191244bba3d6261577878610a07 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Thu, 6 Jan 2022 16:15:30 +0800
Subject: [PATCH 0028/1155] =?UTF-8?q?:art:=20=E7=AE=80=E5=8C=96=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
index 85df2e458b..1915e4e8bd 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java
@@ -145,19 +145,12 @@ public class WxMaMessage implements Serializable {
@XStreamAlias("Query")
@XStreamConverter(value = XStreamCDataConverter.class)
private String query;
-
+
@SerializedName("AppID")
@XStreamAlias("AppID")
@XStreamConverter(value = XStreamCDataConverter.class)
private String appID;
- public String getAppID() {
- return appID;
- }
- public void setAppID(String appID) {
- this.appID = appID;
- }
-
@SerializedName("RevokeInfo")
@XStreamAlias("RevokeInfo")
@XStreamConverter(value = XStreamCDataConverter.class)
From ee17a5ee6f812150202909caf23ac312b8889971 Mon Sep 17 00:00:00 2001
From: DDERGOU <519702306@qq.com>
Date: Tue, 11 Jan 2022 12:44:50 +0800
Subject: [PATCH 0029/1155] =?UTF-8?q?:art:=20=E8=A7=A3=E6=9E=90=E5=93=8D?=
=?UTF-8?q?=E5=BA=94=E7=9A=84Gson=E6=9E=84=E5=BB=BA=E7=B1=BB=E8=B0=83?=
=?UTF-8?q?=E6=95=B4=E4=B8=BA=E5=8D=95=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/util/json/WxGsonBuilder.java | 73 +++++----
.../weixin/cp/util/json/WxCpGsonBuilder.java | 77 +++++----
.../wx/miniapp/json/WxMaGsonBuilder.java | 11 +-
.../weixin/mp/util/json/WxMpGsonBuilder.java | 149 ++++++++++--------
.../open/util/json/WxOpenGsonBuilder.java | 12 +-
5 files changed, 183 insertions(+), 139 deletions(-)
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
index 0624923508..71304dc79b 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
@@ -1,32 +1,41 @@
-package me.chanjar.weixin.common.util.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import me.chanjar.weixin.common.bean.WxAccessToken;
-import me.chanjar.weixin.common.bean.WxNetCheckResult;
-import me.chanjar.weixin.common.bean.menu.WxMenu;
-import me.chanjar.weixin.common.error.WxError;
-import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
-
-/**
- * .
- * @author chanjarster
- */
-public class WxGsonBuilder {
- private static final GsonBuilder INSTANCE = new GsonBuilder();
-
- static {
- INSTANCE.disableHtmlEscaping();
- INSTANCE.registerTypeAdapter(WxAccessToken.class, new WxAccessTokenAdapter());
- INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
- INSTANCE.registerTypeAdapter(WxMenu.class, new WxMenuGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMediaUploadResult.class, new WxMediaUploadResultAdapter());
- INSTANCE.registerTypeAdapter(WxNetCheckResult.class, new WxNetCheckResultGsonAdapter());
-
- }
-
- public static Gson create() {
- return INSTANCE.create();
- }
-
-}
+package me.chanjar.weixin.common.util.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import me.chanjar.weixin.common.bean.WxAccessToken;
+import me.chanjar.weixin.common.bean.WxNetCheckResult;
+import me.chanjar.weixin.common.bean.menu.WxMenu;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import java.util.Objects;
+
+/**
+ * .
+ * @author chanjarster
+ */
+public class WxGsonBuilder {
+ private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
+
+ static {
+ INSTANCE.disableHtmlEscaping();
+ INSTANCE.registerTypeAdapter(WxAccessToken.class, new WxAccessTokenAdapter());
+ INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
+ INSTANCE.registerTypeAdapter(WxMenu.class, new WxMenuGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMediaUploadResult.class, new WxMediaUploadResultAdapter());
+ INSTANCE.registerTypeAdapter(WxNetCheckResult.class, new WxNetCheckResultGsonAdapter());
+
+ }
+
+ public static Gson create() {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (GSON_INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java
index 16f0108e09..c7179aa160 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java
@@ -1,34 +1,43 @@
-package me.chanjar.weixin.cp.util.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import me.chanjar.weixin.common.bean.menu.WxMenu;
-import me.chanjar.weixin.common.error.WxError;
-import me.chanjar.weixin.common.util.json.WxErrorAdapter;
-import me.chanjar.weixin.cp.bean.WxCpChat;
-import me.chanjar.weixin.cp.bean.WxCpDepart;
-import me.chanjar.weixin.cp.bean.WxCpTag;
-import me.chanjar.weixin.cp.bean.WxCpUser;
-
-/**
- * @author Daniel Qian
- */
-public class WxCpGsonBuilder {
-
- private static final GsonBuilder INSTANCE = new GsonBuilder();
-
- static {
- INSTANCE.disableHtmlEscaping();
- INSTANCE.registerTypeAdapter(WxCpChat.class, new WxCpChatGsonAdapter());
- INSTANCE.registerTypeAdapter(WxCpDepart.class, new WxCpDepartGsonAdapter());
- INSTANCE.registerTypeAdapter(WxCpUser.class, new WxCpUserGsonAdapter());
- INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
- INSTANCE.registerTypeAdapter(WxMenu.class, new WxCpMenuGsonAdapter());
- INSTANCE.registerTypeAdapter(WxCpTag.class, new WxCpTagGsonAdapter());
- }
-
- public static Gson create() {
- return INSTANCE.create();
- }
-
-}
+package me.chanjar.weixin.cp.util.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import me.chanjar.weixin.common.bean.menu.WxMenu;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.util.json.WxErrorAdapter;
+import me.chanjar.weixin.cp.bean.WxCpChat;
+import me.chanjar.weixin.cp.bean.WxCpDepart;
+import me.chanjar.weixin.cp.bean.WxCpTag;
+import me.chanjar.weixin.cp.bean.WxCpUser;
+import java.util.Objects;
+
+/**
+ * @author Daniel Qian
+ */
+public class WxCpGsonBuilder {
+
+ private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
+
+ static {
+ INSTANCE.disableHtmlEscaping();
+ INSTANCE.registerTypeAdapter(WxCpChat.class, new WxCpChatGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxCpDepart.class, new WxCpDepartGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxCpUser.class, new WxCpUserGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
+ INSTANCE.registerTypeAdapter(WxMenu.class, new WxCpMenuGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxCpTag.class, new WxCpTagGsonAdapter());
+ }
+
+ public static Gson create() {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (GSON_INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
+ }
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
index 0918935ee9..cfa6090585 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
@@ -11,12 +11,14 @@
import cn.binarywang.wx.miniapp.json.adaptor.*;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import java.util.Objects;
/**
* @author Binary Wang
*/
public class WxMaGsonBuilder {
private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
static {
INSTANCE.disableHtmlEscaping();
@@ -31,7 +33,14 @@ public class WxMaGsonBuilder {
}
public static Gson create() {
- return INSTANCE.create();
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (GSON_INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
}
}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
index 5f762cc6dc..b7773f503c 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
@@ -1,70 +1,79 @@
-package me.chanjar.weixin.mp.util.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import me.chanjar.weixin.mp.bean.*;
-import me.chanjar.weixin.mp.bean.card.WxMpCard;
-import me.chanjar.weixin.mp.bean.card.WxMpCardResult;
-import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate;
-import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary;
-import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
-import me.chanjar.weixin.mp.bean.material.*;
-import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardActivateTempInfoResult;
-import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUpdateResult;
-import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUserInfoResult;
-import me.chanjar.weixin.mp.bean.result.*;
-import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage;
-import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
-import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
-
-/**
- * @author someone
- */
-public class WxMpGsonBuilder {
-
- private static final GsonBuilder INSTANCE = new GsonBuilder();
-
- static {
- INSTANCE.disableHtmlEscaping();
- INSTANCE.registerTypeAdapter(WxMpKefuMessage.class, new WxMpKefuMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassNews.class, new WxMpMassNewsGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassTagMessage.class, new WxMpMassTagMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassOpenIdsMessage.class, new WxMpMassOpenIdsMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpUser.class, new WxMpUserGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpChangeOpenid.class, new WxMpChangeOpenidGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpUserList.class, new WxUserListGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassVideo.class, new WxMpMassVideoAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassSendResult.class, new WxMpMassSendResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassUploadResult.class, new WxMpMassUploadResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpQrCodeTicket.class, new WxQrCodeTicketAdapter());
- INSTANCE.registerTypeAdapter(WxMpTemplateMessage.class, new WxMpTemplateMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpSubscribeMessage.class, new WxMpSubscribeMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpSemanticQueryResult.class, new WxMpSemanticQueryResultAdapter());
- INSTANCE.registerTypeAdapter(WxDataCubeUserSummary.class, new WxMpUserSummaryGsonAdapter());
- INSTANCE.registerTypeAdapter(WxDataCubeUserCumulate.class, new WxMpUserCumulateGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialUploadResult.class, new WxMpMaterialUploadResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialVideoInfoResult.class, new WxMpMaterialVideoInfoResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialArticleUpdate.class, new WxMpMaterialArticleUpdateGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialCountResult.class, new WxMpMaterialCountResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialNews.class, new WxMpMaterialNewsGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpNewsArticle.class, new WxMpNewsArticleGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.class, new WxMpMaterialNewsBatchGetGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem.class, new WxMpMaterialNewsBatchGetGsonItemAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.class, new WxMpMaterialFileBatchGetGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.WxMaterialFileBatchGetNewsItem.class, new WxMpMaterialFileBatchGetGsonItemAdapter());
- INSTANCE.registerTypeAdapter(WxMpCardResult.class, new WxMpCardResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpCard.class, new WxMpCardGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassPreviewMessage.class, new WxMpMassPreviewMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMediaImgUploadResult.class, new WxMediaImgUploadResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpTemplateIndustry.class, new WxMpIndustryGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMemberCardUserInfoResult.class, new WxMpMemberCardUserInfoResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMemberCardUpdateResult.class, new WxMpMemberCardUpdateResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMemberCardActivateTempInfoResult.class, new WxMpMemberCardActivateTempInfoResultGsonAdapter());
- }
-
- public static Gson create() {
- return INSTANCE.create();
- }
-
-}
+package me.chanjar.weixin.mp.util.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import me.chanjar.weixin.mp.bean.*;
+import me.chanjar.weixin.mp.bean.card.WxMpCard;
+import me.chanjar.weixin.mp.bean.card.WxMpCardResult;
+import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate;
+import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary;
+import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
+import me.chanjar.weixin.mp.bean.material.*;
+import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardActivateTempInfoResult;
+import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUpdateResult;
+import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUserInfoResult;
+import me.chanjar.weixin.mp.bean.result.*;
+import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
+import java.util.Objects;
+
+/**
+ * @author someone
+ */
+public class WxMpGsonBuilder {
+
+ private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
+
+ static {
+ INSTANCE.disableHtmlEscaping();
+ INSTANCE.registerTypeAdapter(WxMpKefuMessage.class, new WxMpKefuMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassNews.class, new WxMpMassNewsGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassTagMessage.class, new WxMpMassTagMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassOpenIdsMessage.class, new WxMpMassOpenIdsMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpUser.class, new WxMpUserGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpChangeOpenid.class, new WxMpChangeOpenidGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpUserList.class, new WxUserListGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassVideo.class, new WxMpMassVideoAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassSendResult.class, new WxMpMassSendResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassUploadResult.class, new WxMpMassUploadResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpQrCodeTicket.class, new WxQrCodeTicketAdapter());
+ INSTANCE.registerTypeAdapter(WxMpTemplateMessage.class, new WxMpTemplateMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpSubscribeMessage.class, new WxMpSubscribeMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpSemanticQueryResult.class, new WxMpSemanticQueryResultAdapter());
+ INSTANCE.registerTypeAdapter(WxDataCubeUserSummary.class, new WxMpUserSummaryGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxDataCubeUserCumulate.class, new WxMpUserCumulateGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialUploadResult.class, new WxMpMaterialUploadResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialVideoInfoResult.class, new WxMpMaterialVideoInfoResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialArticleUpdate.class, new WxMpMaterialArticleUpdateGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialCountResult.class, new WxMpMaterialCountResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialNews.class, new WxMpMaterialNewsGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpNewsArticle.class, new WxMpNewsArticleGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.class, new WxMpMaterialNewsBatchGetGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem.class, new WxMpMaterialNewsBatchGetGsonItemAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.class, new WxMpMaterialFileBatchGetGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.WxMaterialFileBatchGetNewsItem.class, new WxMpMaterialFileBatchGetGsonItemAdapter());
+ INSTANCE.registerTypeAdapter(WxMpCardResult.class, new WxMpCardResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpCard.class, new WxMpCardGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassPreviewMessage.class, new WxMpMassPreviewMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMediaImgUploadResult.class, new WxMediaImgUploadResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpTemplateIndustry.class, new WxMpIndustryGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMemberCardUserInfoResult.class, new WxMpMemberCardUserInfoResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMemberCardUpdateResult.class, new WxMpMemberCardUpdateResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMemberCardActivateTempInfoResult.class, new WxMpMemberCardActivateTempInfoResultGsonAdapter());
+ }
+
+ public static Gson create() {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (GSON_INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
+ }
+
+}
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java
index 325383ebf0..cfed3f084e 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java
@@ -7,6 +7,7 @@
import me.chanjar.weixin.open.bean.auth.WxOpenAuthorizationInfo;
import me.chanjar.weixin.open.bean.auth.WxOpenAuthorizerInfo;
import me.chanjar.weixin.open.bean.result.*;
+import java.util.Objects;
/**
* @author 007
@@ -14,6 +15,7 @@
public class WxOpenGsonBuilder {
private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
static {
INSTANCE.disableHtmlEscaping();
@@ -26,11 +28,17 @@ public class WxOpenGsonBuilder {
INSTANCE.registerTypeAdapter(WxOpenAuthorizerOptionResult.class, new WxOpenAuthorizerOptionResultGsonAdapter());
INSTANCE.registerTypeAdapter(WxFastMaAccountBasicInfoResult.class, new WxFastMaAccountBasicInfoGsonAdapter());
INSTANCE.registerTypeAdapter(WxOpenAuthorizerListResult.class, new WxOpenAuthorizerListResultGsonAdapter());
-
}
public static Gson create() {
- return INSTANCE.create();
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (GSON_INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
}
}
From 0601e8fb1751bf05a038056881adc569da57a8ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BE=90=E5=87=AF=E6=97=8B?=
<42696884+azouever@users.noreply.github.com>
Date: Wed, 12 Jan 2022 17:26:11 +0800
Subject: [PATCH 0030/1155] :art: fix GsonBuilder singleton NPE
---
.../common/util/json/WxGsonBuilder.java | 82 ++++-----
.../weixin/cp/util/json/WxCpGsonBuilder.java | 86 +++++-----
.../wx/miniapp/json/WxMaGsonBuilder.java | 2 +-
.../weixin/mp/util/json/WxMpGsonBuilder.java | 158 +++++++++---------
.../open/util/json/WxOpenGsonBuilder.java | 2 +-
5 files changed, 165 insertions(+), 165 deletions(-)
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
index 71304dc79b..ff260c16fb 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
@@ -1,41 +1,41 @@
-package me.chanjar.weixin.common.util.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import me.chanjar.weixin.common.bean.WxAccessToken;
-import me.chanjar.weixin.common.bean.WxNetCheckResult;
-import me.chanjar.weixin.common.bean.menu.WxMenu;
-import me.chanjar.weixin.common.error.WxError;
-import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
-import java.util.Objects;
-
-/**
- * .
- * @author chanjarster
- */
-public class WxGsonBuilder {
- private static final GsonBuilder INSTANCE = new GsonBuilder();
- private static volatile Gson GSON_INSTANCE;
-
- static {
- INSTANCE.disableHtmlEscaping();
- INSTANCE.registerTypeAdapter(WxAccessToken.class, new WxAccessTokenAdapter());
- INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
- INSTANCE.registerTypeAdapter(WxMenu.class, new WxMenuGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMediaUploadResult.class, new WxMediaUploadResultAdapter());
- INSTANCE.registerTypeAdapter(WxNetCheckResult.class, new WxNetCheckResultGsonAdapter());
-
- }
-
- public static Gson create() {
- if (Objects.isNull(GSON_INSTANCE)) {
- synchronized (GSON_INSTANCE) {
- if (Objects.isNull(GSON_INSTANCE)) {
- GSON_INSTANCE = INSTANCE.create();
- }
- }
- }
- return GSON_INSTANCE;
- }
-
-}
+package me.chanjar.weixin.common.util.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import me.chanjar.weixin.common.bean.WxAccessToken;
+import me.chanjar.weixin.common.bean.WxNetCheckResult;
+import me.chanjar.weixin.common.bean.menu.WxMenu;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import java.util.Objects;
+
+/**
+ * .
+ * @author chanjarster
+ */
+public class WxGsonBuilder {
+ private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
+
+ static {
+ INSTANCE.disableHtmlEscaping();
+ INSTANCE.registerTypeAdapter(WxAccessToken.class, new WxAccessTokenAdapter());
+ INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
+ INSTANCE.registerTypeAdapter(WxMenu.class, new WxMenuGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMediaUploadResult.class, new WxMediaUploadResultAdapter());
+ INSTANCE.registerTypeAdapter(WxNetCheckResult.class, new WxNetCheckResultGsonAdapter());
+
+ }
+
+ public static Gson create() {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java
index c7179aa160..098935bf03 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java
@@ -1,43 +1,43 @@
-package me.chanjar.weixin.cp.util.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import me.chanjar.weixin.common.bean.menu.WxMenu;
-import me.chanjar.weixin.common.error.WxError;
-import me.chanjar.weixin.common.util.json.WxErrorAdapter;
-import me.chanjar.weixin.cp.bean.WxCpChat;
-import me.chanjar.weixin.cp.bean.WxCpDepart;
-import me.chanjar.weixin.cp.bean.WxCpTag;
-import me.chanjar.weixin.cp.bean.WxCpUser;
-import java.util.Objects;
-
-/**
- * @author Daniel Qian
- */
-public class WxCpGsonBuilder {
-
- private static final GsonBuilder INSTANCE = new GsonBuilder();
- private static volatile Gson GSON_INSTANCE;
-
- static {
- INSTANCE.disableHtmlEscaping();
- INSTANCE.registerTypeAdapter(WxCpChat.class, new WxCpChatGsonAdapter());
- INSTANCE.registerTypeAdapter(WxCpDepart.class, new WxCpDepartGsonAdapter());
- INSTANCE.registerTypeAdapter(WxCpUser.class, new WxCpUserGsonAdapter());
- INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
- INSTANCE.registerTypeAdapter(WxMenu.class, new WxCpMenuGsonAdapter());
- INSTANCE.registerTypeAdapter(WxCpTag.class, new WxCpTagGsonAdapter());
- }
-
- public static Gson create() {
- if (Objects.isNull(GSON_INSTANCE)) {
- synchronized (GSON_INSTANCE) {
- if (Objects.isNull(GSON_INSTANCE)) {
- GSON_INSTANCE = INSTANCE.create();
- }
- }
- }
- return GSON_INSTANCE;
- }
-
-}
+package me.chanjar.weixin.cp.util.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import me.chanjar.weixin.common.bean.menu.WxMenu;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.util.json.WxErrorAdapter;
+import me.chanjar.weixin.cp.bean.WxCpChat;
+import me.chanjar.weixin.cp.bean.WxCpDepart;
+import me.chanjar.weixin.cp.bean.WxCpTag;
+import me.chanjar.weixin.cp.bean.WxCpUser;
+import java.util.Objects;
+
+/**
+ * @author Daniel Qian
+ */
+public class WxCpGsonBuilder {
+
+ private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
+
+ static {
+ INSTANCE.disableHtmlEscaping();
+ INSTANCE.registerTypeAdapter(WxCpChat.class, new WxCpChatGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxCpDepart.class, new WxCpDepartGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxCpUser.class, new WxCpUserGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
+ INSTANCE.registerTypeAdapter(WxMenu.class, new WxCpMenuGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxCpTag.class, new WxCpTagGsonAdapter());
+ }
+
+ public static Gson create() {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
+ }
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
index cfa6090585..5379826656 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
@@ -34,7 +34,7 @@ public class WxMaGsonBuilder {
public static Gson create() {
if (Objects.isNull(GSON_INSTANCE)) {
- synchronized (GSON_INSTANCE) {
+ synchronized (INSTANCE) {
if (Objects.isNull(GSON_INSTANCE)) {
GSON_INSTANCE = INSTANCE.create();
}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
index b7773f503c..53c39a0c47 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
@@ -1,79 +1,79 @@
-package me.chanjar.weixin.mp.util.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import me.chanjar.weixin.mp.bean.*;
-import me.chanjar.weixin.mp.bean.card.WxMpCard;
-import me.chanjar.weixin.mp.bean.card.WxMpCardResult;
-import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate;
-import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary;
-import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
-import me.chanjar.weixin.mp.bean.material.*;
-import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardActivateTempInfoResult;
-import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUpdateResult;
-import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUserInfoResult;
-import me.chanjar.weixin.mp.bean.result.*;
-import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage;
-import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
-import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
-import java.util.Objects;
-
-/**
- * @author someone
- */
-public class WxMpGsonBuilder {
-
- private static final GsonBuilder INSTANCE = new GsonBuilder();
- private static volatile Gson GSON_INSTANCE;
-
- static {
- INSTANCE.disableHtmlEscaping();
- INSTANCE.registerTypeAdapter(WxMpKefuMessage.class, new WxMpKefuMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassNews.class, new WxMpMassNewsGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassTagMessage.class, new WxMpMassTagMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassOpenIdsMessage.class, new WxMpMassOpenIdsMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpUser.class, new WxMpUserGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpChangeOpenid.class, new WxMpChangeOpenidGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpUserList.class, new WxUserListGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassVideo.class, new WxMpMassVideoAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassSendResult.class, new WxMpMassSendResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassUploadResult.class, new WxMpMassUploadResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpQrCodeTicket.class, new WxQrCodeTicketAdapter());
- INSTANCE.registerTypeAdapter(WxMpTemplateMessage.class, new WxMpTemplateMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpSubscribeMessage.class, new WxMpSubscribeMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpSemanticQueryResult.class, new WxMpSemanticQueryResultAdapter());
- INSTANCE.registerTypeAdapter(WxDataCubeUserSummary.class, new WxMpUserSummaryGsonAdapter());
- INSTANCE.registerTypeAdapter(WxDataCubeUserCumulate.class, new WxMpUserCumulateGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialUploadResult.class, new WxMpMaterialUploadResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialVideoInfoResult.class, new WxMpMaterialVideoInfoResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialArticleUpdate.class, new WxMpMaterialArticleUpdateGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialCountResult.class, new WxMpMaterialCountResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialNews.class, new WxMpMaterialNewsGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpNewsArticle.class, new WxMpNewsArticleGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.class, new WxMpMaterialNewsBatchGetGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem.class, new WxMpMaterialNewsBatchGetGsonItemAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.class, new WxMpMaterialFileBatchGetGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.WxMaterialFileBatchGetNewsItem.class, new WxMpMaterialFileBatchGetGsonItemAdapter());
- INSTANCE.registerTypeAdapter(WxMpCardResult.class, new WxMpCardResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpCard.class, new WxMpCardGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassPreviewMessage.class, new WxMpMassPreviewMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMediaImgUploadResult.class, new WxMediaImgUploadResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpTemplateIndustry.class, new WxMpIndustryGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMemberCardUserInfoResult.class, new WxMpMemberCardUserInfoResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMemberCardUpdateResult.class, new WxMpMemberCardUpdateResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMemberCardActivateTempInfoResult.class, new WxMpMemberCardActivateTempInfoResultGsonAdapter());
- }
-
- public static Gson create() {
- if (Objects.isNull(GSON_INSTANCE)) {
- synchronized (GSON_INSTANCE) {
- if (Objects.isNull(GSON_INSTANCE)) {
- GSON_INSTANCE = INSTANCE.create();
- }
- }
- }
- return GSON_INSTANCE;
- }
-
-}
+package me.chanjar.weixin.mp.util.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import me.chanjar.weixin.mp.bean.*;
+import me.chanjar.weixin.mp.bean.card.WxMpCard;
+import me.chanjar.weixin.mp.bean.card.WxMpCardResult;
+import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate;
+import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary;
+import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
+import me.chanjar.weixin.mp.bean.material.*;
+import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardActivateTempInfoResult;
+import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUpdateResult;
+import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUserInfoResult;
+import me.chanjar.weixin.mp.bean.result.*;
+import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
+import java.util.Objects;
+
+/**
+ * @author someone
+ */
+public class WxMpGsonBuilder {
+
+ private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
+
+ static {
+ INSTANCE.disableHtmlEscaping();
+ INSTANCE.registerTypeAdapter(WxMpKefuMessage.class, new WxMpKefuMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassNews.class, new WxMpMassNewsGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassTagMessage.class, new WxMpMassTagMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassOpenIdsMessage.class, new WxMpMassOpenIdsMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpUser.class, new WxMpUserGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpChangeOpenid.class, new WxMpChangeOpenidGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpUserList.class, new WxUserListGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassVideo.class, new WxMpMassVideoAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassSendResult.class, new WxMpMassSendResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassUploadResult.class, new WxMpMassUploadResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpQrCodeTicket.class, new WxQrCodeTicketAdapter());
+ INSTANCE.registerTypeAdapter(WxMpTemplateMessage.class, new WxMpTemplateMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpSubscribeMessage.class, new WxMpSubscribeMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpSemanticQueryResult.class, new WxMpSemanticQueryResultAdapter());
+ INSTANCE.registerTypeAdapter(WxDataCubeUserSummary.class, new WxMpUserSummaryGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxDataCubeUserCumulate.class, new WxMpUserCumulateGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialUploadResult.class, new WxMpMaterialUploadResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialVideoInfoResult.class, new WxMpMaterialVideoInfoResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialArticleUpdate.class, new WxMpMaterialArticleUpdateGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialCountResult.class, new WxMpMaterialCountResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialNews.class, new WxMpMaterialNewsGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpNewsArticle.class, new WxMpNewsArticleGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.class, new WxMpMaterialNewsBatchGetGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem.class, new WxMpMaterialNewsBatchGetGsonItemAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.class, new WxMpMaterialFileBatchGetGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.WxMaterialFileBatchGetNewsItem.class, new WxMpMaterialFileBatchGetGsonItemAdapter());
+ INSTANCE.registerTypeAdapter(WxMpCardResult.class, new WxMpCardResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpCard.class, new WxMpCardGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassPreviewMessage.class, new WxMpMassPreviewMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMediaImgUploadResult.class, new WxMediaImgUploadResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpTemplateIndustry.class, new WxMpIndustryGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMemberCardUserInfoResult.class, new WxMpMemberCardUserInfoResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMemberCardUpdateResult.class, new WxMpMemberCardUpdateResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMemberCardActivateTempInfoResult.class, new WxMpMemberCardActivateTempInfoResultGsonAdapter());
+ }
+
+ public static Gson create() {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
+ }
+
+}
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java
index cfed3f084e..5dbae037a2 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java
@@ -32,7 +32,7 @@ public class WxOpenGsonBuilder {
public static Gson create() {
if (Objects.isNull(GSON_INSTANCE)) {
- synchronized (GSON_INSTANCE) {
+ synchronized (INSTANCE) {
if (Objects.isNull(GSON_INSTANCE)) {
GSON_INSTANCE = INSTANCE.create();
}
From 1dc58f00212c8ebd78e84b56b81dda0c980f87ba Mon Sep 17 00:00:00 2001
From: huazai
Date: Mon, 17 Jan 2022 13:49:23 +0800
Subject: [PATCH 0031/1155] =?UTF-8?q?:art:=20#2506=20=E3=80=90=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91=E8=A1=A5=E5=85=85=E5=AE=8C=E5=96=84?=
=?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=94=A8=E6=88=B7encryptKey=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=E7=9A=84=E5=8F=82=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../wx/miniapp/api/WxMaInternetService.java | 20 +++++++++-
.../api/impl/WxMaInternetServiceImpl.java | 39 +++++++++++++++++--
.../api/impl/WxMaInternetServiceImplTest.java | 36 ++++++++++++++---
.../api/impl/WxMaUserServiceImplTest.java | 5 +++
4 files changed, 90 insertions(+), 10 deletions(-)
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaInternetService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaInternetService.java
index 8e6a3e2d80..4d055ba2de 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaInternetService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaInternetService.java
@@ -8,20 +8,36 @@
* 【小程序-服务端-网络】网络相关接口.
* 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/internet/internet.getUserEncryptKey.html
*
+ *
* @author chutian0124
*/
public interface WxMaInternetService {
/**
+ *
+ * 获取用户encryptKey。 会获取用户最近3次的key,每个key的存活时间为3600s。
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/internet/internet.getUserEncryptKey.html
+ * 接口地址:POST https://api.weixin.qq.com/wxa/business/getuserencryptkey?access_token=ACCESS_TOKEN&openid=OPENID&signature=SIGNATURE&sig_method=hmac_sha256
+ * @param openid 用户的openid
+ * @param signature 用sessionkey对空字符串签名得到的结果
+ * @param sigMethod 签名方法,只支持 hmac_sha256
+ *
*
- *
+ * @return {@link WxMaInternetResponse}
+ * @throws WxErrorException
+ */
+ WxMaInternetResponse getUserEncryptKey(String openid, String signature, String sigMethod) throws WxErrorException;
+
+ /**
*
* 获取用户encryptKey。 会获取用户最近3次的key,每个key的存活时间为3600s。
* 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/internet/internet.getUserEncryptKey.html
* 接口地址:POST https://api.weixin.qq.com/wxa/business/getuserencryptkey?access_token=ACCESS_TOKEN&openid=OPENID&signature=SIGNATURE&sig_method=hmac_sha256
+ * @param openid 用户的openid
+ * @param sessionKey 用户的sessionKey
*
*
* @return {@link WxMaInternetResponse}
* @throws WxErrorException
*/
- WxMaInternetResponse getUserEncryptKey() throws WxErrorException;
+ WxMaInternetResponse getUserEncryptKey(String openid, String sessionKey) throws WxErrorException;
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImpl.java
index 8ee023baf5..c723828366 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImpl.java
@@ -9,9 +9,12 @@
import me.chanjar.weixin.common.enums.WxType;
import me.chanjar.weixin.common.error.WxError;
import me.chanjar.weixin.common.error.WxErrorException;
+import org.jetbrains.annotations.NotNull;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
/**
- *
* 服务端网络相关接口
*
* @author chutian0124
@@ -21,9 +24,39 @@
public class WxMaInternetServiceImpl implements WxMaInternetService {
private final WxMaService wxMaService;
+ private String sha256(String data, String sessionKey) throws Exception {
+ Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
+ SecretKeySpec secret_key = new SecretKeySpec(sessionKey.getBytes("UTF-8"), "HmacSHA256");
+ sha256_HMAC.init(secret_key);
+ byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
+ StringBuilder sb = new StringBuilder();
+ for (byte item : array) {
+ sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
+ }
+ return sb.toString().toUpperCase();
+ }
+
@Override
- public WxMaInternetResponse getUserEncryptKey() throws WxErrorException {
- String responseContent = this.wxMaService.post(WxMaApiUrlConstants.Internet.GET_USER_ENCRYPT_KEY, "");
+ public WxMaInternetResponse getUserEncryptKey(String openid, String signature, String sigMethod) throws WxErrorException {
+ String url = WxMaApiUrlConstants.Internet.GET_USER_ENCRYPT_KEY + "?openid=" + openid + "&signature=" + signature + "&sig_method=" + sigMethod;
+ return getWxMaInternetResponse(url);
+ }
+
+ @Override
+ public WxMaInternetResponse getUserEncryptKey(String openid, String sessionKey) throws WxErrorException {
+ String signature = null;
+ try {
+ signature = sha256("", sessionKey);
+ } catch (Exception e) {
+ throw new WxErrorException("签名错误");
+ }
+ String url = WxMaApiUrlConstants.Internet.GET_USER_ENCRYPT_KEY + "?sig_method=hmac_sha256&openid=" + openid + "&signature=" + signature;
+ return getWxMaInternetResponse(url);
+ }
+
+ @NotNull
+ private WxMaInternetResponse getWxMaInternetResponse(String url) throws WxErrorException {
+ String responseContent = this.wxMaService.post(url, "");
WxMaInternetResponse response = WxMaGsonBuilder.create().fromJson(responseContent, WxMaInternetResponse.class);
if (response.getErrcode() == -1) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImplTest.java
index ccc2f9c93a..9b1ffa1678 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImplTest.java
@@ -4,12 +4,15 @@
import cn.binarywang.wx.miniapp.bean.internet.WxMaInternetResponse;
import cn.binarywang.wx.miniapp.test.ApiTestModule;
import com.google.inject.Inject;
-import me.chanjar.weixin.common.error.WxErrorException;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
/**
- *
* 服务端网络相关接口测试
*
* @author chutian0124
@@ -21,9 +24,32 @@ public class WxMaInternetServiceImplTest {
@Inject
private WxMaService wxService;
+ private static String HMACSHA256(String data, String key) throws Exception {
+ Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
+ SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
+ sha256_HMAC.init(secret_key);
+ byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
+ StringBuilder sb = new StringBuilder();
+ for (byte item : array) {
+ sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
+ }
+ return sb.toString().toUpperCase();
+ }
+
+ @Test
+ public void testGetUserEncryptKey() throws Exception {
+ String openid = "ogu-84hVFTbTt-myGisQESoDJ6BM";
+ String signature = HMACSHA256("", "9ny8n3t0KULoi0deF7T9pw==");
+ String sigMethod = "hmac_sha256";
+ WxMaInternetResponse response = this.wxService.getInternetService().getUserEncryptKey(openid, signature, sigMethod);
+ assertThat(response).isNotNull();
+ }
+
@Test
- public void testGetUserEncryptKey() throws WxErrorException {
- WxMaInternetResponse response = this.wxService.getInternetService().getUserEncryptKey();
- System.out.println(response);
+ public void testGetUserEncryptKey2() throws Exception {
+ String openid = "ogu-84hVFTbTt-myGisQESoDJ6BM";
+ String sessionKey = "9ny8n3t0KULoi0deF7T9pw==";
+ WxMaInternetResponse response = this.wxService.getInternetService().getUserEncryptKey(openid, sessionKey);
+ assertThat(response).isNotNull();
}
}
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplTest.java
index dbee3f9c90..5b04d05f81 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplTest.java
@@ -76,4 +76,9 @@ public void testSetUserStorage() throws WxErrorException {
public void testGetNewPhoneNoInfo() throws Exception{
assertNotNull(wxService.getUserService().getNewPhoneNoInfo("test"));
}
+
+ @Test
+ public void testGetAccessToken() throws Exception{
+ assertNotNull(wxService.getAccessToken(true));
+ }
}
From a6f55b3ef15923246127bfddb49b29425db6d5b7 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Mon, 17 Jan 2022 14:23:41 +0800
Subject: [PATCH 0032/1155] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 18db207f70..d8fd00b97a 100644
--- a/README.md
+++ b/README.md
@@ -69,7 +69,7 @@
com.github.binarywang
(不同模块参考下文)
- 4.1.0
+ 4.2.0
```
From 2c48303f8db143f85c1fd73c090fda4afef70237 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=B4=BB=E6=B3=BC=E5=BC=80=E6=9C=97=E5=A4=A7=E7=94=B7?=
=?UTF-8?q?=E5=AD=A9=E5=8F=98=E8=BA=AB=E6=8A=80=E6=9C=AF=E5=AE=85?=
<43976956+luozeqiang8716@users.noreply.github.com>
Date: Wed, 19 Jan 2022 20:26:18 +0800
Subject: [PATCH 0033/1155] =?UTF-8?q?:new:=20#2510=E3=80=90=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91=E5=A2=9E=E5=8A=A0=E5=BE=AE=E4=BF=A1?=
=?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=8D=B3=E6=97=B6=E9=85=8D=E9=80=81?=
=?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=9A=84=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/WxMaImmediateDeliveryService.java | 100 +++
.../wx/miniapp/api/WxMaService.java | 8 +
.../miniapp/api/impl/BaseWxMaServiceImpl.java | 6 +
.../WxMaImmediateDeliveryServiceImpl.java | 190 ++++++
.../bean/delivery/AbnormalConfirmRequest.java | 43 ++
.../delivery/AbnormalConfirmResponse.java | 25 +
.../bean/delivery/AddOrderRequest.java | 639 ++++++++++++++++++
.../bean/delivery/AddOrderResponse.java | 92 +++
.../bean/delivery/BindAccountResponse.java | 66 ++
.../bean/delivery/CancelOrderRequest.java | 52 ++
.../bean/delivery/CancelOrderResponse.java | 38 ++
.../bean/delivery/GetOrderRequest.java | 24 +
.../bean/delivery/GetOrderResponse.java | 68 ++
.../bean/delivery/MockUpdateOrderRequest.java | 58 ++
.../delivery/MockUpdateOrderResponse.java | 25 +
.../base/WxMaDeliveryBaseRequest.java | 119 ++++
.../base/WxMaDeliveryBaseResponse.java | 66 ++
.../miniapp/constant/WxMaApiUrlConstants.java | 114 ++++
.../WxMaImmediateDeliveryServiceImplTest.java | 203 ++++++
19 files changed, 1936 insertions(+)
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaImmediateDeliveryService.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaImmediateDeliveryServiceImpl.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AbnormalConfirmRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AbnormalConfirmResponse.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AddOrderRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AddOrderResponse.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/BindAccountResponse.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/CancelOrderRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/CancelOrderResponse.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/GetOrderRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/GetOrderResponse.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/MockUpdateOrderRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/MockUpdateOrderResponse.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/base/WxMaDeliveryBaseRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/base/WxMaDeliveryBaseResponse.java
create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaImmediateDeliveryServiceImplTest.java
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaImmediateDeliveryService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaImmediateDeliveryService.java
new file mode 100644
index 0000000000..d372799ecf
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaImmediateDeliveryService.java
@@ -0,0 +1,100 @@
+package cn.binarywang.wx.miniapp.api;
+
+import cn.binarywang.wx.miniapp.bean.delivery.AbnormalConfirmRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.AbnormalConfirmResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.AddOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.AddOrderResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.BindAccountResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.CancelOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.CancelOrderResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.GetOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.GetOrderResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.MockUpdateOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.MockUpdateOrderResponse;
+import me.chanjar.weixin.common.error.WxErrorException;
+
+/**
+ * 微信小程序即时配送服务.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/immediate-delivery/overview.html
+ *
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-13 16:40
+ */
+public interface WxMaImmediateDeliveryService {
+
+ /**
+ * 拉取已绑定账号.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getBindAccount.html
+ *
+ *
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ BindAccountResponse getBindAccount() throws WxErrorException;
+
+ /**
+ * 下配送单接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.addOrder.html
+ *
+ *
+ * @param request request
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ AddOrderResponse addOrder(AddOrderRequest request) throws WxErrorException;
+
+ /**
+ * 拉取配送单信息.
+ *
+ * 商家可使用本接口查询某一配送单的配送状态,便于商家掌握配送情况。
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getOrder.html
+ *
+ *
+ * @param request request
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ GetOrderResponse getOrder(GetOrderRequest request) throws WxErrorException;
+
+ /**
+ * 取消配送单接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.cancelOrder.html
+ *
+ *
+ * @param request request
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ CancelOrderResponse cancelOrder(CancelOrderRequest request) throws WxErrorException;
+
+ /**
+ * 异常件退回商家商家确认收货接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.abnormalConfirm.html
+ *
+ *
+ * @param request request
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ AbnormalConfirmResponse abnormalConfirm(AbnormalConfirmRequest request) throws WxErrorException;
+
+ /**
+ * 模拟配送公司更新配送单状态, 该接口只用于沙盒环境,即订单并没有真实流转到运力方.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.mockUpdateOrder.html
+ *
+ *
+ * @param request request
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ MockUpdateOrderResponse mockUpdateOrder(MockUpdateOrderRequest request) throws WxErrorException;
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
index 225a52a558..81ed12aa89 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
@@ -476,4 +476,12 @@ public interface WxMaService extends WxService {
* @return WxMaDeviceSubscribeService plugin service
*/
WxMaMarketingService getMarketingService();
+
+ /**
+ * 返回微信小程序即时配送服务接口.
+ *
+ * @return WxMaImmediateDeliveryService
+ */
+ WxMaImmediateDeliveryService getWxMaImmediateDeliveryService();
+
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
index bf8e1e9033..21ca0f7214 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
@@ -77,6 +77,7 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH
private final WxMaReimburseInvoiceService reimburseInvoiceService = new WxMaReimburseInvoiceServiceImpl(this);
private final WxMaDeviceSubscribeService deviceSubscribeService = new WxMaDeviceSubscribeServiceImpl(this);
private final WxMaMarketingService marketingService = new WxMaMarketingServiceImpl(this);
+ private final WxMaImmediateDeliveryService immediateDeliveryService = new WxMaImmediateDeliveryServiceImpl(this);
private Map configMap;
private int retrySleepMillis = 1000;
private int maxRetryTimes = 5;
@@ -581,4 +582,9 @@ public WxMaReimburseInvoiceService getReimburseInvoiceService() {
@Override
public WxMaMarketingService getMarketingService() {return this.marketingService; }
+
+ @Override
+ public WxMaImmediateDeliveryService getWxMaImmediateDeliveryService() {
+ return this.immediateDeliveryService;
+ }
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaImmediateDeliveryServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaImmediateDeliveryServiceImpl.java
new file mode 100644
index 0000000000..75f88eb63c
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaImmediateDeliveryServiceImpl.java
@@ -0,0 +1,190 @@
+package cn.binarywang.wx.miniapp.api.impl;
+
+import cn.binarywang.wx.miniapp.api.WxMaImmediateDeliveryService;
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.delivery.AbnormalConfirmRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.AbnormalConfirmResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.AddOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.AddOrderResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.BindAccountResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.CancelOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.CancelOrderResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.GetOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.GetOrderResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.MockUpdateOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.MockUpdateOrderResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.base.WxMaDeliveryBaseResponse;
+import cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import javassist.bytecode.ConstPool;
+import lombok.RequiredArgsConstructor;
+import me.chanjar.weixin.common.enums.WxType;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.json.GsonParser;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 微信小程序即时配送服务.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/immediate-delivery/overview.html
+ *
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-13 16:40
+ */
+@RequiredArgsConstructor
+public class WxMaImmediateDeliveryServiceImpl implements WxMaImmediateDeliveryService {
+
+ /**
+ * 微信响应码.
+ */
+ public static final String ERR_CODE = "errcode";
+
+ /**
+ * 顺丰同城响应码.
+ */
+ public static final String SF_ERR_CODE = "resultcode";
+
+ /**
+ * 顺丰同城响应说明.
+ */
+ public static final String SF_ERR_MSG = "resultmsg";
+
+ /**
+ * 成功响应状态码.
+ */
+ public static final int SUCCESS_CODE = 0;
+
+ private final WxMaService wxMaService;
+
+ /**
+ * 拉取已绑定账号.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getBindAccount.html
+ *
+ *
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ @Override
+ public BindAccountResponse getBindAccount() throws WxErrorException {
+ return this.parse(this.wxMaService.post(WxMaApiUrlConstants.InstantDelivery.GET_BIND_ACCOUNT, "{}"),
+ BindAccountResponse.class);
+ }
+
+ /**
+ * 下配送单接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.addOrder.html
+ *
+ *
+ * @param request request
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ @Override
+ public AddOrderResponse addOrder(final AddOrderRequest request) throws WxErrorException {
+ return this.parse(this.wxMaService.post(WxMaApiUrlConstants.InstantDelivery.PlaceAnOrder.ADD_ORDER, request),
+ AddOrderResponse.class);
+ }
+
+ /**
+ * 拉取配送单信息.
+ *
+ * 商家可使用本接口查询某一配送单的配送状态,便于商家掌握配送情况。
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getOrder.html
+ *
+ *
+ * @param request request
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ @Override
+ public GetOrderResponse getOrder(final GetOrderRequest request) throws WxErrorException {
+ return this.parse(this.wxMaService.post(WxMaApiUrlConstants.InstantDelivery.GET_ORDER, request),
+ GetOrderResponse.class);
+ }
+
+ /**
+ * 取消配送单接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.cancelOrder.html
+ *
+ *
+ * @param request request
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ @Override
+ public CancelOrderResponse cancelOrder(final CancelOrderRequest request) throws WxErrorException {
+ return this.parse(this.wxMaService.post(WxMaApiUrlConstants.InstantDelivery.Cancel.CANCEL_ORDER, request),
+ CancelOrderResponse.class);
+ }
+
+ /**
+ * 异常件退回商家商家确认收货接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.abnormalConfirm.html
+ *
+ *
+ * @param request request
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ @Override
+ public AbnormalConfirmResponse abnormalConfirm(final AbnormalConfirmRequest request) throws WxErrorException {
+ return this.parse(this.wxMaService.post(WxMaApiUrlConstants.InstantDelivery.Cancel.ABNORMAL_CONFIRM, request),
+ AbnormalConfirmResponse.class);
+ }
+
+ /**
+ * 模拟配送公司更新配送单状态, 该接口只用于沙盒环境,即订单并没有真实流转到运力方.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.mockUpdateOrder.html
+ *
+ *
+ * @param request request
+ * @return 响应
+ * @throws WxErrorException 异常
+ */
+ @Override
+ public MockUpdateOrderResponse mockUpdateOrder(final MockUpdateOrderRequest request) throws WxErrorException {
+ return this.parse(this.wxMaService.post(WxMaApiUrlConstants.InstantDelivery.MOCK_UPDATE_ORDER, request),
+ MockUpdateOrderResponse.class);
+ }
+
+ /**
+ * 解析响应.
+ *
+ * @param responseContent 响应内容
+ * @param valueType 类型
+ * @param 类型
+ * @return 结果
+ * @throws WxErrorException 异常
+ */
+ private T parse(final String responseContent, final Class valueType) throws WxErrorException {
+ if (StringUtils.isBlank(responseContent)) {
+ throw new RuntimeException("the responseContent cannot be empty");
+ }
+ // 解析成Json对象
+ JsonObject jsonObject = GsonParser.parse(responseContent);
+ // 是否为微信错误响应 当 errcode==0 或者 不存在 还需要看 运力方 resultcode 状态码
+ JsonElement element = jsonObject.get(ERR_CODE);
+ // 正常响应下不会有该字段返回
+ if (!ObjectUtils.isEmpty(element) && SUCCESS_CODE != element.getAsInt()) {
+ throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
+ }
+ // 是否为运力方错误响应
+ JsonElement delivery = jsonObject.get(SF_ERR_CODE);
+ if (!ObjectUtils.isEmpty(delivery) && SUCCESS_CODE != delivery.getAsInt()) {
+ throw new WxErrorException(jsonObject.get(SF_ERR_MSG).getAsString());
+ }
+ // 解析成对应响应对象
+ return WxMaDeliveryBaseResponse.fromJson(responseContent, valueType);
+ }
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AbnormalConfirmRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AbnormalConfirmRequest.java
new file mode 100644
index 0000000000..af461e47c6
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AbnormalConfirmRequest.java
@@ -0,0 +1,43 @@
+package cn.binarywang.wx.miniapp.bean.delivery;
+
+import cn.binarywang.wx.miniapp.bean.delivery.base.WxMaDeliveryBaseRequest;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 微信小程序即时配送 异常件退回商家商家确认收货接口 请求参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:49
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class AbnormalConfirmRequest extends WxMaDeliveryBaseRequest implements Serializable {
+
+ private static final long serialVersionUID = 3773007367000633663L;
+
+ /**
+ * 配送单id.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("waybill_id")
+ private String waybillId;
+
+ /**
+ * 备注.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("remark")
+ private String remark;
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AbnormalConfirmResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AbnormalConfirmResponse.java
new file mode 100644
index 0000000000..641ab7e38b
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AbnormalConfirmResponse.java
@@ -0,0 +1,25 @@
+package cn.binarywang.wx.miniapp.bean.delivery;
+
+import cn.binarywang.wx.miniapp.bean.delivery.base.WxMaDeliveryBaseResponse;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 微信小程序即时配送 异常件退回商家商家确认收货接口 响应参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:49
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class AbnormalConfirmResponse extends WxMaDeliveryBaseResponse implements Serializable {
+
+ private static final long serialVersionUID = 3773007367000633663L;
+
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AddOrderRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AddOrderRequest.java
new file mode 100644
index 0000000000..c8a220776f
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AddOrderRequest.java
@@ -0,0 +1,639 @@
+package cn.binarywang.wx.miniapp.bean.delivery;
+
+import cn.binarywang.wx.miniapp.bean.delivery.base.WxMaDeliveryBaseRequest;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 微信小程序即时配送 下配送单接口 请求参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:49
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class AddOrderRequest extends WxMaDeliveryBaseRequest implements Serializable {
+
+ private static final long serialVersionUID = 3773007367000633663L;
+
+ /**
+ * 子商户id,区分小程序内部多个子商户.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("sub_biz_id")
+ private String subBizId;
+
+ /**
+ * 发件人信息,顺丰同城急送必须填写,美团配送、达达、闪送,若传了shop_no的值可不填该字段.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("sender")
+ private Sender sender;
+
+ /**
+ * 收件人信息.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("receiver")
+ private Receiver receiver;
+
+ /**
+ * 货物信息.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("cargo")
+ private Cargo cargo;
+
+ /**
+ * 订单信息.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("order_info")
+ private OrderInfo orderInfo;
+
+ /**
+ * 商品信息,会展示到物流通知消息中.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("shop")
+ private Shop shop;
+
+ /**
+ * 发件人信息.
+ */
+ @Data
+ @Accessors(chain = true)
+ public static class Sender implements Serializable {
+
+ private static final long serialVersionUID = -8101805250220380047L;
+
+ /**
+ * 姓名,最长不超过256个字符.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("name")
+ private String name;
+
+ /**
+ * 城市名称,如广州市.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("city")
+ private String city;
+
+ /**
+ * 地址(街道、小区、大厦等,用于定位).
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("address")
+ private String address;
+
+ /**
+ * 地址(街道、小区、大厦等,用于定位).
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("address_detail")
+ private String addressDetail;
+
+ /**
+ * 坐标类型,默认 0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("coordinate_type")
+ private int coordinateType;
+
+ /**
+ * 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("lng")
+ private BigDecimal lng;
+
+ /**
+ * 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位).
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("lat")
+ private BigDecimal lat;
+
+ /**
+ * 电话/手机号,最长不超过64个字符.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("phone")
+ private String phone;
+
+ }
+
+ /**
+ * 收件人信息.
+ */
+ @Data
+ @Accessors(chain = true)
+ public static class Receiver implements Serializable {
+
+ private static final long serialVersionUID = -8101805250220380047L;
+
+ /**
+ * 姓名,最长不超过256个字符.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("name")
+ private String name;
+
+ /**
+ * 城市名称,如广州市.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("city")
+ private String city;
+
+ /**
+ * 地址(街道、小区、大厦等,用于定位).
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("address")
+ private String address;
+
+ /**
+ * 地址(街道、小区、大厦等,用于定位).
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("address_detail")
+ private String addressDetail;
+
+ /**
+ * 坐标类型,默认 0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("coordinate_type")
+ private int coordinateType;
+
+ /**
+ * 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("lng")
+ private BigDecimal lng;
+
+ /**
+ * 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位).
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("lat")
+ private BigDecimal lat;
+
+ /**
+ * 电话/手机号,最长不超过64个字符.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("phone")
+ private String phone;
+
+ }
+
+ /**
+ * 商品信息.
+ */
+ @Data
+ @Accessors(chain = true)
+ public static class Shop implements Serializable {
+
+ private static final long serialVersionUID = -8958461649711388689L;
+
+ /**
+ * 商品数量.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("goods_count")
+ private Integer goodsCount;
+
+ /**
+ * 商品名称.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("goods_name")
+ private String goodsName;
+
+ /**
+ * 商品缩略图 url.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("img_url")
+ private String imgUrl;
+
+ /**
+ * 商家小程序的路径,建议为订单页面.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("wxa_path")
+ private String wxaPath;
+
+ /**
+ * 若结算方式为:第三方向配送公司统一结算,商户后续和第三方结算,则该参数必填.
+ * 在该结算模式下,第三方用自己的开发小程序替授权商户发起下单,并将授权小程序的appid给平台,后续配送通知中可回流授权商户小程序.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("wxa_appid")
+ private String wxaAppid;
+
+ }
+
+ /**
+ * 订单信息.
+ */
+ @Data
+ @Accessors(chain = true)
+ public static class OrderInfo implements Serializable {
+
+ private static final long serialVersionUID = 5277759430030747900L;
+
+ /**
+ * 配送服务代码 不同配送公司自定义, 顺丰和达达不填.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("delivery_service_code")
+ private String deliveryServiceCode;
+
+ /**
+ * 订单类型, 0: 即时单 1 预约单,如预约单,需要设置expected_delivery_time或expected_finish_time或expected_pick_time.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("order_type")
+ private Integer orderType;
+
+ /**
+ * 期望派单时间(达达支持,表示达达系统调度时间, 到那个时间才会有状态更新的回调通知),unix-timestamp, 比如1586342180.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("expected_delivery_time")
+ private Long expectedDeliveryTime;
+
+ /**
+ * 期望送达时间(美团、顺丰同城急送支持),unix-timestamp, 比如1586342180.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("expected_finish_time")
+ private Long expectedFinishTime;
+
+ /**
+ * 期望取件时间(闪送、顺丰同城急送支持,闪送需要设置两个小时后的时间,顺丰同城急送只需传expected_finish_time或expected_pick_time其中之一即可,同时都传则以expected_finish_time为准),unix-timestamp, 比如1586342180.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("expected_pick_time")
+ private Long expectedPickTime;
+
+ /**
+ * 备注,最长不超过200个字符.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("note")
+ private String note;
+
+ /**
+ * 门店订单流水号,建议提供,方便骑手门店取货,最长不超过32个字符.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("poi_seq")
+ private String poiSeq;
+
+ /**
+ * 用户下单付款时间, 顺丰必填, 比如1555220757.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("order_time")
+ private Long orderTime;
+
+ /**
+ * 是否保价,0:非保价,1:保价.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("is_insured")
+ private Integer isInsured;
+
+ /**
+ * 保价金额,单位为元,精确到分.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("declared_value")
+ private BigDecimal declaredValue;
+
+ /**
+ * 小费,单位为元, 下单一般不加小费.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("tips")
+ private Integer tips;
+
+ /**
+ * 是否选择直拿直送(0:不需要;1:需要。选择直拿直送后,同一时间骑手只能配送此订单至完成,配送费用也相应高一些,闪送必须选1,达达可选0或1,其余配送公司不支持直拿直送).
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("is_direct_delivery")
+ private Integer isDirectDelivery;
+
+ /**
+ * 骑手应付金额,单位为元,精确到分.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("cash_on_delivery")
+ private BigDecimal cashOnDelivery;
+
+ /**
+ * 骑手应收金额,单位为元,精确到分.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("cash_on_pickup")
+ private BigDecimal cashOnPickup;
+
+ /**
+ * 物流流向,1:从门店取件送至用户;2:从用户取件送至门店.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("rider_pick_method")
+ private Integer riderPickMethod;
+
+ /**
+ * 收货码(0:不需要;1:需要。收货码的作用是:骑手必须输入收货码才能完成订单妥投).
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("is_finish_code_needed")
+ private Integer isFinishCodeNeeded;
+
+ /**
+ * 取货码(0:不需要;1:需要。取货码的作用是:骑手必须输入取货码才能从商家取货).
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("is_pickup_code_needed")
+ private Integer isPickupCodeNeeded;
+
+ }
+
+ /**
+ * 货物信息.
+ */
+ @NoArgsConstructor
+ @Data
+ @Accessors(chain = true)
+ public static class Cargo implements Serializable {
+
+ private static final long serialVersionUID = -8339389045820636620L;
+
+ /**
+ * 货物价格,单位为元,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-5000].
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("goods_value")
+ private BigDecimal goodsValue;
+
+ /**
+ * 货物高度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-45].
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("goods_height")
+ private BigDecimal goodsHeight;
+
+ /**
+ * 货物长度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-65].
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("goods_length")
+ private BigDecimal goodsLength;
+
+ /**
+ * 货物宽度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50].
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("goods_width")
+ private BigDecimal goodsWidth;
+
+ /**
+ * 货物重量,单位为kg,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50].
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("goods_weight")
+ private BigDecimal goodsWeight;
+
+ /**
+ * 货物详情,最长不超过10240个字符.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("goods_detail")
+ private GoodsDetail goodsDetail;
+
+ /**
+ * 货物取货信息,用于骑手到店取货,最长不超过100个字符.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("goods_pickup_info")
+ private String goodsPickupInfo;
+
+ /**
+ * 货物交付信息,最长不超过100个字符.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("goods_delivery_info")
+ private String goodsDeliveryInfo;
+
+ /**
+ * 品类一级类目, 详见品类表 https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/access-guidelines/promoter/api/product/category.html.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("cargo_first_class")
+ private String cargoFirstClass;
+
+ /**
+ * 品类二级类目.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("cargo_second_class")
+ private String cargoSecondClass;
+
+ /**
+ * 货物详情.
+ */
+ @Data
+ @Accessors(chain = true)
+ public static class GoodsDetail implements Serializable {
+
+ private static final long serialVersionUID = -8339389045820636620L;
+
+ /**
+ * 货物列表.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("goods")
+ private List goods;
+
+ /**
+ * 货物详情.
+ */
+ @NoArgsConstructor
+ @Data
+ @Accessors(chain = true)
+ public static class Goods implements Serializable {
+
+ private static final long serialVersionUID = -8339389045820636620L;
+
+ /**
+ * 货物数量.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("good_count")
+ private Integer goodCount;
+
+ /**
+ * 货品名称.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("good_name")
+ private String goodName;
+
+ /**
+ * 货品单价,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数).
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("good_price")
+ private BigDecimal goodPrice;
+
+ /**
+ * 货品单位,最长不超过20个字符.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("good_unit")
+ private String goodUnit;
+
+ }
+
+ }
+
+ }
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AddOrderResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AddOrderResponse.java
new file mode 100644
index 0000000000..5f56b007b3
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/AddOrderResponse.java
@@ -0,0 +1,92 @@
+package cn.binarywang.wx.miniapp.bean.delivery;
+
+import cn.binarywang.wx.miniapp.bean.delivery.base.WxMaDeliveryBaseResponse;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 微信小程序即时配送 下配送单接口 响应参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:49
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class AddOrderResponse extends WxMaDeliveryBaseResponse implements Serializable {
+
+ private static final long serialVersionUID = 3773007367000633663L;
+
+ /**
+ * 实际运费(单位:元),运费减去优惠券费用.
+ */
+ @SerializedName("fee")
+ private BigDecimal fee;
+
+ /**
+ * 运费(单位:元).
+ */
+ @SerializedName("deliverfee")
+ private BigDecimal deliverFee;
+
+ /**
+ * 优惠券费用(单位:元).
+ */
+ @SerializedName("couponfee")
+ private BigDecimal couponFee;
+
+ /**
+ * 小费(单位:元).
+ */
+ @SerializedName("tips")
+ private BigDecimal tips;
+
+ /**
+ * 保价费(单位:元).
+ */
+ @SerializedName("insurancfee")
+ private BigDecimal insurancFee;
+
+ /**
+ * 配送距离(整数单位:米).
+ */
+ @SerializedName("distance")
+ private BigDecimal distance;
+
+ /**
+ * 配送单号.
+ */
+ @SerializedName("waybill_id")
+ private String waybillId;
+
+ /**
+ * 配送状态.
+ */
+ @SerializedName("order_status")
+ private Integer orderStatus;
+
+ /**
+ * 收货码.
+ */
+ @SerializedName("finish_code")
+ private Integer finishCode;
+
+ /**
+ * 取货码.
+ */
+ @SerializedName("pickup_code")
+ private Integer pickupCode;
+
+ /**
+ * 预计骑手接单时间,单位秒,比如5分钟,就填300, 无法预计填0.
+ */
+ @SerializedName("dispatch_duration")
+ private BigDecimal dispatchDuration;
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/BindAccountResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/BindAccountResponse.java
new file mode 100644
index 0000000000..0afb174eb8
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/BindAccountResponse.java
@@ -0,0 +1,66 @@
+package cn.binarywang.wx.miniapp.bean.delivery;
+
+import cn.binarywang.wx.miniapp.bean.delivery.base.WxMaDeliveryBaseResponse;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 微信小程序即时配送 拉取已绑定账号 响应参数.
+ *
+ * 使用场景:
+ * 1.商家可通过本接口查询自己已经在小程序后台绑定的和配送公司签约的账号;
+ * 2.服务商可通过本接口查询代开发的小程序在小程序后台绑定的和配送公司签约的账号,为其完成后续的接口代开发业务;
+ *
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:49
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class BindAccountResponse extends WxMaDeliveryBaseResponse implements Serializable {
+
+ private static final long serialVersionUID = 3773007367000633663L;
+
+ /**
+ * 店铺账号信息集合.
+ */
+ @SerializedName("shop_list")
+ private List shopList;
+
+ /**
+ * 店铺账号信息.
+ */
+ @Data
+ @Accessors(chain = true)
+ public static class Shop implements Serializable {
+
+ private static final long serialVersionUID = -3759074878713856529L;
+
+ /**
+ * 配送公司Id.
+ */
+ @SerializedName("delivery_id")
+ private String deliveryId;
+
+ /**
+ * 商家id.
+ */
+ @SerializedName("shopid")
+ private String shopId;
+
+ /**
+ * 审核状态 0:审核通过、1:审核中、2:审核不通过.
+ */
+ @SerializedName("audit_result")
+ private String auditResult;
+
+ }
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/CancelOrderRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/CancelOrderRequest.java
new file mode 100644
index 0000000000..1220e08072
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/CancelOrderRequest.java
@@ -0,0 +1,52 @@
+package cn.binarywang.wx.miniapp.bean.delivery;
+
+import cn.binarywang.wx.miniapp.bean.delivery.base.WxMaDeliveryBaseRequest;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 微信小程序即时配送 取消配送单接口 请求参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:49
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class CancelOrderRequest extends WxMaDeliveryBaseRequest implements Serializable {
+
+ private static final long serialVersionUID = 3773007367000633663L;
+
+ /**
+ * 配送单id.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("waybill_id")
+ private String waybillId;
+
+ /**
+ * 取消原因Id.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("cancel_reason_id")
+ private Integer cancelReasonId;
+
+ /**
+ * 取消原因.
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("cancel_reason")
+ private String cancelReason;
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/CancelOrderResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/CancelOrderResponse.java
new file mode 100644
index 0000000000..a556fba99a
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/CancelOrderResponse.java
@@ -0,0 +1,38 @@
+package cn.binarywang.wx.miniapp.bean.delivery;
+
+import cn.binarywang.wx.miniapp.bean.delivery.base.WxMaDeliveryBaseResponse;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 微信小程序即时配送 取消配送单接口 响应参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:49
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class CancelOrderResponse extends WxMaDeliveryBaseResponse implements Serializable {
+
+ private static final long serialVersionUID = 3773007367000633663L;
+
+ /**
+ * 扣除的违约金(单位:元),精确到分.
+ */
+ @SerializedName("deduct_fee")
+ private BigDecimal deductFee;
+
+ /**
+ * 说明.
+ */
+ @SerializedName("desc")
+ private String desc;
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/GetOrderRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/GetOrderRequest.java
new file mode 100644
index 0000000000..9927ee06d0
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/GetOrderRequest.java
@@ -0,0 +1,24 @@
+package cn.binarywang.wx.miniapp.bean.delivery;
+
+import cn.binarywang.wx.miniapp.bean.delivery.base.WxMaDeliveryBaseRequest;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 微信小程序即时配送 拉取配送单信息 请求参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:49
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class GetOrderRequest extends WxMaDeliveryBaseRequest implements Serializable {
+
+ private static final long serialVersionUID = 3773007367000633663L;
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/GetOrderResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/GetOrderResponse.java
new file mode 100644
index 0000000000..ec06026a04
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/GetOrderResponse.java
@@ -0,0 +1,68 @@
+package cn.binarywang.wx.miniapp.bean.delivery;
+
+import cn.binarywang.wx.miniapp.bean.delivery.base.WxMaDeliveryBaseResponse;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 微信小程序即时配送 拉取配送单信息 响应参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:49
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class GetOrderResponse extends WxMaDeliveryBaseResponse implements Serializable {
+
+ private static final long serialVersionUID = 3773007367000633663L;
+
+ /**
+ * 配送状态.
+ */
+ @SerializedName("order_status")
+ private Integer orderStatus;
+
+ /**
+ * 配送单号.
+ */
+ @SerializedName("waybill_id")
+ private String waybillId;
+
+ /**
+ * 骑手姓名.
+ */
+ @SerializedName("rider_name")
+ private String riderName;
+
+ /**
+ * 骑手电话.
+ */
+ @SerializedName("rider_phone")
+ private String riderPhone;
+
+ /**
+ * 骑手位置经度, 配送中时返回.
+ */
+ @SerializedName("rider_lng")
+ private BigDecimal riderLng;
+
+ /**
+ * 骑手位置纬度, 配送中时返回.
+ */
+ @SerializedName("rider_lat")
+ private BigDecimal riderLat;
+
+ /**
+ * 预计还剩多久送达时间, 配送中时返回,单位秒, 已取货配送中需返回,比如5分钟后送达,填300.
+ */
+ @SerializedName("reach_time")
+ private BigDecimal reachTime;
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/MockUpdateOrderRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/MockUpdateOrderRequest.java
new file mode 100644
index 0000000000..1adf020281
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/MockUpdateOrderRequest.java
@@ -0,0 +1,58 @@
+package cn.binarywang.wx.miniapp.bean.delivery;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 微信小程序即时配送 模拟配送公司更新配送单状态 请求参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:49
+ */
+@Data
+@Accessors(chain = true)
+public class MockUpdateOrderRequest implements Serializable {
+
+ private static final long serialVersionUID = 3773007367000633663L;
+
+ /**
+ * 商家id, 必须是 "test_shop_id".
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("shopid")
+ private String shopId = "test_shop_id";
+
+ /**
+ * 唯一标识订单的 ID,由商户生成.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("shop_order_id")
+ private String shopOrderId;
+
+ /**
+ * 状态变更时间点,Unix秒级时间戳.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("action_time")
+ private Long actionTime;
+
+ /**
+ * 配送状态,枚举值.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("order_status")
+ private Integer orderStatus;
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/MockUpdateOrderResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/MockUpdateOrderResponse.java
new file mode 100644
index 0000000000..de861493ed
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/MockUpdateOrderResponse.java
@@ -0,0 +1,25 @@
+package cn.binarywang.wx.miniapp.bean.delivery;
+
+import cn.binarywang.wx.miniapp.bean.delivery.base.WxMaDeliveryBaseResponse;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 微信小程序即时配送 模拟配送公司更新配送单状态 响应参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:49
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class MockUpdateOrderResponse extends WxMaDeliveryBaseResponse implements Serializable {
+
+ private static final long serialVersionUID = 3773007367000633663L;
+
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/base/WxMaDeliveryBaseRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/base/WxMaDeliveryBaseRequest.java
new file mode 100644
index 0000000000..a139ea9076
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/base/WxMaDeliveryBaseRequest.java
@@ -0,0 +1,119 @@
+package cn.binarywang.wx.miniapp.bean.delivery.base;
+
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+import lombok.AccessLevel;
+import lombok.Data;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+
+/**
+ * 微信小程序 即时配送 基础请求参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:36
+ */
+@Data
+@Accessors(chain = true)
+public abstract class WxMaDeliveryBaseRequest implements Serializable {
+
+ private static final long serialVersionUID = -6811550517417623460L;
+
+ /**
+ * 配送公司ID.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("delivery_id")
+ private String deliveryId;
+
+ /**
+ * 唯一标识订单的 ID,由商户生成, 不超过 128 字节.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("shop_order_id")
+ private String shopOrderId;
+
+ /**
+ * 下单用户的openid.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("openid")
+ private String openid;
+
+ /**
+ * 商家门店编号,在配送公司登记,如果只有一个门店,美团闪送必填, 值为店铺id.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("shop_no")
+ private String shopNo;
+
+ /**
+ * 商家id,由配送公司分配的appKey.
+ *
+ * 是否必填:是
+ *
+ */
+ @SerializedName("shopid")
+ private String shopId;
+
+ /**
+ * 用配送公司提供的appSecret加密的校验串.
+ *
+ * 除了平台本身的加解密和签名,和订单相关的请求还需要带上运力侧签名delivery_sign,签名规则为
+ * 如果接口请求里有字段shop_order_id ,则delivery_sign=SHA1(shopid + shop_order_id + AppSecret),其中shopid对应运力侧的appkey,shop_order_id对应订单id,AppSecret即配送公司帐号对应的秘钥
+ * 如果请求里没有字段shop_order_id ,则delivery_sign=SHA1(shopid + AppSecret),其中shopid对应运力侧的appkey,AppSecret即配送公司帐号对应的秘钥
+ * 示例:shopid=“test_shop_id”,shop_order_id =“test_shop_order_id”, AppSecret=“test_app_secrect”,则delivery_sign=“a93d8d6bae9a9483c1b1d4e8670e7f6226ec94cb”
+ * 是否必填:是
+ *
+ */
+ @Setter(AccessLevel.NONE)
+ @SerializedName("delivery_sign")
+ private String deliverySign;
+
+ /**
+ * 配送公司分配的appSecret.
+ *
+ * 是否必填:是
+ *
+ */
+ @Expose
+ private String appSecret;
+
+ /**
+ * 获取签名.
+ *
+ * 除了平台本身的加解密和签名,和订单相关的请求还需要带上运力侧签名delivery_sign,签名规则为
+ * 如果接口请求里有字段shop_order_id ,则delivery_sign=SHA1(shopid + shop_order_id + AppSecret),其中shopid对应运力侧的appkey,shop_order_id对应订单id,AppSecret即配送公司帐号对应的秘钥
+ * 如果请求里没有字段shop_order_id ,则delivery_sign=SHA1(shopid + AppSecret),其中shopid对应运力侧的appkey,AppSecret即配送公司帐号对应的秘钥
+ * 示例:shopid=“test_shop_id”,shop_order_id =“test_shop_order_id”, AppSecret=“test_app_secrect”,则delivery_sign=“a93d8d6bae9a9483c1b1d4e8670e7f6226ec94cb”
+ * 是否必填:是
+ *
+ *
+ * @return 结果
+ */
+ public String getDeliverySign() {
+ if (StringUtils.isBlank(getShopId()) || StringUtils.isBlank(getAppSecret())) {
+ throw new RuntimeException("shopId or appSecret can not be empty");
+ }
+ String str = getShopId();
+ if (StringUtils.isNotBlank(getShopOrderId())) {
+ str = str.concat(getShopOrderId());
+ }
+ str = str.concat(getAppSecret());
+ return DigestUtils.sha1Hex(str);
+ }
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/base/WxMaDeliveryBaseResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/base/WxMaDeliveryBaseResponse.java
new file mode 100644
index 0000000000..38f354bb74
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/delivery/base/WxMaDeliveryBaseResponse.java
@@ -0,0 +1,66 @@
+package cn.binarywang.wx.miniapp.bean.delivery.base;
+
+import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+
+/**
+ * 微信小程序 即时配送 基础响应参数.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 10:36
+ */
+@Data
+@Accessors(chain = true)
+public abstract class WxMaDeliveryBaseResponse implements Serializable {
+
+ private static final long serialVersionUID = -6811550517417623460L;
+
+ /**
+ * 成功状态码.
+ */
+ private static final int SUCCESS_CODE = 0;
+
+ /**
+ * 运力返回的错误码.
+ */
+ @SerializedName("resultcode")
+ private Integer resultCode;
+
+ /**
+ * 运力返回的错误描述.
+ */
+ @SerializedName("resultmsg")
+ private String resultMsg;
+
+ /**
+ * 是否响应成功.
+ *
+ * @return true:成功、false:失败
+ */
+ public boolean success() {
+ return SUCCESS_CODE == getResultCode();
+ }
+
+ /**
+ * 解析响应.
+ *
+ * @param json 响应内容
+ * @param valueType 类型
+ * @param 类型
+ * @return 结果
+ */
+ public static T fromJson(final String json, final Class valueType) {
+ if (StringUtils.isBlank(json)) {
+ throw new RuntimeException("the json cannot be empty");
+ }
+ // 解析成对应响应对象
+ return WxMaGsonBuilder.create().fromJson(json, valueType);
+ }
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
index ae57072068..5d4379b9d1 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
@@ -411,4 +411,118 @@ public interface DeviceSubscribe {
*/
String SEND_DEVICE_SUBSCRIBE_MSG_URL = "https://api.weixin.qq.com/cgi-bin/message/device/subscribe/send";
}
+
+ /**
+ * 即时配送相关接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/immediate-delivery/overview.html
+ *
+ */
+ public interface InstantDelivery {
+
+ /**
+ * 拉取已绑定账号.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getBindAccount.html
+ *
+ */
+ String GET_BIND_ACCOUNT = "https://api.weixin.qq.com/cgi-bin/express/local/business/shop/get";
+
+ /**
+ * 拉取配送单信息.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getOrder.html
+ *
+ */
+ String GET_ORDER = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/get";
+
+ /**
+ * 模拟配送公司更新配送单状态.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.mockUpdateOrder.html
+ *
+ */
+ String MOCK_UPDATE_ORDER = "https://api.weixin.qq.com/cgi-bin/express/local/business/test_update_order";
+
+ /**
+ * 下单接口.
+ */
+ interface PlaceAnOrder {
+
+ /**
+ * 获取已支持的配送公司列表接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getAllImmeDelivery.html
+ *
+ */
+ String GET_ALL_IMME_DELIVERY = "https://api.weixin.qq.com/cgi-bin/express/local/business/delivery/getall";
+
+ /**
+ * 预下配送单接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.preAddOrder.html
+ *
+ */
+ String PRE_ADD_ORDER = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/pre_add";
+
+ /**
+ * 下配送单接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.addOrder.html
+ *
+ */
+ String ADD_ORDER = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/add";
+
+ /**
+ * 重新下单.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.reOrder.html
+ *
+ */
+ String RE_ORDER = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/readd";
+
+ /**
+ * 增加小费.
+ *
+ * 可以对待接单状态的订单增加小费。需要注意:订单的小费,以最新一次加小费动作的金额为准,故下一次增加小费额必须大于上一次小费额.
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.addTip.html
+ *
+ */
+ String ADD_TIP = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/addtips";
+
+ }
+
+ /**
+ * 取消接口.
+ */
+ interface Cancel {
+
+ /**
+ * 预取消配送单接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.preCancelOrder.html
+ *
+ */
+ String PRE_CANCEL_ORDER = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/precancel";
+
+ /**
+ * 取消配送单接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.cancelOrder.html
+ *
+ */
+ String CANCEL_ORDER = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/cancel";
+
+ /**
+ * 异常件退回商家商家确认收货接口.
+ *
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.abnormalConfirm.html
+ *
+ */
+ String ABNORMAL_CONFIRM = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/confirm_return";
+
+ }
+
+ }
+
}
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaImmediateDeliveryServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaImmediateDeliveryServiceImplTest.java
new file mode 100644
index 0000000000..739bc998ff
--- /dev/null
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaImmediateDeliveryServiceImplTest.java
@@ -0,0 +1,203 @@
+package cn.binarywang.wx.miniapp.api.impl;
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.delivery.AbnormalConfirmRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.AbnormalConfirmResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.AddOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.AddOrderResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.BindAccountResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.CancelOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.CancelOrderResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.GetOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.GetOrderResponse;
+import cn.binarywang.wx.miniapp.bean.delivery.MockUpdateOrderRequest;
+import cn.binarywang.wx.miniapp.bean.delivery.MockUpdateOrderResponse;
+import cn.binarywang.wx.miniapp.test.ApiTestModule;
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+import me.chanjar.weixin.common.error.WxErrorException;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import java.math.BigDecimal;
+
+/**
+ * 微信小程序即时配送服务测试.
+ *
+ * @author Luo
+ * @version 1.0
+ * @date 2021-10-14 11:48
+ */
+@Guice(modules = ApiTestModule.class)
+public class WxMaImmediateDeliveryServiceImplTest {
+
+ /**
+ * 对应配送公司的appKey.
+ */
+ private static final String SHOP_ID = "***";
+
+ /**
+ * 对应配送公司appSecret.
+ */
+ private static final String APP_SECRET = "****";
+
+ /**
+ * 商家门店编号.
+ */
+ private static final String SHOP_NO = "***";
+
+ /**
+ * 快递公司Id.
+ */
+ private static final String DELIVERY_ID = "SFTC";
+
+ @Inject
+ private WxMaService wxMaService;
+
+ /**
+ * 测试拉取已绑定账号接口.
+ *
+ * @throws WxErrorException 异常
+ */
+ @Test
+ public void testGetBindAccount() throws WxErrorException {
+ BindAccountResponse response = wxMaService.getWxMaImmediateDeliveryService().getBindAccount();
+ System.out.println("response = " + response);
+ }
+
+ /**
+ * 测试下配送单接口.
+ *
+ * @throws WxErrorException 异常
+ */
+ @Test
+ public void testAddOrder() throws WxErrorException {
+ AddOrderRequest request = new AddOrderRequest();
+ // 下单用户的openid
+ request.setOpenid("*****");
+ // 微信平台字段,对应配送公司的appkey
+ request.setShopId(SHOP_ID);
+ // 对应配送公司appSecret
+ request.setAppSecret(APP_SECRET);
+ // 商家门店编号,在配送公司登记,如果只有一个门店,美团闪送必填, 值为店铺id
+ // 商家对不同门店进行的编号,需要在配送公司系统有过登记,比如商家自己门店系统中有100个门店,编号是1-100,在顺丰同城的系统中有登记过这100个门店,且在顺丰同城登记的编号也是1-100,那么下单的时候传shop_no
+ // =1,就是编号为1 的门店下的配送单
+ request.setShopNo(SHOP_NO);
+ // 配送公司Id
+ request.setDeliveryId(DELIVERY_ID);
+ // 唯一标识订单的 ID,由商户生成, 不超过 128 字节
+ String shopOrderId = String.valueOf(System.currentTimeMillis());
+ request.setShopOrderId(shopOrderId);
+
+ // 订单信息
+ AddOrderRequest.OrderInfo orderInfo = new AddOrderRequest.OrderInfo();
+ orderInfo.setOrderTime(System.currentTimeMillis() / 1000L);
+ request.setOrderInfo(orderInfo);
+
+ // 发件人信息
+ AddOrderRequest.Sender sender = new AddOrderRequest.Sender();
+ sender.setCity("上海市").setAddress("***").setAddressDetail("****");
+ sender.setName("***").setPhone("166****8829");
+ sender.setLng(new BigDecimal("121.281379")).setLat(new BigDecimal("31.049363"));
+ request.setSender(sender);
+
+ // 收件人信息
+ AddOrderRequest.Receiver receiver = new AddOrderRequest.Receiver().setCoordinateType(1);
+ receiver.setCity("北京市").setAddress("海淀区").setAddressDetail("北京市海淀区学清嘉创大厦A座15层");
+ receiver.setName("顺丰同城").setPhone("166****8829");
+ receiver.setLng(new BigDecimal("116.359442")).setLat(new BigDecimal("40.020407"));
+ request.setReceiver(receiver);
+
+ // 商品信息
+ AddOrderRequest.Cargo cargo = new AddOrderRequest.Cargo();
+ cargo.setCargoFirstClass("电商").setCargoSecondClass("线上商城");
+ cargo.setGoodsHeight(BigDecimal.valueOf(1)).setGoodsLength(BigDecimal.valueOf(3));
+ cargo.setGoodsValue(BigDecimal.valueOf(5)).setGoodsWeight(BigDecimal.valueOf(1)).setGoodsWidth(BigDecimal.valueOf(2));
+ // 商品列表
+ AddOrderRequest.Cargo.GoodsDetail goodsDetail = new AddOrderRequest.Cargo.GoodsDetail();
+ AddOrderRequest.Cargo.GoodsDetail.Goods goods1 = new AddOrderRequest.Cargo.GoodsDetail.Goods();
+ goods1.setGoodCount(1).setGoodName("水果").setGoodPrice(new BigDecimal(10));
+ AddOrderRequest.Cargo.GoodsDetail.Goods goods2 = new AddOrderRequest.Cargo.GoodsDetail.Goods();
+ goods2.setGoodCount(2).setGoodName("蔬菜").setGoodPrice(new BigDecimal(20));
+ goodsDetail.setGoods(Lists.newArrayList(goods1, goods2));
+ cargo.setGoodsDetail(goodsDetail);
+ request.setCargo(cargo);
+
+ // 店铺信息
+ AddOrderRequest.Shop shop = new AddOrderRequest.Shop();
+ int sum =
+ request.getCargo().getGoodsDetail().getGoods().stream().mapToInt(AddOrderRequest.Cargo.GoodsDetail.Goods::getGoodCount).sum();
+ shop.setGoodsCount(sum).setGoodsName("商品");
+ shop.setImgUrl("https://").setWxaPath("pages/index/index");
+ request.setShop(shop);
+
+ AddOrderResponse response = wxMaService.getWxMaImmediateDeliveryService().addOrder(request);
+ System.out.println("response = " + response);
+
+ }
+
+ /**
+ * 测试拉取配送单信息接口.
+ *
+ * @throws WxErrorException 异常
+ */
+ @Test
+ public void testGetOrder() throws WxErrorException {
+ GetOrderRequest request = new GetOrderRequest();
+ request.setShopId(SHOP_ID).setShopNo(SHOP_NO).setAppSecret(APP_SECRET);
+ request.setShopOrderId("1561399675737608193");
+ GetOrderResponse response = wxMaService.getWxMaImmediateDeliveryService().getOrder(request);
+ System.out.println("response = " + response);
+ }
+
+ /**
+ * 测试取消配送单信息接口.
+ *
+ * @throws WxErrorException 异常
+ */
+ @Test
+ public void testCancelOrder() throws WxErrorException {
+ CancelOrderRequest request = new CancelOrderRequest();
+ request.setShopId(SHOP_ID).setShopNo(SHOP_NO).setAppSecret(APP_SECRET);
+ request.setDeliveryId(DELIVERY_ID);
+ request.setCancelReasonId(1);
+ request.setShopOrderId("1560365275348471809");
+ request.setWaybillId("3427365636312065025");
+ CancelOrderResponse response = wxMaService.getWxMaImmediateDeliveryService().cancelOrder(request);
+ System.out.println("response = " + response);
+ }
+
+ /**
+ * 测试异常件退回商家商家确认收货接口.
+ *
+ * @throws WxErrorException 异常
+ */
+ @Test
+ public void testAbnormalConfirm() throws WxErrorException {
+ AbnormalConfirmRequest request = new AbnormalConfirmRequest();
+ request.setShopId(SHOP_ID).setShopNo(SHOP_NO).setAppSecret(APP_SECRET);
+ request.setDeliveryId(DELIVERY_ID);
+ request.setShopOrderId("1561399675737608193");
+ request.setWaybillId("3427882855372591617");
+ request.setRemark("测试签收异常订单");
+ AbnormalConfirmResponse response = wxMaService.getWxMaImmediateDeliveryService().abnormalConfirm(request);
+ System.out.println("response = " + response);
+ }
+
+ /**
+ * 测试模拟配送公司更新配送单状态接口.
+ *
+ * @throws WxErrorException 异常
+ */
+ @Test
+ public void testMockUpdateOrder() throws WxErrorException {
+ // 请求参数
+ MockUpdateOrderRequest request = new MockUpdateOrderRequest();
+ request.setActionTime(System.currentTimeMillis() / 1000L);
+ request.setOrderStatus(102);
+ request.setShopOrderId("");
+ MockUpdateOrderResponse response = wxMaService.getWxMaImmediateDeliveryService().mockUpdateOrder(request);
+ System.out.println("response = " + response);
+ }
+
+}
From 6bccbf5fc333ca1484ec782fda06e0047bc71e36 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Wed, 19 Jan 2022 20:31:35 +0800
Subject: [PATCH 0034/1155] Update README.md
---
README.md | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/README.md b/README.md
index d8fd00b97a..d31f0beb06 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,7 @@
- 赞助商招募中,欢迎联系洽谈
+ 赞助商招募中,欢迎微信联系洽谈
@@ -39,13 +39,14 @@
### 重要信息
-1. **2021-11-01 发布 [【4.2.0正式版】](https://mp.weixin.qq.com/s/nIk_xOf6dxkhKfqq830Cuw)**!
-2. 贡献源码,请参考视频:[【贡献源码全过程(上集)】](https://mp.weixin.qq.com/s/3xUZSATWwHR_gZZm207h7Q)、[【贡献源码全过程(下集)】](https://mp.weixin.qq.com/s/nyzJwVVoYSJ4hSbwyvTx9A) ,友情提供:[程序员小山与Bug](https://space.bilibili.com/473631007)
-3. 新手重要提示:本项目仅是一个SDK开发工具包,未提供Web实现,建议使用 `maven` 或 `gradle` 引用本项目即可使用本SDK提供的各种功能,详情可参考 **[【Demo项目】](demo.md)** 或本项目中的部分单元测试代码;另外微信开发新手请务必阅读[【开发文档 Wiki 首页】](https://github.com/Wechat-Group/WxJava/wiki)的常见问题部分,可以少走很多弯路,节省不少时间。
-4. 技术交流群:想获得QQ群/微信群/钉钉企业群等信息的同学,请使用微信扫描上面的微信公众号二维码关注 `WxJava` 后点击相关菜单即可获取加入方式,同时也可以在微信中搜索 `weixin-java-tools` 或 `WxJava` 后选择正确的公众号进行关注,该公众号会及时通知SDK相关更新信息,并不定期分享微信Java开发相关技术知识;
-5. 钉钉技术交流群:`32206329`(技术交流2群), `30294972`(技术交流1群,目前已满),`35724728`(通知群,实时通知Github项目变更记录)。
-6. 微信开发新手或者Java开发新手在群内提问或新开Issue提问前,请先阅读[【提问的智慧】](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md),并确保已查阅过 [【开发文档Wiki】](https://github.com/wechat-group/WxJava/wiki) ,避免浪费大家的宝贵时间;
-7. 寻求帮助时需贴代码或大长串异常信息的,请利用 http://paste.ubuntu.com
+1. 项目合作洽谈,请联系微信`binary0000`(在微信里自行搜索并添加好友即可,请注明来意)。
+2. **2021-11-01 发布 [【4.2.0正式版】](https://mp.weixin.qq.com/s/nIk_xOf6dxkhKfqq830Cuw)**!
+3. 贡献源码可以参考视频:[【贡献源码全过程(上集)】](https://mp.weixin.qq.com/s/3xUZSATWwHR_gZZm207h7Q)、[【贡献源码全过程(下集)】](https://mp.weixin.qq.com/s/nyzJwVVoYSJ4hSbwyvTx9A) ,友情提供:[程序员小山与Bug](https://space.bilibili.com/473631007)
+4. 新手重要提示:本项目仅是一个SDK开发工具包,未提供Web实现,建议使用 `maven` 或 `gradle` 引用本项目即可使用本SDK提供的各种功能,详情可参考 **[【Demo项目】](demo.md)** 或本项目中的部分单元测试代码;另外微信开发新手请务必阅读[【开发文档 Wiki 首页】](https://github.com/Wechat-Group/WxJava/wiki)的常见问题部分,可以少走很多弯路,节省不少时间。
+5. 技术交流群:想获得QQ群/微信群/钉钉企业群等信息的同学,请使用微信扫描上面的微信公众号二维码关注 `WxJava` 后点击相关菜单即可获取加入方式,同时也可以在微信中搜索 `weixin-java-tools` 或 `WxJava` 后选择正确的公众号进行关注,该公众号会及时通知SDK相关更新信息,并不定期分享微信Java开发相关技术知识;
+6. 钉钉技术交流群:`32206329`(技术交流2群), `30294972`(技术交流1群,目前已满),`35724728`(通知群,实时通知Github项目变更记录)。
+7. 微信开发新手或者Java开发新手在群内提问或新开Issue提问前,请先阅读[【提问的智慧】](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md),并确保已查阅过 [【开发文档Wiki】](https://github.com/wechat-group/WxJava/wiki) ,避免浪费大家的宝贵时间;
+8. 寻求帮助时需贴代码或大长串异常信息的,请利用 http://paste.ubuntu.com
--------------------------------
### 其他说明
From 31efa1ad66165b57f7d77be84fddec65be6e60a6 Mon Sep 17 00:00:00 2001
From: JCLee <452415615@qq.com>
Date: Thu, 20 Jan 2022 12:04:09 +0800
Subject: [PATCH 0035/1155] =?UTF-8?q?:art:=20#2511=E3=80=90=E5=85=AC?=
=?UTF-8?q?=E4=BC=97=E5=8F=B7=E3=80=91=E8=8D=89=E7=A8=BF=E7=AE=B1=E8=8E=B7?=
=?UTF-8?q?=E5=8F=96=E5=9B=BE=E6=96=87=E7=B4=A0=E6=9D=90=E5=AE=9E=E4=BD=93?=
=?UTF-8?q?=E7=B1=BB=E5=A2=9E=E5=8A=A0=E5=9B=BE=E6=96=87=E6=B6=88=E6=81=AF?=
=?UTF-8?q?=E7=B4=A0=E6=9D=90=E7=9A=84=E6=9C=80=E5=90=8E=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E6=97=B6=E9=97=B4=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/me/chanjar/weixin/mp/bean/draft/WxMpDraftItem.java | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/draft/WxMpDraftItem.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/draft/WxMpDraftItem.java
index 05294cade5..0ae42b17f7 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/draft/WxMpDraftItem.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/draft/WxMpDraftItem.java
@@ -27,6 +27,12 @@ public class WxMpDraftItem implements Serializable {
@SerializedName("content")
private WxMpDraftInfo content;
+ /**
+ * 本草稿的图文消息素材的最后更新时间
+ */
+ @SerializedName("update_time")
+ private Long updateTime;
+
public static WxMpDraftItem fromJson(String json) {
return WxGsonBuilder.create().fromJson(json, WxMpDraftItem.class);
}
From 649af3e4bd2ebb3a3493db2485471c2eda342850 Mon Sep 17 00:00:00 2001
From: ichengzi
Date: Thu, 20 Jan 2022 12:05:12 +0800
Subject: [PATCH 0036/1155] =?UTF-8?q?:art:=20=E9=94=99=E8=AF=AF=E7=A0=81?=
=?UTF-8?q?=E4=B8=AD=E6=96=87=E5=90=AB=E4=B9=89=E5=8C=B9=E9=85=8D=E4=BC=98?=
=?UTF-8?q?=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../weixin/common/error/WxCpErrorMsgEnum.java | 31 +++++++++++--------
.../weixin/common/error/WxMaErrorMsgEnum.java | 19 +++++++-----
.../weixin/common/error/WxMpErrorMsgEnum.java | 23 ++++++++------
3 files changed, 44 insertions(+), 29 deletions(-)
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxCpErrorMsgEnum.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxCpErrorMsgEnum.java
index c742959bb6..61b863bf1a 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxCpErrorMsgEnum.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxCpErrorMsgEnum.java
@@ -1,7 +1,10 @@
package me.chanjar.weixin.common.error;
+import com.google.common.collect.Maps;
import lombok.Getter;
+import java.util.Map;
+
/**
*
* 企业微信全局错误码.
@@ -1072,7 +1075,7 @@ public enum WxCpErrorMsgEnum {
/**
* 提交审批单请求参数错误
*/
- CODE_301025(301025,"提交审批单请求参数错误"),
+ CODE_301025(301025, "提交审批单请求参数错误"),
/**
* 不允许更新该用户的userid.
*/
@@ -1080,15 +1083,15 @@ public enum WxCpErrorMsgEnum {
/**
* 无审批应用权限,或者提单者不在审批应用/自建应用的可见范围
*/
- CODE_301055(301055,"无审批应用权限,或者提单者不在审批应用/自建应用的可见范围"),
+ CODE_301055(301055, "无审批应用权限,或者提单者不在审批应用/自建应用的可见范围"),
/**
* 审批应用已停用
*/
- CODE_301056(301056,"审批应用已停用"),
+ CODE_301056(301056, "审批应用已停用"),
/**
* 通用错误码,提交审批单内部接口失败
*/
- CODE_301057(301057,"通用错误码,提交审批单内部接口失败"),
+ CODE_301057(301057, "通用错误码,提交审批单内部接口失败"),
/**
* 批量导入任务的文件中userid有重复.
*/
@@ -1114,24 +1117,26 @@ public enum WxCpErrorMsgEnum {
*/
CODE_2000002(2000002, "CorpId参数无效;指定的CorpId不存在");
- private int code;
- private String msg;
+ private final int code;
+ private final String msg;
WxCpErrorMsgEnum(int code, String msg) {
this.code = code;
this.msg = msg;
}
+ static final Map valueMap = Maps.newHashMap();
+
+ static {
+ for (WxCpErrorMsgEnum value : WxCpErrorMsgEnum.values()) {
+ valueMap.put(value.code, value.msg);
+ }
+ }
+
/**
* 通过错误代码查找其中文含义..
*/
public static String findMsgByCode(int code) {
- for (WxCpErrorMsgEnum value : WxCpErrorMsgEnum.values()) {
- if (value.code == code) {
- return value.msg;
- }
- }
-
- return null;
+ return valueMap.getOrDefault(code, null);
}
}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMaErrorMsgEnum.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMaErrorMsgEnum.java
index 18da513480..10cbe5436f 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMaErrorMsgEnum.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMaErrorMsgEnum.java
@@ -1,7 +1,10 @@
package me.chanjar.weixin.common.error;
+import com.google.common.collect.Maps;
import lombok.Getter;
+import java.util.Map;
+
/**
* 微信小程序错误码
*
@@ -664,16 +667,18 @@ public enum WxMaErrorMsgEnum {
this.msg = msg;
}
+ static final Map valueMap = Maps.newHashMap();
+
+ static {
+ for (WxMaErrorMsgEnum value : WxMaErrorMsgEnum.values()) {
+ valueMap.put(value.code, value.msg);
+ }
+ }
+
/**
* 通过错误代码查找其中文含义.
*/
public static String findMsgByCode(int code) {
- for (WxMaErrorMsgEnum value : WxMaErrorMsgEnum.values()) {
- if (value.code == code) {
- return value.msg;
- }
- }
-
- return null;
+ return valueMap.getOrDefault(code, null);
}
}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java
index 58dc4f345d..56cce6b598 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java
@@ -1,7 +1,10 @@
package me.chanjar.weixin.common.error;
+import com.google.common.collect.Maps;
import lombok.Getter;
+import java.util.Map;
+
/**
*
* 微信公众平台全局返回码.
@@ -648,24 +651,26 @@ public enum WxMpErrorMsgEnum {
*/
CODE_45084(45084, "没有设置 speed 参数");
- private int code;
- private String msg;
+ private final int code;
+ private final String msg;
WxMpErrorMsgEnum(int code, String msg) {
this.code = code;
this.msg = msg;
}
+ static final Map valueMap = Maps.newHashMap();
+
+ static {
+ for (WxMpErrorMsgEnum value : WxMpErrorMsgEnum.values()) {
+ valueMap.put(value.code, value.msg);
+ }
+ }
+
/**
* 通过错误代码查找其中文含义..
*/
public static String findMsgByCode(int code) {
- for (WxMpErrorMsgEnum value : WxMpErrorMsgEnum.values()) {
- if (value.code == code) {
- return value.msg;
- }
- }
-
- return null;
+ return valueMap.getOrDefault(code, null);
}
}
From 487cc7f689452779a5c8574b32e67148047c8380 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AD=94=E6=98=8E?=
<41773644+fu9809@users.noreply.github.com>
Date: Thu, 20 Jan 2022 12:07:56 +0800
Subject: [PATCH 0037/1155] =?UTF-8?q?:new:=20#2309=20=E3=80=90=E4=BC=81?=
=?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1=E3=80=91=E6=96=B0=E5=A2=9E=E5=BE=AE?=
=?UTF-8?q?=E4=BF=A1=E5=AE=A2=E6=9C=8D=E5=B8=90=E5=8F=B7=E7=AE=A1=E7=90=86?=
=?UTF-8?q?=E9=83=A8=E5=88=86=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../chanjar/weixin/cp/api/WxCpKfService.java | 70 ++++++++++++++++
.../me/chanjar/weixin/cp/api/WxCpService.java | 13 +++
.../cp/api/impl/BaseWxCpServiceImpl.java | 11 +++
.../weixin/cp/api/impl/WxCpKfServiceImpl.java | 64 +++++++++++++++
.../weixin/cp/bean/kf/WxCpKfAccountAdd.java | 33 ++++++++
.../cp/bean/kf/WxCpKfAccountAddResp.java | 32 ++++++++
.../weixin/cp/bean/kf/WxCpKfAccountDel.java | 28 +++++++
.../weixin/cp/bean/kf/WxCpKfAccountLink.java | 40 +++++++++
.../cp/bean/kf/WxCpKfAccountLinkResp.java | 32 ++++++++
.../cp/bean/kf/WxCpKfAccountListResp.java | 57 +++++++++++++
.../weixin/cp/bean/kf/WxCpKfAccountUpd.java | 41 ++++++++++
.../weixin/cp/constant/WxCpApiPathConsts.java | 9 ++
.../cp/api/impl/WxCpKfServiceImplTest.java | 82 +++++++++++++++++++
13 files changed, 512 insertions(+)
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpKfService.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImpl.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountAdd.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountAddResp.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountDel.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLink.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLinkResp.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountUpd.java
create mode 100644 weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImplTest.java
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpKfService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpKfService.java
new file mode 100644
index 0000000000..a77b42a6c2
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpKfService.java
@@ -0,0 +1,70 @@
+package me.chanjar.weixin.cp.api;
+
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountAdd;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountAddResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountDel;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountLink;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountLinkResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountListResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountUpd;
+
+/**
+ * 微信客服接口
+ *
+ * 微信客服由腾讯微信团队为企业打造,用于满足企业的客服需求,帮助企业做好客户服务。企业可以在微信内、外各个场景中接入微信客服,
+ * 用户可以发起咨询,企业可以进行回复。
+ * 企业可在微信客服官网使用企业微信扫码开通微信客服,开通后即可使用。
+ *
+ * @author Fu
+ * @date 2022/1/19 19:25
+ */
+public interface WxCpKfService {
+
+ /**
+ * 添加客服帐号,并可设置客服名称和头像。目前一家企业最多可添加10个客服帐号
+ *
+ * @param add 客服帐号信息
+ * @return result-新创建的客服帐号ID
+ * @throws WxErrorException 异常
+ */
+ WxCpKfAccountAddResp addAccount(WxCpKfAccountAdd add) throws WxErrorException;
+
+ /**
+ * 修改已有的客服帐号,可修改客服名称和头像。
+ *
+ * @param upd 新的客服账号信息
+ * @return result
+ * @throws WxErrorException 异常
+ */
+ WxCpBaseResp updAccount(WxCpKfAccountUpd upd) throws WxErrorException;
+
+ /**
+ * 删除已有的客服帐号
+ *
+ * @param del 要删除的客服帐号
+ * @return result
+ * @throws WxErrorException 异常
+ */
+ WxCpBaseResp delAccount(WxCpKfAccountDel del) throws WxErrorException;
+
+ /**
+ * 获取客服帐号列表,包括所有的客服帐号的客服ID、名称和头像。
+ *
+ * @return 客服帐号列表
+ * @throws WxErrorException 异常
+ */
+ WxCpKfAccountListResp listAccount() throws WxErrorException;
+
+ /**
+ * 企业可通过此接口获取带有不同参数的客服链接,不同客服帐号对应不同的客服链接。获取后,企业可将链接嵌入到网页等场景中,
+ * 微信用户点击链接即可向对应的客服帐号发起咨询。企业可依据参数来识别用户的咨询来源等
+ *
+ * @param link 参数
+ * @return 链接
+ * @throws WxErrorException 异常
+ */
+ WxCpKfAccountLinkResp getAccountLink(WxCpKfAccountLink link) throws WxErrorException;
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
index 123697b8ed..5e525213fe 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
@@ -427,6 +427,13 @@ public interface WxCpService extends WxService {
*/
WxCpAgentWorkBenchService getWorkBenchService();
+ /**
+ * 获取微信客服服务
+ *
+ * @return 微信客服服务
+ */
+ WxCpKfService getKfService();
+
/**
* http请求对象
*
@@ -476,4 +483,10 @@ public interface WxCpService extends WxService {
*/
void setTagService(WxCpTagService tagService);
+ /**
+ * Sets kf service.
+ *
+ * @param kfService the kf service
+ */
+ void setKfService(WxCpKfService kfService);
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java
index 210d54f540..18a8a9e52c 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java
@@ -57,6 +57,7 @@ public abstract class BaseWxCpServiceImpl implements WxCpService, RequestH
private WxCpOaCalendarService oaCalendarService = new WxCpOaCalendarServiceImpl(this);
private WxCpOaScheduleService oaScheduleService = new WxCpOaOaScheduleServiceImpl(this);
private WxCpAgentWorkBenchService workBenchService = new WxCpAgentWorkBenchServiceImpl(this);
+ private WxCpKfService kfService = new WxCpKfServiceImpl(this);
/**
* 全局的是否正在刷新access token的锁.
@@ -556,4 +557,14 @@ public void setAgentService(WxCpAgentService agentService) {
public WxCpOaScheduleService getOaScheduleService() {
return this.oaScheduleService;
}
+
+ @Override
+ public WxCpKfService getKfService() {
+ return kfService;
+ }
+
+ @Override
+ public void setKfService(WxCpKfService kfService) {
+ this.kfService = kfService;
+ }
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImpl.java
new file mode 100644
index 0000000000..53e520d3c4
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImpl.java
@@ -0,0 +1,64 @@
+package me.chanjar.weixin.cp.api.impl;
+
+import lombok.RequiredArgsConstructor;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.api.WxCpKfService;
+import me.chanjar.weixin.cp.api.WxCpService;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountAdd;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountAddResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountDel;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountLink;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountLinkResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountListResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountUpd;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Kf.*;
+
+/**
+ * 微信客服接口-服务实现
+ *
+ * @author Fu
+ * @date 2022/1/19 19:41
+ */
+@RequiredArgsConstructor
+public class WxCpKfServiceImpl implements WxCpKfService {
+ private final WxCpService cpService;
+
+ @Override
+ public WxCpKfAccountAddResp addAccount(WxCpKfAccountAdd add) throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(ACCOUNT_ADD);
+ String responseContent = cpService.post(url, WxCpGsonBuilder.create().toJson(add));
+ return WxCpKfAccountAddResp.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpBaseResp updAccount(WxCpKfAccountUpd upd) throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(ACCOUNT_UPD);
+ String responseContent = cpService.post(url, WxCpGsonBuilder.create().toJson(upd));
+ return WxCpBaseResp.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpBaseResp delAccount(WxCpKfAccountDel del) throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(ACCOUNT_DEL);
+ String responseContent = cpService.post(url, WxCpGsonBuilder.create().toJson(del));
+ return WxCpBaseResp.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpKfAccountListResp listAccount() throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(ACCOUNT_LIST);
+ String responseContent = cpService.post(url, "{}");
+ return WxCpKfAccountListResp.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpKfAccountLinkResp getAccountLink(WxCpKfAccountLink link) throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(ADD_CONTACT_WAY);
+ String responseContent = cpService.post(url, WxCpGsonBuilder.create().toJson(link));
+ return WxCpKfAccountLinkResp.fromJson(responseContent);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountAdd.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountAdd.java
new file mode 100644
index 0000000000..14ca9f0f8b
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountAdd.java
@@ -0,0 +1,33 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 添加客服帐号-请求参数
+ *
+ * @author Fu
+ * @date 2022/1/19 18:59
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfAccountAdd implements Serializable {
+
+ private static final long serialVersionUID = 3565729481246537411L;
+
+ /**
+ * 客服名称;不多于16个字符
+ */
+ @SerializedName("name")
+ private String name;
+
+ /**
+ * 客服头像临时素材。可以调用上传临时素材接口获取。
+ * 不多于128个字节
+ */
+ @SerializedName("media_id")
+ private String mediaId;
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountAddResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountAddResp.java
new file mode 100644
index 0000000000..1e47d696b2
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountAddResp.java
@@ -0,0 +1,32 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ * 添加客服帐号-返回结果
+ *
+ * @author Fu
+ * @date 2022/1/19 19:04
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class WxCpKfAccountAddResp extends WxCpBaseResp {
+
+ private static final long serialVersionUID = -6649323005421772827L;
+
+ /**
+ * 新创建的客服帐号ID
+ */
+ @SerializedName("open_kfid")
+ private String openKfid;
+
+ public static WxCpKfAccountAddResp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpKfAccountAddResp.class);
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountDel.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountDel.java
new file mode 100644
index 0000000000..026e05510f
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountDel.java
@@ -0,0 +1,28 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 删除客服帐号-请求参数
+ *
+ * @author Fu
+ * @date 2022/1/19 19:09
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfAccountDel implements Serializable {
+
+ private static final long serialVersionUID = 1997221467585676772L;
+
+ /**
+ * 客服帐号ID。
+ * 不多于64字节
+ */
+ @SerializedName("open_kfid")
+ private String openKfid;
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLink.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLink.java
new file mode 100644
index 0000000000..a17e5c5e83
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLink.java
@@ -0,0 +1,40 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 获取客服帐号链接-请求参数
+ *
+ * @author Fu
+ * @date 2022/1/19 19:18
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfAccountLink implements Serializable {
+
+ private static final long serialVersionUID = -1920926948347984256L;
+
+ /**
+ * 客服帐号ID
+ */
+ @SerializedName("open_kfid")
+ private String openKfid;
+
+ /**
+ * 场景值,字符串类型,由开发者自定义。
+ * 不多于32字节
+ * 字符串取值范围(正则表达式):[0-9a-zA-Z_-]*
+ *
+ * 1. 若scene非空,返回的客服链接开发者可拼接scene_param=SCENE_PARAM参数使用,用户进入会话事件会将SCENE_PARAM原样返回。
+ * 其中SCENE_PARAM需要urlencode,且长度不能超过128字节。
+ * 如 https://work.weixin.qq.com/kf/kfcbf8f8d07ac7215f?enc_scene=ENCGFSDF567DF&scene_param=a%3D1%26b%3D2
+ * 2. 历史调用接口返回的客服链接(包含encScene=XXX参数),不支持scene_param参数。
+ * 3. 返回的客服链接,不能修改或复制参数到其他链接使用。否则进入会话事件参数校验不通过,导致无法回调。
+ */
+ @SerializedName("scene")
+ private String scene;
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLinkResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLinkResp.java
new file mode 100644
index 0000000000..89bf635958
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLinkResp.java
@@ -0,0 +1,32 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ * 获取客服帐号链接-结果
+ *
+ * @author Fu
+ * @date 2022/1/19 19:18
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class WxCpKfAccountLinkResp extends WxCpBaseResp {
+
+ private static final long serialVersionUID = 910205439597092481L;
+
+ /**
+ * 客服链接,开发者可将该链接嵌入到H5页面中,用户点击链接即可向对应的微信客服帐号发起咨询。开发者也可根据该url自行生成需要的二维码图片
+ */
+ @SerializedName("url")
+ private String url;
+
+ public static WxCpKfAccountLinkResp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpKfAccountLinkResp.class);
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java
new file mode 100644
index 0000000000..c2676a44dd
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java
@@ -0,0 +1,57 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.util.List;
+
+/**
+ * 获取客服帐号列表-结果
+ *
+ * @author Fu
+ * @date 2022/1/19 19:13
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class WxCpKfAccountListResp extends WxCpBaseResp {
+
+ private static final long serialVersionUID = -1317201649692262217L;
+
+ /**
+ * 帐号信息列表
+ */
+ @JsonProperty("account_list")
+ private List accountList;
+
+ @NoArgsConstructor
+ @Data
+ public static class AccountListDTO {
+ /**
+ * 客服帐号ID
+ */
+ @SerializedName("open_kfid")
+ private String openKfid;
+
+ /**
+ * 客服名称
+ */
+ @SerializedName("name")
+ private String name;
+
+ /**
+ * 客服头像URL
+ */
+ @SerializedName("avatar")
+ private String avatar;
+ }
+
+ public static WxCpKfAccountListResp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpKfAccountListResp.class);
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountUpd.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountUpd.java
new file mode 100644
index 0000000000..d3ce7269a5
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountUpd.java
@@ -0,0 +1,41 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 修改客服帐号-请求参数
+ *
+ * @author Fu
+ * @date 2022/1/19 19:10
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfAccountUpd implements Serializable {
+
+ private static final long serialVersionUID = -900712046553752529L;
+
+ /**
+ * 要修改的客服帐号ID。
+ * 不多于64字节
+ */
+ @SerializedName("open_kfid")
+ private String openKfid;
+
+ /**
+ * 新的客服名称,如不需要修改可不填。
+ * 不多于16个字符
+ */
+ @SerializedName("name")
+ private String name;
+
+ /**
+ * 新的客服头像临时素材,如不需要修改可不填。可以调用上传临时素材接口获取。
+ * 不多于128个字节
+ */
+ @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 cea1bcb9ba..a55b4726f1 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
@@ -244,4 +244,13 @@ interface ExternalContact {
String GROUP_WELCOME_TEMPLATE_DEL = "/cgi-bin/externalcontact/group_welcome_template/del";
}
+
+ interface Kf {
+ String ACCOUNT_ADD = "/cgi-bin/kf/account/add";
+ String ACCOUNT_UPD = "/cgi-bin/kf/account/update";
+ String ACCOUNT_DEL = "/cgi-bin/kf/account/del";
+ String ACCOUNT_LIST = "/cgi-bin/kf/account/list";
+ String ADD_CONTACT_WAY = "/cgi-bin/kf/add_contact_way";
+
+ }
}
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImplTest.java
new file mode 100644
index 0000000000..09a4f568c3
--- /dev/null
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImplTest.java
@@ -0,0 +1,82 @@
+package me.chanjar.weixin.cp.api.impl;
+
+import com.google.inject.Inject;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.cp.api.ApiTestModule;
+import me.chanjar.weixin.cp.api.WxCpService;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountAdd;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountAddResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountDel;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountLink;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountLinkResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountListResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountUpd;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import java.io.InputStream;
+
+/**
+ * WxCpKfServiceImpl-测试类
+ * 需要用到专门的 secret https://kf.weixin.qq.com/api/doc/path/93304#secret
+ *
+ * @author Fu
+ * @date 2022/1/19 20:12
+ */
+@Guice(modules = ApiTestModule.class)
+public class WxCpKfServiceImplTest {
+
+ @Inject
+ private WxCpService wxService;
+
+ private static String kfid = "wkPzhXVAAAJD9oR75LrO1DmURSOUFBIg";
+
+ @Test(priority = 1)
+ public void testAccountAdd() throws Exception {
+ try (InputStream in = ClassLoader.getSystemResourceAsStream("mm.jpeg")) {
+ WxMediaUploadResult result = this.wxService.getMediaService().upload(WxConsts.MediaFileType.IMAGE, "jpeg", in);
+ String mediaId = result.getMediaId();
+ WxCpKfAccountAdd add = new WxCpKfAccountAdd();
+ add.setMediaId(mediaId);
+ add.setName("kefu01");
+ WxCpKfAccountAddResp resp = this.wxService.getKfService().addAccount(add);
+ System.out.println(resp);
+ kfid = resp.getOpenKfid();
+ }
+ }
+
+ @Test(priority = 2)
+ public void testAccountUpd() throws Exception {
+ WxCpKfAccountUpd upd = new WxCpKfAccountUpd();
+ upd.setOpenKfid(kfid);
+ upd.setName("kefu01-upd");
+ WxCpBaseResp resp = this.wxService.getKfService().updAccount(upd);
+ System.out.println(resp);
+ }
+
+ @Test(priority = 3)
+ public void testAccountList() throws Exception {
+ WxCpKfAccountListResp resp = this.wxService.getKfService().listAccount();
+ System.out.println(resp);
+ }
+
+ @Test(priority = 4)
+ public void testAccountLink() throws Exception {
+ WxCpKfAccountLink link = new WxCpKfAccountLink();
+ link.setOpenKfid(kfid);
+ link.setScene("scene");
+ WxCpKfAccountLinkResp resp = this.wxService.getKfService().getAccountLink(link);
+ System.out.println(resp);
+ }
+
+ @Test(priority = 5)
+ public void testAccountDel() throws Exception {
+ WxCpKfAccountDel del = new WxCpKfAccountDel();
+ del.setOpenKfid(kfid);
+ WxCpBaseResp resp = this.wxService.getKfService().delAccount(del);
+ System.out.println(resp);
+ }
+
+}
From 04914f5b01fe29311100cf32551c1b60252986c2 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Mon, 24 Jan 2022 00:03:05 +0800
Subject: [PATCH 0038/1155] =?UTF-8?q?:art:=20#2518=E3=80=90=E4=BC=81?=
=?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1=E3=80=91=E8=8E=B7=E5=8F=96=E5=AE=A1?=
=?UTF-8?q?=E6=89=B9=E8=AE=B0=E5=BD=95=E7=9A=84=E5=AE=A1=E6=89=B9=E7=8A=B6?=
=?UTF-8?q?=E6=80=81=E5=A2=9E=E5=8A=A0=E5=B7=B2=E9=80=80=E5=9B=9E=E7=8A=B6?=
=?UTF-8?q?=E6=80=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../weixin/cp/bean/oa/WxCpApprovalDetail.java | 78 -------------------
.../cp/bean/oa/WxCpApprovalDetailResult.java | 67 ++++++++++++++++
.../weixin/cp/bean/oa/WxCpRecordSpStatus.java | 21 +++--
.../merchant/ClearOutInvoiceRequest.java | 2 -
4 files changed, 80 insertions(+), 88 deletions(-)
delete mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetail.java
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetail.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetail.java
deleted file mode 100644
index cba31fc27c..0000000000
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetail.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package me.chanjar.weixin.cp.bean.oa;
-
-import com.google.gson.annotations.SerializedName;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * 审批申请详情
- *
- * @author element
- */
-@Data
-public class WxCpApprovalDetail implements Serializable {
- private static final long serialVersionUID = 1353393306564207170L;
-
- /**
- * 审批编号
- */
- @SerializedName("sp_no")
- private String spNo;
-
- /**
- * 审批申请类型名称(审批模板名称)
- */
- @SerializedName("sp_name")
- private String spName;
-
- /**
- * 申请单状态:1-审批中;2-已通过;3-已驳回;4-已撤销;6-通过后撤销;7-已删除;10-已支付
- */
- @SerializedName("sp_status")
- private WxCpSpStatus spStatus;
-
- /**
- * 审批模板id。可在“获取审批申请详情”、“审批状态变化回调通知”中获得,也可在审批模板的模板编辑页面链接中获得。
- */
- @SerializedName("template_id")
- private String templateId;
-
- /**
- * 审批申请提交时间,Unix时间戳
- */
- @SerializedName("apply_time")
- private Long applyTime;
-
- /**
- * 申请人信息
- */
- @SerializedName("applyer")
- private WxCpApprovalApplier applier;
-
- /**
- * 审批流程信息,可能有多个审批节点
- */
- @SerializedName("sp_record")
- private WxCpApprovalRecord[] spRecords;
-
- /**
- * 抄送信息,可能有多个抄送节点
- */
- @SerializedName("notifyer")
- private WxCpOperator[] notifiers;
-
- /**
- * 审批申请数据
- */
- @SerializedName("apply_data")
- private WxCpApprovalApplyData applyData;
-
- /**
- * 审批申请备注信息,可能有多个备注节点
- */
- @SerializedName("comments")
- private List comments;
-
-}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetailResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetailResult.java
index fdbc096a5c..2714cc95f5 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetailResult.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetailResult.java
@@ -4,6 +4,7 @@
import lombok.Data;
import java.io.Serializable;
+import java.util.List;
/**
* 审批申请详情响应结果
@@ -23,4 +24,70 @@ public class WxCpApprovalDetailResult implements Serializable {
@SerializedName("info")
private WxCpApprovalDetail info;
+ @Data
+ public static class WxCpApprovalDetail implements Serializable {
+ private static final long serialVersionUID = 1353393306564207170L;
+
+ /**
+ * 审批编号
+ */
+ @SerializedName("sp_no")
+ private String spNo;
+
+ /**
+ * 审批申请类型名称(审批模板名称)
+ */
+ @SerializedName("sp_name")
+ private String spName;
+
+ /**
+ * 申请单状态:1-审批中;2-已通过;3-已驳回;4-已撤销;6-通过后撤销;7-已删除;10-已支付
+ */
+ @SerializedName("sp_status")
+ private WxCpSpStatus spStatus;
+
+ /**
+ * 审批模板id。可在“获取审批申请详情”、“审批状态变化回调通知”中获得,也可在审批模板的模板编辑页面链接中获得。
+ */
+ @SerializedName("template_id")
+ private String templateId;
+
+ /**
+ * 审批申请提交时间,Unix时间戳
+ */
+ @SerializedName("apply_time")
+ private Long applyTime;
+
+ /**
+ * 申请人信息
+ */
+ @SerializedName("applyer")
+ private WxCpApprovalApplier applier;
+
+ /**
+ * 审批流程信息,可能有多个审批节点
+ */
+ @SerializedName("sp_record")
+ private WxCpApprovalRecord[] spRecords;
+
+ /**
+ * 抄送信息,可能有多个抄送节点
+ */
+ @SerializedName("notifyer")
+ private WxCpOperator[] notifiers;
+
+ /**
+ * 审批申请数据
+ */
+ @SerializedName("apply_data")
+ private WxCpApprovalApplyData applyData;
+
+ /**
+ * 审批申请备注信息,可能有多个备注节点
+ */
+ @SerializedName("comments")
+ private List comments;
+
+ }
+
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpRecordSpStatus.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpRecordSpStatus.java
index 206a0aa04e..055871e23f 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpRecordSpStatus.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpRecordSpStatus.java
@@ -1,14 +1,18 @@
package me.chanjar.weixin.cp.bean.oa;
import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
/**
* 审批记录(节点)分支审批状态
- *
- * 1-审批中;2-已同意;3-已驳回;4-已转审
+ *
+ * 1-审批中;2-已同意;3-已驳回;4-已转审;11-已退回
*
* @author element
*/
+@AllArgsConstructor
+@Getter
public enum WxCpRecordSpStatus {
/**
@@ -30,12 +34,13 @@ public enum WxCpRecordSpStatus {
* 已转审
*/
@SerializedName("4")
- TURNED(4);
-
- private Integer status;
+ TURNED(4),
+ /**
+ * 已退回
+ */
+ @SerializedName("11")
+ WITHDRAWN(11);
- private WxCpRecordSpStatus(Integer status) {
- this.status = status;
- }
+ private final Integer status;
}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/invoice/merchant/ClearOutInvoiceRequest.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/invoice/merchant/ClearOutInvoiceRequest.java
index 108e76ca23..d0d0f6a9a8 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/invoice/merchant/ClearOutInvoiceRequest.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/invoice/merchant/ClearOutInvoiceRequest.java
@@ -9,8 +9,6 @@
*/
@Data
public class ClearOutInvoiceRequest implements Serializable {
-
-
private ClearOutInvoiceInfo invoiceinfo;
@Data
From f3b2e93a088a979af3435a7cb1a2cdd17fd6b1cb Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Mon, 24 Jan 2022 00:07:33 +0800
Subject: [PATCH 0039/1155] =?UTF-8?q?:art:=20#2491=E3=80=90=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91=E8=8E=B7=E5=8F=96=E5=B0=8F=E7=A8=8B?=
=?UTF-8?q?=E5=BA=8Fscheme=E7=A0=81=E6=8E=A5=E5=8F=A3=E8=AF=B7=E6=B1=82?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=A4=E4=B8=AA=E8=BF=87=E6=9C=9F=E7=9B=B8?=
=?UTF-8?q?=E5=85=B3=E5=8F=82=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../scheme/WxMaGenerateSchemeRequest.java | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/scheme/WxMaGenerateSchemeRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/scheme/WxMaGenerateSchemeRequest.java
index f8ef32b2fd..a62c1334af 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/scheme/WxMaGenerateSchemeRequest.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/scheme/WxMaGenerateSchemeRequest.java
@@ -39,6 +39,25 @@ public class WxMaGenerateSchemeRequest {
@SerializedName("expire_time")
private Long expireTime;
+ /**
+ * 到期失效的 scheme 码失效类型,失效时间:0,失效间隔天数:1
+ *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("expire_type")
+ private Integer expireType;
+
+ /**
+ * 到期失效的 scheme 码的失效间隔天数。
+ *
+ * 生成的到期失效 scheme 码在该间隔时间到达前有效。最长间隔天数为365天。is_expire 为 true 且 expire_type 为 1 时必填 *
+ * 是否必填:否
+ *
+ */
+ @SerializedName("expire_interval")
+ private Integer expireInterval;
+
@Data
@Builder(builderMethodName = "newBuilder")
public static class JumpWxa {
From 189ee0925e327dc9babecb1fce74d99e3cb10382 Mon Sep 17 00:00:00 2001
From: zhoushuofu <1065058691@qq.com>
Date: Mon, 24 Jan 2022 00:09:37 +0800
Subject: [PATCH 0040/1155] =?UTF-8?q?:art:=20#2516=E3=80=90=E5=85=AC?=
=?UTF-8?q?=E4=BC=97=E5=8F=B7=E3=80=91=E8=8F=9C=E5=8D=95=E6=8C=89=E9=92=AE?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=E6=96=B0=E7=9A=84=E5=9B=BE=E6=96=87=E6=B6=88?=
=?UTF-8?q?=E6=81=AF=E7=B1=BB=E5=9E=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../me/chanjar/weixin/common/bean/menu/WxMenuButton.java | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/menu/WxMenuButton.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/menu/WxMenuButton.java
index 114e267d41..344f544bad 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/menu/WxMenuButton.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/menu/WxMenuButton.java
@@ -58,6 +58,15 @@ public class WxMenuButton implements Serializable {
@SerializedName("media_id")
private String mediaId;
+ /**
+ *
+ * 调用发布图文接口获得的article_id.
+ * article_id类型和article_view_limited类型必须
+ *
+ */
+ @SerializedName("article_id")
+ private String articleId;
+
/**
*
* 小程序的appid.
From 74b5f806d01895f8638cc22e6df7ef49add59bdb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=A0=88=E6=9C=A8?= <360586021@qq.com>
Date: Mon, 24 Jan 2022 00:10:11 +0800
Subject: [PATCH 0041/1155] =?UTF-8?q?:art:=20=E6=9B=B4=E6=96=B0=E5=BE=AE?=
=?UTF-8?q?=E4=BF=A1=E5=85=AC=E4=BC=97=E5=B9=B3=E5=8F=B0=E6=96=87=E6=A1=A3?=
=?UTF-8?q?=E5=9C=B0=E5=9D=80&=E5=A2=9E=E5=8A=A0clientmsgid=E7=9B=B8?=
=?UTF-8?q?=E5=85=B3=E8=BF=94=E5=9B=9E=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../me/chanjar/weixin/common/error/WxError.java | 2 +-
.../weixin/common/error/WxMpErrorMsgEnum.java | 14 +++++++++++++-
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxError.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxError.java
index 0d80efe302..aa7f508f5b 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxError.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxError.java
@@ -13,7 +13,7 @@
/**
* 微信错误码.
* 请阅读:
- * 公众平台:全局返回码说明
+ * 公众平台:全局返回码说明
* 企业微信:全局错误码
*
* @author Daniel Qian & Binary Wang
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java
index 56cce6b598..fdfb397cb3 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java
@@ -8,7 +8,7 @@
/**
*
* 微信公众平台全局返回码.
- * 参考文档:公众平台全局返回码
+ * 参考文档:公众平台全局返回码
* Created by Binary Wang on 2018/5/13.
*
*
@@ -376,6 +376,18 @@ public enum WxMpErrorMsgEnum {
* 非法的tag_id.
*/
CODE_45159(45159, "非法的tag_id"),
+ /**
+ * 相同 clientmsgid 已存在群发记录,返回数据中带有已存在的群发任务的 msgid
+ */
+ CODE_45065(45065, "相同 clientmsgid 已存在群发记录,返回数据中带有已存在的群发任务的 msgid"),
+ /**
+ * 相同 clientmsgid 重试速度过快,请间隔1分钟重试
+ */
+ CODE_45066(45066, "相同 clientmsgid 重试速度过快,请间隔1分钟重试"),
+ /**
+ * clientmsgid 长度超过限制
+ */
+ CODE_45067(45067, "clientmsgid 长度超过限制"),
/**
* 不存在媒体数据.
*/
From bd670742e7cf5ec91d76e474a9418f8901986bf2 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Mon, 24 Jan 2022 00:34:21 +0800
Subject: [PATCH 0042/1155] =?UTF-8?q?:bookmark:=20=E5=8F=91=E5=B8=83=204.2?=
=?UTF-8?q?.5.B=20=E6=B5=8B=E8=AF=95=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
spring-boot-starters/pom.xml | 2 +-
spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml | 2 +-
.../wx-java-miniapp-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml | 2 +-
weixin-graal/pom.xml | 2 +-
weixin-java-common/pom.xml | 2 +-
weixin-java-cp/pom.xml | 2 +-
weixin-java-miniapp/pom.xml | 2 +-
weixin-java-mp/pom.xml | 2 +-
weixin-java-open/pom.xml | 2 +-
weixin-java-pay/pom.xml | 2 +-
weixin-java-qidian/pom.xml | 2 +-
16 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/pom.xml b/pom.xml
index 8ddf83161d..5e983b885e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.github.binarywang
wx-java
- 4.2.4.B
+ 4.2.5.B
pom
WxJava - Weixin/Wechat Java SDK
微信开发Java SDK
diff --git a/spring-boot-starters/pom.xml b/spring-boot-starters/pom.xml
index be3ffa29ed..1e1297db76 100644
--- a/spring-boot-starters/pom.xml
+++ b/spring-boot-starters/pom.xml
@@ -4,7 +4,7 @@
com.github.binarywang
wx-java
- 4.2.4.B
+ 4.2.5.B
pom
wx-java-spring-boot-starters
diff --git a/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
index 403d110e92..e17747d526 100644
--- a/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
@@ -4,7 +4,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.4.B
+ 4.2.5.B
4.0.0
diff --git a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
index bc0df80a34..8e953637c4 100644
--- a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.4.B
+ 4.2.5.B
4.0.0
diff --git a/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
index 6f39cf83a6..bf37e8f9d3 100644
--- a/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.4.B
+ 4.2.5.B
4.0.0
diff --git a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
index c88de56372..517736a70a 100644
--- a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.4.B
+ 4.2.5.B
4.0.0
diff --git a/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
index 00b0b47e97..9e1ee87f06 100644
--- a/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.4.B
+ 4.2.5.B
4.0.0
diff --git a/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
index 74685629b7..d477a313c6 100644
--- a/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
@@ -3,7 +3,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.4.B
+ 4.2.5.B
4.0.0
diff --git a/weixin-graal/pom.xml b/weixin-graal/pom.xml
index dd74121d63..c1676ae620 100644
--- a/weixin-graal/pom.xml
+++ b/weixin-graal/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
wx-java
- 4.2.4.B
+ 4.2.5.B
weixin-graal
diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml
index 78a97e7346..e602174890 100644
--- a/weixin-java-common/pom.xml
+++ b/weixin-java-common/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
wx-java
- 4.2.4.B
+ 4.2.5.B
weixin-java-common
diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml
index 0d8750d186..c19593c63a 100644
--- a/weixin-java-cp/pom.xml
+++ b/weixin-java-cp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.4.B
+ 4.2.5.B
weixin-java-cp
diff --git a/weixin-java-miniapp/pom.xml b/weixin-java-miniapp/pom.xml
index e7017eb0b0..4a320b1e68 100644
--- a/weixin-java-miniapp/pom.xml
+++ b/weixin-java-miniapp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.4.B
+ 4.2.5.B
weixin-java-miniapp
diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml
index a9db15a504..f4bbce9dec 100644
--- a/weixin-java-mp/pom.xml
+++ b/weixin-java-mp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.4.B
+ 4.2.5.B
weixin-java-mp
diff --git a/weixin-java-open/pom.xml b/weixin-java-open/pom.xml
index c587b86cf1..0ceb56f2df 100644
--- a/weixin-java-open/pom.xml
+++ b/weixin-java-open/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.4.B
+ 4.2.5.B
weixin-java-open
diff --git a/weixin-java-pay/pom.xml b/weixin-java-pay/pom.xml
index 76a2f816d5..6bed599621 100644
--- a/weixin-java-pay/pom.xml
+++ b/weixin-java-pay/pom.xml
@@ -5,7 +5,7 @@
com.github.binarywang
wx-java
- 4.2.4.B
+ 4.2.5.B
4.0.0
diff --git a/weixin-java-qidian/pom.xml b/weixin-java-qidian/pom.xml
index 0b93578b43..2235028c36 100644
--- a/weixin-java-qidian/pom.xml
+++ b/weixin-java-qidian/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.4.B
+ 4.2.5.B
weixin-java-qidian
From b8dd04b89f64d716de00358cf476e199e0491fd1 Mon Sep 17 00:00:00 2001
From: aniaan
Date: Mon, 24 Jan 2022 23:51:38 +0800
Subject: [PATCH 0043/1155] =?UTF-8?q?:art:=20=E6=96=B0=E5=A2=9Eview=5Fmini?=
=?UTF-8?q?program=E4=BA=8B=E4=BB=B6=E7=B1=BB=E5=9E=8B=E5=B8=B8=E9=87=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/me/chanjar/weixin/common/api/WxConsts.java | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java
index b6b94a7641..35a201edb0 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java
@@ -345,6 +345,11 @@ public static class EventType {
*/
public static final String WEAPP_AUDIT_FAIL = "weapp_audit_fail";
+ /**
+ * 点击菜单跳转小程序的事件推送
+ */
+ public static final String VIEW_MINIPROGRAM = "view_miniprogram";
+
}
/**
From c0535f87fb6ed32e78dbc65e09c0922e92c0691c Mon Sep 17 00:00:00 2001
From: Wong <1960779692@qq.com>
Date: Mon, 24 Jan 2022 16:09:16 +0000
Subject: [PATCH 0044/1155] =?UTF-8?q?:new:=20#1596=20=E3=80=90=E4=BC=81?=
=?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1=E3=80=91=E6=96=B0=E5=A2=9E=E4=BC=9A?=
=?UTF-8?q?=E8=AF=9D=E5=AD=98=E6=A1=A3=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../wxjava/cp/properties/WxCpProperties.java | 4 +
.../common/util/crypto/WxCryptUtil.java | 25 +-
.../main/java/com/tencent/wework/Finance.java | 207 ++++
.../weixin/cp/api/WxCpMsgAuditService.java | 108 ++
.../me/chanjar/weixin/cp/api/WxCpService.java | 7 +
.../cp/api/impl/BaseWxCpServiceImpl.java | 6 +
.../cp/api/impl/WxCpMsgAuditServiceImpl.java | 196 ++++
.../cp/bean/msgaudit/WxCpAgreeInfo.java | 65 ++
.../cp/bean/msgaudit/WxCpChatDatas.java | 68 ++
.../cp/bean/msgaudit/WxCpChatModel.java | 987 ++++++++++++++++++
.../bean/msgaudit/WxCpCheckAgreeRequest.java | 57 +
.../weixin/cp/bean/msgaudit/WxCpFileItem.java | 39 +
.../cp/bean/msgaudit/WxCpGroupChat.java | 61 ++
.../weixin/cp/config/WxCpConfigStorage.java | 7 +
.../cp/config/impl/WxCpDefaultConfigImpl.java | 6 +
.../cp/config/impl/WxCpRedisConfigImpl.java | 6 +
.../weixin/cp/constant/WxCpApiPathConsts.java | 6 +
.../weixin/cp/util/crypto/WxCpCryptUtil.java | 33 +
.../weixin/cp/api/WxCpMsgAuditTest.java | 433 ++++++++
19 files changed, 2308 insertions(+), 13 deletions(-)
create mode 100644 weixin-java-cp/src/main/java/com/tencent/wework/Finance.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMsgAuditService.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMsgAuditServiceImpl.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpAgreeInfo.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpChatDatas.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpChatModel.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpCheckAgreeRequest.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpFileItem.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpGroupChat.java
create mode 100644 weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMsgAuditTest.java
diff --git a/spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpProperties.java b/spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpProperties.java
index e4b200f1a2..b2cc778ac0 100644
--- a/spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpProperties.java
+++ b/spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpProperties.java
@@ -38,6 +38,10 @@ public class WxCpProperties {
* 微信企业号应用 EncodingAESKey
*/
private String aesKey;
+ /**
+ * 微信企业号应用 会话存档类库路径
+ */
+ private String msgAuditLibPath;
/**
* 配置存储策略,默认内存
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/crypto/WxCryptUtil.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/crypto/WxCryptUtil.java
index f55672b0b4..d44791eb18 100755
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/crypto/WxCryptUtil.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/crypto/WxCryptUtil.java
@@ -1,19 +1,6 @@
package me.chanjar.weixin.common.util.crypto;
-import java.io.StringReader;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
-import java.util.Random;
-import javax.crypto.Cipher;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.SecretKeySpec;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
import com.google.common.base.CharMatcher;
-import com.google.common.io.BaseEncoding;
import lombok.AllArgsConstructor;
import lombok.Data;
import me.chanjar.weixin.common.error.WxRuntimeException;
@@ -22,6 +9,18 @@
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.StringReader;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.Random;
+
/**
*
* 对公众平台发送给公众账号的消息加解密示例代码.
diff --git a/weixin-java-cp/src/main/java/com/tencent/wework/Finance.java b/weixin-java-cp/src/main/java/com/tencent/wework/Finance.java
new file mode 100644
index 0000000000..e653fd0f47
--- /dev/null
+++ b/weixin-java-cp/src/main/java/com/tencent/wework/Finance.java
@@ -0,0 +1,207 @@
+package com.tencent.wework;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 注意:
+ * 此类必须配置在com.tencent.wework路径底下,否则会报错:
+ * java.lang.UnsatisfiedLinkError: com.xxx.Finance.NewSdk()
+ *
+ * Q:JAVA版本的sdk报错UnsatisfiedLinkError?
+ * A:请检查是否修改了sdk的包名。
+ *
+ * 官方文档:
+ * https://developer.work.weixin.qq.com/document/path/91552
+ *
+ * @author Wang_Wong
+ * @date 2022-01-17
+ */
+@Slf4j
+public class Finance {
+
+ private static volatile long sdk = -1L;
+ private static Finance finance = null;
+ private static final String SO_FILE = "so";
+ private static final String DLL_FILE = "dll";
+
+ public native static long NewSdk();
+
+ /**
+ * 初始化函数
+ * Return值=0表示该API调用成功
+ *
+ * @param [in] sdk NewSdk返回的sdk指针
+ * @param [in] corpid 调用企业的企业id,例如:wwd08c8exxxx5ab44d,可以在企业微信管理端--我的企业--企业信息查看
+ * @param [in] secret 聊天内容存档的Secret,可以在企业微信管理端--管理工具--聊天内容存档查看
+ * @return 返回是否初始化成功
+ * 0 - 成功
+ * !=0 - 失败
+ */
+ public native static int Init(long sdk, String corpid, String secret);
+
+ /**
+ * 拉取聊天记录函数
+ * Return值=0表示该API调用成功
+ *
+ * @param [in] sdk NewSdk返回的sdk指针
+ * @param [in] seq 从指定的seq开始拉取消息,注意的是返回的消息从seq+1开始返回,seq为之前接口返回的最大seq值。首次使用请使用seq:0
+ * @param [in] limit 一次拉取的消息条数,最大值1000条,超过1000条会返回错误
+ * @param [in] proxy 使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
+ * @param [in] passwd 代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
+ * @param [out] chatDatas 返回本次拉取消息的数据,slice结构体.内容包括errcode/errmsg,以及每条消息内容。
+ * @return 返回是否调用成功
+ * 0 - 成功
+ * !=0 - 失败
+ */
+ public native static int GetChatData(long sdk, long seq, long limit, String proxy, String passwd, long timeout, long chatData);
+
+ /**
+ * 拉取媒体消息函数
+ * Return值=0表示该API调用成功
+ *
+ * @param [in] sdk NewSdk返回的sdk指针
+ * @param [in] sdkFileid 从GetChatData返回的聊天消息中,媒体消息包括的sdkfileid
+ * @param [in] proxy 使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
+ * @param [in] passwd 代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
+ * @param [in] indexbuf 媒体消息分片拉取,需要填入每次拉取的索引信息。首次不需要填写,默认拉取512k,后续每次调用只需要将上次调用返回的outindexbuf填入即可。
+ * @param [out] media_data 返回本次拉取的媒体数据.MediaData结构体.内容包括data(数据内容)/outindexbuf(下次索引)/is_finish(拉取完成标记)
+ * @return 返回是否调用成功
+ * 0 - 成功
+ * !=0 - 失败
+ */
+ public native static int GetMediaData(long sdk, String indexbuf, String sdkField, String proxy, String passwd, long timeout, long mediaData);
+
+ /**
+ * @param [in] encrypt_key, getchatdata返回的encrypt_key
+ * @param [in] encrypt_msg, getchatdata返回的content
+ * @param [out] msg, 解密的消息明文
+ * @return 返回是否调用成功
+ * 0 - 成功
+ * !=0 - 失败
+ * @brief 解析密文
+ */
+ public native static int DecryptData(long sdk, String encrypt_key, String encrypt_msg, long msg);
+
+ public native static void DestroySdk(long sdk);
+
+ public native static long NewSlice();
+
+ /**
+ * @return
+ * @brief 释放slice,和NewSlice成对使用
+ */
+ public native static void FreeSlice(long slice);
+
+ /**
+ * @return 内容
+ * @brief 获取slice内容
+ */
+ public native static String GetContentFromSlice(long slice);
+
+ /**
+ * @return 内容
+ * @brief 获取slice内容长度
+ */
+ public native static int GetSliceLen(long slice);
+
+ public native static long NewMediaData();
+
+ public native static void FreeMediaData(long mediaData);
+
+ /**
+ * @return outindex
+ * @brief 获取mediadata outindex
+ */
+ public native static String GetOutIndexBuf(long mediaData);
+
+ /**
+ * @return data
+ * @brief 获取mediadata data数据
+ */
+ public native static byte[] GetData(long mediaData);
+
+ public native static int GetIndexLen(long mediaData);
+
+ public native static int GetDataLen(long mediaData);
+
+ /**
+ * @return 1完成、0未完成
+ * @brief 判断mediadata是否结束
+ */
+ public native static int IsMediaDataFinish(long mediaData);
+
+ /**
+ * 判断Windows环境
+ *
+ * @return
+ */
+ public static boolean isWindows() {
+ String osName = System.getProperties().getProperty("os.name");
+ log.info("Loading System Libraries, Current OS Version Is: {}", osName);
+ return osName.toUpperCase().contains("WINDOWS");
+ }
+
+ /**
+ * 加载系统类库
+ *
+ * @param libFiles 类库配置文件
+ * @param prefixPath 类库文件的前缀路径
+ */
+ public Finance(String[] libFiles, String prefixPath) {
+ boolean isWindows = Finance.isWindows();
+ for (String file : libFiles) {
+ String suffix = file.substring(file.lastIndexOf(".") + 1);
+ if (isWindows) {
+ // 加载dll文件
+ if (suffix.equalsIgnoreCase(DLL_FILE)) {
+ System.load(prefixPath + file);
+ }
+ } else {
+ // 加载so文件
+ if (suffix.equalsIgnoreCase(SO_FILE)) {
+ System.load(prefixPath + file);
+ }
+ }
+ }
+
+ }
+
+ /**
+ * 初始化类库文件
+ *
+ * @param libFiles
+ * @param prefixPath
+ * @return
+ */
+ public synchronized static Finance loadingLibraries(String[] libFiles, String prefixPath) {
+ if (finance != null) {
+ return finance;
+ }
+ finance = new Finance(libFiles, prefixPath);
+ return finance;
+ }
+
+ /**
+ * 单例sdk
+ *
+ * @return
+ */
+ public synchronized static long SingletonSDK() {
+ if (sdk > 0) {
+ return sdk;
+ }
+ sdk = Finance.NewSdk();
+ return sdk;
+ }
+
+ /**
+ * 销毁sdk,保证线程可见性
+ *
+ * @return
+ */
+ public synchronized static void DestroySingletonSDK(long destroySDK) {
+ sdk = 0L;
+ Finance.DestroySdk(destroySDK);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMsgAuditService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMsgAuditService.java
new file mode 100644
index 0000000000..63389aeb8c
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMsgAuditService.java
@@ -0,0 +1,108 @@
+package me.chanjar.weixin.cp.api;
+
+import lombok.NonNull;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.bean.msgaudit.*;
+
+import java.util.List;
+
+/**
+ * 会话内容存档接口.
+ * 官方文档:https://developer.work.weixin.qq.com/document/path/91360
+ *
+ * 如需自行实现,亦可调用Finance类库函数,进行实现:
+ * com.tencent.wework.Finance
+ *
+ * @author Wang_Wong
+ * @date 2022-01-14
+ */
+public interface WxCpMsgAuditService {
+
+ /**
+ * 拉取聊天记录函数
+ *
+ * @param seq 从指定的seq开始拉取消息,注意的是返回的消息从seq+1开始返回,seq为之前接口返回的最大seq值。首次使用请使用seq:0
+ * @param limit 一次拉取的消息条数,最大值1000条,超过1000条会返回错误
+ * @param proxy 使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081,如果没有传null
+ * @param passwd 代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123,如果没有传null
+ * @param timeout 超时时间,根据实际需要填写
+ * @return 返回是否调用成功
+ */
+ WxCpChatDatas getChatDatas(long seq, @NonNull long limit, String proxy, String passwd, @NonNull long timeout) throws Exception;
+
+ /**
+ * 获取解密的聊天数据Model
+ *
+ * @param chatData getChatDatas()获取到的聊天数据
+ * @return 解密后的聊天数据
+ * @throws Exception
+ */
+ WxCpChatModel getDecryptData(@NonNull WxCpChatDatas.WxCpChatData chatData) throws Exception;
+
+ /**
+ * 获取解密的聊天数据明文
+ *
+ * @param chatData getChatDatas()获取到的聊天数据
+ * @return 解密后的明文
+ * @throws Exception
+ */
+ String getChatPlainText(@NonNull WxCpChatDatas.WxCpChatData chatData) throws Exception;
+
+ /**
+ * 获取媒体文件
+ * 针对图片、文件等媒体数据,提供sdk接口拉取数据内容。
+ *
+ * 注意:
+ * 根据上面返回的文件类型,拼接好存放文件的绝对路径即可。此时绝对路径写入文件流,来达到获取媒体文件的目的。
+ * 详情可以看官方文档,亦可阅读此接口源码。
+ *
+ * @param sdkfileid 消息体内容中的sdkfileid信息
+ * @param proxy 使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081,如果没有传null
+ * @param passwd 代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123,如果没有传null
+ * @param timeout 超时时间,分片数据需累加到文件存储。单次最大返回512K字节,如果文件比较大,自行设置长一点,比如timeout=10000
+ * @param targetFilePath 目标文件绝对路径+实际文件名,比如:/usr/local/file/20220114/474f866b39d10718810d55262af82662.gif
+ * @throws WxErrorException
+ */
+ void getMediaFile(@NonNull String sdkfileid, String proxy, String passwd, @NonNull long timeout, @NonNull String targetFilePath) throws WxErrorException;
+
+ /**
+ * 获取会话内容存档开启成员列表
+ * 企业可通过此接口,获取企业开启会话内容存档的成员列表
+ *
+ * 请求方式:POST(HTTPS)
+ * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/msgaudit/get_permit_user_list?access_token=ACCESS_TOKEN
+ *
+ * @param type 拉取对应版本的开启成员列表。1表示办公版;2表示服务版;3表示企业版。非必填,不填写的时候返回全量成员列表。
+ * @return
+ * @throws WxErrorException
+ */
+ List getPermitUserList(Integer type) throws WxErrorException;
+
+ /**
+ * 获取会话内容存档内部群信息
+ * 企业可通过此接口,获取会话内容存档本企业的内部群信息,包括群名称、群主id、公告、群创建时间以及所有群成员的id与加入时间。
+ *
+ * 请求方式:POST(HTTPS)
+ * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/msgaudit/groupchat/get?access_token=ACCESS_TOKEN
+ *
+ * @param roomid 待查询的群id
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpGroupChat getGroupChat(@NonNull String roomid) throws WxErrorException;
+
+ /**
+ * 获取会话同意情况
+ * 企业可通过下述接口,获取会话中外部成员的同意情况
+ *
+ * 单聊请求地址:https://qyapi.weixin.qq.com/cgi-bin/msgaudit/check_single_agree?access_token=ACCESS_TOKEN
+ *
+ * 请求方式:POST(HTTPS)
+ *
+ * @param checkAgreeRequest 待查询的会话信息
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpAgreeInfo checkSingleAgree(@NonNull WxCpCheckAgreeRequest checkAgreeRequest) throws WxErrorException;
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
index 5e525213fe..473fb3dfcb 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
@@ -399,6 +399,13 @@ public interface WxCpService extends WxService {
*/
WxCpLivingService getLivingService();
+ /**
+ * 获取会话存档相关接口的服务类对象
+ *
+ * @return
+ */
+ WxCpMsgAuditService getMsgAuditService();
+
/**
* 获取日历相关接口的服务类对象
*
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java
index 18a8a9e52c..cccbe8648d 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java
@@ -50,6 +50,7 @@ public abstract class BaseWxCpServiceImpl implements WxCpService, RequestH
private WxCpAgentService agentService = new WxCpAgentServiceImpl(this);
private WxCpOaService oaService = new WxCpOaServiceImpl(this);
private WxCpLivingService livingService = new WxCpLivingServiceImpl(this);
+ private WxCpMsgAuditService msgAuditService = new WxCpMsgAuditServiceImpl(this);
private WxCpTaskCardService taskCardService = new WxCpTaskCardServiceImpl(this);
private WxCpExternalContactService externalContactService = new WxCpExternalContactServiceImpl(this);
private WxCpGroupRobotService groupRobotService = new WxCpGroupRobotServiceImpl(this);
@@ -484,6 +485,11 @@ public WxCpLivingService getLivingService() {
return livingService;
}
+ @Override
+ public WxCpMsgAuditService getMsgAuditService() {
+ return msgAuditService;
+ }
+
@Override
public WxCpOaCalendarService getOaCalendarService() {
return this.oaCalendarService;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMsgAuditServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMsgAuditServiceImpl.java
new file mode 100644
index 0000000000..6e47a4648c
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMsgAuditServiceImpl.java
@@ -0,0 +1,196 @@
+package me.chanjar.weixin.cp.api.impl;
+
+import com.google.gson.JsonObject;
+import com.google.gson.reflect.TypeToken;
+import com.tencent.wework.Finance;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.json.GsonParser;
+import me.chanjar.weixin.cp.api.WxCpMsgAuditService;
+import me.chanjar.weixin.cp.api.WxCpService;
+import me.chanjar.weixin.cp.bean.msgaudit.*;
+import me.chanjar.weixin.cp.util.crypto.WxCpCryptUtil;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.List;
+
+import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.MsgAudit.*;
+
+/**
+ * 会话内容存档接口实现类.
+ *
+ * @author Wang_Wong
+ * @date 2022-01-17
+ */
+@Slf4j
+@RequiredArgsConstructor
+public class WxCpMsgAuditServiceImpl implements WxCpMsgAuditService {
+ private final WxCpService cpService;
+
+ @Override
+ public WxCpChatDatas getChatDatas(long seq, @NonNull long limit, String proxy, String passwd, @NonNull long timeout) throws Exception {
+ String configPath = cpService.getWxCpConfigStorage().getMsgAuditLibPath();
+ if (StringUtils.isEmpty(configPath)) {
+ throw new WxErrorException("请配置会话存档sdk文件的路径,不要配错了!!");
+ }
+
+ // 替换斜杠
+ String replacePath = configPath.replace("\\", "/");
+ // 所有的后缀文件
+ String suffixFiles = replacePath.substring(replacePath.lastIndexOf("/") + 1);
+ // 获取的前缀路径
+ String prefixPath = replacePath.substring(0, replacePath.lastIndexOf("/") + 1);
+
+ // 包含so文件
+ String[] libFiles = suffixFiles.split(",");
+ if (libFiles.length <= 0) {
+ throw new WxErrorException("请仔细配置会话存档文件路径!!");
+ }
+
+ Finance.loadingLibraries(libFiles, prefixPath);
+ long sdk = Finance.SingletonSDK();
+
+ long ret = Finance.Init(sdk, cpService.getWxCpConfigStorage().getCorpId(), cpService.getWxCpConfigStorage().getCorpSecret());
+ if (ret != 0) {
+ Finance.DestroySingletonSDK(sdk);
+ throw new WxErrorException("init sdk err ret " + ret);
+ }
+
+ long slice = Finance.NewSlice();
+ ret = Finance.GetChatData(sdk, seq, limit, proxy, passwd, timeout, slice);
+ if (ret != 0) {
+ Finance.FreeSlice(slice);
+ Finance.DestroySingletonSDK(sdk);
+ throw new WxErrorException("getchatdata err ret " + ret);
+ }
+
+ // 拉取会话存档
+ String content = Finance.GetContentFromSlice(slice);
+ Finance.FreeSlice(slice);
+ WxCpChatDatas chatDatas = WxCpChatDatas.fromJson(content);
+ if (chatDatas.getErrCode().intValue() != 0) {
+ throw new WxErrorException(chatDatas.toJson());
+ }
+
+ return chatDatas;
+ }
+
+ @Override
+ public WxCpChatModel getDecryptData(@NonNull WxCpChatDatas.WxCpChatData chatData) throws Exception {
+ String plainText = this.decryptChatData(chatData);
+ return WxCpChatModel.fromJson(plainText);
+ }
+
+ public String decryptChatData(WxCpChatDatas.WxCpChatData chatData) throws Exception {
+ // 企业获取的会话内容将用公钥加密,企业可用自行保存的私钥解开会话内容数据,aeskey不能为空
+ String priKey = cpService.getWxCpConfigStorage().getAesKey();
+ if (StringUtils.isEmpty(priKey)) {
+ throw new WxErrorException("请配置会话存档私钥【aesKey】");
+ }
+
+ String decryptByPriKey = WxCpCryptUtil.decryptByPriKey(chatData.getEncryptRandomKey(), priKey);
+ // 每次使用DecryptData解密会话存档前需要调用NewSlice获取一个slice,在使用完slice中数据后,还需要调用FreeSlice释放。
+ long sdk = Finance.SingletonSDK();
+ long msg = Finance.NewSlice();
+
+ int ret = Finance.DecryptData(sdk, decryptByPriKey, chatData.getEncryptChatMsg(), msg);
+ if (ret != 0) {
+ Finance.FreeSlice(msg);
+ Finance.DestroySingletonSDK(sdk);
+ throw new WxErrorException("msg err ret " + ret);
+ }
+
+ // 明文
+ String plainText = Finance.GetContentFromSlice(msg);
+ Finance.FreeSlice(msg);
+ return plainText;
+ }
+
+ @Override
+ public String getChatPlainText(WxCpChatDatas.@NonNull WxCpChatData chatData) throws Exception {
+ return this.decryptChatData(chatData);
+ }
+
+ @Override
+ public void getMediaFile(@NonNull String sdkfileid, String proxy, String passwd, @NonNull long timeout, @NonNull String targetFilePath) throws WxErrorException {
+ /**
+ * 1、媒体文件每次拉取的最大size为512k,因此超过512k的文件需要分片拉取。
+ * 2、若该文件未拉取完整,sdk的IsMediaDataFinish接口会返回0,同时通过GetOutIndexBuf接口返回下次拉取需要传入GetMediaData的indexbuf。
+ * 3、indexbuf一般格式如右侧所示,”Range:bytes=524288-1048575“:表示这次拉取的是从524288到1048575的分片。单个文件首次拉取填写的indexbuf为空字符串,拉取后续分片时直接填入上次返回的indexbuf即可。
+ */
+ File targetFile = new File(targetFilePath);
+ if (!targetFile.getParentFile().exists()) {
+ targetFile.getParentFile().mkdirs();
+ }
+
+ String indexbuf = "";
+ int ret, data_len = 0;
+ while (true) {
+ long mediaData = Finance.NewMediaData();
+ long sdk = Finance.SingletonSDK();
+ ret = Finance.GetMediaData(sdk, indexbuf, sdkfileid, proxy, passwd, timeout, mediaData);
+ if (ret != 0) {
+ Finance.FreeMediaData(mediaData);
+ Finance.DestroySingletonSDK(sdk);
+ throw new WxErrorException("getmediadata err ret " + ret);
+ }
+
+ data_len += Finance.GetDataLen(mediaData);
+ log.info("正在分片拉取媒体文件 len:{}, data_len:{}, is_finis:{} \n", Finance.GetIndexLen(mediaData), data_len, Finance.IsMediaDataFinish(mediaData));
+
+ try {
+ // 大于512k的文件会分片拉取,此处需要使用追加写,避免后面的分片覆盖之前的数据。
+ FileOutputStream outputStream = new FileOutputStream(new File(targetFilePath), true);
+ outputStream.write(Finance.GetData(mediaData));
+ outputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (Finance.IsMediaDataFinish(mediaData) == 1) {
+ // 已经拉取完成最后一个分片
+ Finance.FreeMediaData(mediaData);
+ break;
+ } else {
+ // 获取下次拉取需要使用的indexbuf
+ indexbuf = Finance.GetOutIndexBuf(mediaData);
+ Finance.FreeMediaData(mediaData);
+ }
+ }
+ }
+
+ @Override
+ public List getPermitUserList(Integer type) throws WxErrorException {
+ final String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(GET_PERMIT_USER_LIST);
+ JsonObject jsonObject = new JsonObject();
+ if (type != null) {
+ jsonObject.addProperty("type", type);
+ }
+ String responseContent = this.cpService.post(apiUrl, jsonObject.toString());
+ return WxCpGsonBuilder.create().fromJson(GsonParser.parse(responseContent).getAsJsonArray("ids"),
+ new TypeToken>() {
+ }.getType());
+ }
+
+ @Override
+ public WxCpGroupChat getGroupChat(@NonNull String roomid) throws WxErrorException {
+ final String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(GET_GROUP_CHAT);
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("roomid", roomid);
+ String responseContent = this.cpService.post(apiUrl, jsonObject.toString());
+ return WxCpGroupChat.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpAgreeInfo checkSingleAgree(@NonNull WxCpCheckAgreeRequest checkAgreeRequest) throws WxErrorException {
+ String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(CHECK_SINGLE_AGREE);
+ String responseContent = this.cpService.post(apiUrl, checkAgreeRequest.toJson());
+ return WxCpAgreeInfo.fromJson(responseContent);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpAgreeInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpAgreeInfo.java
new file mode 100644
index 0000000000..43a36681ed
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpAgreeInfo.java
@@ -0,0 +1,65 @@
+package me.chanjar.weixin.cp.bean.msgaudit;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 获取会话同意情况返回对象.
+ *
+ * @author Wang_Wong
+ */
+@Data
+public class WxCpAgreeInfo implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("errcode")
+ private Integer errcode;
+
+ @SerializedName("errmsg")
+ private String errmsg;
+
+ @SerializedName("agreeinfo")
+ private List agreeInfo;
+
+ @Getter
+ @Setter
+ public static class AgreeInfo implements Serializable {
+ private static final long serialVersionUID = -5696099236344075582L;
+
+ @SerializedName("status_change_time")
+ private Long statusChangeTime;
+
+ @SerializedName("userid")
+ private String userid;
+
+ @SerializedName("exteranalopenid")
+ private String exteranalOpenId;
+
+ @SerializedName("agree_status")
+ private String agreeStatus;
+
+ public static AgreeInfo fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, AgreeInfo.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+ public static WxCpAgreeInfo fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpAgreeInfo.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpChatDatas.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpChatDatas.java
new file mode 100644
index 0000000000..8359bc087d
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpChatDatas.java
@@ -0,0 +1,68 @@
+package me.chanjar.weixin.cp.bean.msgaudit;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 聊天记录数据内容.
+ *
+ * @author Wang_Wong
+ */
+@Data
+public class WxCpChatDatas implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("errcode")
+ private Integer errCode;
+
+ @SerializedName("errmsg")
+ private String errMsg;
+
+ @SerializedName("chatdata")
+ private List chatData;
+
+ @Getter
+ @Setter
+ public static class WxCpChatData implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("seq")
+ private Long seq;
+
+ @SerializedName("msgid")
+ private String msgId;
+
+ @SerializedName("publickey_ver")
+ private Integer publickeyVer;
+
+ @SerializedName("encrypt_random_key")
+ private String encryptRandomKey;
+
+ @SerializedName("encrypt_chat_msg")
+ private String encryptChatMsg;
+
+ public static WxCpChatData fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpChatData.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+ public static WxCpChatDatas fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpChatDatas.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpChatModel.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpChatModel.java
new file mode 100644
index 0000000000..888f7f399c
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpChatModel.java
@@ -0,0 +1,987 @@
+package me.chanjar.weixin.cp.bean.msgaudit;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 聊天记录数据内容.
+ *
+ * @author Wang_Wong
+ */
+@Data
+public class WxCpChatModel implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("msgid")
+ private String msgId;
+
+ @SerializedName("action")
+ private String action;
+
+ @SerializedName("send")
+ private String send;
+
+ @SerializedName("from")
+ private String from;
+
+ @SerializedName("tolist")
+ private String[] tolist;
+
+ @SerializedName("roomid")
+ private String roomId;
+
+ @SerializedName("msgtime")
+ private Long msgTime;
+
+ @SerializedName("msgtype")
+ private String msgType;
+
+ /**
+ * 文本
+ */
+ @SerializedName("text")
+ private Text text;
+
+ /**
+ * 图片
+ */
+ @SerializedName("image")
+ private Image image;
+
+ /**
+ * 撤回消息
+ */
+ @SerializedName("revoke")
+ private Revoke revoke;
+
+ /**
+ * 同意会话聊天内容
+ */
+ @SerializedName(value = "agree")
+ private Agree agree;
+
+ @SerializedName(value = "disagree")
+ private Agree disagree;
+
+ /**
+ * 语音
+ */
+ @SerializedName(value = "voice")
+ private Voice voice;
+
+ /**
+ * 视频
+ */
+ @SerializedName(value = "video")
+ private Video video;
+
+ /**
+ * 名片
+ */
+ @SerializedName(value = "card")
+ private Card card;
+
+ /**
+ * 位置
+ */
+ @SerializedName(value = "location")
+ private Location location;
+
+ /**
+ * 表情
+ */
+ @SerializedName(value = "emotion")
+ private Emotion emotion;
+
+ /**
+ * 文件
+ */
+ @SerializedName(value = "file")
+ private File file;
+
+ /**
+ * 链接
+ */
+ @SerializedName(value = "link")
+ private Link link;
+
+ /**
+ * 小程序消息
+ */
+ @SerializedName(value = "weapp")
+ private Weapp weapp;
+
+ /**
+ * 会话记录消息
+ */
+ @SerializedName(value = "chatrecord")
+ private ChatRecord chatRecord;
+
+ /**
+ * 待办消息 官网暂无
+ */
+
+ /**
+ * 投票消息 官网暂无
+ */
+
+ /**
+ * 填表消息
+ */
+ @SerializedName(value = "collect")
+ private Collect collect;
+
+ /**
+ * 红包消息
+ * 互通红包消息
+ */
+ @SerializedName("redpacket")
+ private Redpacket redPacket;
+
+ /**
+ * 会议邀请消息
+ */
+ @SerializedName("meeting")
+ private Meeting meeting;
+
+ /**
+ * 切换企业日志
+ */
+ @SerializedName("time")
+ private Long time;
+
+ @SerializedName("user")
+ private String user;
+
+ /**
+ * 在线文档消息
+ */
+ @SerializedName("doc")
+ private Doc doc;
+
+ @SerializedName("info")
+ private Info info;
+
+ /**
+ * 日程消息
+ */
+ @SerializedName("calendar")
+ private Calendar calendar;
+
+ /**
+ * 混合消息
+ */
+ @SerializedName("mixed")
+ private Mixed mixed;
+
+ /**
+ * 音频存档消息
+ */
+ @SerializedName("voiceid")
+ private String voiceId;
+
+ @SerializedName("meeting_voice_call")
+ private MeetingVoiceCall meetingVoiceCall;
+
+ /**
+ * 音频共享文档消息
+ */
+ @SerializedName("voipid")
+ private String voipId;
+
+ @SerializedName("voip_doc_share")
+ private WxCpFileItem voipDocShare;
+
+ /**
+ * 视频号消息
+ */
+ @SerializedName("sphfeed")
+ private SphFeed sphFeed;
+
+ public static WxCpChatModel fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpChatModel.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+
+ @Getter
+ @Setter
+ public static class Text implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("content")
+ private String content;
+
+ public static Text fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Text.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class Image implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("md5sum")
+ private String md5Sum;
+
+ @SerializedName("sdkfileid")
+ private String sdkFileId;
+
+ @SerializedName("filesize")
+ private Long fileSize;
+
+ public static Image fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Image.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class Revoke implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("pre_msgid")
+ private String preMsgId;
+
+ public static Revoke fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Revoke.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class Agree implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("userid")
+ private String userId;
+
+ @SerializedName(value = "agree_time")
+ private Long agreeTime;
+
+ @SerializedName(value = "disagree_time")
+ private Long disagreeTime;
+
+ public static Agree fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Agree.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class Voice implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("md5sum")
+ private String md5Sum;
+
+ @SerializedName("sdkfileid")
+ private String sdkFileId;
+
+ @SerializedName("voice_size")
+ private Long voiceSize;
+
+ @SerializedName("play_length")
+ private Long playLength;
+
+ public static Voice fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Voice.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class Video implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("md5sum")
+ private String md5Sum;
+
+ @SerializedName("sdkfileid")
+ private String sdkFileId;
+
+ @SerializedName("filesize")
+ private Long fileSize;
+
+ @SerializedName("play_length")
+ private Long playLength;
+
+ public static Video fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Video.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class Card implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("corpname")
+ private String corpName;
+
+ @SerializedName("userid")
+ private String userId;
+
+ public static Card fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Card.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class Location implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("longitude")
+ private Double longitude;
+
+ @SerializedName("latitude")
+ private Double latitude;
+
+ @SerializedName("address")
+ private String address;
+
+ @SerializedName("title")
+ private String title;
+
+ @SerializedName("zoom")
+ private Integer zoom;
+
+ public static Location fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Location.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class Emotion implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("type")
+ private Integer type;
+
+ @SerializedName("width")
+ private Integer width;
+
+ @SerializedName("height")
+ private Integer height;
+
+ @SerializedName("title")
+ private String title;
+
+ @SerializedName("imagesize")
+ private Integer imageSize;
+
+ @SerializedName("md5sum")
+ private String md5Sum;
+
+ @SerializedName("sdkfileid")
+ private String sdkFileId;
+
+ public static Emotion fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Emotion.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class File implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("md5sum")
+ private String md5Sum;
+
+ @SerializedName("filename")
+ private String fileName;
+
+ @SerializedName("fileext")
+ private String fileExt;
+
+ @SerializedName("sdkfileid")
+ private String sdkFileId;
+
+ @SerializedName("filesize")
+ private Integer fileSize;
+
+ public static File fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, File.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class Link implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("title")
+ private String title;
+
+ @SerializedName("description")
+ private String description;
+
+ @SerializedName("link_url")
+ private String linkUrl;
+
+ @SerializedName("image_url")
+ private String imageUrl;
+
+ public static Link fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Link.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ /**
+ * 小程序消息
+ */
+ @Getter
+ @Setter
+ public static class Weapp implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("title")
+ private String title;
+
+ @SerializedName("description")
+ private String description;
+
+ @SerializedName("username")
+ private String userName;
+
+ @SerializedName("displayname")
+ private String displayName;
+
+ public static Weapp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Weapp.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ /**
+ * 会话记录消息
+ */
+ @Getter
+ @Setter
+ public static class ChatRecord implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName(value = "item")
+ private List item;
+
+ @SerializedName("title")
+ private String title;
+
+ public static ChatRecord fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, ChatRecord.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class ChatRecordItem implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("type")
+ private String type;
+
+ @SerializedName("msgtime")
+ private Long msgTime;
+
+ @SerializedName("content")
+ private String content;
+
+ @SerializedName("from_chatroom")
+ private Boolean fromChatRoom;
+
+ public static ChatRecordItem fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, ChatRecordItem.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ /**
+ * 填表消息
+ */
+ @Getter
+ @Setter
+ public static class Collect implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("room_name")
+ private String roomName;
+
+ @SerializedName("creator")
+ private String creator;
+
+ @SerializedName("create_time")
+ private String createTime;
+
+ @SerializedName("title")
+ private String title;
+
+ @SerializedName("details")
+ private List details;
+
+ public static Collect fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Collect.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ @Getter
+ @Setter
+ public static class Details implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("id")
+ private Long id;
+
+ @SerializedName("ques")
+ private String ques;
+
+ @SerializedName("type")
+ private String type;
+
+ public static Details fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Details.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ /**
+ * 红包消息
+ */
+ @Getter
+ @Setter
+ public static class Redpacket implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("type")
+ private Integer type;
+
+ @SerializedName("totalcnt")
+ private Integer totalCnt;
+
+ @SerializedName("totalamount")
+ private Integer totalAmount;
+
+ @SerializedName("wish")
+ private String wish;
+
+ public static Redpacket fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Redpacket.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ /**
+ * 会议邀请消息
+ */
+ @Getter
+ @Setter
+ public static class Meeting implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("topic")
+ private String topic;
+
+ @SerializedName("starttime")
+ private Long startTime;
+
+ @SerializedName("endtime")
+ private Long endTime;
+
+ @SerializedName("address")
+ private String address;
+
+ @SerializedName("remarks")
+ private String remarks;
+
+ @SerializedName("meetingtype")
+ private Integer meetingType;
+
+ @SerializedName("meetingid")
+ private Long meetingId;
+
+ @SerializedName("status")
+ private Integer status;
+
+ public static Meeting fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Meeting.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ /**
+ * 在线文档消息
+ */
+ @Getter
+ @Setter
+ public static class Doc implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("title")
+ private String title;
+
+ @SerializedName("doc_creator")
+ private String docCreator;
+
+ @SerializedName("link_url")
+ private String linkUrl;
+
+ public static Doc fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Doc.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ /**
+ * MarkDown格式消息
+ */
+ @Getter
+ @Setter
+ public static class Info implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("content")
+ private String content;
+
+ @SerializedName("item")
+ private List newsItem;
+
+ public static Info fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Info.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ /**
+ * 图文消息
+ */
+ @Getter
+ @Setter
+ public static class NewsItem implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("title")
+ private String title;
+
+ @SerializedName("description")
+ private String description;
+
+ @SerializedName("url")
+ private String url;
+
+ @SerializedName("picurl")
+ private String picUrl;
+
+ public static NewsItem fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, NewsItem.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ /**
+ * 日程消息
+ */
+ @Getter
+ @Setter
+ public static class Calendar implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("title")
+ private String title;
+
+ @SerializedName("creatorname")
+ private String creatorName;
+
+ @SerializedName("attendeename")
+ private String[] attendeeName;
+
+ @SerializedName("starttime")
+ private Long startTime;
+
+ @SerializedName("endtime")
+ private Long endTime;
+
+ @SerializedName("place")
+ private String place;
+
+ @SerializedName("remarks")
+ private String remarks;
+
+ public static Calendar fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Calendar.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+ /**
+ * 混合消息
+ */
+ @Getter
+ @Setter
+ public static class Mixed implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("item")
+ private List- item;
+
+ @Getter
+ @Setter
+ public static class Item implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("type")
+ private String type;
+
+ @SerializedName("content")
+ private String content;
+
+ }
+
+ }
+
+
+ /**
+ * 音频存档消息
+ */
+ @Getter
+ @Setter
+ public static class MeetingVoiceCall implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("endtime")
+ private Long endTime;
+
+ @SerializedName("sdkfileid")
+ private String sdkFileId;
+
+ @SerializedName("demofiledata")
+ private List
demoFileData;
+
+ @SerializedName("sharescreendata")
+ private List shareScreenData;
+
+ public static MeetingVoiceCall fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, MeetingVoiceCall.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ @Getter
+ @Setter
+ public static class DemoFileData implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("filename")
+ private String fileName;
+
+ @SerializedName("demooperator")
+ private String demoOperator;
+
+ @SerializedName("starttime")
+ private Long startTime;
+
+ @SerializedName("endtime")
+ private Long endTime;
+
+ public static DemoFileData fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, DemoFileData.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+ @Getter
+ @Setter
+ public static class ShareScreenData implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("share")
+ private String share;
+
+ @SerializedName("starttime")
+ private Long startTime;
+
+ @SerializedName("endtime")
+ private Long endTime;
+
+ public static ShareScreenData fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, ShareScreenData.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+ }
+
+
+ /**
+ * 视频号消息
+ */
+ @Getter
+ @Setter
+ public static class SphFeed implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("feed_type")
+ private Integer feedType;
+
+ @SerializedName("sph_name")
+ private String sphName;
+
+ @SerializedName("feed_desc")
+ private String feedDesc;
+
+ public static SphFeed fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, SphFeed.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpCheckAgreeRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpCheckAgreeRequest.java
new file mode 100644
index 0000000000..83d1b18127
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpCheckAgreeRequest.java
@@ -0,0 +1,57 @@
+package me.chanjar.weixin.cp.bean.msgaudit;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.*;
+import lombok.experimental.Accessors;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 获取会话同意情况请求参数.
+ *
+ * @author Wang_Wong
+ * @date 2022-01-21
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+public class WxCpCheckAgreeRequest implements Serializable {
+ private static final long serialVersionUID = -4960239393895754138L;
+
+ @SerializedName("info")
+ private List info;
+
+ public static WxCpCheckAgreeRequest fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpCheckAgreeRequest.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ @Getter
+ @Setter
+ public static class Info implements Serializable {
+ private static final long serialVersionUID = -4960239393895754138L;
+
+ @SerializedName("userid")
+ private String userid;
+
+ @SerializedName("exteranalopenid")
+ private String exteranalOpenId;
+
+ public static Info fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Info.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpFileItem.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpFileItem.java
new file mode 100644
index 0000000000..7b7be15c5f
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpFileItem.java
@@ -0,0 +1,39 @@
+package me.chanjar.weixin.cp.bean.msgaudit;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 会话存档 文档信息对象
+ *
+ * @author Wang_Wong
+ */
+@Data
+public class WxCpFileItem implements Serializable {
+
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("filename")
+ private String fileName;
+
+ @SerializedName("md5sum")
+ private String md5Sum;
+
+ @SerializedName("sdkfileid")
+ private String sdkFileId;
+
+ @SerializedName("filesize")
+ private Long fileSize;
+
+ public static WxCpFileItem fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpFileItem.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpGroupChat.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpGroupChat.java
new file mode 100644
index 0000000000..3a2656bfb0
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/msgaudit/WxCpGroupChat.java
@@ -0,0 +1,61 @@
+package me.chanjar.weixin.cp.bean.msgaudit;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 内部群信息
+ *
+ * @author Wang_Wong
+ */
+@Data
+public class WxCpGroupChat implements Serializable {
+
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("roomname")
+ private String roomName;
+
+ @SerializedName("creator")
+ private String creator;
+
+ @SerializedName("room_create_time")
+ private Long roomCreateTime;
+
+ @SerializedName("notice")
+ private String notice;
+
+ private List members;
+
+ @Getter
+ @Setter
+ public class Member implements Serializable {
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ @SerializedName("memberid")
+ private String memberId;
+
+ @SerializedName("jointime")
+ private Long joinTime;
+
+ public Member fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Member.class);
+ }
+
+ }
+
+ public static WxCpGroupChat fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpGroupChat.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpConfigStorage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpConfigStorage.java
index 02a7af880e..1d7e9685d0 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpConfigStorage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpConfigStorage.java
@@ -174,6 +174,13 @@ public interface WxCpConfigStorage {
*/
String getAesKey();
+ /**
+ * 获取企微会话存档系统库 绝对路径
+ *
+ * @return
+ */
+ String getMsgAuditLibPath();
+
/**
* Gets expires time.
*
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 0fbf61724d..b7304628a7 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
@@ -43,6 +43,7 @@ public class WxCpDefaultConfigImpl implements WxCpConfigStorage, Serializable {
private volatile String token;
private volatile String aesKey;
private volatile long expiresTime;
+ private volatile String msgAuditLibPath;
private volatile String oauth2redirectUri;
private volatile String httpProxyHost;
private volatile int httpProxyPort;
@@ -256,6 +257,11 @@ public String getAesKey() {
return this.aesKey;
}
+ @Override
+ public String getMsgAuditLibPath() {
+ return this.msgAuditLibPath;
+ }
+
/**
* Sets aes key.
*
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImpl.java
index 027ab825c7..89b939e613 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImpl.java
@@ -40,6 +40,7 @@ public class WxCpRedisConfigImpl implements WxCpConfigStorage {
private volatile String token;
private volatile String aesKey;
private volatile Integer agentId;
+ private volatile String msgAuditLibPath;
private volatile String oauth2redirectUri;
private volatile String httpProxyHost;
private volatile int httpProxyPort;
@@ -320,6 +321,11 @@ public String getAesKey() {
return this.aesKey;
}
+ @Override
+ public String getMsgAuditLibPath() {
+ return this.msgAuditLibPath;
+ }
+
/**
* Sets aes key.
*
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 a55b4726f1..374c7947c5 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
@@ -129,6 +129,12 @@ interface Living {
String DELETE_REPLAY_DATA = "/cgi-bin/living/delete_replay_data";
}
+ interface MsgAudit {
+ String GET_PERMIT_USER_LIST = "/cgi-bin/msgaudit/get_permit_user_list";
+ String GET_GROUP_CHAT = "/cgi-bin/msgaudit/groupchat/get";
+ String CHECK_SINGLE_AGREE = "/cgi-bin/msgaudit/check_single_agree";
+ }
+
interface Tag {
String TAG_CREATE = "/cgi-bin/tag/create";
String TAG_UPDATE = "/cgi-bin/tag/update";
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/crypto/WxCpCryptUtil.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/crypto/WxCpCryptUtil.java
index 2914945b89..d36a1ce342 100755
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/crypto/WxCpCryptUtil.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/crypto/WxCpCryptUtil.java
@@ -4,6 +4,12 @@
import com.google.common.io.BaseEncoding;
import me.chanjar.weixin.common.util.crypto.WxCryptUtil;
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Cipher;
+import java.security.KeyFactory;
+import java.security.PrivateKey;
+import java.security.spec.PKCS8EncodedKeySpec;
public class WxCpCryptUtil extends WxCryptUtil {
public WxCpCryptUtil(WxCpConfigStorage wxCpConfigStorage) {
@@ -21,4 +27,31 @@ public WxCpCryptUtil(WxCpConfigStorage wxCpConfigStorage) {
this.aesKey = BaseEncoding.base64().decode(CharMatcher.whitespace().removeFrom(encodingAesKey));
}
+ /**
+ * 会话存档接口解密私钥
+ * 企业获取的会话内容将用公钥加密,企业用自行保存的私钥解开会话内容数据
+ *
+ * @param encryptRandomKey
+ * @param msgAuditPriKey
+ * @return
+ * @throws Exception
+ */
+ public static String decryptByPriKey(String encryptRandomKey, String msgAuditPriKey) throws Exception {
+ String privateKey = msgAuditPriKey.replaceAll("\\n", "")
+ .replace("-----BEGIN PRIVATE KEY-----", "")
+ .replace("-----END PRIVATE KEY-----", "")
+ .replaceAll(" ", "");
+
+ byte[] keyByte = Base64.decodeBase64(privateKey);
+ PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyByte);
+ KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+ PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
+
+ Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
+ cipher.init(Cipher.DECRYPT_MODE, priKey);
+ byte[] utf8 = cipher.doFinal(Base64.decodeBase64(encryptRandomKey));
+
+ return new String(utf8, "UTF-8");
+ }
+
}
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMsgAuditTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMsgAuditTest.java
new file mode 100644
index 0000000000..457996a0e4
--- /dev/null
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMsgAuditTest.java
@@ -0,0 +1,433 @@
+package me.chanjar.weixin.cp.api;
+import com.google.common.collect.Lists;
+
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
+import me.chanjar.weixin.cp.bean.msgaudit.*;
+import me.chanjar.weixin.cp.config.WxCpConfigStorage;
+import me.chanjar.weixin.cp.demo.WxCpDemoInMemoryConfigStorage;
+import org.testng.annotations.Test;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * 企业微信会话内容存档测试类.
+ * 官方文档:https://developer.work.weixin.qq.com/document/path/91360
+ *
+ * @author Wang_Wong
+ * @date 2022-01-17
+ */
+@Slf4j
+public class WxCpMsgAuditTest {
+
+ private static WxCpConfigStorage wxCpConfigStorage;
+ private static WxCpService cpService;
+
+ // com.binarywang.spring.starter.wxjava.cp.config.WxCpServiceAutoConfiguration
+ @Test
+ public void test() throws Exception {
+
+ InputStream inputStream = ClassLoader.getSystemResourceAsStream("test-config.xml");
+ WxCpDemoInMemoryConfigStorage config = WxCpDemoInMemoryConfigStorage.fromXml(inputStream);
+
+ wxCpConfigStorage = config;
+ cpService = new WxCpServiceImpl();
+ cpService.setWxCpConfigStorage(config);
+
+ /**
+ * 配置:
+ *
+ * wwa3bexxXXXXXX
+ * 自定义agentId
+ * xIpum7Yt4NMXXXXXXX
+ * 2bSNqXXXXXXXX
+ * MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDZuPVMyVyMvJkdSCZA893B2pggd1r95T8k2QZgz+VejtaDJCbD60mYoW1Uwwlwuqy8W78M6MmXsskn+5XunyR1WJlJGqgi0OMVGYvSfkNb9kD50fM21CGLcN1y4miL9fVNBIsvJmIUeJCNS8TioAVGFvh2EgzjqTR1gHfDwu8If7rfGmTHkPYL8hQxMg/EQ3451JOIBHSa7EQSx64SIoVWEgSDFQjGEpjUiJRfciyyz+nTSkEDgFa9hpyTS6E0c/3Q5lVDFgIwTArC19XBFKb00PbcFuLriOIsTBX4K9XWBtefVXowAdqUVQDH6BNUIK7/iVPQ4L3p+F5DBOrx8I/7AgMBAAECggEBAK53C/nwEX2lU3ynaB/8SuMga274ta1mmmbIkdfaQA65nyOPQJEWZe8szBN0BoiSzgBR9JI/p+srlQ25CLgiRnDSAmMWPU1I3e72fZi7HPcAKakGmEKDUi4OzyVUUDp3aY3B6lZqB4Yn5o2S/b4sRI2ZspfKdxGncSYHP/Far3i6hzq2C1hbyYM6HkHPcrQ+z6ir6GxjLvHXssVJ+/C0HMsVIQAWPyEGbzWozS+EswmQ+itk+7cewiLWbaCSp6lsjHKGTxJwCxRes0nUt2SfkLnIUkDLxB7c6zDQJCn1K2UckCjNBlCWl+oDWLkLQ7UAJ+4IYYSslR4wXzRg8PplW8ECgYEA9VlEprEoG2oSn3HXIMFg0MANViQe89QJQdwd7D5h4FLxXQLItxqmZj77iktlzlICcK9WT9WHRY1AOilsuMaDmY0VH3Z8r/X9BU712KFJqMYH5CNxrqHOya3BG+CclEKToaOTmo9kiOpFAMNSuuWs6gvILJ0CKEmSUo5G9fJu4fkCgYEA4yypHoRZIP0mDdVDeVtdHHcq5JdWF6xbAFs4P57VHG1KDMWouk3IHSeO279gEIwcBAdaLcMMgFfzyQBwcisxjC76oyoZnbSntB7ZMFdPqALKfxIdleLilbASuRKesVAF+OgOx/yp/aQUeLG2pVBivgn2TyGMwjnxznTh9vh+vpMCgYEAmOva7krdRLkIgnjiLXhab8JEjbxVzoQKgRJBVE5NkxQffGmP0RC7Rl9bSQdVnRNgkfu3QGtGtQMlVRscuM6Cl+JnmASyErqvye89LJja4GcN5BRzdvVDflDeXBHThlU4zza1eVCGyQ+7ko4rsnIVJIvTaHs0LQguO2aStBk3I4ECgYAyBsO3VK3L9fNLWItjThtTCWsIq8rpq6reiTf5yqBjgi2sYlqlrDtFMFDlU190RWZl/Lh/G1TFbpjgypf4jEp89Ft9UugRMpc7sw9g9dk0xmiRUwvw1eXP0NZOqysHIPgvt+qJX7qPgHKBoaD3Bpy3/Lmg82Jr4xa8wECCgnZmwQKBgH7hirPs1/HqBrbxS726IZUf9QTmVkyOYIwzuwFYKb/+4caSah+iaXexVux0xS5tchj/6c1dQSKJmlegV8smIb6EEcko7llA1y1P5QFtXtaaRd07tTsv3BKEg496YLRjbxPzgJn6Fsoz3TTdGwESL8Q3I2h0WmVVhmr/rjr+RkWQ
+ *
+ * 注意:最好先配置lib开头的系统库,再配置sdk类库,配置绝对路径,最好配置为linux路径
+ * windows:
+ * D:/WorkSpace/libcrypto-1_1-x64.dll,libssl-1_1-x64.dll,libcurl-x64.dll,WeWorkFinanceSdk.dll,libWeWorkFinanceSdk_Java.so
+ * linux:
+ * /www/osfile/work_msg_storage/libcrypto-1_1-x64.dll,libssl-1_1-x64.dll,libcurl-x64.dll,WeWorkFinanceSdk.dll,libWeWorkFinanceSdk_Java.so
+ *
+ */
+
+ /**
+ * 建议放到redis,本次请求获取消息记录开始的seq值。首次访问填写0,非首次使用上次企业微信返回的最大seq。允许从任意seq重入拉取。
+ */
+ long seq = 0L;
+
+ /**
+ * 图片,语音,视频,表情,文件,音频存档消息,音频共享文档消息调用 获取媒体消息
+ */
+ List mediaType = Arrays.asList(new String[]{"image", "voice", "video", "emotion", "file", "meeting_voice_call", "voip_doc_share"});
+
+ // 模拟多次拉取数据,根据seq拉取
+ for (int i = 0; i < 3; i++) {
+ // 本次请求获取消息记录开始的seq值。首次访问填写0,非首次使用上次企业微信返回的最大seq。允许从任意seq重入拉取。
+ WxCpChatDatas chatDatas = cpService.getMsgAuditService().getChatDatas(seq, 10L, null, null, 1000L);
+ if (chatDatas != null && chatDatas.getChatData().size() > 0) {
+
+ List chatdata = chatDatas.getChatData();
+ Iterator iterator = chatdata.iterator();
+ while (iterator.hasNext()) {
+ WxCpChatDatas.WxCpChatData chatData = iterator.next();
+ seq = chatData.getSeq();
+
+ // 数据
+// String msgId = chatData.getMsgId();
+// String encryptChatMsg = chatData.getEncryptChatMsg();
+// String encryptRandomKey = chatData.getEncryptRandomKey();
+// Integer publickeyVer = chatData.getPublickeyVer();
+
+ // 获取明文数据
+ final String chatPlainText = cpService.getMsgAuditService().getChatPlainText(chatData);
+ final WxCpChatModel wxCpChatModel = WxCpChatModel.fromJson(chatPlainText);
+ log.info("明文数据为:{}", wxCpChatModel.toJson());
+
+ // 获取消息数据
+ final WxCpChatModel decryptData = cpService.getMsgAuditService().getDecryptData(chatData);
+ log.info("获取消息数据为:{}", decryptData.toJson());
+
+ /**
+ * 注意:
+ * 根据上面返回的文件类型来获取媒体文件,
+ * 不同的文件类型,拼接好存放文件的绝对路径,写入文件流,获取媒体文件。(拼接绝对文件路径的原因,以便上传到腾讯云或阿里云对象存储)
+ *
+ * 目标文件绝对路径+实际文件名,比如:/usr/local/file/20220114/474f866b39d10718810d55262af82662.gif
+ */
+ String path = "/usr/local/file/";
+ String msgType = decryptData.getMsgType();
+ if (mediaType.contains(decryptData.getMsgType())) {
+ // 文件后缀
+ String suffix = "";
+ // 文件名md5
+ String md5Sum = "";
+ // sdkFileId
+ String sdkFileId = "";
+ switch (msgType) {
+ case "image":
+ suffix = ".jpg";
+ md5Sum = decryptData.getImage().getMd5Sum();
+ sdkFileId = decryptData.getImage().getSdkFileId();
+ break;
+ case "voice":
+ suffix = ".amr";
+ md5Sum = decryptData.getVoice().getMd5Sum();
+ sdkFileId = decryptData.getVoice().getSdkFileId();
+ break;
+ case "video":
+ suffix = ".mp4";
+ md5Sum = decryptData.getVideo().getMd5Sum();
+ sdkFileId = decryptData.getVideo().getSdkFileId();
+ break;
+ case "emotion":
+ md5Sum = decryptData.getEmotion().getMd5Sum();
+ sdkFileId = decryptData.getEmotion().getSdkFileId();
+ int type = decryptData.getEmotion().getType();
+ switch (type) {
+ case 1:
+ suffix = ".gif";
+ break;
+ case 2:
+ suffix = ".png";
+ break;
+ default:
+ return;
+ }
+ break;
+ case "file":
+ md5Sum = decryptData.getFile().getMd5Sum();
+ suffix = "." + decryptData.getFile().getFileExt();
+ sdkFileId = decryptData.getFile().getSdkFileId();
+ break;
+ // 音频存档消息
+ case "meeting_voice_call":
+
+ md5Sum = decryptData.getVoiceId();
+ sdkFileId = decryptData.getMeetingVoiceCall().getSdkFileId();
+ for (WxCpChatModel.MeetingVoiceCall.DemoFileData demofiledata : decryptData.getMeetingVoiceCall().getDemoFileData()) {
+ String demoFileDataFileName = demofiledata.getFileName();
+ suffix = demoFileDataFileName.substring(demoFileDataFileName.lastIndexOf(".") + 1);
+ }
+
+ break;
+ // 音频共享文档消息
+ case "voip_doc_share":
+
+ md5Sum = decryptData.getVoipId();
+ WxCpFileItem docShare = decryptData.getVoipDocShare();
+ String fileName = docShare.getFileName();
+ suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
+
+ break;
+ default:
+ return;
+ }
+
+ // 拉取媒体文件
+ String targetPath = path + md5Sum + suffix;
+ cpService.getMsgAuditService().getMediaFile(sdkFileId, null, null, 1000L, targetPath);
+
+ }
+
+ }
+
+ }
+
+ }
+
+
+ /**
+ * 文本
+ */
+// String text = "{\"msgid\":\"CAQQluDa4QUY0On2rYSAgAMgzPrShAE=\",\"action\":\"send\",\"from\":\"XuJinSheng\",\"tolist\":[\"icefog\"],\"roomid\":\"\",\"msgtime\":1547087894783,\"msgtype\":\"text\",\"text\":{\"content\":\"test\"}}";
+ String text = "{\"msgid\":\"CAQQluDa4QUY0On2rYSAgAMgzPrShAE=\",\"action\":\"send\",\"from\":\"XuJinSheng\",\"tolist\":[\"icefog\"],\"roomid\":\"\",\"msgtime\":1547087894783,\"msgtype\":\"text\",\"text\":{\"content\":\"这是一条引用/回复消息:\\\"\\n------\\n@nick777\"}}";
+ WxCpChatModel modelText = WxCpChatModel.fromJson(text);
+ log.info("数据为:" + modelText.toJson());
+
+
+ /**
+ * 图片
+ */
+ String image = "{\"msgid\":\"CAQQvPnc4QUY0On2rYSAgAMgooLa0Q8=\",\"action\":\"send\",\"from\":\"XuJinSheng\",\"tolist\":[\"icefog\"],\"roomid\":\"\",\"msgtime\":0,\"msgtype\":\"image\",\"image\":{\"md5sum\":\"50de8e5ae8ffe4f1df7a93841f71993a\",\"filesize\":70961,\"sdkfileid\":\"CtYBMzA2OTAyMDEwMjA0NjIzMDYwMDIwMTAwMDIwNGI3ZmU0MDZlMDIwMzBmNTliMTAyMDQ1YzliNTQ3NzAyMDQ1YzM3M2NiYzA0MjQ2NjM0MzgzNTM0NjEzNTY1MmQzNDYxMzQzODJkMzQzMTYxNjEyZDM5NjEzOTM2MmQ2MTM2NjQ2NDY0NjUzMDY2NjE2NjM1MzcwMjAxMDAwMjAzMDExNTQwMDQxMDUwZGU4ZTVhZThmZmU0ZjFkZjdhOTM4NDFmNzE5OTNhMDIwMTAyMDIwMTAwMDQwMBI4TkRkZk1UWTRPRGcxTVRBek1ETXlORFF6TWw4eE9UUTVOamN6TkRZMlh6RTFORGN4TWpNNU1ERT0aIGEwNGQwYWUyM2JlYzQ3NzQ5MjZhNWZjMjk0ZTEyNTkz\"}}";
+ WxCpChatModel modelImage = WxCpChatModel.fromJson(image);
+ log.info("数据为:" + modelImage.toJson());
+
+
+ /**
+ * 撤回消息
+ */
+ String revoke = "{\"msgid\":\"15775510700152506326_1603875615\",\"action\":\"recall\",\"from\":\"kenshin\",\"tolist\":[\"wmUu0zBgAALV7ZymkcMyxvbTe8YdWxxA\"],\"roomid\":\"\",\"msgtime\":1603875615723,\"msgtype\":\"revoke\",\"revoke\":{\"pre_msgid\":\"14822339130656386894_1603875600\"}}";
+ WxCpChatModel modelRevoke = WxCpChatModel.fromJson(revoke);
+ log.info("数据为:" + modelRevoke.toJson());
+
+
+ /**
+ * 同意会话聊天内容
+ */
+ String agree = "{\"msgid\":\"8891446340739254950_1603875826\",\"action\":\"send\",\"from\":\"wmGAgeDQAAvQeaTqWwkMTxGMkvI7OOuQ\",\"tolist\":[\"kenshin\"],\"roomid\":\"\",\"msgtime\":1603875826656,\"msgtype\":\"agree\",\"agree\":{\"userid\":\"wmGAgeDQAAvQeaTqWwkMTxGMkvI7OOuQ\",\"agree_time\":1603875826656}}";
+ String disagree = "{\"msgid\":\"17972321270926900092_1603875944\",\"action\":\"send\",\"from\":\"wmErxtDgAA9AW32YyyuYRimKr7D1KWlw\",\"tolist\":[\"kenshin\"],\"roomid\":\"\",\"msgtime\":1603875944122,\"msgtype\":\"disagree\",\"disagree\":{\"userid\":\"wmErxtDgAA9AW32YyyuYRimKr7D1KWlw\",\"disagree_time\":1603875944122}}";
+ WxCpChatModel modelAgree = WxCpChatModel.fromJson(agree);
+ WxCpChatModel modelDisagree = WxCpChatModel.fromJson(disagree);
+ log.info("数据为:" + modelAgree.toJson());
+ log.info("数据为:" + modelDisagree.toJson());
+
+
+ /**
+ * 语音
+ */
+ String voice = "{\"msgid\":\"10958372969718811103_1603875609\",\"action\":\"send\",\"from\":\"wmGAgeDQAAdBjb8CK4ieMPRm7Cqm-9VA\",\"tolist\":[\"kenshin\"],\"roomid\":\"\",\"msgtime\":1603875609704,\"msgtype\":\"voice\",\"voice\":{\"md5sum\":\"9db09c7fa627c9e53f17736c786a74d5\",\"voice_size\":6810,\"play_length\":10,\"sdkfileid\":\"kcyZjZqOXhETGYxajB2Zkp5Rk8zYzh4RVF3ZzZGdXlXNWRjMUoxVGZxbzFTTDJnQ2YxL0NraVcxUUJNK3VUamhEVGxtNklCbjZmMEEwSGRwN0h2cU1GQTU1MDRSMWdTSmN3b25ZMkFOeG5hMS90Y3hTQ0VXRlVxYkR0Ymt5c3JmV2VVcGt6UlNXR1ZuTFRWVGtudXVldDRjQ3hscDBrMmNhMFFXVnAwT3Y5NGVqVGpOcWNQV2wrbUJwV01TRm9xWmNDRVVrcFY5Nk9OUS9GbXIvSmZvOVVZZjYxUXBkWnMvUENkVFQxTHc2N0drb2pJT0FLZnhVekRKZ1FSNDU3ZnZtdmYvTzZDOG9DRXl2SUNIOHc9PRI0TkRkZk56ZzRNVE13TVRjMk5qQTRNak0yTmw4ek5qRTVOalExTjE4eE5qQXpPRGMxTmpBNRogNzM3MDY2NmM2YTc5Njg3NDdhNzU3NDY0NzY3NTY4NjY=\"}}";
+ WxCpChatModel modelVoice = WxCpChatModel.fromJson(voice);
+ log.info("数据为:" + modelVoice.toJson());
+
+
+ /**
+ * 视频
+ */
+ String video = "{\"msgid\":\"17955920891003447432_1603875627\",\"action\":\"send\",\"from\":\"kenshin\",\"tolist\":[\"wmGAgeDQAAHuRJbt4ZQI_1cqoQcf41WQ\"],\"roomid\":\"\",\"msgtime\":1603875626823,\"msgtype\":\"video\",\"video\":{\"md5sum\":\"d06fc80c01d6fbffcca3b229ba41eac6\",\"filesize\":15169724,\"play_length\":108,\"sdkfileid\":\"MzAzMjYxMzAzNTYzMzgzMjMyMzQwMjAxMDAwMjA0MDBlNzc4YzAwNDEwZDA2ZmM4MGMwMWQ2ZmJmZmNjYTNiMjI5YmE0MWVhYzYwMjAxMDQwMjAxMDAwNDAwEjhORGRmTVRZNE9EZzFNREEyTlRjM056QXpORjgxTWpZeE9USTBOek5mTVRZd016ZzNOVFl5Tnc9PRogNTIzNGQ1NTQ5N2RhNDM1ZDhlZTU5ODk4NDQ4NzRhNDk=\"}}";
+ WxCpChatModel modelVideo = WxCpChatModel.fromJson(video);
+ log.info("数据为:" + modelVideo.toJson());
+
+
+ /**
+ * 名片
+ */
+ String card = "{\"msgid\":\"13714216591700685558_1603875680\",\"action\":\"send\",\"from\":\"kenshin\",\"tolist\":[\"wmGAgeDQAAy2Dtr0F8aK4dTuatfm-5Rg\"],\"roomid\":\"\",\"msgtime\":1603875680377,\"msgtype\":\"card\",\"card\":{\"corpname\":\"微信联系人\",\"userid\":\"wmGAgeDQAAGjFmfnP7A3j2JxQDdLNhSw\"}}";
+ WxCpChatModel modelCard = WxCpChatModel.fromJson(card);
+ log.info("数据为:" + modelCard.toJson());
+
+
+ /**
+ * 位置
+ */
+ String location = "{\"msgid\":\"2641513858500683770_1603876152\",\"action\":\"send\",\"from\":\"icefog\",\"tolist\":[\"wmN6etBgAA0sbJ3invMvRxPQDFoq9uWA\"],\"roomid\":\"\",\"msgtime\":1603876152141,\"msgtype\":\"location\",\"location\":{\"longitude\":116.586285899,\"latitude\":39.911125799,\"address\":\"北京市xxx区xxx路xxx大厦x座\",\"title\":\"xxx管理中心\",\"zoom\":15}}";
+ WxCpChatModel modelLocation = WxCpChatModel.fromJson(location);
+ log.info("数据为:" + modelLocation.toJson());
+
+
+ /**
+ * 表情
+ */
+ String emotion = "{\"msgid\":\"6623217619416669654_1603875612\",\"action\":\"send\",\"from\":\"icef\",\"tolist\":[\"wmErxtDgAAhteCglUZH2kUt3rq431qmg\"],\"roomid\":\"\",\"msgtime\":1603875611148,\"msgtype\":\"emotion\",\"emotion\":{\"type\":1,\"width\":290,\"height\":290,\"imagesize\":962604,\"md5sum\":\"94c2b0bba52cc456cb8221b248096612\",\"sdkfileid\":\"4eE1ESTVNalE1TnprMFh6RTJNRE00TnpVMk1UST0aIDc0NzI2NjY1NzE3NTc0Nzg2ZDZlNzg2YTY5NjY2MTYx\"}}";
+ WxCpChatModel modelEmotion = WxCpChatModel.fromJson(emotion);
+ log.info("数据为:" + modelEmotion.toJson());
+
+
+ /**
+ * 文件
+ */
+ String file = "{\"msgid\":\"18039699423706571225_1603875608\",\"action\":\"send\",\"from\":\"kens\",\"tolist\":[\"wmErxtDgAArDlFIhf76O6w4GxU81al8w\"],\"roomid\":\"\",\"msgtime\":1603875608214,\"msgtype\":\"file\",\"file\":{\"md5sum\":\"18e93fc2ea884df23b3d2d3b8667b9f0\",\"filename\":\"资料.docx\",\"fileext\":\"docx\",\"filesize\":18181,\"sdkfileid\":\"E4ODRkZjIzYjNkMmQzYjg2NjdiOWYwMDIwMTA1MDIwMTAwMDQwMBI4TkRkZk1UWTRPRGcxTURrek9UZzBPVEF6TTE4eE1EUXpOVGcxTlRVNVh6RTJNRE00TnpVMk1EZz0aIDMwMzkzMzY0NjEzNjM3NjY2NDY1NjMzNjYxMzIzNzYx\"}}";
+ WxCpChatModel modelFile = WxCpChatModel.fromJson(file);
+ log.info("数据为:" + modelFile.toJson());
+
+
+ /**
+ * 链接
+ */
+ String link = "{\"msgid\":\"11788441727514772650_1603875624\",\"action\":\"send\",\"from\":\"kenshin\",\"tolist\":[\"0000726\"],\"roomid\":\"\",\"msgtime\":1603875624476,\"msgtype\":\"link\",\"link\":{\"title\":\"邀请你加入群聊\",\"description\":\"技术支持群,进入可查看详情\",\"link_url\":\"https://work.weixin.qq.com/wework_admin/external_room/join/exceed?vcode=xxx\",\"image_url\":\"https://wework.qpic.cn/wwpic/xxx/0\"}}";
+ WxCpChatModel modelLink = WxCpChatModel.fromJson(link);
+ log.info("数据为:" + modelLink.toJson());
+
+
+ /**
+ * 小程序消息
+ */
+ String weapp = "{\"msgid\":\"11930598857592605935_1603875608\",\"action\":\"send\",\"from\":\"kens\",\"tolist\":[\"wmGAgeDQAAsgQetTQGqRbMxrkodpM3fA\"],\"roomid\":\"\",\"msgtime\":1603875608691,\"msgtype\":\"weapp\",\"weapp\":{\"title\":\"开始聊天前请仔细阅读服务须知事项\",\"description\":\"客户需同意存档聊天记录\",\"username\":\"xxx@app\",\"displayname\":\"服务须知\"}}";
+ WxCpChatModel modelWeapp = WxCpChatModel.fromJson(weapp);
+ log.info("数据为:" + modelWeapp.toJson());
+
+
+ /**
+ * 会话记录消息
+ */
+ String chatrecord = "{\"msgid\":\"11354299838102555191_1603875658\",\"action\":\"send\",\"from\":\"ken\",\"tolist\":[\"icef\"],\"roomid\":\"\",\"msgtime\":1603875657905,\"msgtype\":\"chatrecord\",\"chatrecord\":{\"title\":\"群聊\",\"item\":[{\"type\":\"ChatRecordText\",\"msgtime\":1603875610,\"content\":\"{\\\"content\\\":\\\"test\\\"}\",\"from_chatroom\":false},{\"type\":\"ChatRecordText\",\"msgtime\":1603875620,\"content\":\"{\\\"content\\\":\\\"test2\\\"}\",\"from_chatroom\":false}]}}";
+ WxCpChatModel modelChatRecord = WxCpChatModel.fromJson(chatrecord);
+ log.info("数据为:" + modelChatRecord.toJson());
+
+
+ /**
+ * 填表消息
+ */
+ String collect = "{\"msgid\":\"2500536226619379797_1576034482\",\"action\":\"send\",\"from\":\"nick\",\"tolist\":[\"XuJinSheng\",\"15108264797\"],\"roomid\":\"wrjc7bDwYAOAhf9quEwRRxyyoMm0QAAA\",\"msgtime\":1576034482344,\"msgtype\":\"collect\",\"collect\":{\"room_name\":\"这是一个群\",\"creator\":\"nick\",\"create_time\":\"2019-12-11 11:21:22\",\"title\":\"这是填表title\",\"details\":[{\"id\":1,\"ques\":\"表项1,文本\",\"type\":\"Text\"},{\"id\":2,\"ques\":\"表项2,数字\",\"type\":\"Number\"},{\"id\":3,\"ques\":\"表项3,日期\",\"type\":\"Date\"},{\"id\":4,\"ques\":\"表项4,时间\",\"type\":\"Time\"}]}}";
+ WxCpChatModel modelCollect = WxCpChatModel.fromJson(collect);
+ log.info("数据为:" + modelCollect.toJson());
+
+
+ /**
+ * 红包消息
+ */
+ String redpacket = "{\"msgid\":\"333590477316965370_1603877439\",\"action\":\"send\",\"from\":\"kens\",\"tolist\":[\"1000000444696\"],\"roomid\":\"\",\"msgtime\":1603877439038,\"msgtype\":\"redpacket\",\"redpacket\":{\"type\":1,\"wish\":\"恭喜发财,大吉大利\",\"totalcnt\":1,\"totalamount\":3000}}";
+ WxCpChatModel modelRedpacket = WxCpChatModel.fromJson(redpacket);
+ log.info("数据为:" + modelRedpacket.toJson());
+
+
+ /**
+ * 会议邀请信息
+ */
+ String meeting = "{\"msgid\":\"5935786683775673543_1603877328\",\"action\":\"send\",\"from\":\"ken\",\"tolist\":[\"icef\",\"test\"],\"roomid\":\"wr2vOpDgAAN4zVWKbS\",\"msgtime\":1603877328914,\"msgtype\":\"meeting\",\"meeting\":{\"topic\":\"夕会\",\"starttime\":1603877400,\"endtime\":1603881000,\"address\":\"\",\"remarks\":\"\",\"meetingtype\":102,\"meetingid\":1210342560,\"status\":1}}";
+ WxCpChatModel modelMeeting = WxCpChatModel.fromJson(meeting);
+ log.info("数据为:" + modelMeeting.toJson());
+
+
+ /**
+ * 切换企业日志
+ */
+ String switchlog = "{\"msgid\":\"125289002219525886280\",\"action\":\"switch\",\"time\":1554119421840,\"user\":\"XuJinSheng\"}";
+ WxCpChatModel modelSwitchLog = WxCpChatModel.fromJson(switchlog);
+ log.info("数据为:" + modelSwitchLog.toJson());
+
+
+ /**
+ * 在线文档消息
+ */
+ String docMsg = "{\"msgid\":\"9732089160923053207_1603877765\",\"action\":\"send\",\"from\":\"ken\",\"tolist\":[\"icef\",\"test\"],\"roomid\":\"wrJawBCQAAStr3jxVxEH\",\"msgtime\":1603877765291,\"msgtype\":\"docmsg\",\"doc\":{\"title\":\"测试&演示客户\",\"doc_creator\":\"test\",\"link_url\":\"https://doc.weixin.qq.com/txdoc/excel?docid=xxx\"}}";
+ WxCpChatModel modelDocMsg = WxCpChatModel.fromJson(docMsg);
+ log.info("数据为:" + modelDocMsg.toJson());
+
+
+ /**
+ * MarkDown格式消息
+ */
+ String markDown = "{\"msgid\":\"7546287934688259248_1603875715\",\"action\":\"send\",\"from\":\"ken\",\"tolist\":[\"icef\",\"test\"],\"roomid\":\"wr0SfLCgAAgCaCPeM33UNe\",\"msgtime\":1603875715782,\"msgtype\":\"markdown\",\"info\":{\"content\":\"请前往系统查看,谢谢。\"}}";
+ WxCpChatModel modelMarkDown = WxCpChatModel.fromJson(markDown);
+ log.info("数据为:" + modelMarkDown.toJson());
+
+
+ /**
+ * 图文消息
+ */
+ String news = "{\"msgid\":\"118732825779547782215\",\"action\":\"send\",\"from\":\"kens\",\"tolist\":[\"icef\",\"test\"],\"roomid\":\"wrErxtDgAA0jgXE5\",\"msgtime\":1603876045165,\"msgtype\":\"news\",\"info\":{\"item\":[{\"title\":\"service \",\"description\":\"test\",\"url\":\"http://xxx\",\"picurl\":\"https://www.qq.com/xxx.jpg\"}]}}";
+ WxCpChatModel modelNews = WxCpChatModel.fromJson(news);
+ log.info("数据为:" + modelNews.toJson());
+
+
+ /**
+ * 日程消息
+ */
+ String calendar = "{\"msgid\":\"2345881211604379705_1603877680\",\"action\":\"send\",\"from\":\"ken\",\"tolist\":[\"icef\",\"test\"],\"roomid\":\"wr2LO0CAAAFrTZCGWWAxBA\",\"msgtime\":1603877680795,\"msgtype\":\"calendar\",\"calendar\":{\"title\":\"xxx业绩复盘会\",\"creatorname\":\"test\",\"attendeename\":[\"aaa\",\"bbb\"],\"starttime\":1603882800,\"endtime\":1603886400,\"place\":\"\",\"remarks\":\"\"}}";
+ WxCpChatModel modelCalendar = WxCpChatModel.fromJson(calendar);
+ log.info("数据为:" + modelCalendar.toJson());
+
+
+ /**
+ * 混合消息
+ */
+ String mixed = "{\"msgid\":\"DAQQluDa4QUY0On4kYSABAMgzPrShAE=\",\"action\":\"send\",\"from\":\"HeMiao\",\"tolist\":[\"HeChangTian\",\"LiuZeYu\"],\"roomid\":\"wr_tZ2BwAAUwHpYMwy9cIWqnlU3Hzqfg\",\"msgtime\":1577414359072,\"msgtype\":\"mixed\",\"mixed\":{\"item\":[{\"type\":\"text\",\"content\":\"{\\\"content\\\":\\\"你好[微笑]\\\\n\\\"}\"},{\"type\":\"image\",\"content\":\"{\\\"md5sum\\\":\\\"368b6c18c82e6441bfd89b343e9d2429\\\",\\\"filesize\\\":13177,\\\"sdkfileid\\\":\\\"CtYBMzA2OTAyMDEwMjA0NjIzMDYwMDIwMTAwMDWwNDVmYWY4Y2Q3MDIwMzBmNTliMTAyMDQwYzljNTQ3NzAyMDQ1ZTA1NmFlMjA0MjQ2NjM0NjIzNjY2MzYzNTMyMmQzNzYxMzQ2NDJkMzQ2MjYxNjQyZDM4MzMzMzM4MmQ3MTYyMzczMTM4NjM2NDYxMzczMjY2MzkwMjAxMDAwMjAzMDIwMDEwMDQxMDM2OGI2YzE4YzgyZTY0NDFiZmQ4OWIyNDNlOWQyNDI4MDIwMTAyMDIwMTAwMDQwMBI4TkRkZk2UWTRPRGcxTVRneE5URTFNRGc1TVY4eE1UTTFOak0yTURVeFh6RTFOemMwTVRNek5EYz0aIDQzMTY5NDFlM2MxZDRmZjhhMjEwY2M0NDQzZGUXOTEy\\\"}\"}]}}";
+ WxCpChatModel modelMixed = WxCpChatModel.fromJson(mixed);
+ log.info("获取混合消息,文件对象为:{}", modelMixed.getMixed().getItem().get(0).getContent());
+
+ // 返回文件对象
+ WxCpFileItem wxCpFileItem = WxCpFileItem.fromJson(modelMixed.getMixed().getItem().get(1).getContent());
+ log.info("获取混合消息,文件对象为:{}", wxCpFileItem.toJson());
+ log.info("数据为:" + modelMixed.toJson());
+
+
+ /**
+ * 音频存档消息
+ */
+ String meetingVoiceCall = "{\"msgid\":\"17952229780246929345_1594197637\",\"action\":\"send\",\"from\":\"wo137MCgAAYW6pIiKKrDe5SlzEhSgwbA\",\"tolist\":[\"wo137MCgAAYW6pIiKKrDe5SlzEhSgwbA\"],\"msgtime\":1594197581203,\"msgtype\":\"meeting_voice_call\",\"voiceid\":\"grb8a4c48a3c094a70982c518d55e40557\",\"meeting_voice_call\":{\"endtime\":1594197635,\"sdkfileid\":\"CpsBKjAqd0xhb2JWRUJldGtwcE5DVTB6UjRUalN6c09vTjVyRnF4YVJ5M24rZC9YcHF3cHRPVzRwUUlaMy9iTytFcnc0SlBkZDU1YjRNb0MzbTZtRnViOXV5WjUwZUIwKzhjbU9uRUlxZ3pyK2VXSVhUWVN2ejAyWFJaTldGSkRJVFl0aUhkcVdjbDJ1L2RPbjJsRlBOamJaVDNnPT0SOE5EZGZNVFk0T0RnMU16YzVNVGt5T1RJMk9GOHhNalk0TXpBeE9EZzJYekUxT1RReE9UYzJNemM9GiA3YTYyNzA3NTY4Nzc2MTY3NzQ2MTY0NzA2ZTc4NjQ2OQ==\",\"demofiledata\":[{\"filename\":\"65eb1cdd3e7a3c1740ecd74220b6c627.docx\",\"demooperator\":\"wo137MCgAAYW6pIiKKrDe5SlzEhSgwbA\",\"starttime\":1594197599,\"endtime\":1594197609}],\"sharescreendata\":[{\"share\":\"wo137MCgAAYW6pIiKKrDe5SlzEhSgwbA\",\"starttime\":1594197624,\"endtime\":1594197624}]}}";
+ WxCpChatModel modelMeetingVoiceCall = WxCpChatModel.fromJson(meetingVoiceCall);
+ log.info("数据为:" + modelMeetingVoiceCall.toJson());
+
+
+ /**
+ * 音频共享文档消息
+ */
+ String voipDocShare = "{\"msgid\":\"16527954622422422847_1594199256\",\"action\":\"send\",\"from\":\"18002520162\",\"tolist\":[\"wo137MCgAAYW6pIiKKrDe5SlzEhSgwbA\"],\"msgtime\":1594199235014,\"msgtype\":\"voip_doc_share\",\"voipid\":\"gr2751c98b19300571f8afb3b74514bd32\",\"voip_doc_share\":{\"filename\":\"欢迎使用微盘.pdf.pdf\",\"md5sum\":\"ff893900f24e55e216e617a40e5c4648\",\"filesize\":4400654,\"sdkfileid\":\"CpsBKjAqZUlLdWJMd2gvQ1JxMzd0ZjlpdW5mZzJOOE9JZm5kbndvRmRqdnBETjY0QlcvdGtHSFFTYm95dHM2VlllQXhkUUN5KzRmSy9KT3pudnA2aHhYZFlPemc2aVZ6YktzaVh3YkFPZHlqNnl2L2MvcGlqcVRjRTlhZEZsOGlGdHJpQ2RWSVNVUngrVFpuUmo3TGlPQ1BJemlRPT0SOE5EZGZNVFk0T0RnMU16YzVNVGt5T1RJMk9GODFNelUyTlRBd01qQmZNVFU1TkRFNU9USTFOZz09GiA3YTcwNmQ2Zjc5NjY3MDZjNjY2Zjc4NzI3NTZmN2E2YQ==\"}}";
+ WxCpChatModel modelVoipDocShare = WxCpChatModel.fromJson(voipDocShare);
+ log.info("数据为:" + modelVoipDocShare.toJson());
+
+
+ /**
+ * 互通红包消息
+ */
+ String externalRedpacket = "{\"msgid\":\"8632214264349267353_1603786184\",\"action\":\"send\",\"from\":\"woJ7ijBwAAmqwojT8r_DaNMbr_NAvaag\",\"tolist\":[\"woJ7ijBwAA6SjS_sIyPLZtyEPJlT7Cfw\",\"tiny-six768\"],\"roomid\":\"wrJ7ijBwAAG1vly_DzVI72Ghc-PtA5Dw\",\"msgtime\":1603786183955,\"msgtype\":\"external_redpacket\",\"redpacket\":{\"type\":1,\"wish\":\"恭喜发财,大吉大利\",\"totalcnt\":2,\"totalamount\":20}}";
+ WxCpChatModel modelExternalRedpacket = WxCpChatModel.fromJson(externalRedpacket);
+ log.info("数据为:" + modelExternalRedpacket.toJson());
+
+
+ /**
+ * 视频号消息
+ */
+ String sphfeed = "{\"msgid\":\"5702551662099334532_1619511584_external\",\"action\":\"send\",\"from\":\"yangzhu1\",\"tolist\":[\"wmJSb5CgAA4aWXWndJspQGpJMDbsMwMA\"],\"roomid\":\"\",\"msgtime\":1619511584444,\"msgtype\":\"sphfeed\",\"sphfeed\":{\"feed_type\":4,\"sph_name\":\"云游天地旅行家\",\"feed_desc\":\"瑞士丨盖尔默缆车,名副其实的过山车~\\n\\n#旅行#风景#热门\"}}";
+ WxCpChatModel modelSphFeed = WxCpChatModel.fromJson(sphfeed);
+ log.info("数据为:" + modelSphFeed.toJson());
+
+
+ /**
+ * 获取会话内容存档开启成员列表
+ */
+ List permitUserList = cpService.getMsgAuditService().getPermitUserList(null);
+ log.info(permitUserList.toString());
+
+
+ ArrayList userList = Lists.newArrayList();
+ WxCpCheckAgreeRequest checkAgreeRequest = new WxCpCheckAgreeRequest();
+ /**
+ * 获取会话同意情况
+ */
+ WxCpCheckAgreeRequest.Info info = new WxCpCheckAgreeRequest.Info();
+ info.setUserid("wangkai");
+ info.setExteranalOpenId("wmOQpTDwAAkOscTrtUlSli0YLU2jcpUg");
+ if(info != null){
+ userList.add(info);
+ checkAgreeRequest.setInfo(userList);
+ }
+
+ WxCpAgreeInfo wxCpAgreeInfo = cpService.getMsgAuditService().checkSingleAgree(checkAgreeRequest);
+ log.info(wxCpAgreeInfo.toJson());
+
+
+ /**
+ * 获取会话内容存档内部群信息
+ */
+ WxCpGroupChat room = cpService.getMsgAuditService().getGroupChat("wrOQpTDwAAyPl84GBJ40W5eWxWtixSCA");
+ log.info(room.toJson());
+
+ }
+
+}
From 65d8059221a4ebf9135d6f86ab4bcfa044748d5d Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Tue, 25 Jan 2022 00:18:31 +0800
Subject: [PATCH 0045/1155] =?UTF-8?q?:art:=20=E3=80=90=E5=85=AC=E4=BC=97?=
=?UTF-8?q?=E5=8F=B7=E3=80=91=E5=8F=91=E5=B8=83=E8=83=BD=E5=8A=9B=E8=8E=B7?=
=?UTF-8?q?=E5=8F=96=E6=88=90=E5=8A=9F=E5=8F=91=E5=B8=83=E5=88=97=E8=A1=A8?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E=E5=A2=9E=E5=8A=A0update=5F?=
=?UTF-8?q?time=E5=8F=82=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../weixin/mp/bean/freepublish/WxMpFreePublishItem.java | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/freepublish/WxMpFreePublishItem.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/freepublish/WxMpFreePublishItem.java
index f32b34a9ff..dfe953e5b4 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/freepublish/WxMpFreePublishItem.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/freepublish/WxMpFreePublishItem.java
@@ -23,12 +23,19 @@ public class WxMpFreePublishItem implements Serializable {
*/
@SerializedName("article_id")
private String articleId;
+
/**
* 图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS。
*/
@SerializedName("content")
private WxMpFreePublishInfo content;
+ /**
+ * 这篇图文消息素材的最后更新时间
+ */
+ @SerializedName("update_time")
+ private String updateTime;
+
public static WxMpFreePublishItem fromJson(String json) {
return WxGsonBuilder.create().fromJson(json, WxMpFreePublishItem.class);
}
From 93616adf3af637e38ee9293b43a28e98ab33e347 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Tue, 25 Jan 2022 09:34:43 +0800
Subject: [PATCH 0046/1155] =?UTF-8?q?:art:=20=E6=A0=BC=E5=BC=8F=E5=8C=96?=
=?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../me/chanjar/weixin/cp/bean/Gender.java | 4 +-
.../me/chanjar/weixin/cp/bean/WxCpAgent.java | 14 +-
.../weixin/cp/bean/WxCpAgentWorkBench.java | 60 +++--
.../me/chanjar/weixin/cp/bean/WxCpChat.java | 44 ++--
.../weixin/cp/bean/WxCpInviteResult.java | 4 +-
.../cp/bean/WxCpMaJsCode2SessionResult.java | 1 +
.../weixin/cp/bean/WxCpOauth2UserInfo.java | 6 +-
.../weixin/cp/bean/WxCpProviderToken.java | 5 +-
.../me/chanjar/weixin/cp/bean/WxCpTag.java | 5 +-
.../bean/WxCpTagAddOrRemoveUsersResult.java | 11 +-
.../chanjar/weixin/cp/bean/WxCpTpAdmin.java | 1 +
.../weixin/cp/bean/WxCpTpContactSearch.java | 82 +++---
.../cp/bean/WxCpTpContactSearchResp.java | 62 ++---
.../me/chanjar/weixin/cp/bean/WxCpTpCorp.java | 5 +-
.../weixin/cp/bean/WxCpTpPreauthCode.java | 1 +
.../me/chanjar/weixin/cp/bean/WxCpTpTag.java | 2 -
.../bean/WxCpTpTagAddOrRemoveUsersResult.java | 1 +
.../weixin/cp/bean/WxCpTpTagGetResult.java | 1 +
.../weixin/cp/bean/WxCpTpUserDetail.java | 1 -
.../weixin/cp/bean/WxCpTpXmlPackage.java | 6 +-
.../me/chanjar/weixin/cp/bean/WxCpUser.java | 1 -
.../weixin/cp/bean/WxCpUserDetail.java | 4 +-
.../cp/bean/WxCpUserExternalContactInfo.java | 3 +-
.../cp/bean/external/WxCpAddMomentTask.java | 7 +-
.../cp/bean/external/WxCpContactWayInfo.java | 4 +-
.../bean/external/WxCpContactWayResult.java | 3 +
.../bean/external/WxCpExternalUserIdList.java | 1 +
.../bean/external/WxCpGetMomentComments.java | 4 +-
.../cp/bean/external/WxCpGetMomentList.java | 4 +-
.../external/WxCpGetMomentSendResult.java | 4 +-
.../cp/bean/external/WxCpGetMomentTask.java | 4 +-
.../external/WxCpGetMomentTaskResult.java | 3 +
.../WxCpGroupWelcomeTemplateResult.java | 6 +-
.../cp/bean/external/WxCpMsgTemplate.java | 3 +-
.../bean/external/WxCpProductAlbumInfo.java | 6 +-
.../external/WxCpProductAlbumListResult.java | 6 +-
.../bean/external/WxCpProductAlbumResult.java | 4 +-
.../cp/bean/external/moment/CustomerItem.java | 3 +
.../external/moment/ExternalContactList.java | 3 +-
.../cp/bean/external/moment/MomentInfo.java | 12 +-
.../cp/bean/external/moment/SenderList.java | 6 +-
.../cp/bean/external/moment/VisibleRange.java | 8 +-
.../cp/bean/external/msg/Attachment.java | 2 +-
.../cp/bean/external/product/Attachment.java | 4 +-
.../cp/bean/external/product/Image.java | 4 +-
.../weixin/cp/bean/kf/WxCpKfAccountLink.java | 6 +-
.../cp/bean/kf/WxCpKfAccountListResp.java | 2 +-
.../bean/message/WxCpGroupRobotMessage.java | 2 +-
.../weixin/cp/bean/message/WxCpMessage.java | 16 +-
.../bean/message/WxCpMessageSendResult.java | 13 +-
.../message/WxCpMessageSendStatistics.java | 4 +-
.../cp/bean/message/WxCpTpXmlMessage.java | 10 +-
.../cp/bean/message/WxCpXmlMessage.java | 20 +-
.../bean/message/WxCpXmlOutEventMessage.java | 2 +-
.../cp/bean/message/WxCpXmlOutMessage.java | 4 +-
.../message/WxCpXmlOutUpdateBtnMessage.java | 7 +-
.../bean/message/WxCpXmlOutVideoMessage.java | 4 +-
.../cp/bean/messagebuilder/MpnewsBuilder.java | 2 +-
.../cp/bean/messagebuilder/NewsBuilder.java | 2 +-
.../messagebuilder/TemplateCardBuilder.java | 9 +-
.../weixin/cp/bean/oa/SummaryInfo.java | 3 +-
.../cp/bean/oa/WxCpApprovalApplier.java | 1 +
.../weixin/cp/bean/oa/WxCpApprovalInfo.java | 6 +-
.../bean/oa/WxCpApprovalInfoQueryFilter.java | 6 +-
.../weixin/cp/bean/oa/WxCpApprovalRecord.java | 1 +
.../cp/bean/oa/WxCpApprovalRecordDetail.java | 2 +-
.../weixin/cp/bean/oa/WxCpApproverAttr.java | 4 +-
.../weixin/cp/bean/oa/WxCpCheckinData.java | 14 +-
.../weixin/cp/bean/oa/WxCpCheckinDayData.java | 22 +-
.../cp/bean/oa/WxCpCheckinMonthData.java | 23 +-
.../cp/bean/oa/WxCpCropCheckinOption.java | 237 +++++++++---------
.../cp/bean/oa/WxCpSetCheckinSchedule.java | 4 +-
.../weixin/cp/bean/oa/WxCpSpStatus.java | 4 +-
.../cp/bean/oa/applydata/ContentValue.java | 6 +-
.../bean/oa/templatedata/TemplateConfig.java | 1 +
.../templatedata/control/TemplateTable.java | 1 -
.../cp/bean/outxmlbuilder/EventBuilder.java | 6 +-
.../cp/bean/outxmlbuilder/NewsBuilder.java | 2 +-
.../outxmlbuilder/UpdateButtonBuilder.java | 1 -
.../cp/bean/taskcard/TaskCardButton.java | 6 +-
.../cp/bean/templatecard/CheckboxOption.java | 6 +-
.../bean/templatecard/HorizontalContent.java | 3 +-
.../cp/bean/templatecard/MultipleSelect.java | 3 +-
.../bean/templatecard/TemplateCardButton.java | 4 +-
.../bean/templatecard/TemplateCardJump.java | 3 +-
.../cp/bean/templatecard/VerticalContent.java | 2 +-
86 files changed, 470 insertions(+), 429 deletions(-)
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/Gender.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/Gender.java
index d56bd57da9..99da962628 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/Gender.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/Gender.java
@@ -31,8 +31,8 @@ public enum Gender {
private final String code;
public static Gender fromCode(String code) {
- for(Gender a: Gender.values()){
- if(a.code.equals(code)){
+ for (Gender a : Gender.values()) {
+ if (a.code.equals(code)) {
return a;
}
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpAgent.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpAgent.java
index 614bc9791e..04b0dd72e3 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpAgent.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpAgent.java
@@ -1,8 +1,5 @@
package me.chanjar.weixin.cp.bean;
-import java.io.Serializable;
-import java.util.List;
-
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -10,6 +7,9 @@
import lombok.NoArgsConstructor;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.io.Serializable;
+import java.util.List;
+
/**
*
* 企业号应用信息.
@@ -81,25 +81,27 @@ public String toJson() {
@Data
public static class Users implements Serializable {
private static final long serialVersionUID = 8801100463558788565L;
+
@SerializedName("user")
private List users;
}
@Data
- public class User implements Serializable {
+ public static class User implements Serializable {
private static final long serialVersionUID = 7287632514385508024L;
+
@SerializedName("userid")
private String userId;
}
@Data
- public class Parties {
+ public static class Parties {
@SerializedName("partyid")
private List partyIds = null;
}
@Data
- public class Tags {
+ public static class Tags {
@SerializedName("tagid")
private List tagIds = null;
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpAgentWorkBench.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpAgentWorkBench.java
index c97faa6364..bda927a800 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpAgentWorkBench.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpAgentWorkBench.java
@@ -16,49 +16,51 @@
/**
* @author songshiyu
* @date : create in 16:09 2020/9/27
- * @description: 工作台自定义展示
+ * 工作台自定义展示
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WxCpAgentWorkBench implements Serializable {
- private static final long serialVersionUid = 1L;
+ private static final long serialVersionUID = -4136604790232843229L;
- /*
- * 展示类型,目前支持 “keydata”、 “image”、 “list” 、”webview”
- * */
+ /**
+ * 展示类型,目前支持 “keydata”、 “image”、 “list” 、”webview”
+ */
private String type;
- /*
- * 用户的userid
- * */
+ /**
+ * 用户的userid
+ */
private String userId;
- /*
- * 应用id
- * */
+ /**
+ * 应用id
+ */
private Long agentId;
- /*
- * 点击跳转url,若不填且应用设置了主页url,则跳转到主页url,否则跳到应用会话窗口
- * */
+ /**
+ * 点击跳转url,若不填且应用设置了主页url,则跳转到主页url,否则跳到应用会话窗口
+ */
private String jumpUrl;
- /*
- * 若应用为小程序类型,该字段填小程序pagepath,若未设置,跳到小程序主页
- * */
+ /**
+ * 若应用为小程序类型,该字段填小程序pagepath,若未设置,跳到小程序主页
+ */
private String pagePath;
- /*
- * 图片url:图片的最佳比例为3.35:1;webview:渲染展示的url
- * */
+ /**
+ * 图片url:图片的最佳比例为3.35:1;webview:渲染展示的url
+ */
private String url;
- /*
- * 是否覆盖用户工作台的数据。设置为true的时候,会覆盖企业所有用户当前设置的数据。若设置为false,则不会覆盖用户当前设置的所有数据
- * */
+ /**
+ * 是否覆盖用户工作台的数据。设置为true的时候,会覆盖企业所有用户当前设置的数据。若设置为false,则不会覆盖用户当前设置的所有数据
+ */
private Boolean replaceUserData;
private List keyDataList;
private List lists;
- // 生成模板Json字符串
+ /**
+ * 生成模板Json字符串
+ */
public String toTemplateString() {
JsonObject templateObject = new JsonObject();
templateObject.addProperty("agentid", this.agentId);
@@ -70,7 +72,9 @@ public String toTemplateString() {
return templateObject.toString();
}
- // 生成用户数据Json字符串
+ /**
+ * 生成用户数据Json字符串
+ */
public String toUserDataString() {
JsonObject userDataObject = new JsonObject();
userDataObject.addProperty("agentid", this.agentId);
@@ -80,7 +84,9 @@ public String toUserDataString() {
return userDataObject.toString();
}
- // 处理不用类型的工作台数据
+ /**
+ * 处理不用类型的工作台数据
+ */
private void handle(JsonObject templateObject) {
switch (this.getType()) {
case WxCpConsts.WorkBenchType.KEYDATA: {
@@ -116,7 +122,7 @@ private void handle(JsonObject templateObject) {
listObject.addProperty("pagepath", listItem.getPagePath());
listArray.add(listObject);
}
- itemsObject.add("items",listArray);
+ itemsObject.add("items", listArray);
templateObject.add("list", itemsObject);
break;
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpChat.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpChat.java
index 03b9aaa7d9..eb014c595a 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpChat.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpChat.java
@@ -1,22 +1,22 @@
-package me.chanjar.weixin.cp.bean;
-
-import java.io.Serializable;
-import java.util.List;
-
-import lombok.Data;
-
-/**
- * 群聊
- *
- * @author gaigeshen
- */
-@Data
-public class WxCpChat implements Serializable {
- private static final long serialVersionUID = -4301684507150486556L;
-
- private String id;
- private String name;
- private String owner;
- private List users;
-
-}
+package me.chanjar.weixin.cp.bean;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 群聊
+ *
+ * @author gaigeshen
+ */
+@Data
+public class WxCpChat implements Serializable {
+ private static final long serialVersionUID = -4301684507150486556L;
+
+ private String id;
+ private String name;
+ private String owner;
+ private List users;
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpInviteResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpInviteResult.java
index f5a0a66bf1..5ab4f5246b 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpInviteResult.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpInviteResult.java
@@ -1,11 +1,11 @@
package me.chanjar.weixin.cp.bean;
-import java.io.Serializable;
-
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.io.Serializable;
+
/**
* 邀请成员的结果对象类.
* Created by Binary Wang on 2018-5-13.
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpMaJsCode2SessionResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpMaJsCode2SessionResult.java
index 90f1ae840c..7291489d9b 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpMaJsCode2SessionResult.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpMaJsCode2SessionResult.java
@@ -11,6 +11,7 @@
* 小程序登录凭证校验
* 文档地址:https://work.weixin.qq.com/api/doc#90000/90136/90289/wx.qy.login
*
+ *
* @author Binary Wang
*/
@Data
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpOauth2UserInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpOauth2UserInfo.java
index 56e65b9008..0e10737bf6 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpOauth2UserInfo.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpOauth2UserInfo.java
@@ -1,13 +1,13 @@
package me.chanjar.weixin.cp.bean;
-import java.io.Serializable;
-
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
+import java.io.Serializable;
+
/**
*
* 用oauth2获取用户信息的结果类
@@ -23,7 +23,7 @@
@Builder
public class WxCpOauth2UserInfo implements Serializable {
private static final long serialVersionUID = -4301684507150486556L;
-
+
private String openId;
private String deviceId;
private String userId;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpProviderToken.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpProviderToken.java
index 6a33f1c48c..7b2887f03e 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpProviderToken.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpProviderToken.java
@@ -1,11 +1,11 @@
package me.chanjar.weixin.cp.bean;
-import java.io.Serializable;
-
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.io.Serializable;
+
/**
* 服务商凭证.
*
@@ -15,6 +15,7 @@
@Data
public class WxCpProviderToken implements Serializable {
private static final long serialVersionUID = -4301684507150486556L;
+
/**
* 服务商的access_token,最长为512字节。
*/
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTag.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTag.java
index f6b9fa0276..8649f0ced0 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTag.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTag.java
@@ -1,14 +1,15 @@
package me.chanjar.weixin.cp.bean;
-import java.io.Serializable;
-
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.io.Serializable;
+
/**
* Created by Daniel Qian.
+ *
* @author Daniel Qian
*/
@Data
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTagAddOrRemoveUsersResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTagAddOrRemoveUsersResult.java
index 037740ca96..adac174884 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTagAddOrRemoveUsersResult.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTagAddOrRemoveUsersResult.java
@@ -1,15 +1,14 @@
package me.chanjar.weixin.cp.bean;
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.lang3.StringUtils;
-
import com.google.common.base.Splitter;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
/**
* 为标签添加或移除用户结果对象类.
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpAdmin.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpAdmin.java
index 5d77c975d5..a950e0c3f4 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpAdmin.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpAdmin.java
@@ -12,6 +12,7 @@
/**
* 应用的管理员
+ *
* @author huangxiaoming
*/
@Data
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpContactSearch.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpContactSearch.java
index ee1de69f52..cc84dfd4de 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpContactSearch.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpContactSearch.java
@@ -1,12 +1,12 @@
package me.chanjar.weixin.cp.bean;
-import java.io.Serializable;
-
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.experimental.Accessors;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.io.Serializable;
+
/**
* @author uianz
* @description
@@ -15,51 +15,51 @@
@Data
@Accessors(chain = true)
public class WxCpTpContactSearch implements Serializable {
- private static final long serialVersionUID = -4301684507150486556L;
+ private static final long serialVersionUID = -4301684507150486556L;
- /**
- * 查询的企业corpid
- */
- @SerializedName("auth_corpid")
- private String authCorpId;
+ /**
+ * 查询的企业corpid
+ */
+ @SerializedName("auth_corpid")
+ private String authCorpId;
- /**
- * 搜索关键词。当查询用户时应为用户名称、名称拼音或者英文名;当查询部门时应为部门名称或者部门名称拼音
- */
- @SerializedName("query_word")
- private String queryWord;
+ /**
+ * 搜索关键词。当查询用户时应为用户名称、名称拼音或者英文名;当查询部门时应为部门名称或者部门名称拼音
+ */
+ @SerializedName("query_word")
+ private String queryWord;
- /**
- * 查询类型 1:查询用户,返回用户userid列表 2:查询部门,返回部门id列表。 不填该字段或者填0代表同时查询部门跟用户
- */
- @SerializedName("query_type")
- private Integer type;
+ /**
+ * 查询类型 1:查询用户,返回用户userid列表 2:查询部门,返回部门id列表。 不填该字段或者填0代表同时查询部门跟用户
+ */
+ @SerializedName("query_type")
+ private Integer type;
- /**
- * 应用id,若非0则只返回应用可见范围内的用户或者部门信息
- */
- @SerializedName("agentid")
- private Integer agentId;
+ /**
+ * 应用id,若非0则只返回应用可见范围内的用户或者部门信息
+ */
+ @SerializedName("agentid")
+ private Integer agentId;
- /**
- * 查询的偏移量,每次调用的offset在上一次offset基础上加上limit
- */
- @SerializedName("offset")
- private Integer offset;
+ /**
+ * 查询的偏移量,每次调用的offset在上一次offset基础上加上limit
+ */
+ @SerializedName("offset")
+ private Integer offset;
- /**
- * 查询返回的最大数量,默认为50,最多为200,查询返回的数量可能小于limit指定的值
- */
- @SerializedName("limit")
- private Integer limit;
+ /**
+ * 查询返回的最大数量,默认为50,最多为200,查询返回的数量可能小于limit指定的值
+ */
+ @SerializedName("limit")
+ private Integer limit;
- /**
- * 如果需要精确匹配用户名称或者部门名称或者英文名,不填则默认为模糊匹配;1:匹配用户名称或者部门名称 2:匹配用户英文名
- */
- @SerializedName("full_match_field")
- private Integer fullMatchField;
+ /**
+ * 如果需要精确匹配用户名称或者部门名称或者英文名,不填则默认为模糊匹配;1:匹配用户名称或者部门名称 2:匹配用户英文名
+ */
+ @SerializedName("full_match_field")
+ private Integer fullMatchField;
- public String toJson() {
- return WxCpGsonBuilder.create().toJson(this);
- }
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpContactSearchResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpContactSearchResp.java
index 1998a4230f..21db4e0833 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpContactSearchResp.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpContactSearchResp.java
@@ -17,42 +17,42 @@
@Data
public class WxCpTpContactSearchResp extends WxCpBaseResp {
- @SerializedName("is_last")
- private Boolean isLast;
+ @SerializedName("is_last")
+ private Boolean isLast;
- @SerializedName("query_result")
- private QueryResult queryResult;
+ @SerializedName("query_result")
+ private QueryResult queryResult;
- @Data
- public static class QueryResult implements Serializable {
- private static final long serialVersionUID = -4301684507150486556L;
-
- @SerializedName("user")
- private User user;
- @SerializedName("party")
- private Party party;
-
- @Data
- public static class User implements Serializable {
- private static final long serialVersionUID = -4301684507150486556L;
- @SerializedName("userid")
- private List userid;
- @SerializedName("open_userid")
- private List openUserId;
- }
-
- @Data
- public static class Party implements Serializable {
- private static final long serialVersionUID = -4301684507150486556L;
-
- @SerializedName("department_id")
- private List departmentId;
- }
+ @Data
+ public static class QueryResult implements Serializable {
+ private static final long serialVersionUID = -4301684507150486556L;
+
+ @SerializedName("user")
+ private User user;
+ @SerializedName("party")
+ private Party party;
+ @Data
+ public static class User implements Serializable {
+ private static final long serialVersionUID = -4301684507150486556L;
+ @SerializedName("userid")
+ private List userid;
+ @SerializedName("open_userid")
+ private List openUserId;
}
- public static WxCpTpContactSearchResp fromJson(String json) {
- return WxCpGsonBuilder.create().fromJson(json, WxCpTpContactSearchResp.class);
+ @Data
+ public static class Party implements Serializable {
+ private static final long serialVersionUID = -4301684507150486556L;
+
+ @SerializedName("department_id")
+ private List departmentId;
}
+ }
+
+ public static WxCpTpContactSearchResp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpTpContactSearchResp.class);
+ }
+
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpCorp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpCorp.java
index f77fdb78df..efe6d8285c 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpCorp.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpCorp.java
@@ -1,12 +1,11 @@
package me.chanjar.weixin.cp.bean;
-import java.io.Serializable;
-
import com.google.gson.annotations.SerializedName;
-
import lombok.Data;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.io.Serializable;
+
/**
* 微信部门.
*
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpPreauthCode.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpPreauthCode.java
index 8c102ae4a2..82df9f4565 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpPreauthCode.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpPreauthCode.java
@@ -7,6 +7,7 @@
/**
* 预授权码返回
+ *
* @author yqx
* @date 2020/3/19
*/
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java
index b584b31dd1..73d7a51578 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java
@@ -7,13 +7,11 @@
import java.io.Serializable;
/**
- *
* @author zhangq
* @since 2021-02-14 16:15 16:15
*/
@Data
public class WxCpTpTag implements Serializable {
-
private static final long serialVersionUID = 581740383760234134L;
@SerializedName("tagid")
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagAddOrRemoveUsersResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagAddOrRemoveUsersResult.java
index 35319b1baf..8a9fecf21c 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagAddOrRemoveUsersResult.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagAddOrRemoveUsersResult.java
@@ -4,6 +4,7 @@
/**
* 企业微信第三方开发-增加标签成员成员api响应体
+ *
* @author zhangq
* @since 2021/2/14 16:44
*/
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagGetResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagGetResult.java
index d77e99b131..4fdc9a58ac 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagGetResult.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagGetResult.java
@@ -4,6 +4,7 @@
/**
* 获取标签成员接口响应体
+ *
* @author zhangq
* @since 2021/2/14 16:28
*/
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpUserDetail.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpUserDetail.java
index c949b0a1ba..2809391253 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpUserDetail.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpUserDetail.java
@@ -6,7 +6,6 @@
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
/**
- *
* @author huangxiaoming
*/
@Data
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpXmlPackage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpXmlPackage.java
index e7af1dd61a..4d9d9493ae 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpXmlPackage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpXmlPackage.java
@@ -1,8 +1,5 @@
package me.chanjar.weixin.cp.bean;
-import java.io.Serializable;
-import java.util.Map;
-
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import lombok.Data;
@@ -10,6 +7,9 @@
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
import me.chanjar.weixin.cp.util.xml.XStreamTransformer;
+import java.io.Serializable;
+import java.util.Map;
+
/**
* 回调消息包.
* https://work.weixin.qq.com/api/doc#90001/90143/91116
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java
index 0c4bac9ea8..76a8f93300 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java
@@ -73,7 +73,6 @@ public class WxCpUser implements Serializable {
private String[] directLeader;
-
public void addExternalAttr(ExternalAttribute externalAttr) {
this.externalAttrs.add(externalAttr);
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserDetail.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserDetail.java
index 7c4af4df68..295acfdbce 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserDetail.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserDetail.java
@@ -1,10 +1,10 @@
package me.chanjar.weixin.cp.bean;
-import java.io.Serializable;
-
import com.google.gson.annotations.SerializedName;
import lombok.Data;
+import java.io.Serializable;
+
/**
*
* 使用user_ticket获取成员详情接口返回类.
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserExternalContactInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserExternalContactInfo.java
index 6a9e2c8e74..ca6ebb8bb7 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserExternalContactInfo.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserExternalContactInfo.java
@@ -78,6 +78,7 @@ public static class ExternalProfile implements Serializable {
@AllArgsConstructor
public static class ExternalAttribute implements Serializable {
private static final long serialVersionUID = -5696099236344075582L;
+
@Setter
@Getter
public static class Text implements Serializable {
@@ -122,7 +123,7 @@ public static class MiniProgram implements Serializable {
@Getter
public static class FollowedUser implements Serializable {
private static final long serialVersionUID = -5696099236344075582L;
-
+
@SerializedName("userid")
private String userId;
private String remark;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpAddMomentTask.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpAddMomentTask.java
index 3e952ccb90..efa0c1bfc0 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpAddMomentTask.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpAddMomentTask.java
@@ -1,17 +1,18 @@
package me.chanjar.weixin.cp.bean.external;
import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.external.moment.VisibleRange;
import me.chanjar.weixin.cp.bean.external.msg.Attachment;
import me.chanjar.weixin.cp.bean.external.msg.Text;
-import me.chanjar.weixin.cp.bean.external.moment.VisibleRange;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.io.Serializable;
+import java.util.List;
+
/**
* 企业发表内容到客户的朋友圈 创建发表任务
*
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpContactWayInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpContactWayInfo.java
index 35f6a6eaa0..66d94da2c4 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpContactWayInfo.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpContactWayInfo.java
@@ -208,7 +208,7 @@ public enum TYPE {
* 多人
*/
@SerializedName("2")
- MULTI;
+ MULTI
}
@@ -224,7 +224,7 @@ public enum SCENE {
* 通过二维码联系
*/
@SerializedName("2")
- QRCODE;
+ QRCODE
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpContactWayResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpContactWayResult.java
index 0a49719a95..789dac3188 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpContactWayResult.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpContactWayResult.java
@@ -8,11 +8,14 @@
/**
* 「联系我」方式 处理结果
+ *
+ * @author 爱因斯唐
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WxCpContactWayResult extends WxCpBaseResp {
private static final long serialVersionUID = -2612867517869192015L;
+
@SerializedName("config_id")
private String configId;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpExternalUserIdList.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpExternalUserIdList.java
index 5de738c74b..3b06a0a078 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpExternalUserIdList.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpExternalUserIdList.java
@@ -18,6 +18,7 @@
@Getter
@Setter
public class WxCpExternalUserIdList extends WxCpBaseResp {
+ private static final long serialVersionUID = 3922210865083522513L;
@SerializedName("external_userid_info")
private List externalUserIdInfo;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentComments.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentComments.java
index b397954dcc..a0228e3ac7 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentComments.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentComments.java
@@ -1,7 +1,6 @@
package me.chanjar.weixin.cp.bean.external;
import com.google.gson.annotations.SerializedName;
-import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
@@ -9,6 +8,8 @@
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.util.List;
+
/**
* 企业发表内容到客户的朋友圈 获取客户朋友圈的互动数据
*
@@ -19,6 +20,7 @@
@EqualsAndHashCode(callSuper = true)
public class WxCpGetMomentComments extends WxCpBaseResp {
private static final long serialVersionUID = -9056664072546234965L;
+
@SerializedName("comment_list")
private List commentList;
@SerializedName("like_list")
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentList.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentList.java
index 6ba154df83..32cce1dd45 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentList.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentList.java
@@ -1,13 +1,14 @@
package me.chanjar.weixin.cp.bean.external;
import com.google.gson.annotations.SerializedName;
-import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.bean.external.moment.MomentInfo;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.util.List;
+
/**
* 企业发表内容到客户的朋友圈 获取企业全部的发表列表
*
@@ -18,6 +19,7 @@
@EqualsAndHashCode(callSuper = true)
public class WxCpGetMomentList extends WxCpBaseResp {
private static final long serialVersionUID = 106159971765109008L;
+
@SerializedName("next_cursor")
private String nextCursor;
@SerializedName("moment_list")
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentSendResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentSendResult.java
index 38cd89a454..30df9c43ae 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentSendResult.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentSendResult.java
@@ -1,13 +1,14 @@
package me.chanjar.weixin.cp.bean.external;
import com.google.gson.annotations.SerializedName;
-import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.bean.external.moment.CustomerItem;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.util.List;
+
/**
* 企业发表内容到客户的朋友圈 获取客户朋友圈发表后的可见客户列表
*
@@ -18,6 +19,7 @@
@EqualsAndHashCode(callSuper = true)
public class WxCpGetMomentSendResult extends WxCpBaseResp {
private static final long serialVersionUID = -5782811995184523379L;
+
@SerializedName("next_cursor")
private String nextCursor;
@SerializedName("customer_list")
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentTask.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentTask.java
index aa45bec4ef..2b7032f794 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentTask.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentTask.java
@@ -1,7 +1,6 @@
package me.chanjar.weixin.cp.bean.external;
import com.google.gson.annotations.SerializedName;
-import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
@@ -9,6 +8,8 @@
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import java.util.List;
+
/**
* 企业发表内容到客户的朋友圈 获取客户朋友圈企业发表的列表
*
@@ -19,6 +20,7 @@
@EqualsAndHashCode(callSuper = true)
public class WxCpGetMomentTask extends WxCpBaseResp {
private static final long serialVersionUID = 5621905029624794129L;
+
@SerializedName("next_cursor")
private String nextCursor;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentTaskResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentTaskResult.java
index 019e7fdf1d..b0ab78f1e9 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentTaskResult.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGetMomentTaskResult.java
@@ -20,6 +20,7 @@
@EqualsAndHashCode(callSuper = true)
public class WxCpGetMomentTaskResult extends WxCpBaseResp {
private static final long serialVersionUID = 2515140928288915077L;
+
private Integer status;
private String type;
private TaskResult result;
@@ -27,6 +28,8 @@ public class WxCpGetMomentTaskResult extends WxCpBaseResp {
@Getter
@Setter
public static class TaskResult extends WxCpBaseResp {
+ private static final long serialVersionUID = 2162642873632126707L;
+
@SerializedName("moment_id")
private String momentId;
@SerializedName("invalid_sender_list")
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGroupWelcomeTemplateResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGroupWelcomeTemplateResult.java
index 5b92a02098..631d6be261 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGroupWelcomeTemplateResult.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpGroupWelcomeTemplateResult.java
@@ -1,9 +1,6 @@
package me.chanjar.weixin.cp.bean.external;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.*;
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.bean.external.msg.*;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
@@ -20,6 +17,7 @@
@Builder
@NoArgsConstructor
@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
public class WxCpGroupWelcomeTemplateResult extends WxCpBaseResp implements Serializable {
private static final long serialVersionUID = -6406667238670580612L;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpMsgTemplate.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpMsgTemplate.java
index 845aefcc77..2d5343459a 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpMsgTemplate.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpMsgTemplate.java
@@ -5,7 +5,8 @@
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
-import me.chanjar.weixin.cp.bean.external.msg.*;
+import me.chanjar.weixin.cp.bean.external.msg.Attachment;
+import me.chanjar.weixin.cp.bean.external.msg.Text;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
import java.io.Serializable;
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
index d84b9f232c..e0ad62ea36 100644
--- 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
@@ -1,13 +1,14 @@
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;
+import java.io.Serializable;
+import java.util.List;
+
/**
*
* 获取商品图册
@@ -19,7 +20,6 @@
@Getter
@Setter
public class WxCpProductAlbumInfo implements Serializable {
-
private static final long serialVersionUID = -8338202601802366899L;
@SerializedName("product_id")
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
index 29b9d4c571..2b6f4b2087 100644
--- 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
@@ -1,13 +1,14 @@
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;
+import java.io.Serializable;
+import java.util.List;
+
/**
*
* 获取商品图册列表执行结果
@@ -19,7 +20,6 @@
@Getter
@Setter
public class WxCpProductAlbumListResult extends WxCpBaseResp implements Serializable {
-
private static final long serialVersionUID = 121265727802015428L;
@SerializedName("product_list")
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
index 74e5fc3be4..527bfb6eb5 100644
--- 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
@@ -1,12 +1,13 @@
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;
+import java.io.Serializable;
+
/**
*
* 获取商品图册执行结果
@@ -18,7 +19,6 @@
@Getter
@Setter
public class WxCpProductAlbumResult extends WxCpBaseResp implements Serializable {
-
private static final long serialVersionUID = 4076734101839851497L;
@SerializedName("product")
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/CustomerItem.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/CustomerItem.java
index 08b1242392..3bcbe03e03 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/CustomerItem.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/CustomerItem.java
@@ -4,6 +4,9 @@
import lombok.Getter;
import lombok.Setter;
+/**
+ * @author Boris
+ */
@Getter
@Setter
public class CustomerItem {
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/ExternalContactList.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/ExternalContactList.java
index 4d08bf3583..c9f2e0a580 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/ExternalContactList.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/ExternalContactList.java
@@ -1,10 +1,11 @@
package me.chanjar.weixin.cp.bean.external.moment;
import com.google.gson.annotations.SerializedName;
-import java.util.List;
import lombok.Getter;
import lombok.Setter;
+import java.util.List;
+
@Getter
@Setter
public class ExternalContactList {
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/MomentInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/MomentInfo.java
index 589a4a58c0..3fd364ddb4 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/MomentInfo.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/MomentInfo.java
@@ -1,14 +1,14 @@
package me.chanjar.weixin.cp.bean.external.moment;
import com.google.gson.annotations.SerializedName;
-import java.util.List;
import lombok.Data;
-import me.chanjar.weixin.cp.bean.external.msg.Image;
-import me.chanjar.weixin.cp.bean.external.msg.Link;
-import me.chanjar.weixin.cp.bean.external.msg.Location;
-import me.chanjar.weixin.cp.bean.external.msg.Text;
-import me.chanjar.weixin.cp.bean.external.msg.Video;
+import me.chanjar.weixin.cp.bean.external.msg.*;
+
+import java.util.List;
+/**
+ * @author Borisg
+ */
@Data
public class MomentInfo {
@SerializedName("moment_id")
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/SenderList.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/SenderList.java
index 45889684c5..b3f2c387e6 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/SenderList.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/SenderList.java
@@ -1,10 +1,14 @@
package me.chanjar.weixin.cp.bean.external.moment;
import com.google.gson.annotations.SerializedName;
-import java.util.List;
import lombok.Getter;
import lombok.Setter;
+import java.util.List;
+
+/**
+ * @author Boris
+ */
@Getter
@Setter
public class SenderList {
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/VisibleRange.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/VisibleRange.java
index 251fb5e64c..39605be88d 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/VisibleRange.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/moment/VisibleRange.java
@@ -1,11 +1,17 @@
package me.chanjar.weixin.cp.bean.external.moment;
import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * @author Boris
+ */
@Data
public class VisibleRange implements Serializable {
+ private static final long serialVersionUID = 5356285705365931051L;
+
@SerializedName("sender_list")
private SenderList senderList;
@SerializedName("external_contact_list")
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/msg/Attachment.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/msg/Attachment.java
index 7dce73ad03..d714b093cf 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/msg/Attachment.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/msg/Attachment.java
@@ -47,7 +47,7 @@ public void setVideo(Video video) {
this.msgType = WxCpConsts.WelcomeMsgType.VIDEO;
}
- public void setFile(File file ) {
+ public void setFile(File file) {
this.file = file;
this.msgType = WxCpConsts.WelcomeMsgType.FILE;
}
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
index cfcb688c2d..c1480fbb7b 100644
--- 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
@@ -1,9 +1,10 @@
package me.chanjar.weixin.cp.bean.external.product;
-import java.io.Serializable;
import lombok.Data;
import me.chanjar.weixin.cp.constant.WxCpConsts;
+import java.io.Serializable;
+
/**
* 商品画册附件
*
@@ -11,7 +12,6 @@
*/
@Data
public class Attachment implements Serializable {
-
private static final long serialVersionUID = -4545283630169056262L;
/**
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
index d56f0b2705..7628a63671 100644
--- 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
@@ -1,9 +1,10 @@
package me.chanjar.weixin.cp.bean.external.product;
import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
import lombok.Data;
+import java.io.Serializable;
+
/**
* 商品画册图片
*
@@ -11,7 +12,6 @@
*/
@Data
public class Image implements Serializable {
-
private static final long serialVersionUID = -2737415903252627814L;
@SerializedName("media_id")
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLink.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLink.java
index a17e5c5e83..a46a186db1 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLink.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountLink.java
@@ -28,10 +28,10 @@ public class WxCpKfAccountLink implements Serializable {
* 场景值,字符串类型,由开发者自定义。
* 不多于32字节
* 字符串取值范围(正则表达式):[0-9a-zA-Z_-]*
- *
+ *
* 1. 若scene非空,返回的客服链接开发者可拼接scene_param=SCENE_PARAM参数使用,用户进入会话事件会将SCENE_PARAM原样返回。
- * 其中SCENE_PARAM需要urlencode,且长度不能超过128字节。
- * 如 https://work.weixin.qq.com/kf/kfcbf8f8d07ac7215f?enc_scene=ENCGFSDF567DF&scene_param=a%3D1%26b%3D2
+ * 其中SCENE_PARAM需要urlencode,且长度不能超过128字节。
+ * 如 https://work.weixin.qq.com/kf/kfcbf8f8d07ac7215f?enc_scene=ENCGFSDF567DF&scene_param=a%3D1%26b%3D2
* 2. 历史调用接口返回的客服链接(包含encScene=XXX参数),不支持scene_param参数。
* 3. 返回的客服链接,不能修改或复制参数到其他链接使用。否则进入会话事件参数校验不通过,导致无法回调。
*/
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java
index c2676a44dd..06f1ef0668 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java
@@ -24,7 +24,7 @@ public class WxCpKfAccountListResp extends WxCpBaseResp {
private static final long serialVersionUID = -1317201649692262217L;
/**
- * 帐号信息列表
+ * 帐号信息列表
*/
@JsonProperty("account_list")
private List accountList;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpGroupRobotMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpGroupRobotMessage.java
index de7e88d79b..387b454cdb 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpGroupRobotMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpGroupRobotMessage.java
@@ -25,7 +25,7 @@
@Data
public class WxCpGroupRobotMessage implements Serializable {
private static final long serialVersionUID = -4301684507150486556L;
-
+
/**
* 消息类型
*/
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java
index 027a518837..e6df7c5d63 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java
@@ -147,7 +147,7 @@ public class WxCpMessage implements Serializable {
* 整体卡片的点击跳转事件,text_notice必填本字段
* 跳转事件类型,1 代表跳转url,2 代表打开小程序。text_notice卡片模版中该字段取值范围为[1,2]
*/
- private Integer card_action_type;
+ private Integer card_action_type;
/**
* 跳转事件的url,card_action.type是1时必填
*/
@@ -517,7 +517,7 @@ private void handleMsgType(JsonObject messageJson) {
}
List verticalContents = this.getVertical_contents();
- if(null != verticalContents && verticalContents.size() > 0) {
+ if (null != verticalContents && verticalContents.size() > 0) {
JsonArray vContentJsonArray = new JsonArray();
for (VerticalContent vContent : this.getVertical_contents()) {
JsonObject tempObject = vContent.toJson();
@@ -527,7 +527,7 @@ private void handleMsgType(JsonObject messageJson) {
}
List horizontalContents = this.getHorizontal_contents();
- if(null != horizontalContents && horizontalContents.size() > 0) {
+ if (null != horizontalContents && horizontalContents.size() > 0) {
JsonArray hContentJsonArray = new JsonArray();
for (HorizontalContent hContent : this.getHorizontal_contents()) {
JsonObject tempObject = hContent.toJson();
@@ -537,7 +537,7 @@ private void handleMsgType(JsonObject messageJson) {
}
List jumps = this.getJumps();
- if(null != jumps && jumps.size() > 0) {
+ if (null != jumps && jumps.size() > 0) {
JsonArray jumpJsonArray = new JsonArray();
for (TemplateCardJump jump : this.getJumps()) {
JsonObject tempObject = jump.toJson();
@@ -562,7 +562,7 @@ private void handleMsgType(JsonObject messageJson) {
}
List buttons = this.getButtons();
- if(null != buttons && buttons.size() > 0) {
+ if (null != buttons && buttons.size() > 0) {
JsonArray btnJsonArray = new JsonArray();
for (TemplateCardButton btn : this.getButtons()) {
JsonObject tempObject = btn.toJson();
@@ -602,7 +602,7 @@ private void handleMsgType(JsonObject messageJson) {
// select_list
List selects = this.getSelects();
- if(null != selects && selects.size() > 0) {
+ if (null != selects && selects.size() > 0) {
JsonArray selectJsonArray = new JsonArray();
for (MultipleSelect select : this.getSelects()) {
JsonObject tempObject = select.toJson();
@@ -612,9 +612,9 @@ private void handleMsgType(JsonObject messageJson) {
}
QuoteArea quoteArea = this.getQuoteArea();
- if (null != quoteArea){
+ if (null != quoteArea) {
JsonObject quoteAreaJson = quoteArea.toJson();
- template.add("quote_area",quoteAreaJson);
+ template.add("quote_area", quoteAreaJson);
}
messageJson.add("template_card", template);
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessageSendResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessageSendResult.java
index 4c41d631b4..6b02941dd7 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessageSendResult.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessageSendResult.java
@@ -1,15 +1,14 @@
package me.chanjar.weixin.cp.bean.message;
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.lang3.StringUtils;
-
import com.google.common.base.Splitter;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
/**
* 消息发送结果对象类.
@@ -44,7 +43,7 @@ public static WxCpMessageSendResult fromJson(String json) {
@SerializedName("invalidtag")
private String invalidTag;
-
+
@SerializedName("msgid")
private String msgId;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessageSendStatistics.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessageSendStatistics.java
index 7cef0564dc..be652c50b9 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessageSendStatistics.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessageSendStatistics.java
@@ -24,9 +24,9 @@ public static WxCpMessageSendStatistics fromJson(String json) {
private List statistics;
@Data
- public static class StatisticItem implements Serializable {
+ public static class StatisticItem implements Serializable {
private static final long serialVersionUID = 6031833682211475786L;
-
+
/**
* 应用名
*/
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpTpXmlMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpTpXmlMessage.java
index fc159a9a3b..5796735948 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpTpXmlMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpTpXmlMessage.java
@@ -1,9 +1,5 @@
package me.chanjar.weixin.cp.bean.message;
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.converters.basic.IntConverter;
@@ -15,6 +11,10 @@
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
import me.chanjar.weixin.cp.util.xml.XStreamTransformer;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
/**
* 回调推送的message
* https://work.weixin.qq.com/api/doc#90001/90143/90612
@@ -449,7 +449,7 @@ public static class NotifyNode implements Serializable {
@XStreamAlias("ItemUserId")
protected Integer itemUserId;
@XStreamAlias("ItemImage")
- protected String itemImage;
+ protected String itemImage;
}
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
index a95870590f..6e215052f3 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
@@ -658,20 +658,20 @@ public static class ApprovalInfo implements Serializable {
/**
* 审批流程信息,可能有多个审批节点。
*/
- @XStreamImplicit(itemFieldName="SpRecord")
+ @XStreamImplicit(itemFieldName = "SpRecord")
private List spRecords;
/**
* 抄送信息,可能有多个抄送节点
* 这回查字典,notifier通知人,Notifyer这不知道是什么
*/
- @XStreamImplicit(itemFieldName="Notifyer")
+ @XStreamImplicit(itemFieldName = "Notifyer")
private List notifier;
/**
* 审批申请备注信息,可能有多个备注节点
*/
- @XStreamImplicit(itemFieldName="Comments")
+ @XStreamImplicit(itemFieldName = "Comments")
private List comments;
/**
@@ -706,7 +706,7 @@ public static class Applier implements Serializable {
*/
@XStreamAlias("SpRecord")
@Data
- public static class SpRecord implements Serializable{
+ public static class SpRecord implements Serializable {
private static final long serialVersionUID = 1247535623941881764L;
@@ -725,7 +725,7 @@ public static class SpRecord implements Serializable{
/**
* 审批节点详情。当节点为标签或上级时,一个节点可能有多个分支
*/
- @XStreamImplicit(itemFieldName="Details")
+ @XStreamImplicit(itemFieldName = "Details")
private List details;
}
@@ -735,7 +735,7 @@ public static class SpRecord implements Serializable{
*/
@XStreamAlias("Details")
@Data
- public static class Detail implements Serializable{
+ public static class Detail implements Serializable {
private static final long serialVersionUID = -8446107461495047603L;
@@ -775,7 +775,7 @@ public static class Detail implements Serializable{
*/
@Data
@XStreamAlias("Approver")
- public static class Approver implements Serializable{
+ public static class Approver implements Serializable {
private static final long serialVersionUID = 7360442444186683191L;
@@ -791,7 +791,7 @@ public static class Approver implements Serializable{
*/
@Data
@XStreamAlias("Notifyer")
- public static class Notifier implements Serializable{
+ public static class Notifier implements Serializable {
private static final long serialVersionUID = -4524071522890013920L;
@@ -807,7 +807,7 @@ public static class Notifier implements Serializable{
*/
@Data
@XStreamAlias("Comments")
- public static class Comment implements Serializable{
+ public static class Comment implements Serializable {
private static final long serialVersionUID = 6912156206252719485L;
@@ -839,7 +839,7 @@ public static class Comment implements Serializable{
@Data
@XStreamAlias("CommentUserInfo")
- private static class CommentUserInfo implements Serializable{
+ private static class CommentUserInfo implements Serializable {
private static final long serialVersionUID = 5031739716823000947L;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutEventMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutEventMessage.java
index 2b32d9c40e..430e63a3a9 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutEventMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutEventMessage.java
@@ -5,7 +5,7 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
import me.chanjar.weixin.common.api.WxConsts;
-import me.chanjar.weixin.common.util.xml.*;
+import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
/**
* @author eYoung
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java
index f1c9831b92..89c29e25ce 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java
@@ -1,7 +1,5 @@
package me.chanjar.weixin.cp.bean.message;
-import java.io.Serializable;
-
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import lombok.Data;
@@ -11,6 +9,8 @@
import me.chanjar.weixin.cp.util.crypto.WxCpCryptUtil;
import me.chanjar.weixin.cp.util.xml.XStreamTransformer;
+import java.io.Serializable;
+
/**
* 被动回复消息.
* https://work.weixin.qq.com/api/doc#12975
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutUpdateBtnMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutUpdateBtnMessage.java
index b0428469f1..9e72229015 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutUpdateBtnMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutUpdateBtnMessage.java
@@ -5,12 +5,8 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
import me.chanjar.weixin.common.api.WxConsts;
-import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
-import me.chanjar.weixin.common.util.xml.XStreamMediaIdConverter;
import me.chanjar.weixin.common.util.xml.XStreamReplaceNameConverter;
-import java.io.Serializable;
-
/**
* @author nickname263
* @date 2021-09-23
@@ -18,7 +14,7 @@
@XStreamAlias("xml")
@Data
@EqualsAndHashCode(callSuper = false)
-public class WxCpXmlOutUpdateBtnMessage extends WxCpXmlOutMessage {
+public class WxCpXmlOutUpdateBtnMessage extends WxCpXmlOutMessage {
private static final long serialVersionUID = 976182367423048138L;
@XStreamAlias("Button")
@XStreamConverter(value = XStreamReplaceNameConverter.class)
@@ -29,5 +25,4 @@ public WxCpXmlOutUpdateBtnMessage() {
}
-
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutVideoMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutVideoMessage.java
index 031dc02cb6..add435a874 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutVideoMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutVideoMessage.java
@@ -1,7 +1,5 @@
package me.chanjar.weixin.cp.bean.message;
-import java.io.Serializable;
-
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import lombok.Data;
@@ -9,6 +7,8 @@
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
+import java.io.Serializable;
+
@XStreamAlias("xml")
@Data
@EqualsAndHashCode(callSuper = false)
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MpnewsBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MpnewsBuilder.java
index bc1467e14c..1d21089002 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MpnewsBuilder.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MpnewsBuilder.java
@@ -1,8 +1,8 @@
package me.chanjar.weixin.cp.bean.messagebuilder;
import me.chanjar.weixin.common.api.WxConsts;
-import me.chanjar.weixin.cp.bean.message.WxCpMessage;
import me.chanjar.weixin.cp.bean.article.MpnewsArticle;
+import me.chanjar.weixin.cp.bean.message.WxCpMessage;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/NewsBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/NewsBuilder.java
index ef661e6ed4..4d12a51ce1 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/NewsBuilder.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/NewsBuilder.java
@@ -1,8 +1,8 @@
package me.chanjar.weixin.cp.bean.messagebuilder;
import me.chanjar.weixin.common.api.WxConsts;
-import me.chanjar.weixin.cp.bean.message.WxCpMessage;
import me.chanjar.weixin.cp.bean.article.NewArticle;
+import me.chanjar.weixin.cp.bean.message.WxCpMessage;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/TemplateCardBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/TemplateCardBuilder.java
index ecee5108ea..d936cda0f3 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/TemplateCardBuilder.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/TemplateCardBuilder.java
@@ -5,16 +5,17 @@
import me.chanjar.weixin.cp.bean.templatecard.*;
import java.util.List;
+
/**
*
* 模板卡片消息Builder
* 用法: WxCustomMessage m = WxCustomMessage.TEMPLATECARD().title(...)....toUser(...).build();
*
*
- * @author yzts
+ * @author yzts a>
* @date 2019-05-16
*/
-public class TemplateCardBuilder extends BaseBuilder{
+public class TemplateCardBuilder extends BaseBuilder {
/**
* 模板卡片类型,文本通知型卡片填写 “text_notice”,
* 图文展示型卡片此处填写 “news_notice”,
@@ -88,7 +89,7 @@ public class TemplateCardBuilder extends BaseBuilder{
* 整体卡片的点击跳转事件,text_notice必填本字段
* 跳转事件类型,1 代表跳转url,2 代表打开小程序。text_notice卡片模版中该字段取值范围为[1,2]
*/
- private Integer card_action_type;
+ private Integer card_action_type;
/**
* 跳转事件的url,card_action.type是1时必填
*/
@@ -196,7 +197,7 @@ public TemplateCardBuilder sub_title_text(String sub_title_text) {
return this;
}
- public TemplateCardBuilder vertical_contents(List vertical_contents) {
+ public TemplateCardBuilder vertical_contents(List vertical_contents) {
this.vertical_contents = vertical_contents;
return this;
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/SummaryInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/SummaryInfo.java
index 49222cd0a5..85954ba881 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/SummaryInfo.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/SummaryInfo.java
@@ -3,7 +3,6 @@
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.experimental.Accessors;
-import me.chanjar.weixin.cp.bean.oa.WxCpOaApplyEventRequest;
import java.io.Serializable;
import java.util.List;
@@ -18,6 +17,7 @@
@Accessors(chain = true)
public class SummaryInfo implements Serializable {
private static final long serialVersionUID = 8262265774851382414L;
+
/**
* 摘要行信息,用于定义某一行摘要显示的内容
*/
@@ -28,6 +28,7 @@ public class SummaryInfo implements Serializable {
@Accessors(chain = true)
public static class SummaryInfoData implements Serializable {
private static final long serialVersionUID = 5314161929610113856L;
+
/**
* 摘要行显示文字,用于记录列表和消息通知的显示,不要超过20个字符
*/
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalApplier.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalApplier.java
index 7d372cdfcf..8b16aefa82 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalApplier.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalApplier.java
@@ -8,6 +8,7 @@
/**
* 申请人信息
+ *
* @author element
*/
@Data
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalInfo.java
index 4856af4194..b9c1235f10 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalInfo.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalInfo.java
@@ -1,11 +1,11 @@
package me.chanjar.weixin.cp.bean.oa;
-import java.io.Serializable;
-import java.util.List;
-
import com.google.gson.annotations.SerializedName;
import lombok.Data;
+import java.io.Serializable;
+import java.util.List;
+
/**
* @author element
*/
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalInfoQueryFilter.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalInfoQueryFilter.java
index 5271312081..73e6d81d2c 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalInfoQueryFilter.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalInfoQueryFilter.java
@@ -29,7 +29,7 @@ public String toJson() {
return WxGsonBuilder.create().toJson(this);
}
- public static enum KEY {
+ public enum KEY {
/**
* template_id - 模板类型/模板id;
@@ -52,9 +52,9 @@ public static enum KEY {
@SerializedName("sp_status")
SP_STATUS("sp_status");
- private String value;
+ private final String value;
- private KEY(String value) {
+ KEY(String value) {
this.value = value;
}
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalRecord.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalRecord.java
index 3325eaa4ac..c2ac33176d 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalRecord.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalRecord.java
@@ -8,6 +8,7 @@
/**
* 审批流程信息
+ *
* @author element
*/
@Data
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalRecordDetail.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalRecordDetail.java
index 4c966c9d6f..371546d73c 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalRecordDetail.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalRecordDetail.java
@@ -8,11 +8,11 @@
/**
* 审批节点详情
+ *
* @author element
*/
@Data
public class WxCpApprovalRecordDetail implements Serializable {
-
private static final long serialVersionUID = -9142079764088495301L;
/**
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApproverAttr.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApproverAttr.java
index 15e55f2f72..ae65a82082 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApproverAttr.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApproverAttr.java
@@ -19,9 +19,9 @@ public enum WxCpApproverAttr {
@SerializedName("2")
ALL_SIGN(2);
- private Integer attr;
+ private final Integer attr;
- private WxCpApproverAttr(Integer attr) {
+ WxCpApproverAttr(Integer attr) {
this.attr = attr;
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinData.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinData.java
index 93e975508a..9fb385a93f 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinData.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinData.java
@@ -96,26 +96,26 @@ public class WxCpCheckinData implements Serializable {
*/
@SerializedName("deviceid")
private String deviceId;
-
+
/**
* 标准打卡时间,指此次打卡时间对应的标准上班时间或标准下班时间
*/
@SerializedName("sch_checkin_time")
private Long schCheckinTime;
-
- /**
+
+ /**
* 规则id,表示打卡记录所属规则的id
*/
@SerializedName("groupid")
private Integer groupId;
-
- /**
+
+ /**
* 班次id,表示打卡记录所属规则中,所属班次的id
*/
@SerializedName("schedule_id")
private Integer scheduleId;
-
- /**
+
+ /**
* 时段id,表示打卡记录所属规则中,某一班次中的某一时段的id,如上下班时间为9:00-12:00、13:00-18:00的班次中,9:00-12:00为其中一组时段
*/
@SerializedName("timeline_id")
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinDayData.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinDayData.java
index 0c0bd8a07e..ef3ae1c08d 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinDayData.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinDayData.java
@@ -8,7 +8,6 @@
/**
* 企业微信打卡日报数据
- *
*/
@Data
public class WxCpCheckinDayData implements Serializable {
@@ -22,7 +21,7 @@ public class WxCpCheckinDayData implements Serializable {
private BaseInfo baseInfo;
@Data
- public class BaseInfo implements Serializable{
+ public class BaseInfo implements Serializable {
private static final long serialVersionUID = 3679745559788648438L;
@@ -102,7 +101,7 @@ public class RuleInfo implements Serializable {
private List checkinTime;
@Data
- public class CheckinTime implements Serializable{
+ public class CheckinTime implements Serializable {
private static final long serialVersionUID = 1582835435812966332L;
/**
* work_sec 上班时间,为距离0点的时间差
@@ -117,6 +116,7 @@ public class CheckinTime implements Serializable{
private Integer offWorkSec;
}
}
+
/**
* day_type 日报类型:0-工作日日报;1-休息日日报
*/
@@ -131,7 +131,7 @@ public class CheckinTime implements Serializable{
private SummaryInfo summaryInfo;
@Data
- public class SummaryInfo implements Serializable{
+ public class SummaryInfo implements Serializable {
private static final long serialVersionUID = 3428576099259666595L;
/**
* checkin_count 当日打卡次数
@@ -171,7 +171,7 @@ public class SummaryInfo implements Serializable{
private List holidayInfos;
@Data
- public class HolidayInfos implements Serializable{
+ public class HolidayInfos implements Serializable {
private static final long serialVersionUID = -6671577072585561527L;
/**
* sp_number 假勤相关信息
@@ -195,7 +195,7 @@ public class SpTitle implements Serializable {
private List data;
@lombok.Data
- public class Data implements Serializable{
+ public class Data implements Serializable {
private static final long serialVersionUID = -1672692024530543180L;
/**
* text 假勤信息摘要-标题文本
@@ -218,7 +218,7 @@ public class Data implements Serializable{
private SpDescription spDescription;
@Data
- public class SpDescription implements Serializable{
+ public class SpDescription implements Serializable {
private static final long serialVersionUID = 77680581771933449L;
/**
@@ -228,7 +228,7 @@ public class SpDescription implements Serializable{
private List data;
@lombok.Data
- public class Data implements Serializable{
+ public class Data implements Serializable {
private static final long serialVersionUID = 3555479101375365805L;
/**
* text 假勤信息摘要-标题文本
@@ -252,7 +252,7 @@ public class Data implements Serializable{
private List exceptionInfos;
@Data
- public class ExceptionInfos implements Serializable{
+ public class ExceptionInfos implements Serializable {
private static final long serialVersionUID = -5987438373762518299L;
/**
* exception 校准状态类型:1-迟到;2-早退;3-缺卡;4-旷工;5-地点异常;6-设备异常
@@ -280,7 +280,7 @@ public class ExceptionInfos implements Serializable{
private OtInfo otInfo;
@Data
- public class OtInfo implements Serializable{
+ public class OtInfo implements Serializable {
private static final long serialVersionUID = -6557759801572150175L;
/**
* ot_status 状态:0-无加班;1-正常;2-缺时长
@@ -308,7 +308,7 @@ public class OtInfo implements Serializable{
private List spItems;
@Data
- public class SpItem implements Serializable{
+ public class SpItem implements Serializable {
private static final long serialVersionUID = 2423158264958352024L;
/**
* type 类型:1-请假;2-补卡;3-出差;4-外出;100-外勤
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinMonthData.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinMonthData.java
index 003c68d2e2..559c8e46a3 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinMonthData.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinMonthData.java
@@ -8,6 +8,8 @@
/**
* 企业微信打卡月报数据
+ *
+ * @author longliveh
*/
@Data
@@ -21,8 +23,9 @@ public class WxCpCheckinMonthData implements Serializable {
private BaseInfo baseInfo;
@Data
- public class BaseInfo implements Serializable {
+ public static class BaseInfo implements Serializable {
private static final long serialVersionUID = -5368331890851903885L;
+
/**
* record_type 记录类型:1-固定上下班;2-外出(此报表中不会出现外出打卡数据);3-按班次上下班;4-自由签到;5-加班;7-无规则
*/
@@ -60,8 +63,9 @@ public class BaseInfo implements Serializable {
private RuleInfo ruleInfo;
@Data
- public class RuleInfo implements Serializable {
+ public static class RuleInfo implements Serializable {
private static final long serialVersionUID = 9152263355916880710L;
+
/**
* groupid 所属规则Id
*/
@@ -76,10 +80,6 @@ public class RuleInfo implements Serializable {
}
}
-
-
-
-
/**
* summary_info 打卡人员所属规则信息
*/
@@ -87,7 +87,7 @@ public class RuleInfo implements Serializable {
private SummaryInfo summaryInfo;
@Data
- public class SummaryInfo implements Serializable {
+ public static class SummaryInfo implements Serializable {
private static final long serialVersionUID = -1956770107240513983L;
/**
* work_days 应打卡天数
@@ -128,7 +128,7 @@ public class SummaryInfo implements Serializable {
private List exceptionInfos;
@Data
- public class ExceptionInfo implements Serializable {
+ public static class ExceptionInfo implements Serializable {
private static final long serialVersionUID = -4855850255704089359L;
/**
* exception 异常类型:1-迟到;2-早退;3-缺卡;4-旷工;5-地点异常;6-设备异常
@@ -156,9 +156,9 @@ public class ExceptionInfo implements Serializable {
private List spItems;
@Data
- public class SpItem implements Serializable {
-
+ public static class SpItem implements Serializable {
private static final long serialVersionUID = 224472626753597080L;
+
/**
* type 假勤类型:1-请假;2-补卡;3-出差;4-外出;100-外勤
*/
@@ -203,8 +203,9 @@ public class SpItem implements Serializable {
private OverWorkInfo overworkInfo;
@Data
- public class OverWorkInfo implements Serializable {
+ public static class OverWorkInfo implements Serializable {
private static final long serialVersionUID = -9149524232645899305L;
+
/**
* workday_over_sec 工作日加班时长
*/
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCropCheckinOption.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCropCheckinOption.java
index c68741fcaf..f9ab9dd155 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCropCheckinOption.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCropCheckinOption.java
@@ -22,61 +22,61 @@ public class WxCpCropCheckinOption implements Serializable {
private Long groupType;
/**
- * 打卡规则id
+ * 打卡规则id
*/
@SerializedName("groupid")
private Long groupId;
/**
- * 打卡规则名称
+ * 打卡规则名称
*/
@SerializedName("groupname")
private String groupName;
/**
- * 打卡时间,当规则类型为排班时没有意义
+ * 打卡时间,当规则类型为排班时没有意义
*/
@SerializedName("checkindate")
private List checkinDate;
/**
- * 特殊日期-必须打卡日期信息,timestamp表示具体时间
+ * 特殊日期-必须打卡日期信息,timestamp表示具体时间
*/
@SerializedName("spe_workdays")
private List speWorkdays;
/**
- * 特殊日期-不用打卡日期信息, timestamp表示具体时间
+ * 特殊日期-不用打卡日期信息, timestamp表示具体时间
*/
@SerializedName("spe_offdays")
private List speOffDays;
/**
- * 是否同步法定节假日,true为同步,false为不同步,当前排班不支持
+ * 是否同步法定节假日,true为同步,false为不同步,当前排班不支持
*/
@SerializedName("sync_holidays")
private Boolean syncHolidays;
/**
- * 是否打卡必须拍照,true为必须拍照,false为不必须拍照
+ * 是否打卡必须拍照,true为必须拍照,false为不必须拍照
*/
@SerializedName("need_photo")
private Boolean needPhoto;
/**
- * 是否备注时允许上传本地图片,true为允许,false为不允许
+ * 是否备注时允许上传本地图片,true为允许,false为不允许
*/
@SerializedName("note_can_use_local_pic")
private Boolean noteCanUseLocalPic;
/**
- * 是否非工作日允许打卡,true为允许,false为不允许
+ * 是否非工作日允许打卡,true为允许,false为不允许
*/
@SerializedName("allow_checkin_offworkday")
private Boolean allowCheckinOffWorkDay;
/**
- * 是否允许提交补卡申请,true为允许,false为不允许
+ * 是否允许提交补卡申请,true为允许,false为不允许
*/
@SerializedName("allow_apply_offworkday")
private Boolean allowApplyOffWorkDay;
@@ -106,217 +106,217 @@ public class WxCpCropCheckinOption implements Serializable {
private Long createTime;
/**
- * 打卡人员白名单,即不需要打卡人员,需要有设置白名单才能查看
+ * 打卡人员白名单,即不需要打卡人员,需要有设置白名单才能查看
*/
@SerializedName("white_users")
private List whiteUsers;
/**
- * 打卡方式,0:手机;2:智慧考勤机;3:手机+智慧考勤机
+ * 打卡方式,0:手机;2:智慧考勤机;3:手机+智慧考勤机
*/
@SerializedName("type")
private Integer type;
/**
- * 打卡方式,0:手机;2:智慧考勤机;3:手机+智慧考勤机
+ * 打卡方式,0:手机;2:智慧考勤机;3:手机+智慧考勤机
*/
@SerializedName("reporterinfo")
private ReporterInfo reporterInfo;
/**
- * 加班信息,相关信息需要设置后才能显示
+ * 加班信息,相关信息需要设置后才能显示
*/
@SerializedName("ot_info")
private OtInfo otInfo;
/**
- * 每月最多补卡次数,默认-1表示不限制
+ * 每月最多补卡次数,默认-1表示不限制
*/
@SerializedName("allow_apply_bk_cnt")
private Integer allowApplyBkCnt;
/**
- * 范围外打卡处理方式,0-视为范围外异常,默认值;1-视为正常外勤;2:不允许范围外打卡
+ * 范围外打卡处理方式,0-视为范围外异常,默认值;1-视为正常外勤;2:不允许范围外打卡
*/
@SerializedName("option_out_range")
private Integer optionOutRange;
/**
- * 规则创建人userid
+ * 规则创建人userid
*/
@SerializedName("create_userid")
private String createUserid;
/**
- * 人脸识别打卡开关,true为启用,false为不启用
+ * 人脸识别打卡开关,true为启用,false为不启用
*/
@SerializedName("use_face_detect")
private Boolean useFaceDetect;
/**
- * 允许补卡时限,默认-1表示不限制。单位天
+ * 允许补卡时限,默认-1表示不限制。单位天
*/
@SerializedName("allow_apply_bk_day_limit")
private Integer allowApplyBkDayLimit;
/**
- * 规则最近编辑人userid
+ * 规则最近编辑人userid
*/
@SerializedName("update_userid")
private String updateUserid;
/**
- * 加班信息,相关信息需要设置后才能显示
+ * 加班信息,相关信息需要设置后才能显示
*/
@SerializedName("schedulelist")
private List schedulelist;
/**
- * 自由签到,上班打卡后xx秒可打下班卡
+ * 自由签到,上班打卡后xx秒可打下班卡
*/
@SerializedName("offwork_interval_time")
private Integer offWorkIntervalTime;
@Data
- public static class CheckinDate implements Serializable{
+ public static class CheckinDate implements Serializable {
private static final long serialVersionUID = -8560643656775167406L;
/**
- * 工作日。若为固定时间上下班或自由上下班,则1到6分别表示星期一到星期六,0表示星期日
+ * 工作日。若为固定时间上下班或自由上下班,则1到6分别表示星期一到星期六,0表示星期日
*/
@SerializedName("workdays")
private List workdays;
/**
- * 工作日上下班打卡时间信息
+ * 工作日上下班打卡时间信息
*/
@SerializedName("checkintime")
private List checkinTime;
/**
- * 下班不需要打卡,true为下班不需要打卡,false为下班需要打卡
+ * 下班不需要打卡,true为下班不需要打卡,false为下班需要打卡
*/
@SerializedName("noneed_offwork")
private Boolean noneedOffwork;
/**
- * 打卡时间限制(毫秒)
+ * 打卡时间限制(毫秒)
*/
@SerializedName("limit_aheadtime")
private Long limitAheadtime;
/**
- * 允许迟到时间,单位ms
+ * 允许迟到时间,单位ms
*/
@SerializedName("flex_on_duty_time")
private Integer flexOnDutyTime;
/**
- * 允许早退时间,单位ms
+ * 允许早退时间,单位ms
*/
@SerializedName("flex_off_duty_time")
private Integer flexOffDutyTime;
}
@Data
- public static class CheckinTime implements Serializable{
+ public static class CheckinTime implements Serializable {
private static final long serialVersionUID = -5507709858609705279L;
/**
- * 上班时间,表示为距离当天0点的秒数。
+ * 上班时间,表示为距离当天0点的秒数。
*/
@SerializedName("work_sec")
private Integer workSec;
/**
- * 下班时间,表示为距离当天0点的秒数。
+ * 下班时间,表示为距离当天0点的秒数。
*/
@SerializedName("off_work_sec")
private Integer offWorkSec;
/**
- * 上班提醒时间,表示为距离当天0点的秒数。。
+ * 上班提醒时间,表示为距离当天0点的秒数。。
*/
@SerializedName("remind_work_sec")
private Integer remindWorkSec;
/**
- * 下班提醒时间,表示为距离当天0点的秒数。
+ * 下班提醒时间,表示为距离当天0点的秒数。
*/
@SerializedName("remind_off_work_sec")
private Integer remindOffWorkSec;
}
@Data
- public static class SpeWorkday implements Serializable{
+ public static class SpeWorkday implements Serializable {
private static final long serialVersionUID = -4620710297258742666L;
/**
- * 特殊日期-必须打卡日期时间戳
+ * 特殊日期-必须打卡日期时间戳
*/
@SerializedName("timestamp")
private Long timestamp;
/**
- * 特殊日期备注
+ * 特殊日期备注
*/
@SerializedName("notes")
private String notes;
/**
- * 特殊日期-必须打卡日期-上下班打卡时间
+ * 特殊日期-必须打卡日期-上下班打卡时间
*/
@SerializedName("checkintime")
private List checkinTime;
}
@Data
- public static class SpeOffDay implements Serializable{
+ public static class SpeOffDay implements Serializable {
private static final long serialVersionUID = 9214798931489490993L;
/**
- * 特殊日期-不用打卡日期时间戳
+ * 特殊日期-不用打卡日期时间戳
*/
@SerializedName("timestamp")
private Long timestamp;
/**
- * 特殊日期备注
+ * 特殊日期备注
*/
@SerializedName("notes")
private String notes;
}
@Data
- public static class WifiMacInfo implements Serializable{
+ public static class WifiMacInfo implements Serializable {
private static final long serialVersionUID = 6742659716677227089L;
/**
- * WiFi打卡地点名称
+ * WiFi打卡地点名称
*/
@SerializedName("wifiname")
private String wifiname;
/**
- * WiFi打卡地点MAC地址/bssid
+ * WiFi打卡地点MAC地址/bssid
*/
@SerializedName("wifimac")
private String wifimac;
}
@Data
- public static class LocInfo implements Serializable{
+ public static class LocInfo implements Serializable {
private static final long serialVersionUID = -5591379191341944101L;
/**
- * 位置打卡地点纬度,是实际纬度的1000000倍,与腾讯地图一致采用GCJ-02坐标系统标准
+ * 位置打卡地点纬度,是实际纬度的1000000倍,与腾讯地图一致采用GCJ-02坐标系统标准
*/
@SerializedName("lat")
private Long lat;
/**
- * 位置打卡地点经度,是实际经度的1000000倍,与腾讯地图一致采用GCJ-02坐标系统标准
+ * 位置打卡地点经度,是实际经度的1000000倍,与腾讯地图一致采用GCJ-02坐标系统标准
*/
@SerializedName("lng")
private Long lng;
@@ -334,31 +334,31 @@ public static class LocInfo implements Serializable{
private String locDetail;
/**
- * 允许打卡范围(米)
+ * 允许打卡范围(米)
*/
@SerializedName("distance")
private Integer distance;
}
@Data
- public static class Range implements Serializable{
+ public static class Range implements Serializable {
private static final long serialVersionUID = 8940086218556453088L;
/**
- * 打卡人员中,单个打卡人员节点的userid
+ * 打卡人员中,单个打卡人员节点的userid
*/
@SerializedName("party_id")
private List partyid;
/**
- * 打卡人员中,部门节点的id
+ * 打卡人员中,部门节点的id
*/
@SerializedName("userid")
private List userid;
/**
- * 打卡人员中,标签节点的标签id
+ * 打卡人员中,标签节点的标签id
*/
@SerializedName("tagid")
private List tagid;
@@ -367,16 +367,16 @@ public static class Range implements Serializable{
}
@Data
- public static class ReporterInfo implements Serializable{
+ public static class ReporterInfo implements Serializable {
private static final long serialVersionUID = 1132450350458936772L;
/**
- * 汇报对象,每个汇报人用userid表示
+ * 汇报对象,每个汇报人用userid表示
*/
@SerializedName("reporters")
private List reporters;
/**
- * 汇报对象更新时间
+ * 汇报对象更新时间
*/
@SerializedName("updatetime")
private long updateTime;
@@ -392,7 +392,7 @@ public static class Reporter implements Serializable {
}
@Data
- public static class OtInfo implements Serializable{
+ public static class OtInfo implements Serializable {
private static final long serialVersionUID = 1610150484871066199L;
@@ -406,31 +406,31 @@ public static class OtInfo implements Serializable{
private Integer type;
/**
- * 允许工作日加班,true为允许,false为不允许
+ * 允许工作日加班,true为允许,false为不允许
*/
@SerializedName("allow_ot_workingday")
private Boolean allowOtWorkingDay;
/**
- * 允许非工作日加班,true为允许,flase为不允许
+ * 允许非工作日加班,true为允许,flase为不允许
*/
@SerializedName("allow_ot_nonworkingday")
private Boolean allowOtNonworkingDay;
/**
- * 允许非工作日加班,true为允许,flase为不允许
+ * 允许非工作日加班,true为允许,flase为不允许
*/
@SerializedName("otcheckinfo")
private OtCheckInfo otcheckinfo;
/**
- * 更新时间
+ * 更新时间
*/
@SerializedName("uptime")
private Long uptime;
/**
- * 允许非工作日加班,true为允许,flase为不允许
+ * 允许非工作日加班,true为允许,flase为不允许
*/
@SerializedName("otapplyinfo")
private OtApplyInfo otapplyinfo;
@@ -442,91 +442,91 @@ public static class OtCheckInfo implements Serializable {
private static final long serialVersionUID = -2363047492489556390L;
/**
- * 允许工作日加班-加班开始时间:下班后xx秒开始计算加班,距离最晚下班时间的秒数,例如,1800(30分钟 乘以 60秒),默认值30分钟
+ * 允许工作日加班-加班开始时间:下班后xx秒开始计算加班,距离最晚下班时间的秒数,例如,1800(30分钟 乘以 60秒),默认值30分钟
*/
@SerializedName("ot_workingday_time_start")
private Integer otWorkingDayTimeStart;
/**
- * 允许工作日加班-最短加班时长:不足xx秒视为未加班,单位秒,默认值30分钟
+ * 允许工作日加班-最短加班时长:不足xx秒视为未加班,单位秒,默认值30分钟
*/
@SerializedName("ot_workingday_time_min")
private Integer otWorkingDayTimeMin;
/**
- * 允许工作日加班-最长加班时长:超过则视为加班xx秒,单位秒,默认值240分钟
+ * 允许工作日加班-最长加班时长:超过则视为加班xx秒,单位秒,默认值240分钟
*/
@SerializedName("ot_workingday_time_max")
private Integer otWorkingDayTimeMax;
/**
- * 允许非工作日加班-最短加班时长:不足xx秒视为未加班,单位秒,默认值30分钟
+ * 允许非工作日加班-最短加班时长:不足xx秒视为未加班,单位秒,默认值30分钟
*/
@SerializedName("ot_nonworkingday_time_min")
private Integer otNonworkingDayTimeMin;
/**
- * 允许非工作日加班-最长加班时长:超过则视为加班xx秒 单位秒,默认值240分钟
+ * 允许非工作日加班-最长加班时长:超过则视为加班xx秒 单位秒,默认值240分钟
*/
@SerializedName("ot_nonworkingday_time_max")
private Integer otNonworkingDayTimeMax;
/**
- * 非工作日加班,跨天时间,距离当天00:00的秒数
+ * 非工作日加班,跨天时间,距离当天00:00的秒数
*/
@SerializedName("ot_nonworkingday_spanday_time")
private Integer otNonworkingDaySpanDayTime;
/**
- * 允许非工作日加班,true为允许,flase为不允许
+ * 允许非工作日加班,true为允许,flase为不允许
*/
@SerializedName("ot_workingday_restinfo")
private OtWorkingDayRestInfo otWorkingdayRestinfo;
/**
- * 允许非工作日加班,true为允许,flase为不允许
+ * 允许非工作日加班,true为允许,flase为不允许
*/
@SerializedName("ot_nonworkingday_restinfo")
private OtNonworkingDayRestInfo otNonworkingdayRestinfo;
}
@Data
- public static class OtWorkingDayRestInfo implements Serializable{
+ public static class OtWorkingDayRestInfo implements Serializable {
private static final long serialVersionUID = -4011047369711928306L;
/**
- * 工作日加班-休息扣除类型:0-不开启扣除;1-指定休息时间扣除;2-按加班时长扣除休息时间
+ * 工作日加班-休息扣除类型:0-不开启扣除;1-指定休息时间扣除;2-按加班时长扣除休息时间
*/
@SerializedName("type")
private Integer type;
/**
- * 工作日加班-指定休息时间配置信息,当group.ot_info.otcheckinfo.ot_workingday_restinfo.type为1时有意义
+ * 工作日加班-指定休息时间配置信息,当group.ot_info.otcheckinfo.ot_workingday_restinfo.type为1时有意义
*/
@SerializedName("fix_time_rule")
private FixTimeRule fixTimeRule;
/**
- * 工作日加班-按加班时长扣除配置信息,当group.ot_info.otcheckinfo.ot_workingday_restinfo.type为2时有意义
+ * 工作日加班-按加班时长扣除配置信息,当group.ot_info.otcheckinfo.ot_workingday_restinfo.type为2时有意义
*/
@SerializedName("cal_ottime_rule")
private CalOtTimeRule calOttimeRule;
}
@Data
- public static class FixTimeRule implements Serializable{
+ public static class FixTimeRule implements Serializable {
private static final long serialVersionUID = 5709478500196619664L;
/**
- * 工作日加班-指定休息时间的开始时间, 距离当天00:00的秒数
+ * 工作日加班-指定休息时间的开始时间, 距离当天00:00的秒数
*/
@SerializedName("fix_time_begin_sec")
private Integer fixTimeBeginSec;
/**
- * 工作日加班-指定休息时间的结束时间, 距离当天00:00的秒数
+ * 工作日加班-指定休息时间的结束时间, 距离当天00:00的秒数
*/
@SerializedName("fix_time_end_sec")
private Integer fixTimeEndSec;
@@ -538,91 +538,92 @@ public static class CalOtTimeRule implements Serializable {
private static final long serialVersionUID = -2407839982631243413L;
/**
- * 工作日加班-按加班时长扣除条件信息
+ * 工作日加班-按加班时长扣除条件信息
*/
@SerializedName("items")
private List- items;
}
+
@Data
- public static class Item implements Serializable{
+ public static class Item implements Serializable {
private static final long serialVersionUID = 5235770378506228461L;
/**
- * 加班满-时长(秒)
+ * 加班满-时长(秒)
*/
@SerializedName("ot_time")
private Integer otTime;
/**
- * 对应扣除-时长(秒)
+ * 对应扣除-时长(秒)
*/
@SerializedName("rest_time")
private Integer restTime;
}
@Data
- public static class OtNonworkingDayRestInfo implements Serializable{
+ public static class OtNonworkingDayRestInfo implements Serializable {
private static final long serialVersionUID = 3773846077049838088L;
/**
- * 非工作日加班-休息扣除类型:0-不开启扣除;1-指定休息时间扣除;2-按加班时长扣除休息时间
+ * 非工作日加班-休息扣除类型:0-不开启扣除;1-指定休息时间扣除;2-按加班时长扣除休息时间
*/
@SerializedName("type")
private Integer type;
/**
- * 非工作日加班-指定休息时间配置信息,当group.ot_info.otcheckinfo.ot_workingday_restinfo.type为1时有意义
+ * 非工作日加班-指定休息时间配置信息,当group.ot_info.otcheckinfo.ot_workingday_restinfo.type为1时有意义
*/
@SerializedName("fix_time_rule")
private FixTimeRule fixTimeRule;
/**
- * 非工作日加班-按加班时长扣除配置信息,当group.ot_info.otcheckinfo.ot_workingday_restinfo.type为2时有意义
+ * 非工作日加班-按加班时长扣除配置信息,当group.ot_info.otcheckinfo.ot_workingday_restinfo.type为2时有意义
*/
@SerializedName("cal_ottime_rule")
private CalOtTimeRule calOttimeRule;
}
@Data
- public static class OtApplyInfo implements Serializable{
+ public static class OtApplyInfo implements Serializable {
private static final long serialVersionUID = 961217471918884103L;
/**
- * 允许工作日加班,true为允许,false为不允许
+ * 允许工作日加班,true为允许,false为不允许
*/
@SerializedName("allow_ot_workingday")
private Boolean allowOtWorkingDay;
/**
- * 允许非工作日加班,true为允许,flase为不允许
+ * 允许非工作日加班,true为允许,flase为不允许
*/
@SerializedName("allow_ot_nonworkingday")
private Boolean allowOtNonworkingDay;
/**
- * 更新时间
+ * 更新时间
*/
@SerializedName("uptime")
private Long uptime;
/**
- * 允许非工作日加班,true为允许,flase为不允许
+ * 允许非工作日加班,true为允许,flase为不允许
*/
@SerializedName("ot_workingday_restinfo")
private OtWorkingDayRestInfo otWorkingdayRestinfo;
/**
- * 允许非工作日加班,true为允许,flase为不允许
+ * 允许非工作日加班,true为允许,flase为不允许
*/
@SerializedName("ot_nonworkingday_restinfo")
private OtNonworkingDayRestInfo otNonworkingdayRestinfo;
/**
- * 非工作日加班,跨天时间,距离当天00:00的秒数
+ * 非工作日加班,跨天时间,距离当天00:00的秒数
*/
@SerializedName("ot_nonworkingday_spanday_time")
private Integer otNonworkingDaySpanDayTime;
@@ -630,78 +631,78 @@ public static class OtApplyInfo implements Serializable{
}
@Data
- public static class Schedule implements Serializable{
+ public static class Schedule implements Serializable {
private static final long serialVersionUID = -2461113644925307266L;
/**
- * 班次id
+ * 班次id
*/
@SerializedName("schedule_id")
private Integer scheduleId;
/**
- * 班次名称
+ * 班次名称
*/
@SerializedName("schedule_name")
private String scheduleName;
/**
- * 班次上下班时段信息
+ * 班次上下班时段信息
*/
@SerializedName("time_section")
private List
timeSection;
/**
- * 允许提前打卡时间
+ * 允许提前打卡时间
*/
@SerializedName("limit_aheadtime")
private Long limitAheadTime;
/**
- * 下班xx秒后不允许打下班卡
+ * 下班xx秒后不允许打下班卡
*/
@SerializedName("limit_offtime")
private Integer limitOffTime;
/**
- * 下班不需要打卡
+ * 下班不需要打卡
*/
@SerializedName("noneed_offwork")
private Boolean noNeedOffWork;
/**
- * 是否允许弹性时间
+ * 是否允许弹性时间
*/
@SerializedName("allow_flex")
private Boolean allowFlex;
/**
- * 允许迟到时间
+ * 允许迟到时间
*/
@SerializedName("flex_on_duty_time")
private Integer flexOnDutyTime;
/**
- * 允许早退时间
+ * 允许早退时间
*/
@SerializedName("flex_off_duty_time")
private Integer flexOffDutyTime;
/**
- * 非工作日加班,跨天时间,距离当天00:00的秒数
+ * 非工作日加班,跨天时间,距离当天00:00的秒数
*/
@SerializedName("late_rule")
private LateRule lateRule;
/**
- * 最早可打卡时间限制
+ * 最早可打卡时间限制
*/
@SerializedName("max_allow_arrive_early")
private Integer maxAllowArriveEarly;
/**
- * 最晚可打卡时间限制,max_allow_arrive_early、max_allow_arrive_early与flex_on_duty_time、flex_off_duty_time互斥,当设置其中一组时,另一组数值置0
+ * 最晚可打卡时间限制,max_allow_arrive_early、max_allow_arrive_early与flex_on_duty_time、flex_off_duty_time互斥,当设置其中一组时,另一组数值置0
*/
@SerializedName("max_allow_arrive_late")
private Integer maxAllowArriveLate;
@@ -714,49 +715,49 @@ public static class TimeSection implements Serializable {
private static final long serialVersionUID = 7497252128339062724L;
/**
- * 时段id,为班次中某一堆上下班时间组合的id
+ * 时段id,为班次中某一堆上下班时间组合的id
*/
@SerializedName("time_id")
private Integer timeId;
/**
- * 上班时间,表示为距离当天0点的秒数。
+ * 上班时间,表示为距离当天0点的秒数。
*/
@SerializedName("work_sec")
private Integer workSec;
/**
- * 下班时间,表示为距离当天0点的秒数。
+ * 下班时间,表示为距离当天0点的秒数。
*/
@SerializedName("off_work_sec")
private Integer offWorkSec;
/**
- * 上班提醒时间,表示为距离当天0点的秒数。
+ * 上班提醒时间,表示为距离当天0点的秒数。
*/
@SerializedName("remind_work_sec")
private Long remindWorkSec;
/**
- * 下班提醒时间,表示为距离当天0点的秒数。
+ * 下班提醒时间,表示为距离当天0点的秒数。
*/
@SerializedName("remind_off_work_sec")
private Integer remindOffWorkSec;
/**
- * 休息开始时间,仅单时段支持,距离0点的秒
+ * 休息开始时间,仅单时段支持,距离0点的秒
*/
@SerializedName("rest_begin_time")
private Integer restBeginTime;
/**
- * 休息结束时间,仅单时段支持,距离0点的秒
+ * 休息结束时间,仅单时段支持,距离0点的秒
*/
@SerializedName("rest_end_time")
private Integer restEndTime;
/**
- * 是否允许休息
+ * 是否允许休息
*/
@SerializedName("allow_rest")
private Boolean allowRest;
@@ -764,37 +765,37 @@ public static class TimeSection implements Serializable {
@Data
- public static class LateRule implements Serializable{
+ public static class LateRule implements Serializable {
private static final long serialVersionUID = 5604969713950037053L;
/**
- * 是否允许超时下班(下班晚走次日晚到)允许时onwork_flex_time,offwork_after_time才有意义
+ * 是否允许超时下班(下班晚走次日晚到)允许时onwork_flex_time,offwork_after_time才有意义
*/
@SerializedName("allow_offwork_after_time")
private Boolean allowOffWorkAfterTime;
/**
- * 迟到规则时间
+ * 迟到规则时间
*/
@SerializedName("timerules")
private List timerules;
}
@Data
- public static class TimeRule implements Serializable{
+ public static class TimeRule implements Serializable {
private static final long serialVersionUID = 5680614050081598333L;
/**
- * 晚走的时间 距离最晚一个下班的时间单位:秒
+ * 晚走的时间 距离最晚一个下班的时间单位:秒
*/
@SerializedName("offwork_after_time")
private Integer offWorkAfterTime;
/**
- * 第二天第一个班次允许迟到的弹性时间单位:秒
+ * 第二天第一个班次允许迟到的弹性时间单位:秒
*/
@SerializedName("onwork_flex_time")
private Integer onWorkFlexTime;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpSetCheckinSchedule.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpSetCheckinSchedule.java
index 3d0d1f87f5..d34d233a30 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpSetCheckinSchedule.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpSetCheckinSchedule.java
@@ -33,7 +33,7 @@ public class WxCpSetCheckinSchedule implements Serializable {
@Data
- public static class Item implements Serializable{
+ public static class Item implements Serializable {
private static final long serialVersionUID = -918057757709951513L;
@@ -44,7 +44,7 @@ public static class Item implements Serializable{
private String userid;
/**
- * 要设置的天日期,取值在1-31之间。联合yearmonth组成唯一日期 比如20201205
+ * 要设置的天日期,取值在1-31之间。联合yearmonth组成唯一日期 比如20201205
*/
@SerializedName("day")
private Integer day;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpSpStatus.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpSpStatus.java
index c3d8005f50..029b7c144e 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpSpStatus.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpSpStatus.java
@@ -46,9 +46,9 @@ public enum WxCpSpStatus {
@SerializedName("10")
ALREADY_PAY(10);
- private Integer status;
+ private final Integer status;
- private WxCpSpStatus(Integer status) {
+ WxCpSpStatus(Integer status) {
this.status = status;
}
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java
index 23a8749620..6ae69c1895 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java
@@ -131,10 +131,10 @@ public static class Vacation implements Serializable {
* 关联审批单控件
*/
@Data
- public static class RelatedApproval implements Serializable{
+ public static class RelatedApproval implements Serializable {
private static final long serialVersionUID = 8629601623267510738L;
/**
- *关联审批单的模板名
+ * 关联审批单的模板名
*/
@SerializedName("template_names")
private List templateNames;
@@ -160,7 +160,7 @@ public static class RelatedApproval implements Serializable{
}
@Data
- public static class TemplateName implements Serializable{
+ public static class TemplateName implements Serializable {
private static final long serialVersionUID = 3152481506054355937L;
private String text;
private String lang;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateConfig.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateConfig.java
index 54213d9d90..3bbb4b2cb5 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateConfig.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateConfig.java
@@ -14,6 +14,7 @@
* Contact-成员/部门;
* Table-明细;
* Attendance-假勤组件(请假、外出、出差、加班)
+ *
* @author gyv12345@163.com
*/
@Data
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateTable.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateTable.java
index 08cdd5d4e7..1022e1662d 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateTable.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateTable.java
@@ -7,7 +7,6 @@
import java.util.List;
/**
- *
* @author gyv12345@163.com
*/
@Data
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/EventBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/EventBuilder.java
index 5e2ee481fc..19dc5f38e0 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/EventBuilder.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/EventBuilder.java
@@ -86,7 +86,7 @@ public EventBuilder state(String state) {
return this;
}
- public EventBuilder source(String source){
+ public EventBuilder source(String source) {
this.source = source;
return this;
}
@@ -96,12 +96,12 @@ public EventBuilder welcomeCode(String welcomeCode) {
return this;
}
- public EventBuilder failReason(String failReason){
+ public EventBuilder failReason(String failReason) {
this.failReason = failReason;
return this;
}
- public EventBuilder id(String id){
+ public EventBuilder id(String id) {
this.id = id;
return this;
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/NewsBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/NewsBuilder.java
index 190ab1c971..60fb3b8a13 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/NewsBuilder.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/NewsBuilder.java
@@ -20,7 +20,7 @@ public NewsBuilder addArticle(Item... items) {
return this;
}
- public NewsBuilder articles(List- articles){
+ public NewsBuilder articles(List
- articles) {
this.articles = articles;
return this;
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/UpdateButtonBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/UpdateButtonBuilder.java
index d4dd4b04d2..352abeb04c 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/UpdateButtonBuilder.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/UpdateButtonBuilder.java
@@ -1,6 +1,5 @@
package me.chanjar.weixin.cp.bean.outxmlbuilder;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlOutTaskCardMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutUpdateBtnMessage;
/**
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/taskcard/TaskCardButton.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/taskcard/TaskCardButton.java
index 4a7e3c00e1..bff28c415f 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/taskcard/TaskCardButton.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/taskcard/TaskCardButton.java
@@ -1,12 +1,12 @@
package me.chanjar.weixin.cp.bean.taskcard;
-import java.io.Serializable;
-
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
+import java.io.Serializable;
+
/**
*
* 任务卡片按钮
@@ -22,7 +22,7 @@
@AllArgsConstructor
public class TaskCardButton implements Serializable {
private static final long serialVersionUID = -4301684507150486556L;
-
+
private String key;
private String name;
private String replaceName;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/CheckboxOption.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/CheckboxOption.java
index 2f6b5b1a97..8e76ca00bd 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/CheckboxOption.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/CheckboxOption.java
@@ -5,12 +5,12 @@
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
-import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
/**
* 按钮列表,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过6
+ *
* @author yzts
* @date 2021/9/22
*/
@@ -18,7 +18,7 @@
@Builder
@NoArgsConstructor
@AllArgsConstructor
-public class CheckboxOption implements Serializable {
+public class CheckboxOption implements Serializable {
private static final long serialVersionUID = 5405702239190050250L;
/**
@@ -41,7 +41,7 @@ public JsonObject toJson() {
JsonObject optionJson = new JsonObject();
optionJson.addProperty("id", this.getId());
optionJson.addProperty("text", this.getText());
- if(null != this.getIs_checked()) {
+ if (null != this.getIs_checked()) {
optionJson.addProperty("is_checked", this.getIs_checked());
}
return optionJson;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/HorizontalContent.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/HorizontalContent.java
index 4f1160e933..397420820b 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/HorizontalContent.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/HorizontalContent.java
@@ -11,6 +11,7 @@
/**
* 二级标题+文本列表,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过6
+ *
* @author yzts
* @date 2021/9/22
*/
@@ -46,7 +47,7 @@ public class HorizontalContent implements Serializable {
public JsonObject toJson() {
JsonObject hContentJson = new JsonObject();
- if(null != this.getType()){
+ if (null != this.getType()) {
hContentJson.addProperty("type", this.getType());
}
hContentJson.addProperty("keyname", this.getKeyname());
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/MultipleSelect.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/MultipleSelect.java
index 145a6c4426..95ab92f3f2 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/MultipleSelect.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/MultipleSelect.java
@@ -13,6 +13,7 @@
/**
* 下拉式的选择器列表,multiple_interaction类型的卡片该字段不可为空,一个消息最多支持 3 个选择器
+ *
* @author yzts
* @date 2021/9/22
*/
@@ -54,7 +55,7 @@ public JsonObject toJson() {
}
// select_list
List options = this.getOptions();
- if(null != options && options.size() > 0) {
+ if (null != options && options.size() > 0) {
JsonArray optionJsonArray = new JsonArray();
for (CheckboxOption option : this.getOptions()) {
JsonObject tempObject = option.toJson();
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/TemplateCardButton.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/TemplateCardButton.java
index 4ac9e005e4..28722c8d75 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/TemplateCardButton.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/TemplateCardButton.java
@@ -5,12 +5,12 @@
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
-import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
/**
* 按钮列表,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过6
+ *
* @author yzts
* @date 2021/9/22
*/
@@ -18,7 +18,7 @@
@Builder
@NoArgsConstructor
@AllArgsConstructor
-public class TemplateCardButton implements Serializable {
+public class TemplateCardButton implements Serializable {
private static final long serialVersionUID = -4826551822490837002L;
/**
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/TemplateCardJump.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/TemplateCardJump.java
index 6d297e9c0b..79fd92ff90 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/TemplateCardJump.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/TemplateCardJump.java
@@ -11,6 +11,7 @@
/**
* 跳转指引样式的列表,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过3
+ *
* @author yzts
* @date 2021/9/22
*/
@@ -45,7 +46,7 @@ public class TemplateCardJump implements Serializable {
public JsonObject toJson() {
JsonObject hContentJson = new JsonObject();
- if(null != this.getType()){
+ if (null != this.getType()) {
hContentJson.addProperty("type", this.getType());
}
hContentJson.addProperty("title", this.getTitle());
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/VerticalContent.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/VerticalContent.java
index 7d364ff106..2dc4021847 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/VerticalContent.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/templatecard/VerticalContent.java
@@ -1,7 +1,6 @@
package me.chanjar.weixin.cp.bean.templatecard;
import com.google.gson.JsonObject;
-import kotlin.text.UStringsKt;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -12,6 +11,7 @@
/**
* 卡片二级垂直内容,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过4
+ *
* @author yzts
* @date 2021/9/22
*/
From a79b05cd45489e0e4e27d2cd6f02a3c307e56e89 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A4=A7=E6=A3=AE=E6=9E=97?=
Date: Wed, 26 Jan 2022 06:06:49 +0000
Subject: [PATCH 0047/1155] =?UTF-8?q?:memo:=20=E5=A2=9E=E5=8A=A0jeepay?=
=?UTF-8?q?=E8=B5=9E=E5=8A=A9=E5=B9=BF=E5=91=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/README.md b/README.md
index d31f0beb06..7d72b14919 100644
--- a/README.md
+++ b/README.md
@@ -21,6 +21,13 @@
+
+
+
+
+
+
+
From 1af394cdd909c26a2fdb137e38cc94b6ba55c5f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BE=90=E5=87=AF=E6=97=8B?=
<42696884+azouever@users.noreply.github.com>
Date: Wed, 26 Jan 2022 14:27:14 +0800
Subject: [PATCH 0048/1155] =?UTF-8?q?:new:=20#2198=20=E3=80=90=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91=E5=A2=9E=E5=8A=A0=E6=A0=B9=E6=8D=AE?=
=?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=A1=E6=81=AF=E6=95=B0=E6=8D=AE=E8=8E=B7?=
=?UTF-8?q?=E5=8F=96=E7=94=A8=E6=88=B7=E5=AE=89=E5=85=A8=E7=AD=89=E7=BA=A7?=
=?UTF-8?q?=E7=9A=84=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/WxMaSafetyRiskControlService.java | 27 +++++++
.../wx/miniapp/api/WxMaService.java | 8 ++
.../miniapp/api/impl/BaseWxMaServiceImpl.java | 5 ++
.../WxMaSafetyRiskControlServiceImpl.java | 35 ++++++++
.../bean/marketing/WxMaUserAction.java | 1 -
.../WxMaUserSafetyRiskRankRequest.java | 81 +++++++++++++++++++
.../WxMaUserSafetyRiskRankResponse.java | 42 ++++++++++
.../response/WxMaShopAddOrderResponse.java | 2 +-
.../miniapp/constant/WxMaApiUrlConstants.java | 11 +++
.../WxMaSafetyRiskControlServiceImplTest.java | 34 ++++++++
10 files changed, 244 insertions(+), 2 deletions(-)
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSafetyRiskControlService.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImpl.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/request/WxMaUserSafetyRiskRankRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/response/WxMaUserSafetyRiskRankResponse.java
create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImplTest.java
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSafetyRiskControlService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSafetyRiskControlService.java
new file mode 100644
index 0000000000..c84a93d13d
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSafetyRiskControlService.java
@@ -0,0 +1,27 @@
+package cn.binarywang.wx.miniapp.api;
+
+import cn.binarywang.wx.miniapp.bean.safety.request.WxMaUserSafetyRiskRankRequest;
+import cn.binarywang.wx.miniapp.bean.safety.response.WxMaUserSafetyRiskRankResponse;
+import me.chanjar.weixin.common.error.WxErrorException;
+
+/**
+ *
+ * 小程序安全风控相关接口
+ *
+ *
+ * @author azouever
+ */
+public interface WxMaSafetyRiskControlService {
+
+ /**
+ *
+ * 根据提交的用户信息数据获取用户的安全等级,无需用户授权
+ * 文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/safety-control-capability/riskControl.getUserRiskRank.html
+ *
+ *
+ * @param wxMaUserSafetyRiskRankRequest 获取用户安全等级请求
+ * @throws WxErrorException 通用异常
+ */
+ WxMaUserSafetyRiskRankResponse getUserRiskRank(WxMaUserSafetyRiskRankRequest wxMaUserSafetyRiskRankRequest) throws WxErrorException;
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
index 81ed12aa89..8b357a8476 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
@@ -484,4 +484,12 @@ public interface WxMaService extends WxService {
*/
WxMaImmediateDeliveryService getWxMaImmediateDeliveryService();
+
+ /**
+ * 小程序安全风控相关接口服务
+ *
+ * @return safetyRiskControl service
+ */
+ WxMaSafetyRiskControlService getSafetyRiskControlService();
+
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
index 21ca0f7214..62ca188d53 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
@@ -78,6 +78,7 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH
private final WxMaDeviceSubscribeService deviceSubscribeService = new WxMaDeviceSubscribeServiceImpl(this);
private final WxMaMarketingService marketingService = new WxMaMarketingServiceImpl(this);
private final WxMaImmediateDeliveryService immediateDeliveryService = new WxMaImmediateDeliveryServiceImpl(this);
+ private final WxMaSafetyRiskControlService safetyRiskControlService = new WxMaSafetyRiskControlServiceImpl(this);
private Map configMap;
private int retrySleepMillis = 1000;
private int maxRetryTimes = 5;
@@ -587,4 +588,8 @@ public WxMaReimburseInvoiceService getReimburseInvoiceService() {
public WxMaImmediateDeliveryService getWxMaImmediateDeliveryService() {
return this.immediateDeliveryService;
}
+
+ @Override
+ public WxMaSafetyRiskControlService getSafetyRiskControlService(){ return this.safetyRiskControlService; }
+
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImpl.java
new file mode 100644
index 0000000000..8152c72c99
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImpl.java
@@ -0,0 +1,35 @@
+package cn.binarywang.wx.miniapp.api.impl;
+
+import cn.binarywang.wx.miniapp.api.WxMaSafetyRiskControlService;
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.safety.request.WxMaUserSafetyRiskRankRequest;
+import cn.binarywang.wx.miniapp.bean.safety.response.WxMaUserSafetyRiskRankResponse;
+import cn.binarywang.wx.miniapp.constant.WxMaConstants;
+import com.google.gson.JsonObject;
+import lombok.RequiredArgsConstructor;
+import me.chanjar.weixin.common.enums.WxType;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.json.GsonParser;
+
+import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.InstantDelivery.SafetyRiskControl.GET_USER_RISK_RANK;
+
+/**
+ * @author azouever
+ */
+
+@RequiredArgsConstructor
+public class WxMaSafetyRiskControlServiceImpl implements WxMaSafetyRiskControlService {
+
+ private final WxMaService service;
+
+ @Override
+ public WxMaUserSafetyRiskRankResponse getUserRiskRank(WxMaUserSafetyRiskRankRequest wxMaUserSafetyRiskRankRequest) throws WxErrorException {
+ String responseContent = this.service.post(GET_USER_RISK_RANK, wxMaUserSafetyRiskRankRequest.toJson());
+ JsonObject jsonObject = GsonParser.parse(responseContent);
+ if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) {
+ throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
+ }
+ return WxMaUserSafetyRiskRankResponse.fromJson(responseContent);
+ }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java
index 5427aa2ab5..2cde905be2 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java
@@ -6,7 +6,6 @@
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
-import sun.rmi.runtime.Log;
import java.io.Serializable;
import java.util.List;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/request/WxMaUserSafetyRiskRankRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/request/WxMaUserSafetyRiskRankRequest.java
new file mode 100644
index 0000000000..da9384b1af
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/request/WxMaUserSafetyRiskRankRequest.java
@@ -0,0 +1,81 @@
+package cn.binarywang.wx.miniapp.bean.safety.request;
+
+import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 获取用户的安全等级请求参数
+ *
+ * @author azouever
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class WxMaUserSafetyRiskRankRequest implements Serializable {
+ private static final long serialVersionUID = 1052539797739665816L;
+
+
+ /**
+ * 小程序appid
+ * 必填
+ */
+ private String appid;
+
+ /**
+ * 用户的openid
+ * 必填
+ */
+ private String openid;
+
+ /**
+ * 场景值,0:注册,1:营销作弊
+ * 必填
+ */
+ private Integer scene;
+
+ /**
+ * 用户手机号
+ * 非必填
+ */
+ @SerializedName("mobile_no")
+ private String mobileNo;
+
+ /**
+ * 用户访问源ip
+ * 必填
+ */
+ @SerializedName("client_ip")
+ private String clientIp;
+
+ /**
+ * 用户邮箱地址
+ * 非必填
+ */
+ @SerializedName("email_address")
+ private String emailAddress;
+
+ /**
+ * 额外补充信息
+ * 非必填
+ */
+ @SerializedName("extended_info")
+ private String extendedInfo;
+
+ /**
+ * false:正式调用,true:测试调用
+ * 非必填
+ */
+ @SerializedName("is_test")
+ private boolean isTest;
+
+ public String toJson() {
+ return WxMaGsonBuilder.create().toJson(this);
+ }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/response/WxMaUserSafetyRiskRankResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/response/WxMaUserSafetyRiskRankResponse.java
new file mode 100644
index 0000000000..1a3a5d1f5d
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/response/WxMaUserSafetyRiskRankResponse.java
@@ -0,0 +1,42 @@
+package cn.binarywang.wx.miniapp.bean.safety.response;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 获取用户的安全等级响应参数
+ *
+ * @author azouever
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class WxMaUserSafetyRiskRankResponse implements Serializable {
+
+ private static final long serialVersionUID = -2434941857751339150L;
+
+ /**
+ * 唯一请求标识,标记单次请求
+ */
+ @SerializedName("unoin_id")
+ private Integer unoinId;
+
+ /**
+ * 用户风险等级
+ * 合法值 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/safety-control-capability/riskControl.getUserRiskRank.html
+ */
+ @SerializedName("risk_rank")
+ private Integer riskRank;
+
+ public static WxMaUserSafetyRiskRankResponse fromJson(String json) {
+ return WxGsonBuilder.create().fromJson(json, WxMaUserSafetyRiskRankResponse.class);
+ }
+}
+
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/shop/response/WxMaShopAddOrderResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/shop/response/WxMaShopAddOrderResponse.java
index 4e724423bb..ecd4ff9b77 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/shop/response/WxMaShopAddOrderResponse.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/shop/response/WxMaShopAddOrderResponse.java
@@ -16,5 +16,5 @@ public class WxMaShopAddOrderResponse extends WxMaShopBaseResponse implements Se
private static final long serialVersionUID = -8923439859095040010L;
@SerializedName("data")
- private WxMaShopAddOrderResult date;
+ private WxMaShopAddOrderResult data;
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
index 5d4379b9d1..3fd6719f7c 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
@@ -523,6 +523,17 @@ interface Cancel {
}
+
+ /**
+ * 安全风控
+ */
+ interface SafetyRiskControl {
+ /**
+ * 获取用户的安全等级,无需用户授权
+ */
+ String GET_USER_RISK_RANK = "https://api.weixin.qq.com/wxa/getuserriskrank";
+ }
+
}
}
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImplTest.java
new file mode 100644
index 0000000000..9a2491fee7
--- /dev/null
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImplTest.java
@@ -0,0 +1,34 @@
+package cn.binarywang.wx.miniapp.api.impl;
+
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.safety.request.WxMaUserSafetyRiskRankRequest;
+import cn.binarywang.wx.miniapp.bean.safety.response.WxMaUserSafetyRiskRankResponse;
+import cn.binarywang.wx.miniapp.test.ApiTestModule;
+import com.google.inject.Inject;
+import me.chanjar.weixin.common.error.WxErrorException;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import static org.testng.AssertJUnit.assertNotNull;
+
+@Test
+@Guice(modules = ApiTestModule.class)
+public class WxMaSafetyRiskControlServiceImplTest {
+
+ @Inject
+ protected WxMaService wxService;
+
+ @Test
+ public void testGetUserRiskRank() throws WxErrorException {
+ WxMaUserSafetyRiskRankRequest wxMaUserSafetyRiskRankRequest = WxMaUserSafetyRiskRankRequest.builder()
+ .appid("")
+ .openid("")
+ .scene(1)
+ .isTest(true)
+ .build();
+ WxMaUserSafetyRiskRankResponse wxMaUserSafetyRiskRankResponse = this.wxService.getSafetyRiskControlService().getUserRiskRank(wxMaUserSafetyRiskRankRequest);
+ assertNotNull(wxMaUserSafetyRiskRankResponse);
+ }
+
+}
From 6f23c5e2891fd6d57221fc4893942aedd2d4f042 Mon Sep 17 00:00:00 2001
From: dream <52assert@gmail.com>
Date: Tue, 8 Feb 2022 10:20:31 +0000
Subject: [PATCH 0049/1155] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8DOA=E8=8E=B7?=
=?UTF-8?q?=E5=8F=96=E6=89=93=E5=8D=A1=E6=9C=88=E6=8A=A5=E6=95=B0=E6=8D=AE?=
=?UTF-8?q?=E6=97=B6=E9=97=B4=E6=9C=88=E8=B7=A8=E5=BA=A6=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImpl.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImpl.java
index b921798e7b..3e8277a850 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImpl.java
@@ -29,7 +29,7 @@
public class WxCpOaServiceImpl implements WxCpOaService {
private final WxCpService mainService;
- private static final int MONTH_SECONDS = 30 * 24 * 60 * 60;
+ private static final int MONTH_SECONDS = 31 * 24 * 60 * 60;
private static final int USER_IDS_LIMIT = 100;
@Override
@@ -49,7 +49,7 @@ public List getCheckinData(Integer openCheckinDataType, @NonNul
long endTimestamp = endTime.getTime() / 1000L;
long startTimestamp = startTime.getTime() / 1000L;
- if (endTimestamp - startTimestamp < 0 || endTimestamp - startTimestamp >= MONTH_SECONDS) {
+ if (endTimestamp - startTimestamp < 0 || endTimestamp - startTimestamp > MONTH_SECONDS) {
throw new WxRuntimeException("获取记录时间跨度不超过一个月");
}
From 37fe7d21eff35c48697fac37f61f1b01f1e5dacf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BE=90=E5=87=AF=E6=97=8B?=
<42696884+azouever@users.noreply.github.com>
Date: Wed, 26 Jan 2022 19:03:58 +0800
Subject: [PATCH 0050/1155] =?UTF-8?q?:art:=20#2478=20=E3=80=90=E5=BE=AE?=
=?UTF-8?q?=E4=BF=A1=E6=94=AF=E4=BB=98=E3=80=91=E7=94=B3=E8=AF=B7=E5=88=86?=
=?UTF-8?q?=E8=B4=A6=E5=92=8C=E6=9F=A5=E8=AF=A2=E5=88=86=E8=B4=A6=E7=BB=93?=
=?UTF-8?q?=E6=9E=9C=E6=B7=BB=E5=8A=A0detail=5Fid?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../bean/profitsharingV3/ProfitSharingResult.java | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharingV3/ProfitSharingResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharingV3/ProfitSharingResult.java
index 6e0626f652..892d317733 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharingV3/ProfitSharingResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharingV3/ProfitSharingResult.java
@@ -168,5 +168,16 @@ public static class Receiver implements Serializable {
*/
@SerializedName("finish_time")
private String finishTime;
+
+ /**
+ *
+ * 字段名:微信分账明细单号
+ * 是否必填:是
+ * 每笔分账业务执行的明细单号,可与资金账单对账使用,
+ * 例如:36011111111111111111111
+ *
+ */
+ @SerializedName("detail_id")
+ private String detailId;
}
}
From 438d5833f9a168fc2e0ef5d5dc65fe799f86ca5a Mon Sep 17 00:00:00 2001
From: Boris
Date: Sat, 29 Jan 2022 22:58:00 +0800
Subject: [PATCH 0051/1155] =?UTF-8?q?:new:=20#2309=20=E3=80=90=E4=BC=81?=
=?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1=E3=80=91=E6=96=B0=E5=A2=9E=E5=BE=AE?=
=?UTF-8?q?=E4=BF=A1=E5=AE=A2=E6=9C=8D-=E6=8E=A5=E5=BE=85=E4=BA=BA?=
=?UTF-8?q?=E5=91=98=E7=AE=A1=E7=90=86=E3=80=81=E4=BC=9A=E8=AF=9D=E5=88=86?=
=?UTF-8?q?=E9=85=8D=E4=B8=8E=E6=B6=88=E6=81=AF=E6=94=B6=E5=8F=91=E3=80=81?=
=?UTF-8?q?=E5=9F=BA=E7=A1=80=E4=BF=A1=E6=81=AF=E8=8E=B7=E5=8F=96=E7=AD=89?=
=?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cp/api/WxCpExternalContactService.java | 34 ++++
.../chanjar/weixin/cp/api/WxCpKfService.java | 121 ++++++++++++++
.../impl/WxCpExternalContactServiceImpl.java | 22 +++
.../weixin/cp/api/impl/WxCpKfServiceImpl.java | 127 +++++++++++++++
.../external/contact/ExternalContact.java | 3 +
.../bean/kf/WxCpKfCustomerBatchGetResp.java | 32 ++++
.../weixin/cp/bean/kf/WxCpKfMsgListResp.java | 73 +++++++++
.../cp/bean/kf/WxCpKfMsgSendRequest.java | 151 ++++++++++++++++++
.../weixin/cp/bean/kf/WxCpKfMsgSendResp.java | 24 +++
.../cp/bean/kf/WxCpKfServiceStateResp.java | 28 ++++
.../bean/kf/WxCpKfServiceStateTransResp.java | 27 ++++
.../cp/bean/kf/WxCpKfServicerListResp.java | 35 ++++
.../cp/bean/kf/WxCpKfServicerOpResp.java | 38 +++++
.../cp/bean/kf/msg/WxCpKfBusinessCardMsg.java | 16 ++
.../weixin/cp/bean/kf/msg/WxCpKfEventMsg.java | 40 +++++
.../weixin/cp/bean/kf/msg/WxCpKfLinkMsg.java | 53 ++++++
.../cp/bean/kf/msg/WxCpKfLocationMsg.java | 41 +++++
.../weixin/cp/bean/kf/msg/WxCpKfMenuMsg.java | 128 +++++++++++++++
.../cp/bean/kf/msg/WxCpKfMiniProgramMsg.java | 46 ++++++
.../cp/bean/kf/msg/WxCpKfResourceMsg.java | 16 ++
.../weixin/cp/bean/kf/msg/WxCpKfTextMsg.java | 26 +++
.../weixin/cp/constant/WxCpApiPathConsts.java | 15 ++
22 files changed, 1096 insertions(+)
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfCustomerBatchGetResp.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgListResp.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgSendRequest.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgSendResp.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServiceStateResp.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServiceStateTransResp.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServicerListResp.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServicerOpResp.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfBusinessCardMsg.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfEventMsg.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfLinkMsg.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfLocationMsg.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfMenuMsg.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfMiniProgramMsg.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfResourceMsg.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfTextMsg.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 76ab62350e..8e04977ff4 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
@@ -1,6 +1,10 @@
package me.chanjar.weixin.cp.api;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import lombok.NonNull;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.bean.external.*;
@@ -921,5 +925,35 @@ WxCpGetMomentComments getMomentComments(String momentId, String userId)
*/
WxCpProductAlbumResult getProductAlbum(String productId) throws WxErrorException;
+ /**
+ *
+ * 上传附件资源
+ * https://open.work.weixin.qq.com/api/doc/90001/90143/95178
+ *
+ * @param mediaType
+ * @param fileType
+ * @param attachmentType
+ * @param inputStream
+ * @return
+ * @throws WxErrorException
+ * @throws IOException
+ */
+ WxMediaUploadResult uploadAttachment(String mediaType, String fileType, Integer attachmentType,
+ InputStream inputStream) throws WxErrorException, IOException;
+
+ /**
+ *
+ * 上传附件资源
+ * https://open.work.weixin.qq.com/api/doc/90001/90143/95178
+ *
+ * @param mediaType
+ * @param attachmentType
+ * @param file
+ * @return
+ * @throws WxErrorException
+ */
+ WxMediaUploadResult uploadAttachment(String mediaType, Integer attachmentType, File file)
+ throws WxErrorException;
+
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpKfService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpKfService.java
index a77b42a6c2..0da548905c 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpKfService.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpKfService.java
@@ -1,5 +1,6 @@
package me.chanjar.weixin.cp.api;
+import java.util.List;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountAdd;
@@ -9,6 +10,14 @@
import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountLinkResp;
import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountListResp;
import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountUpd;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfCustomerBatchGetResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfMsgListResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfMsgSendRequest;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfMsgSendResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfServiceStateResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfServiceStateTransResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfServicerListResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfServicerOpResp;
/**
* 微信客服接口
@@ -67,4 +76,116 @@ public interface WxCpKfService {
*/
WxCpKfAccountLinkResp getAccountLink(WxCpKfAccountLink link) throws WxErrorException;
+ /**
+ * 接待人员管理
+ * 添加指定客服帐号的接待人员,每个客服帐号目前最多可添加500个接待人员。
+ * @param openKfid 客服帐号ID
+ * @param userIdList 接待人员userid列表。第三方应用填密文userid,即open_userid
+ * 可填充个数:1 ~ 100。超过100个需分批调用。
+ * @return 添加客服账号结果
+ * @throws WxErrorException 异常
+ */
+ WxCpKfServicerOpResp addServicer(String openKfid, List userIdList) throws WxErrorException;
+
+ /**
+ * 接待人员管理
+ * 从客服帐号删除接待人员
+ * @param openKfid 客服帐号ID
+ * @param userIdList 接待人员userid列表。第三方应用填密文userid,即open_userid
+ * 可填充个数:1 ~ 100。超过100个需分批调用。
+ * @return 删除客服账号结果
+ * @throws WxErrorException 异常
+ */
+ WxCpKfServicerOpResp delServicer(String openKfid, List userIdList) throws WxErrorException;
+
+ /**
+ * 接待人员管理
+ * 获取某个客服帐号的接待人员列表
+ * @param openKfid 客服帐号ID
+ * @return 接待人员列表
+ * @throws WxErrorException 异常
+ */
+ WxCpKfServicerListResp listServicer(String openKfid) throws WxErrorException;
+
+ /**
+ * 分配客服会话
+ * 获取会话状态
+ * @param openKfid 客服帐号ID
+ * @param externalUserId 微信客户的external_userid
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpKfServiceStateResp getServiceState(String openKfid, String externalUserId)
+ throws WxErrorException;
+
+ /**
+ * 分配客服会话
+ * 变更会话状态
+ * @param openKfid 客服帐号ID
+ * @param externalUserId 微信客户的external_userid
+ * @param serviceState 变更的目标状态,状态定义和所允许的变更可参考概述中的流程图和表格
+ * @param servicerUserId 接待人员的userid。第三方应用填密文userid,即open_userid。当state=3时要求必填,接待人员须处于“正在接待”中。
+ * @return 部分状态返回回复语code
+ * @throws WxErrorException
+ */
+ WxCpKfServiceStateTransResp transServiceState(String openKfid, String externalUserId,
+ Integer serviceState, String servicerUserId) throws WxErrorException;
+
+ /**
+ * 读取消息
+ * 微信客户发送的消息、接待人员在企业微信回复的消息、发送消息接口发送失败事件(如被用户拒收)、客户点击菜单消息的回复消息,
+ * 可以通过该接口获取具体的消息内容和事件。不支持读取通过发送消息接口发送的消息。
+ * 支持的消息类型:文本、图片、语音、视频、文件、位置、链接、名片、小程序、菜单、事件。
+ * @param cursor 上一次调用时返回的next_cursor,第一次拉取可以不填。不多于64字节
+ * @param token 回调事件返回的token字段,10分钟内有效;可不填,如果不填接口有严格的频率限制。不多于128字节
+ * @param limit 期望请求的数据量,默认值和最大值都为1000。
+ * 注意:可能会出现返回条数少于limit的情况,需结合返回的has_more字段判断是否继续请求。
+ * @param voiceFormat 语音消息类型,0-Amr 1-Silk,默认0。可通过该参数控制返回的语音格式
+ * @return 微信消息
+ * @throws WxErrorException 异常
+ */
+ WxCpKfMsgListResp syncMsg(String cursor, String token, Integer limit, Integer voiceFormat)
+ throws WxErrorException;
+
+ /**
+ * 发送消息
+ * 当微信客户处于“新接入待处理”或“由智能助手接待”状态下,可调用该接口给用户发送消息。
+ * 注意仅当微信客户在主动发送消息给客服后的48小时内,企业可发送消息给客户,最多可发送5条消息;若用户继续发送消息,企业可再次下发消息。
+ * 支持发送消息类型:文本、图片、语音、视频、文件、图文、小程序、菜单消息、地理位置。
+ * @param request 发送信息
+ * @return 发送结果
+ * @throws WxErrorException 异常
+ */
+ WxCpKfMsgSendResp sendMsg(WxCpKfMsgSendRequest request) throws WxErrorException;
+
+ /**
+ * 发送欢迎语等事件响应消息
+ * 当特定的事件回调消息包含code字段,或通过接口变更到特定的会话状态,会返回code字段。
+ * 开发者可以此code为凭证,调用该接口给用户发送相应事件场景下的消息,如客服欢迎语、客服提示语和会话结束语等。
+ * 除"用户进入会话事件"以外,响应消息仅支持会话处于获取该code的会话状态时发送,如将会话转入待接入池时获得的code仅能在会话状态为”待接入池排队中“时发送。
+ *
+ * 目前支持的事件场景和相关约束如下:
+ *
+ * 事件场景 允许下发条数 code有效期 支持的消息类型 获取code途径
+ * 用户进入会话,用于发送客服欢迎语 1条 20秒 文本、菜单 事件回调
+ * 进入接待池,用于发送排队提示语等 1条 48小时 文本 转接会话接口
+ * 从接待池接入会话,用于发送非工作
+ * 时间的提示语或超时未回复的提示语
+ * 等 1条 48小时 文本 事件回调、转接会话接口
+ * 结束会话,用于发送结束会话提示语
+ * 或满意度评价等 1条 20秒 文本、菜单 事件回调、转接会话接口
+ * @param request
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpKfMsgSendResp sendMsgOnEvent(WxCpKfMsgSendRequest request) throws WxErrorException;
+
+ /**
+ * 获取客户基础信息
+ * @param externalUserIdList
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpKfCustomerBatchGetResp customerBatchGet(List externalUserIdList)
+ 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 87e9895784..3997f50768 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
@@ -2,12 +2,19 @@
import com.google.gson.Gson;
import com.google.gson.JsonObject;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.UUID;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxCpErrorMsgEnum;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.error.WxRuntimeException;
import me.chanjar.weixin.common.util.BeanUtils;
+import me.chanjar.weixin.common.util.fs.FileUtils;
+import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor;
import me.chanjar.weixin.common.util.json.GsonParser;
import me.chanjar.weixin.cp.api.WxCpExternalContactService;
import me.chanjar.weixin.cp.api.WxCpService;
@@ -814,4 +821,19 @@ public WxCpProductAlbumResult getProductAlbum(String productId) throws WxErrorEx
return WxCpProductAlbumResult.fromJson(result);
}
+ @Override
+ public WxMediaUploadResult uploadAttachment(String mediaType, String fileType, Integer attachmentType,
+ InputStream inputStream) throws WxErrorException, IOException {
+ return uploadAttachment(mediaType, attachmentType, FileUtils.createTmpFile(inputStream,
+ UUID.randomUUID().toString(), fileType));
+ }
+
+ @Override
+ public WxMediaUploadResult uploadAttachment(String mediaType, Integer attachmentType, File file)
+ throws WxErrorException {
+ String params = "?media_type=" + mediaType + "&attachment_type=" + attachmentType;
+ final String url = this.mainService.getWxCpConfigStorage().getApiUrl(UPLOAD_ATTACHMENT + params);
+ return this.mainService.execute(MediaUploadRequestExecutor.create(
+ this.mainService.getRequestHttp()), url, file);
+ }
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImpl.java
index 53e520d3c4..12f1062b0c 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImpl.java
@@ -1,5 +1,10 @@
package me.chanjar.weixin.cp.api.impl;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import java.util.List;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.api.WxCpKfService;
@@ -12,6 +17,14 @@
import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountLinkResp;
import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountListResp;
import me.chanjar.weixin.cp.bean.kf.WxCpKfAccountUpd;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfCustomerBatchGetResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfMsgListResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfMsgSendRequest;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfMsgSendResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfServiceStateResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfServiceStateTransResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfServicerListResp;
+import me.chanjar.weixin.cp.bean.kf.WxCpKfServicerOpResp;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Kf.*;
@@ -25,6 +38,7 @@
@RequiredArgsConstructor
public class WxCpKfServiceImpl implements WxCpKfService {
private final WxCpService cpService;
+ private static final Gson GSON = new GsonBuilder().create();
@Override
public WxCpKfAccountAddResp addAccount(WxCpKfAccountAdd add) throws WxErrorException {
@@ -61,4 +75,117 @@ public WxCpKfAccountLinkResp getAccountLink(WxCpKfAccountLink link) throws WxErr
return WxCpKfAccountLinkResp.fromJson(responseContent);
}
+ @Override
+ public WxCpKfServicerOpResp addServicer(String openKfid, List userIdList) throws WxErrorException {
+ return servicerOp(openKfid, userIdList, SERVICER_ADD);
+ }
+
+ @Override
+ public WxCpKfServicerOpResp delServicer(String openKfid, List userIdList) throws WxErrorException {
+ return servicerOp(openKfid, userIdList, SERVICER_DEL);
+ }
+
+ private WxCpKfServicerOpResp servicerOp(String openKfid, List userIdList, String uri) throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(uri);
+
+ JsonObject json = new JsonObject();
+ json.addProperty("open_kfid", openKfid);
+ JsonArray userIdArray = new JsonArray();
+ userIdList.forEach(userIdArray::add);
+ json.add("userid_list", userIdArray);
+
+ String responseContent = cpService.post(url, json.toString());
+ return WxCpKfServicerOpResp.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpKfServicerListResp listServicer(String openKfid) throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(SERVICER_LIST + openKfid);
+ String responseContent = cpService.get(url, null);
+ return WxCpKfServicerListResp.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpKfServiceStateResp getServiceState(String openKfid, String externalUserId)
+ throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(SERVICE_STATE_GET);
+
+ JsonObject json = new JsonObject();
+ json.addProperty("open_kfid", openKfid);
+ json.addProperty("external_userid", externalUserId);
+
+ String responseContent = cpService.post(url, json.toString());
+ return WxCpKfServiceStateResp.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpKfServiceStateTransResp transServiceState(String openKfid, String externalUserId,
+ Integer serviceState, String servicerUserId) throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(SERVICE_STATE_TRANS);
+
+ JsonObject json = new JsonObject();
+ json.addProperty("open_kfid", openKfid);
+ json.addProperty("external_userid", externalUserId);
+ json.addProperty("service_state", serviceState);
+ json.addProperty("servicer_userid", servicerUserId);
+
+ String responseContent = cpService.post(url, json.toString());
+ return WxCpKfServiceStateTransResp.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpKfMsgListResp syncMsg(String cursor, String token, Integer limit, Integer voiceFormat)
+ throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(SYNC_MSG);
+
+ JsonObject json = new JsonObject();
+ if (cursor!=null) {
+ json.addProperty("cursor", cursor);
+ }
+ if (token!=null) {
+ json.addProperty("token", token);
+ }
+ if (limit!=null) {
+ json.addProperty("limit", limit);
+ }
+ if (voiceFormat!=null) {
+ json.addProperty("voice_format", voiceFormat);
+ }
+
+ String responseContent = cpService.post(url, json);
+ return WxCpKfMsgListResp.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpKfMsgSendResp sendMsg(WxCpKfMsgSendRequest request) throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(SEND_MSG);
+
+ String responseContent = cpService.post(url, GSON.toJson(request));
+
+ return WxCpKfMsgSendResp.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpKfMsgSendResp sendMsgOnEvent(WxCpKfMsgSendRequest request) throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(SEND_MSG_ON_EVENT);
+
+ String responseContent = cpService.post(url, GSON.toJson(request));
+
+ return WxCpKfMsgSendResp.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpKfCustomerBatchGetResp customerBatchGet(List externalUserIdList)
+ throws WxErrorException {
+ String url = cpService.getWxCpConfigStorage().getApiUrl(CUSTOMER_BATCH_GET);
+
+ JsonArray array = new JsonArray();
+
+ externalUserIdList.forEach(array::add);
+ JsonObject json = new JsonObject();
+ json.add("external_userid_list", array);
+ String responseContent = cpService.post(url, json.toString());
+ return WxCpKfCustomerBatchGetResp.fromJson(responseContent);
+ }
+
}
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 f19584ed90..07d490ac1f 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
@@ -26,6 +26,9 @@ public class ExternalContact implements Serializable {
@SerializedName("name")
private String name;
+ @SerializedName("nickname")
+ private String nickname;
+
@SerializedName("avatar")
private String avatar;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfCustomerBatchGetResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfCustomerBatchGetResp.java
new file mode 100644
index 0000000000..dd3ea38b17
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfCustomerBatchGetResp.java
@@ -0,0 +1,32 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import java.util.List;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.bean.external.contact.ExternalContact;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 7:56 下午
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class WxCpKfCustomerBatchGetResp extends WxCpBaseResp {
+
+ private static final long serialVersionUID = -3697709507605389887L;
+
+ @SerializedName("customer_list")
+ private List customerList;
+
+ @SerializedName("invalid_external_userid")
+ private List invalidExternalUserId;
+
+ public static WxCpKfCustomerBatchGetResp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpKfCustomerBatchGetResp.class);
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgListResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgListResp.java
new file mode 100644
index 0000000000..140670afa8
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgListResp.java
@@ -0,0 +1,73 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import java.util.List;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfBusinessCardMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfEventMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfLinkMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfLocationMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfMenuMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfMiniProgramMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfResourceMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfTextMsg;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 5:24 下午
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class WxCpKfMsgListResp extends WxCpBaseResp {
+
+ private static final long serialVersionUID = -3115552079069452091L;
+ @SerializedName("next_cursor")
+ private String nextCursor;
+
+ @SerializedName("has_more")
+ private Integer hasMore;
+
+ @SerializedName("msg_list")
+ private List msgList;
+
+ @NoArgsConstructor
+ @Data
+ public static class WxCpKfMsgItem {
+ @SerializedName("msgid")
+ private String msgId;
+ @SerializedName("open_kfid")
+ private String openKfid;
+ @SerializedName("external_userid")
+ private String externalUserId;
+ @SerializedName("send_time")
+ private Long sendTime;
+ private Integer origin;
+ @SerializedName("servicer_userid")
+ private String servicerUserId;
+ @SerializedName("msgtype")
+ private String msgType;
+ private WxCpKfTextMsg text;
+ private WxCpKfResourceMsg image;
+ private WxCpKfResourceMsg voice;
+ private WxCpKfResourceMsg video;
+ private WxCpKfResourceMsg file;
+ private WxCpKfLocationMsg location;
+ private WxCpKfLinkMsg link;
+ @SerializedName("business_card")
+ private WxCpKfBusinessCardMsg businessCard;
+ @SerializedName("miniprogram")
+ private WxCpKfMiniProgramMsg miniProgram;
+ @SerializedName("msgmenu")
+ private WxCpKfMenuMsg msgMenu;
+ private WxCpKfEventMsg event;
+ }
+
+ public static WxCpKfMsgListResp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpKfMsgListResp.class);
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgSendRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgSendRequest.java
new file mode 100644
index 0000000000..25dd5c7645
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgSendRequest.java
@@ -0,0 +1,151 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfLinkMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfLocationMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfMenuMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfMiniProgramMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfResourceMsg;
+import me.chanjar.weixin.cp.bean.kf.msg.WxCpKfTextMsg;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 7:00 下午
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfMsgSendRequest {
+ /**
+ * (发送欢迎语等事件响应消息) 事件响应消息对应的code。通过事件回调下发,仅可使用一次。
+ */
+ private String code;
+ /**
+ *
+ * 参数:touser
+ * 是否必须:是
+ * 类型:string
+ * 说明:指定接收消息的客户UserID
+ *
+ */
+ @SerializedName("touser")
+ private String toUser;
+ /**
+ *
+ * 参数:open_kfid
+ * 是否必须:是
+ * 类型:string
+ * 说明:指定发送消息的客服帐号ID
+ *
+ */
+ @SerializedName("open_kfid")
+ private String openKfid;
+ /**
+ *
+ * 参数:msgid
+ * 是否必须:否
+ * 类型:string
+ * 说明:指定消息ID
+ *
+ */
+ @SerializedName("msgid")
+ private String msgId;
+ /**
+ *
+ * 参数:msgtype
+ * 是否必须:是
+ * 类型:string
+ * 说明:消息类型,(text,image,voice,video,file,link,miniprogram,msgmenu,location)
+ *
+ */
+ @SerializedName("msgtype")
+ private String msgType;
+ /**
+ *
+ * 参数:text
+ * 是否必须:是
+ * 类型:obj
+ * 说明:文本消息
+ *
+ */
+ private WxCpKfTextMsg text;
+
+ /**
+ *
+ * 参数:image
+ * 是否必须:是
+ * 类型:obj
+ * 说明:图片消息
+ *
+ */
+ private WxCpKfResourceMsg image;
+ /**
+ *
+ * 参数:voice
+ * 是否必须:是
+ * 类型:obj
+ * 说明:语音消息
+ *
+ */
+ private WxCpKfResourceMsg voice;
+ /**
+ *
+ * 参数:video
+ * 是否必须:是
+ * 类型:obj
+ * 说明:视频消息
+ *
+ */
+ private WxCpKfResourceMsg video;
+ /**
+ *
+ * 参数:file
+ * 是否必须:是
+ * 类型:obj
+ * 说明:文件消息
+ *
+ */
+ private WxCpKfResourceMsg file;
+ /**
+ *
+ * 参数:link
+ * 是否必须:是
+ * 类型:obj
+ * 说明:链接消息
+ *
+ */
+ private WxCpKfLinkMsg link;
+ /**
+ *
+ * 参数:miniprogram
+ * 是否必须:是
+ * 类型:obj
+ * 说明:小程序消息
+ *
+ */
+ @SerializedName("miniprogram")
+ private WxCpKfMiniProgramMsg miniProgram;
+
+ /**
+ *
+ * 参数:msgmenu
+ * 是否必须:是
+ * 类型:obj
+ * 说明:菜单消息
+ *
+ */
+ @SerializedName("msgmenu")
+ private WxCpKfMenuMsg msgMenu;
+
+ /**
+ *
+ * 参数:location
+ * 是否必须:是
+ * 类型:obj
+ * 说明:菜单消息
+ *
+ */
+ @SerializedName("location")
+ private WxCpKfLocationMsg location;
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgSendResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgSendResp.java
new file mode 100644
index 0000000000..416edba3bf
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfMsgSendResp.java
@@ -0,0 +1,24 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 7:41 下午
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class WxCpKfMsgSendResp extends WxCpBaseResp {
+ @SerializedName("msgid")
+ private String msgId;
+
+ public static WxCpKfMsgSendResp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpKfMsgSendResp.class);
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServiceStateResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServiceStateResp.java
new file mode 100644
index 0000000000..da4aabcdbb
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServiceStateResp.java
@@ -0,0 +1,28 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 5:00 下午
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class WxCpKfServiceStateResp extends WxCpBaseResp {
+
+ private static final long serialVersionUID = 8077134413448067090L;
+ @SerializedName("service_state")
+ private Integer serviceState;
+ @SerializedName("servicer_userid")
+ private String servicerUserId;
+
+ public static WxCpKfServiceStateResp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpKfServiceStateResp.class);
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServiceStateTransResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServiceStateTransResp.java
new file mode 100644
index 0000000000..a4988873c0
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServiceStateTransResp.java
@@ -0,0 +1,27 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 5:03 下午
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class WxCpKfServiceStateTransResp extends WxCpBaseResp {
+
+ private static final long serialVersionUID = -7874378445629022791L;
+
+ @SerializedName("msg_code")
+ private String msgCode;
+
+ public static WxCpKfServiceStateTransResp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpKfServiceStateTransResp.class);
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServicerListResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServicerListResp.java
new file mode 100644
index 0000000000..c37e5df133
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServicerListResp.java
@@ -0,0 +1,35 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+import com.google.gson.annotations.SerializedName;
+import java.util.List;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 4:29 下午
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class WxCpKfServicerListResp extends WxCpBaseResp {
+
+ private static final long serialVersionUID = -5079770046571012449L;
+ @SerializedName("servicer_list")
+ private List servicerList;
+
+ @NoArgsConstructor
+ @Data
+ public static class WxCpKfServicerStatus {
+ @SerializedName("userid")
+ private String userId;
+ private Integer status;
+ }
+
+ public static WxCpKfServicerListResp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpKfServicerListResp.class);
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServicerOpResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServicerOpResp.java
new file mode 100644
index 0000000000..e14dccd03a
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfServicerOpResp.java
@@ -0,0 +1,38 @@
+package me.chanjar.weixin.cp.bean.kf;
+
+
+import com.google.gson.annotations.SerializedName;
+import java.util.List;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ * 添加/删除客服接待人员返回结果
+ * @author leiin
+ * @date 2022/1/26 4:11 下午
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class WxCpKfServicerOpResp extends WxCpBaseResp {
+
+ private static final long serialVersionUID = -4082459764202987034L;
+
+ @SerializedName("result_list")
+ private List resultList;
+
+ @Data
+ @NoArgsConstructor
+ public static class WxCpKfServicerResp extends WxCpBaseResp {
+
+ @SerializedName("userid")
+ private String userId;
+ }
+
+ public static WxCpKfServicerOpResp fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpKfServicerOpResp.class);
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfBusinessCardMsg.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfBusinessCardMsg.java
new file mode 100644
index 0000000000..e739112ec1
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfBusinessCardMsg.java
@@ -0,0 +1,16 @@
+package me.chanjar.weixin.cp.bean.kf.msg;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 5:35 下午
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfBusinessCardMsg {
+ @SerializedName("userid")
+ private String userId;
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfEventMsg.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfEventMsg.java
new file mode 100644
index 0000000000..96782a1015
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfEventMsg.java
@@ -0,0 +1,40 @@
+package me.chanjar.weixin.cp.bean.kf.msg;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 6:44 下午
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfEventMsg {
+ @SerializedName("event_type")
+ private String eventType;
+ @SerializedName("open_kfid")
+ private String openKfid;
+ @SerializedName("external_userid")
+ private String externalUserId;
+ @SerializedName("servicer_userid")
+ private String servicerUserId;
+ @SerializedName("old_servicer_userid")
+ private String oldServicerUserId;
+ @SerializedName("new_servicer_userid")
+ private String newServicerUserId;
+ private String scene;
+ @SerializedName("scene_param")
+ private String sceneParam;
+ @SerializedName("welcome_code")
+ private String welcomeCode;
+ @SerializedName("fail_msgid")
+ private String failMsgId;
+ @SerializedName("fail_type")
+ private Integer failType;
+ private Integer status;
+ @SerializedName("change_type")
+ private Integer changeType;
+ @SerializedName("msg_code")
+ private String msgCode;
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfLinkMsg.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfLinkMsg.java
new file mode 100644
index 0000000000..1281389a10
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfLinkMsg.java
@@ -0,0 +1,53 @@
+package me.chanjar.weixin.cp.bean.kf.msg;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 5:33 下午
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfLinkMsg {
+
+ /**
+ * 参数:title
+ * 是否必须:是
+ * 类型:string
+ * 说明:标题,不超过128个字节,超过会自动截断
+ */
+ @SerializedName("title")
+ private String title;
+ /**
+ * 参数:desc
+ * 是否必须:否
+ * 类型:string
+ * 说明:描述,不超过512个字节,超过会自动截断
+ */
+ @SerializedName("desc")
+ private String desc;
+ /**
+ * 参数:url
+ * 是否必须:是
+ * 类型:string
+ * 说明:点击后跳转的链接。 最长2048字节,请确保包含了协议头(http/https)
+ */
+ @SerializedName("url")
+ private String url;
+ /**
+ * 参数:thumb_media_id
+ * 是否必须:是
+ * 类型:string
+ * 说明:发送消息参数,缩略图的media_id, 可以通过素材管理接口获得。此处thumb_media_id即上传接口返回的media_id
+ */
+ @SerializedName("thumb_media_id")
+ private String thumb_media_id;
+
+ /**
+ * 返回消息参数
+ */
+ @SerializedName("pic_url")
+ private String picUrl;
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfLocationMsg.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfLocationMsg.java
new file mode 100644
index 0000000000..245da52619
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfLocationMsg.java
@@ -0,0 +1,41 @@
+package me.chanjar.weixin.cp.bean.kf.msg;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 5:32 下午
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfLocationMsg {
+ /**
+ * 参数:name
+ * 是否必须:否
+ * 类型:string
+ * 说明:位置名
+ */
+ private String name;
+ /**
+ * 参数:address
+ * 是否必须:否
+ * 类型:string
+ * 说明:地址详情说明
+ */
+ private String address;
+ /**
+ * 参数:latitude
+ * 是否必须:是
+ * 类型:float
+ * 说明:纬度,浮点数,范围为90 ~ -90
+ */
+ private Float latitude;
+ /**
+ * 参数:longitude
+ * 是否必须:是
+ * 类型:float
+ * 说明:经度,浮点数,范围为180 ~ -180
+ */
+ private Float longitude;
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfMenuMsg.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfMenuMsg.java
new file mode 100644
index 0000000000..73df6abf94
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfMenuMsg.java
@@ -0,0 +1,128 @@
+package me.chanjar.weixin.cp.bean.kf.msg;
+
+import com.google.gson.annotations.SerializedName;
+import java.util.List;
+import lombok.Data;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 6:33 下午
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfMenuMsg {
+
+ /**
+ * 参数:head_content
+ * 是否必须:否
+ * 类型:string
+ * 说明:起始文本 不多于1024字节
+ */
+ @SerializedName("head_content")
+ private String headContent;
+
+ private List list;
+
+ /**
+ * 参数:tail_content
+ * 是否必须:否
+ * 类型:string
+ * 说明:结束文本 不多于1024字节
+ */
+ @SerializedName("tail_content")
+ private String tailContent;
+
+ @NoArgsConstructor
+ @Data
+ public static class WxCpKfMenuItem {
+ /**
+ * 参数:type
+ * 是否必须:是
+ * 类型:string
+ * 说明:菜单类型。click-回复菜单 view-超链接菜单 miniprogram-小程序菜单
+ */
+ private String type;
+
+ /**
+ * type为click的菜单项
+ */
+ private MenuClick click;
+ /**
+ * type为view的菜单项
+ */
+ private MenuView view;
+ /**
+ * type为miniprogram的菜单项
+ */
+ @SerializedName("miniprogram")
+ private MiniProgram miniProgram;
+ }
+
+ @Getter
+ @Setter
+ public static class MenuClick {
+
+ /**
+ *
+ * 是否必须:否
+ * 说明:菜单ID。不少于1字节 不多于128字节
+ *
+ */
+ private String id;
+ /**
+ *
+ * 是否必须:是
+ * 说明:菜单显示内容。不少于1字节 不多于128字节
+ *
+ */
+ private String content;
+ }
+
+ @Getter
+ @Setter
+ public static class MenuView {
+ /**
+ *
+ * 是否必须:是
+ * 说明:点击后跳转的链接。不少于1字节 不多于2048字节
+ *
+ */
+ private String url;
+ /**
+ *
+ * 是否必须:是
+ * 说明:菜单显示内容。不少于1字节 不多于1024字节
+ *
+ */
+ private String content;
+ }
+
+ @Getter
+ @Setter
+ public static class MiniProgram {
+ /**
+ *
+ * 是否必须:是
+ * 说明:小程序appid。
+ *
+ */
+ @SerializedName("appid")
+ private String appId;
+ /**
+ *
+ * 点击后进入的小程序页面。
+ *
+ */
+ @SerializedName("pagepath")
+ private String pagePath;
+ /**
+ *
+ * 菜单显示内容。不多于1024字节
+ *
+ */
+ private String content;
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfMiniProgramMsg.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfMiniProgramMsg.java
new file mode 100644
index 0000000000..4e5ce5f2d4
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfMiniProgramMsg.java
@@ -0,0 +1,46 @@
+package me.chanjar.weixin.cp.bean.kf.msg;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 6:22 下午
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfMiniProgramMsg {
+ /**
+ * 参数:appid
+ * 是否必须:是
+ * 类型:string
+ * 说明:小程序appid
+ */
+ @SerializedName("appid")
+ private String appId;
+ /**
+ * 参数:title
+ * 是否必须:否
+ * 类型:string
+ * 说明:小程序消息标题,最多64个字节,超过会自动截断
+ */
+ @SerializedName("title")
+ private String title;
+ /**
+ * 参数:thumb_media_id
+ * 是否必须:是
+ * 类型:string
+ * 说明:小程序消息封面的mediaid,封面图建议尺寸为520*416
+ */
+ @SerializedName("thumb_media_id")
+ private String thumbMediaId;
+ /**
+ * 参数:pagepath
+ * 是否必须:是
+ * 类型:string
+ * 说明:点击消息卡片后进入的小程序页面路径。注意路径要以.html为后缀,否则在微信中打开会提示找不到页面
+ */
+ @SerializedName("pagepath")
+ private String pagePath;
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfResourceMsg.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfResourceMsg.java
new file mode 100644
index 0000000000..43cba65b67
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfResourceMsg.java
@@ -0,0 +1,16 @@
+package me.chanjar.weixin.cp.bean.kf.msg;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 5:31 下午
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfResourceMsg {
+ @SerializedName("media_id")
+ private String mediaId;
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfTextMsg.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfTextMsg.java
new file mode 100644
index 0000000000..1e0ccf076c
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/msg/WxCpKfTextMsg.java
@@ -0,0 +1,26 @@
+package me.chanjar.weixin.cp.bean.kf.msg;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author leiin
+ * @date 2022/1/26 5:30 下午
+ */
+@NoArgsConstructor
+@Data
+public class WxCpKfTextMsg {
+
+ /**
+ *
+ * 参数:content
+ * 是否必须:是
+ * 类型:string
+ * 说明:消息内容,最长不超过2048个字节
+ *
+ */
+ private String content;
+ @SerializedName("menu_id")
+ private String menuId;
+}
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 374c7947c5..1b803cfdde 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
@@ -249,6 +249,8 @@ interface ExternalContact {
String GROUP_WELCOME_TEMPLATE_GET = "/cgi-bin/externalcontact/group_welcome_template/get";
String GROUP_WELCOME_TEMPLATE_DEL = "/cgi-bin/externalcontact/group_welcome_template/del";
+ String UPLOAD_ATTACHMENT = "/cgi-bin/media/upload_attachment";
+
}
interface Kf {
@@ -258,5 +260,18 @@ interface Kf {
String ACCOUNT_LIST = "/cgi-bin/kf/account/list";
String ADD_CONTACT_WAY = "/cgi-bin/kf/add_contact_way";
+ String SERVICER_ADD = "/cgi-bin/kf/servicer/add";
+ String SERVICER_DEL = "/cgi-bin/kf/servicer/del";
+ String SERVICER_LIST = "/cgi-bin/kf/servicer/list?open_kfid=";
+
+ String SERVICE_STATE_GET = "/cgi-bin/kf/service_state/get";
+ String SERVICE_STATE_TRANS = "/cgi-bin/kf/service_state/trans";
+
+ String SYNC_MSG = "/cgi-bin/kf/sync_msg";
+ String SEND_MSG = "/cgi-bin/kf/send_msg";
+
+ String SEND_MSG_ON_EVENT = "/cgi-bin/kf/send_msg_on_event";
+ String CUSTOMER_BATCH_GET = "/cgi-bin/kf/customer/batchget";
+
}
}
From a2ed0713e24242a24fb3aa5dbe4edb5b4b9747c5 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 8 Feb 2022 09:16:13 +0800
Subject: [PATCH 0052/1155] :arrow_up: Bump xstream in /others/weixin-java-osgi
(#2526)
Bumps [xstream](https://github.com/x-stream/xstream) from 1.4.18 to 1.4.19.
- [Release notes](https://github.com/x-stream/xstream/releases)
- [Commits](https://github.com/x-stream/xstream/commits)
---
updated-dependencies:
- dependency-name: com.thoughtworks.xstream:xstream
dependency-type: direct:production
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
others/weixin-java-osgi/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/others/weixin-java-osgi/pom.xml b/others/weixin-java-osgi/pom.xml
index 7207e9b99d..0018b73e5e 100644
--- a/others/weixin-java-osgi/pom.xml
+++ b/others/weixin-java-osgi/pom.xml
@@ -28,7 +28,7 @@
com.thoughtworks.xstream
xstream
- 1.4.18
+ 1.4.19
provided
From 2914943cad25e5c0095f9706b0cd298547e00704 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 8 Feb 2022 09:16:31 +0800
Subject: [PATCH 0053/1155] :arrow_up: Bump xstream from 1.4.18 to 1.4.19
(#2525)
Bumps [xstream](https://github.com/x-stream/xstream) from 1.4.18 to 1.4.19.
- [Release notes](https://github.com/x-stream/xstream/releases)
- [Commits](https://github.com/x-stream/xstream/commits)
---
updated-dependencies:
- dependency-name: com.thoughtworks.xstream:xstream
dependency-type: direct:production
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 5e983b885e..d65ecc22d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -175,7 +175,7 @@
com.thoughtworks.xstream
xstream
- 1.4.18
+ 1.4.19
com.google.guava
From 935749e580f22395976dbf31bb3f2ed310742efd Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Tue, 8 Feb 2022 18:31:56 +0800
Subject: [PATCH 0054/1155] =?UTF-8?q?:art:=20=E3=80=90=E5=BC=80=E6=94=BE?=
=?UTF-8?q?=E5=B9=B3=E5=8F=B0=E3=80=91=E5=B0=8F=E7=A8=8B=E5=BA=8F=E6=A8=A1?=
=?UTF-8?q?=E6=9D=BF=E7=AE=A1=E7=90=86=E8=8E=B7=E5=8F=96=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E8=BF=94?=
=?UTF-8?q?=E5=9B=9E=E5=A2=9E=E5=8A=A0=E4=B8=A4=E4=B8=AA=E5=B0=8F=E7=A8=8B?=
=?UTF-8?q?=E5=BA=8F=E7=9B=B8=E5=85=B3=E7=9A=84=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../weixin/open/bean/WxOpenMaCodeTemplate.java | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenMaCodeTemplate.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenMaCodeTemplate.java
index d441906c80..490394d63d 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenMaCodeTemplate.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenMaCodeTemplate.java
@@ -46,4 +46,16 @@ public class WxOpenMaCodeTemplate implements Serializable {
*/
@SerializedName(value = "createTime", alternate = "create_time")
private Long createTime;
+
+ /**
+ * 开发小程序的appid
+ */
+ @SerializedName(value = "sourceMiniProgramAppid", alternate = "source_miniprogram_appid")
+ private Long sourceMiniProgramAppid;
+
+ /**
+ * 开发小程序的名称
+ */
+ @SerializedName(value = "sourceMiniProgram", alternate = "source_miniprogram")
+ private Long sourceMiniProgram;
}
From 1bbadc37cb0db67a8a6d212d08e38356db7af63a Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Tue, 8 Feb 2022 18:37:04 +0800
Subject: [PATCH 0055/1155] =?UTF-8?q?:art:=20=E5=B1=8F=E8=94=BD=E4=B8=80?=
=?UTF-8?q?=E6=AE=B5=E4=BB=A3=E7=A0=81=EF=BC=8C=E4=BB=A5=E5=85=8D=E6=8A=A5?=
=?UTF-8?q?=E9=94=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
index 6e215052f3..4408d3cb99 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
@@ -736,7 +736,6 @@ public static class SpRecord implements Serializable {
@XStreamAlias("Details")
@Data
public static class Detail implements Serializable {
-
private static final long serialVersionUID = -8446107461495047603L;
/**
@@ -765,8 +764,10 @@ public static class Detail implements Serializable {
/**
* 节点分支审批人审批意见附件,赋值为media_id具体使用请参考:文档-获取临时素材
+ * TODO 居然可以返回多个,坑爹的,暂时屏蔽注解以免报错,有兴趣挑战的,尽管把代码砸过来吧!
+ * 请先通过allFieldsMap解析需要的参数!
*/
- @XStreamAlias("Attach")
+ // @XStreamAlias("Attach")
private String attach;
}
From 0c00e15c8f6cbf5a72eaeae98d497ce98238e0ed Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Tue, 8 Feb 2022 18:53:23 +0800
Subject: [PATCH 0056/1155] =?UTF-8?q?:art:=20=E4=BF=AE=E5=A4=8D=E9=94=99?=
=?UTF-8?q?=E8=AF=AF=E7=9A=84json=E6=B3=A8=E8=A7=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java
index 06f1ef0668..5fb6c84e9b 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/kf/WxCpKfAccountListResp.java
@@ -26,7 +26,7 @@ public class WxCpKfAccountListResp extends WxCpBaseResp {
/**
* 帐号信息列表
*/
- @JsonProperty("account_list")
+ @SerializedName("account_list")
private List accountList;
@NoArgsConstructor
From bae7886fe7de844c0d99a3cafc05bffc93294c19 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Wed, 9 Feb 2022 16:40:14 +0800
Subject: [PATCH 0057/1155] =?UTF-8?q?:bookmark:=20=E5=8F=91=E5=B8=83=204.2?=
=?UTF-8?q?.6.B=20=E6=B5=8B=E8=AF=95=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
spring-boot-starters/pom.xml | 2 +-
spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml | 2 +-
.../wx-java-miniapp-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml | 2 +-
weixin-graal/pom.xml | 2 +-
weixin-java-common/pom.xml | 2 +-
weixin-java-cp/pom.xml | 2 +-
weixin-java-miniapp/pom.xml | 2 +-
weixin-java-mp/pom.xml | 2 +-
weixin-java-open/pom.xml | 2 +-
weixin-java-pay/pom.xml | 2 +-
weixin-java-qidian/pom.xml | 2 +-
16 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/pom.xml b/pom.xml
index d65ecc22d2..04218f8d81 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.github.binarywang
wx-java
- 4.2.5.B
+ 4.2.6.B
pom
WxJava - Weixin/Wechat Java SDK
微信开发Java SDK
diff --git a/spring-boot-starters/pom.xml b/spring-boot-starters/pom.xml
index 1e1297db76..be8a041f90 100644
--- a/spring-boot-starters/pom.xml
+++ b/spring-boot-starters/pom.xml
@@ -4,7 +4,7 @@
com.github.binarywang
wx-java
- 4.2.5.B
+ 4.2.6.B
pom
wx-java-spring-boot-starters
diff --git a/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
index e17747d526..478c3f36b2 100644
--- a/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
@@ -4,7 +4,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.5.B
+ 4.2.6.B
4.0.0
diff --git a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
index 8e953637c4..040ba86e86 100644
--- a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.5.B
+ 4.2.6.B
4.0.0
diff --git a/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
index bf37e8f9d3..bfe9a22414 100644
--- a/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.5.B
+ 4.2.6.B
4.0.0
diff --git a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
index 517736a70a..e53be043df 100644
--- a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.5.B
+ 4.2.6.B
4.0.0
diff --git a/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
index 9e1ee87f06..bf7968bd8a 100644
--- a/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.5.B
+ 4.2.6.B
4.0.0
diff --git a/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
index d477a313c6..61b5f6ebd4 100644
--- a/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
@@ -3,7 +3,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.5.B
+ 4.2.6.B
4.0.0
diff --git a/weixin-graal/pom.xml b/weixin-graal/pom.xml
index c1676ae620..1b4069c272 100644
--- a/weixin-graal/pom.xml
+++ b/weixin-graal/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
wx-java
- 4.2.5.B
+ 4.2.6.B
weixin-graal
diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml
index e602174890..da9cfe68e5 100644
--- a/weixin-java-common/pom.xml
+++ b/weixin-java-common/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
wx-java
- 4.2.5.B
+ 4.2.6.B
weixin-java-common
diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml
index c19593c63a..6805631a8e 100644
--- a/weixin-java-cp/pom.xml
+++ b/weixin-java-cp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.5.B
+ 4.2.6.B
weixin-java-cp
diff --git a/weixin-java-miniapp/pom.xml b/weixin-java-miniapp/pom.xml
index 4a320b1e68..5417810193 100644
--- a/weixin-java-miniapp/pom.xml
+++ b/weixin-java-miniapp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.5.B
+ 4.2.6.B
weixin-java-miniapp
diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml
index f4bbce9dec..0c1b609597 100644
--- a/weixin-java-mp/pom.xml
+++ b/weixin-java-mp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.5.B
+ 4.2.6.B
weixin-java-mp
diff --git a/weixin-java-open/pom.xml b/weixin-java-open/pom.xml
index 0ceb56f2df..5c4eb0cc7f 100644
--- a/weixin-java-open/pom.xml
+++ b/weixin-java-open/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.5.B
+ 4.2.6.B
weixin-java-open
diff --git a/weixin-java-pay/pom.xml b/weixin-java-pay/pom.xml
index 6bed599621..91e487e4c8 100644
--- a/weixin-java-pay/pom.xml
+++ b/weixin-java-pay/pom.xml
@@ -5,7 +5,7 @@
com.github.binarywang
wx-java
- 4.2.5.B
+ 4.2.6.B
4.0.0
diff --git a/weixin-java-qidian/pom.xml b/weixin-java-qidian/pom.xml
index 2235028c36..88ba522ebd 100644
--- a/weixin-java-qidian/pom.xml
+++ b/weixin-java-qidian/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.5.B
+ 4.2.6.B
weixin-java-qidian
From 90b42bd2bb50c8530f94a146d152892d759759d8 Mon Sep 17 00:00:00 2001
From: jiqh
Date: Fri, 11 Feb 2022 08:34:04 +0000
Subject: [PATCH 0058/1155] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E9=83=A8?=
=?UTF-8?q?=E5=88=86=E5=AD=97=E6=AE=B5=E5=AE=9A=E4=B9=89=E7=B1=BB=E5=9E=8B?=
=?UTF-8?q?=E9=94=99=E8=AF=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../me/chanjar/weixin/open/bean/WxOpenMaCodeTemplate.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenMaCodeTemplate.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenMaCodeTemplate.java
index 490394d63d..741a6f607a 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenMaCodeTemplate.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenMaCodeTemplate.java
@@ -51,11 +51,11 @@ public class WxOpenMaCodeTemplate implements Serializable {
* 开发小程序的appid
*/
@SerializedName(value = "sourceMiniProgramAppid", alternate = "source_miniprogram_appid")
- private Long sourceMiniProgramAppid;
+ private String sourceMiniProgramAppid;
/**
* 开发小程序的名称
*/
@SerializedName(value = "sourceMiniProgram", alternate = "source_miniprogram")
- private Long sourceMiniProgram;
+ private String sourceMiniProgram;
}
From 1ebe3aa3c54c4a28b0ef27c9432120d56da52fad Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Tue, 15 Feb 2022 16:47:07 +0800
Subject: [PATCH 0059/1155] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E9=94=99?=
=?UTF-8?q?=E8=AF=AF=E7=9A=84=E5=AD=97=E6=AE=B5=E5=AE=9A=E4=B9=89=E5=92=8C?=
=?UTF-8?q?json=E6=98=A0=E5=B0=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../weixin/open/bean/result/WxOpenMaHistoryVersionResult.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/result/WxOpenMaHistoryVersionResult.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/result/WxOpenMaHistoryVersionResult.java
index 61b9f5dddf..d1e7ede13a 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/result/WxOpenMaHistoryVersionResult.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/result/WxOpenMaHistoryVersionResult.java
@@ -18,8 +18,8 @@
public class WxOpenMaHistoryVersionResult extends WxOpenResult {
private static final long serialVersionUID = 4102311851687901079L;
- @SerializedName("template_list")
- List templateList;
+ @SerializedName("version_list")
+ List versions;
@Override
public String toString() {
From c90e4b9810cf8b43a6af1b21f1315161e009476f Mon Sep 17 00:00:00 2001
From: Green Years
Date: Tue, 15 Feb 2022 16:51:36 +0800
Subject: [PATCH 0060/1155] =?UTF-8?q?:new:=20=E3=80=90=E4=BC=81=E4=B8=9A?=
=?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E5=A2=9E=E5=8A=A0=E6=94=AF=E6=8C=81?=
=?UTF-8?q?URL=E7=9A=84=E7=B4=A0=E6=9D=90=E6=96=87=E4=BB=B6=E4=B8=8A?=
=?UTF-8?q?=E4=BC=A0=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/util/http/InputStreamData.java | 27 ++++++++
...MediaInputStreamUploadRequestExecutor.java | 43 +++++++++++++
.../common/util/http/RequestExecutor.java | 2 +
...MediaInputStreamUploadRequestExecutor.java | 59 ++++++++++++++++++
...MediaInputStreamUploadRequestExecutor.java | 61 +++++++++++++++++++
...MediaInputStreamUploadRequestExecutor.java | 56 +++++++++++++++++
.../weixin/cp/api/WxCpMediaService.java | 15 +++++
.../cp/api/impl/WxCpMediaServiceImpl.java | 30 +++++++++
8 files changed, 293 insertions(+)
create mode 100644 weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/InputStreamData.java
create mode 100644 weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaInputStreamUploadRequestExecutor.java
create mode 100644 weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMediaInputStreamUploadRequestExecutor.java
create mode 100644 weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMediaInputStreamUploadRequestExecutor.java
create mode 100644 weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaInputStreamUploadRequestExecutor.java
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/InputStreamData.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/InputStreamData.java
new file mode 100644
index 0000000000..fe80af11eb
--- /dev/null
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/InputStreamData.java
@@ -0,0 +1,27 @@
+package me.chanjar.weixin.common.util.http;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.InputStream;
+import java.io.Serializable;
+
+/**
+ * 输入流数据.
+ *
+ * InputStreamData
+ *
+ * @author zichuan.zhou91@gmail.com
+ * @date 2022/2/15
+ */
+@Data
+@Accessors(chain = true)
+@NoArgsConstructor
+@AllArgsConstructor
+public class InputStreamData implements Serializable {
+ private static final long serialVersionUID = -4627006604779378520L;
+ private InputStream inputStream;
+ private String filename;
+}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaInputStreamUploadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaInputStreamUploadRequestExecutor.java
new file mode 100644
index 0000000000..de4be21709
--- /dev/null
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaInputStreamUploadRequestExecutor.java
@@ -0,0 +1,43 @@
+package me.chanjar.weixin.common.util.http;
+
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.common.enums.WxType;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.http.apache.ApacheMediaInputStreamUploadRequestExecutor;
+import me.chanjar.weixin.common.util.http.jodd.JoddHttpMediaInputStreamUploadRequestExecutor;
+import me.chanjar.weixin.common.util.http.okhttp.OkHttpMediaInputStreamUploadRequestExecutor;
+
+import java.io.IOException;
+
+/**
+ * 上传媒体文件请求执行器.
+ * 请求的参数是File, 返回的结果是String
+ *
+ * @author Daniel Qian
+ */
+public abstract class MediaInputStreamUploadRequestExecutor implements RequestExecutor {
+ protected RequestHttp requestHttp;
+
+ public MediaInputStreamUploadRequestExecutor(RequestHttp requestHttp) {
+ this.requestHttp = requestHttp;
+ }
+
+ @Override
+ public void execute(String uri, InputStreamData data, ResponseHandler handler, WxType wxType) throws WxErrorException, IOException {
+ handler.handle(this.execute(uri, data, wxType));
+ }
+
+ public static RequestExecutor create(RequestHttp requestHttp) {
+ switch (requestHttp.getRequestType()) {
+ case APACHE_HTTP:
+ return new ApacheMediaInputStreamUploadRequestExecutor(requestHttp);
+ case JODD_HTTP:
+ return new JoddHttpMediaInputStreamUploadRequestExecutor(requestHttp);
+ case OK_HTTP:
+ return new OkHttpMediaInputStreamUploadRequestExecutor(requestHttp);
+ default:
+ return null;
+ }
+ }
+
+}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestExecutor.java
index da1292ba62..b5e394756e 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestExecutor.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestExecutor.java
@@ -37,4 +37,6 @@ public interface RequestExecutor {
* @throws IOException io异常
*/
void execute(String uri, E data, ResponseHandler handler, WxType wxType) throws WxErrorException, IOException;
+
+
}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMediaInputStreamUploadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMediaInputStreamUploadRequestExecutor.java
new file mode 100644
index 0000000000..3e6d189e80
--- /dev/null
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMediaInputStreamUploadRequestExecutor.java
@@ -0,0 +1,59 @@
+package me.chanjar.weixin.common.util.http.apache;
+
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.common.enums.WxType;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.http.InputStreamData;
+import me.chanjar.weixin.common.util.http.MediaInputStreamUploadRequestExecutor;
+import me.chanjar.weixin.common.util.http.RequestHttp;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpHost;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.mime.HttpMultipartMode;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.impl.client.CloseableHttpClient;
+
+import java.io.IOException;
+
+/**
+ * 文件输入流上传.
+ *
+ * @author meiqin.zhou91@gmail.com
+ * @date 2022/02/15
+ */
+public class ApacheMediaInputStreamUploadRequestExecutor extends MediaInputStreamUploadRequestExecutor {
+ public ApacheMediaInputStreamUploadRequestExecutor(RequestHttp requestHttp) {
+ super(requestHttp);
+ }
+
+ @Override
+ public WxMediaUploadResult execute(String uri, InputStreamData data, WxType wxType) throws WxErrorException, IOException {
+ HttpPost httpPost = new HttpPost(uri);
+ if (requestHttp.getRequestHttpProxy() != null) {
+ RequestConfig config = RequestConfig.custom().setProxy(requestHttp.getRequestHttpProxy()).build();
+ httpPost.setConfig(config);
+ }
+ if (data != null) {
+ HttpEntity entity = MultipartEntityBuilder
+ .create()
+ .addBinaryBody("media", data.getInputStream(), ContentType.DEFAULT_BINARY, data.getFilename())
+ .setMode(HttpMultipartMode.RFC6532)
+ .build();
+ httpPost.setEntity(entity);
+ }
+ try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpPost)) {
+ String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
+ WxError error = WxError.fromJson(responseContent, wxType);
+ if (error.getErrorCode() != 0) {
+ throw new WxErrorException(error);
+ }
+ return WxMediaUploadResult.fromJson(responseContent);
+ } finally {
+ httpPost.releaseConnection();
+ }
+ }
+}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMediaInputStreamUploadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMediaInputStreamUploadRequestExecutor.java
new file mode 100644
index 0000000000..d0591aee9b
--- /dev/null
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMediaInputStreamUploadRequestExecutor.java
@@ -0,0 +1,61 @@
+package me.chanjar.weixin.common.util.http.jodd;
+
+import jodd.http.HttpConnectionProvider;
+import jodd.http.HttpRequest;
+import jodd.http.HttpResponse;
+import jodd.http.ProxyInfo;
+import jodd.http.up.ByteArrayUploadable;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.common.enums.WxType;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.http.InputStreamData;
+import me.chanjar.weixin.common.util.http.MediaInputStreamUploadRequestExecutor;
+import me.chanjar.weixin.common.util.http.RequestHttp;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 文件输入流上传.
+ *
+ * @author meiqin.zhou91@gmail.com
+ * @date 2022/02/15
+ */
+public class JoddHttpMediaInputStreamUploadRequestExecutor extends MediaInputStreamUploadRequestExecutor {
+ public JoddHttpMediaInputStreamUploadRequestExecutor(RequestHttp requestHttp) {
+ super(requestHttp);
+ }
+
+ @Override
+ public WxMediaUploadResult execute(String uri, InputStreamData data, WxType wxType) throws WxErrorException, IOException {
+ HttpRequest request = HttpRequest.post(uri);
+ if (requestHttp.getRequestHttpProxy() != null) {
+ requestHttp.getRequestHttpClient().useProxy(requestHttp.getRequestHttpProxy());
+ }
+ request.withConnectionProvider(requestHttp.getRequestHttpClient());
+ request.form("media", new ByteArrayUploadable(this.toByteArray(data.getInputStream()), data.getFilename()));
+ HttpResponse response = request.send();
+ response.charset(StandardCharsets.UTF_8.name());
+
+ String responseContent = response.bodyText();
+ WxError error = WxError.fromJson(responseContent, wxType);
+ if (error.getErrorCode() != 0) {
+ throw new WxErrorException(error);
+ }
+ return WxMediaUploadResult.fromJson(responseContent);
+ }
+
+ public byte[] toByteArray(InputStream input) throws IOException {
+ try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
+ byte[] buffer = new byte[4096];
+ int n = 0;
+ while (-1 != (n = input.read(buffer))) {
+ output.write(buffer, 0, n);
+ }
+ return output.toByteArray();
+ }
+ }
+}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaInputStreamUploadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaInputStreamUploadRequestExecutor.java
new file mode 100644
index 0000000000..ec85015b26
--- /dev/null
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaInputStreamUploadRequestExecutor.java
@@ -0,0 +1,56 @@
+package me.chanjar.weixin.common.util.http.okhttp;
+
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.common.enums.WxType;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.http.InputStreamData;
+import me.chanjar.weixin.common.util.http.MediaInputStreamUploadRequestExecutor;
+import me.chanjar.weixin.common.util.http.RequestHttp;
+import okhttp3.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * 文件输入流上传.
+ *
+ * @author meiqin.zhou91@gmail.com
+ * @date 2022/02/15
+ */
+public class OkHttpMediaInputStreamUploadRequestExecutor extends MediaInputStreamUploadRequestExecutor {
+ public OkHttpMediaInputStreamUploadRequestExecutor(RequestHttp requestHttp) {
+ super(requestHttp);
+ }
+
+ @Override
+ public WxMediaUploadResult execute(String uri, InputStreamData data, WxType wxType) throws WxErrorException, IOException {
+
+ RequestBody body = new MultipartBody.Builder()
+ .setType(MediaType.parse("multipart/form-data"))
+ .addFormDataPart("media", data.getFilename(), RequestBody.create(this.toByteArray(data.getInputStream()), MediaType.parse("application/octet-stream")))
+ .build();
+ Request request = new Request.Builder().url(uri).post(body).build();
+
+ Response response = requestHttp.getRequestHttpClient().newCall(request).execute();
+ String responseContent = response.body().string();
+ WxError error = WxError.fromJson(responseContent, wxType);
+ if (error.getErrorCode() != 0) {
+ throw new WxErrorException(error);
+ }
+ return WxMediaUploadResult.fromJson(responseContent);
+ }
+
+
+ public byte[] toByteArray(InputStream input) throws IOException {
+ try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
+ byte[] buffer = new byte[4096];
+ int n = 0;
+ while (-1 != (n = input.read(buffer))) {
+ output.write(buffer, 0, n);
+ }
+ return output.toByteArray();
+ }
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMediaService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMediaService.java
index a51e04e175..d9b53f250e 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMediaService.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMediaService.java
@@ -35,6 +35,21 @@ public interface WxCpMediaService {
WxMediaUploadResult upload(String mediaType, String fileType, InputStream inputStream)
throws WxErrorException, IOException;
+ /**
+ *
+ * 上传多媒体文件.
+ *
+ *
+ * @param mediaType 媒体类型, 请看{@link me.chanjar.weixin.common.api.WxConsts}
+ * @param filename 文件名.例如:wework.txt
+ * @param url 远程链接
+ * @return
+ * @throws WxErrorException
+ * @throws IOException
+ */
+ WxMediaUploadResult upload(String mediaType, String filename, String url)
+ throws WxErrorException, IOException;
+
/**
* 上传多媒体文件.
*
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java
index b83b6d39ab..8e88aa20ea 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java
@@ -5,6 +5,8 @@
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.fs.FileUtils;
import me.chanjar.weixin.common.util.http.BaseMediaDownloadRequestExecutor;
+import me.chanjar.weixin.common.util.http.InputStreamData;
+import me.chanjar.weixin.common.util.http.MediaInputStreamUploadRequestExecutor;
import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor;
import me.chanjar.weixin.cp.api.WxCpMediaService;
import me.chanjar.weixin.cp.api.WxCpService;
@@ -12,6 +14,8 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
import java.util.UUID;
import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Media.*;
@@ -34,6 +38,32 @@ public WxMediaUploadResult upload(String mediaType, String fileType, InputStream
return this.upload(mediaType, FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), fileType));
}
+ @Override
+ public WxMediaUploadResult upload(String mediaType, String filename, String url) throws WxErrorException, IOException {
+ HttpURLConnection conn = null;
+ InputStream inputStream = null;
+ try {
+ URL remote = new URL(url);
+ conn = (HttpURLConnection) remote.openConnection();
+ //设置超时间为3秒
+ conn.setConnectTimeout(60 * 1000);
+ //防止屏蔽程序抓取而返回403错误
+ conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+ inputStream = conn.getInputStream();
+ return this.mainService.execute(MediaInputStreamUploadRequestExecutor.create(this.mainService.getRequestHttp()), this.mainService.getWxCpConfigStorage().getApiUrl(MEDIA_UPLOAD + mediaType), new InputStreamData(inputStream, filename));
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ }
+ }
+ if (conn != null) {
+ conn.disconnect();
+ }
+ }
+ }
+
@Override
public WxMediaUploadResult upload(String mediaType, File file) throws WxErrorException {
return this.mainService.execute(MediaUploadRequestExecutor.create(this.mainService.getRequestHttp()),
From 6c466f00b3d7720add177f4febc93594e95e3b40 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BE=90=E5=87=AF=E6=97=8B?=
<42696884+azouever@users.noreply.github.com>
Date: Wed, 23 Feb 2022 09:12:54 +0800
Subject: [PATCH 0061/1155] =?UTF-8?q?:art:=20#2530=E3=80=90=E5=85=AC?=
=?UTF-8?q?=E5=85=B1=E9=97=AE=E9=A2=98=E3=80=91=E4=BF=AE=E5=A4=8D=20pull-p?=
=?UTF-8?q?arser=20=E4=BE=9D=E8=B5=96=E4=BC=A0=E9=80=92=E5=AF=BC=E8=87=B4s?=
=?UTF-8?q?pring=20boot=202.6.3=E6=97=A0=E6=B3=95=E5=90=AF=E5=8A=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
weixin-java-common/pom.xml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml
index da9cfe68e5..aa1503c64e 100644
--- a/weixin-java-common/pom.xml
+++ b/weixin-java-common/pom.xml
@@ -117,6 +117,12 @@
org.dom4j
dom4j
2.1.3
+
+
+ pull-parser
+ pull-parser
+
+
redis.clients
From a25c48e3d60344b13a87561f8cfb8c542e2b73f2 Mon Sep 17 00:00:00 2001
From: zhoushuofu <1065058691@qq.com>
Date: Wed, 23 Feb 2022 09:15:01 +0800
Subject: [PATCH 0062/1155] =?UTF-8?q?:bug:=20#2544=20=E3=80=90=E5=85=AC?=
=?UTF-8?q?=E4=BC=97=E5=8F=B7=E3=80=91=E4=BF=AE=E5=A4=8D=E8=8F=9C=E5=8D=95?=
=?UTF-8?q?=E6=96=87=E7=AB=A0id=E6=9C=AA=E5=BA=8F=E5=88=97=E5=8C=96?=
=?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java
index 31c3c0204c..50d3b0d630 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java
@@ -46,6 +46,7 @@ protected JsonObject convertToJson(WxMenuButton button) {
buttonJson.addProperty("key", button.getKey());
buttonJson.addProperty("url", button.getUrl());
buttonJson.addProperty("media_id", button.getMediaId());
+ buttonJson.addProperty("article_id", button.getArticleId());
buttonJson.addProperty("appid", button.getAppId());
buttonJson.addProperty("pagepath", button.getPagePath());
if (button.getSubButtons() != null && button.getSubButtons().size() > 0) {
@@ -122,6 +123,7 @@ protected WxMenuButton convertFromJson(JsonObject json) {
button.setUrl(GsonHelper.getString(json, "url"));
button.setType(GsonHelper.getString(json, "type"));
button.setMediaId(GsonHelper.getString(json, "media_id"));
+ button.setArticleId(GsonHelper.getString(json, "article_id"));
button.setAppId(GsonHelper.getString(json, "appid"));
button.setPagePath(GsonHelper.getString(json, "pagepath"));
return button;
From fcfee0a068bceb2e5b5128204745563dbb298ac6 Mon Sep 17 00:00:00 2001
From: xiaoguaiYJ <33287565+xiaoguaiYJ@users.noreply.github.com>
Date: Wed, 23 Feb 2022 09:44:29 +0800
Subject: [PATCH 0063/1155] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E9=83=A8?=
=?UTF-8?q?=E5=88=86=E5=AD=97=E6=AE=B5=E5=AE=9A=E4=B9=89=E7=B1=BB=E5=9E=8B?=
=?UTF-8?q?=E9=94=99=E8=AF=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: xiaoqiang
---
.../bean/marketing/payroll/AuthRecordResult.java | 12 ++++++------
.../bean/marketing/transfer/BatchDetailsResult.java | 2 +-
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/payroll/AuthRecordResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/payroll/AuthRecordResult.java
index abf8397633..5318e5315b 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/payroll/AuthRecordResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/payroll/AuthRecordResult.java
@@ -44,7 +44,7 @@ public static class RecordData implements Serializable {
*
*/
@SerializedName(value = "mchid")
- private Integer mchid;
+ private String mchid;
/**
*
* 字段名:子商户号
@@ -57,7 +57,7 @@ public static class RecordData implements Serializable {
*
*/
@SerializedName(value = "sub_mchid")
- private Integer subMchid;
+ private String subMchid;
/**
*
* 字段名:用户标识
@@ -70,7 +70,7 @@ public static class RecordData implements Serializable {
*
*/
@SerializedName(value = "openid")
- private Integer openid;
+ private String openid;
/**
*
* 字段名:核身渠道
@@ -85,7 +85,7 @@ public static class RecordData implements Serializable {
*
*/
@SerializedName(value = "authenticate_scene")
- private Integer authenticateScene;
+ private String authenticateScene;
/**
*
* 字段名:核身渠道标识
@@ -98,7 +98,7 @@ public static class RecordData implements Serializable {
*
*/
@SerializedName(value = "authenticate_source")
- private Integer authenticateSource;
+ private String authenticateSource;
/**
*
* 字段名:项目名称
@@ -111,7 +111,7 @@ public static class RecordData implements Serializable {
*
*/
@SerializedName(value = "project_name")
- private Integer projectName;
+ private String projectName;
/**
*
* 字段名:单位名称
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsResult.java
index 0ca10dcb40..5c77281e78 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsResult.java
@@ -235,5 +235,5 @@ public String toString() {
*
*/
@SerializedName(value = "update_time")
- private Date updateTime;
+ private String updateTime;
}
From aae9bebff1dae894e89e602103695c63edefb3e6 Mon Sep 17 00:00:00 2001
From: xiongmaoshouzha
Date: Wed, 23 Feb 2022 10:16:14 +0800
Subject: [PATCH 0064/1155] =?UTF-8?q?:bug:=20#2538=20=E3=80=90=E5=BE=AE?=
=?UTF-8?q?=E4=BF=A1=E6=94=AF=E4=BB=98=E3=80=91=E7=AD=BE=E7=BA=A6=E9=80=9A?=
=?UTF-8?q?=E7=9F=A5=E7=BB=93=E6=9E=9C=E7=B1=BB=E4=BF=AE=E5=A4=8Drequest?=
=?UTF-8?q?=5Fserial=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
request_serial int 类型改为long
---
.../binarywang/wxpay/bean/result/BaseWxPayResult.java | 9 +++++++++
.../binarywang/wxpay/bean/result/WxPayEntrustResult.java | 4 ++--
.../binarywang/wxpay/bean/result/WxSignQueryResult.java | 4 ++--
.../wxpay/bean/result/WxSignStatusNotifyResult.java | 4 ++--
4 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/BaseWxPayResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/BaseWxPayResult.java
index 6f66dfdd86..a48617c4cb 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/BaseWxPayResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/BaseWxPayResult.java
@@ -230,6 +230,15 @@ protected static Integer readXmlInteger(Document d, String tagName) {
return Integer.parseInt(content);
}
+ protected static Long readXmlLong(Document d, String tagName) {
+ String content = readXmlString(d, tagName);
+ if (content == null || content.trim().length() == 0) {
+ return null;
+ }
+
+ return Long.parseLong(content);
+ }
+
/**
* Gets logger.
*
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayEntrustResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayEntrustResult.java
index 4dc6f19ae4..2cd0e3588d 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayEntrustResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayEntrustResult.java
@@ -81,7 +81,7 @@ public class WxPayEntrustResult extends BaseWxPayResult implements Serializable
* 非必传
*/
@XStreamAlias("request_serial")
- private Integer requestSerial;
+ private Long requestSerial;
/**
* 签约协议号
@@ -120,7 +120,7 @@ protected void loadXml(Document d) {
tradeType = readXmlString(d, "trade_type");
codeUrl = readXmlString(d, "code_url");
planId = readXmlInteger(d, "plan_id");
- requestSerial = readXmlInteger(d, "request_serial");
+ requestSerial = readXmlLong(d, "request_serial");
contractCode = readXmlString(d, "contract_code");
contractDisplayAccount = readXmlString(d, "contract_display_account");
mwebUrl = readXmlString(d, "mweb_url");
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResult.java
index abb72a5b79..d04f47a9dc 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResult.java
@@ -42,7 +42,7 @@ public class WxSignQueryResult extends BaseWxPayResult implements Serializable {
* 请求序列号
*/
@XStreamAlias("request_serial")
- private Integer requestSerial;
+ private Long requestSerial;
/**
* 签约协议号
@@ -106,7 +106,7 @@ public class WxSignQueryResult extends BaseWxPayResult implements Serializable {
protected void loadXml(Document d) {
contractId = readXmlString(d, "contract_id");
planId = readXmlString(d, "plan_id");
- requestSerial = readXmlInteger(d, "request_serial");
+ requestSerial = readXmlLong(d, "request_serial");
contractCode = readXmlString(d, "contract_code");
contractDisplayAccount = readXmlString(d, "contract_display_account");
contractState = readXmlInteger(d, "contract_state");
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignStatusNotifyResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignStatusNotifyResult.java
index f55b576e36..0c0b48ecd4 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignStatusNotifyResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignStatusNotifyResult.java
@@ -81,7 +81,7 @@ public class WxSignStatusNotifyResult extends BaseWxPayResult {
* 请求序列号
*/
@XStreamAlias("request_serial")
- private Integer requestSerial;
+ private Long requestSerial;
@Override
public void checkResult(WxPayService wxPayService, String signType, boolean checkSuccess) throws WxPayException {
@@ -117,7 +117,7 @@ protected void loadXml(Document d) {
contractId = readXmlString(d, "contract_id");
contractExpiredTime = readXmlString(d, "contract_expired_time");
contractTerminationMode = readXmlInteger(d, "contract_termination_mode");
- requestSerial = readXmlInteger(d, "request_serial");
+ requestSerial = readXmlLong(d, "request_serial");
}
@Override
From d615f8af5990e7f3fd97d77b219aef5b0926981b Mon Sep 17 00:00:00 2001
From: JCLee <452415615@qq.com>
Date: Wed, 23 Feb 2022 10:16:47 +0800
Subject: [PATCH 0065/1155] =?UTF-8?q?:art:=E3=80=90=E5=85=AC=E4=BC=97?=
=?UTF-8?q?=E5=8F=B7=E3=80=91=E5=8F=91=E5=B8=83=E7=8A=B6=E6=80=81=E8=BD=AE?=
=?UTF-8?q?=E8=AF=A2=E6=8E=A5=E5=8F=A3=E5=AE=9E=E4=BD=93=E7=B1=BB=E5=BA=8F?=
=?UTF-8?q?=E5=88=97=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../weixin/mp/bean/freepublish/WxMpFreePublishStatus.java | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/freepublish/WxMpFreePublishStatus.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/freepublish/WxMpFreePublishStatus.java
index 5734123960..033d300cba 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/freepublish/WxMpFreePublishStatus.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/freepublish/WxMpFreePublishStatus.java
@@ -42,13 +42,15 @@ public String toJson() {
@NoArgsConstructor
@Data
- public static class ArticleDetail {
+ public static class ArticleDetail implements Serializable{
+ private static final long serialVersionUID = 2802949203075628412L;
private Integer count;
private List- item;
@NoArgsConstructor
@Data
- public static class Item {
+ public static class Item implements Serializable{
+ private static final long serialVersionUID = -6496102084844816489L;
private Integer idx;
private String article_url;
}
From cba7603ee2fb53a7b0c166845b437c0f80d88ab3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?ShenHanBo/=E6=B2=88=E6=B6=B5=E5=8D=9A?=
<40845556+shenshb808@users.noreply.github.com>
Date: Mon, 28 Feb 2022 23:12:00 +0800
Subject: [PATCH 0066/1155] =?UTF-8?q?:art:=20#2547=E3=80=90=E5=BE=AE?=
=?UTF-8?q?=E4=BF=A1=E6=94=AF=E4=BB=98=E3=80=91=E4=BA=8C=E7=BA=A7=E5=95=86?=
=?UTF-8?q?=E6=88=B7=E8=BF=9B=E4=BB=B6=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0?=
=?UTF-8?q?owner=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../wxpay/bean/ecommerce/ApplymentsRequest.java | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/ApplymentsRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/ApplymentsRequest.java
index 41f222ca92..ac17e18cd1 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/ApplymentsRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/ApplymentsRequest.java
@@ -131,6 +131,19 @@ public class ApplymentsRequest implements Serializable {
@SpecEncrypt
private IdDocInfo idDocInfo;
+ /**
+ *
+ * 字段名:经营者/法人是否为受益人
+ * 变量名:owner
+ * 是否必填:条件选填
+ * 类型:bool
+ * 描述:主体类型为企业时,需要填写:1、若经营者/法人是最终受益人,则填写:true。2、若经营者/法人不是最终受益人,则填写:false。
+ * 示例值:true
+ *
+ */
+ @SerializedName(value = "owner")
+ private Boolean owner;
+
/**
*
* 字段名:是否填写结算账户信息
From 84301226555b715b6c495017e25b7a6a8467a15a Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Mon, 28 Feb 2022 23:15:56 +0800
Subject: [PATCH 0067/1155] =?UTF-8?q?:bookmark:=20=E5=8F=91=E5=B8=83=204.2?=
=?UTF-8?q?.7.B=20=E6=B5=8B=E8=AF=95=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
spring-boot-starters/pom.xml | 2 +-
spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml | 2 +-
.../wx-java-miniapp-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml | 2 +-
spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml | 2 +-
weixin-graal/pom.xml | 2 +-
weixin-java-common/pom.xml | 2 +-
weixin-java-cp/pom.xml | 2 +-
weixin-java-miniapp/pom.xml | 2 +-
weixin-java-mp/pom.xml | 2 +-
weixin-java-open/pom.xml | 2 +-
weixin-java-pay/pom.xml | 2 +-
weixin-java-qidian/pom.xml | 2 +-
16 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/pom.xml b/pom.xml
index 04218f8d81..0c373d1670 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.github.binarywang
wx-java
- 4.2.6.B
+ 4.2.7.B
pom
WxJava - Weixin/Wechat Java SDK
微信开发Java SDK
diff --git a/spring-boot-starters/pom.xml b/spring-boot-starters/pom.xml
index be8a041f90..4ea942cf5e 100644
--- a/spring-boot-starters/pom.xml
+++ b/spring-boot-starters/pom.xml
@@ -4,7 +4,7 @@
com.github.binarywang
wx-java
- 4.2.6.B
+ 4.2.7.B
pom
wx-java-spring-boot-starters
diff --git a/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
index 478c3f36b2..2f0e9af560 100644
--- a/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-cp-spring-boot-starter/pom.xml
@@ -4,7 +4,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.6.B
+ 4.2.7.B
4.0.0
diff --git a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
index 040ba86e86..e7e6c113a6 100644
--- a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.6.B
+ 4.2.7.B
4.0.0
diff --git a/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
index bfe9a22414..9324590eff 100644
--- a/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.6.B
+ 4.2.7.B
4.0.0
diff --git a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
index e53be043df..d0c6d4c8d8 100644
--- a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.6.B
+ 4.2.7.B
4.0.0
diff --git a/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
index bf7968bd8a..e62ad4911b 100644
--- a/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.6.B
+ 4.2.7.B
4.0.0
diff --git a/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
index 61b5f6ebd4..24b6cd963b 100644
--- a/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
+++ b/spring-boot-starters/wx-java-qidian-spring-boot-starter/pom.xml
@@ -3,7 +3,7 @@
wx-java-spring-boot-starters
com.github.binarywang
- 4.2.6.B
+ 4.2.7.B
4.0.0
diff --git a/weixin-graal/pom.xml b/weixin-graal/pom.xml
index 1b4069c272..ddf5f714a5 100644
--- a/weixin-graal/pom.xml
+++ b/weixin-graal/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
wx-java
- 4.2.6.B
+ 4.2.7.B
weixin-graal
diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml
index aa1503c64e..afcbf5ca5d 100644
--- a/weixin-java-common/pom.xml
+++ b/weixin-java-common/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
wx-java
- 4.2.6.B
+ 4.2.7.B
weixin-java-common
diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml
index 6805631a8e..81745ee309 100644
--- a/weixin-java-cp/pom.xml
+++ b/weixin-java-cp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.6.B
+ 4.2.7.B
weixin-java-cp
diff --git a/weixin-java-miniapp/pom.xml b/weixin-java-miniapp/pom.xml
index 5417810193..fda859f6d4 100644
--- a/weixin-java-miniapp/pom.xml
+++ b/weixin-java-miniapp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.6.B
+ 4.2.7.B
weixin-java-miniapp
diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml
index 0c1b609597..9d5f12336c 100644
--- a/weixin-java-mp/pom.xml
+++ b/weixin-java-mp/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.6.B
+ 4.2.7.B
weixin-java-mp
diff --git a/weixin-java-open/pom.xml b/weixin-java-open/pom.xml
index 5c4eb0cc7f..0156e852bb 100644
--- a/weixin-java-open/pom.xml
+++ b/weixin-java-open/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.6.B
+ 4.2.7.B
weixin-java-open
diff --git a/weixin-java-pay/pom.xml b/weixin-java-pay/pom.xml
index 91e487e4c8..05766b15f8 100644
--- a/weixin-java-pay/pom.xml
+++ b/weixin-java-pay/pom.xml
@@ -5,7 +5,7 @@
com.github.binarywang
wx-java
- 4.2.6.B
+ 4.2.7.B
4.0.0
diff --git a/weixin-java-qidian/pom.xml b/weixin-java-qidian/pom.xml
index 88ba522ebd..93be808196 100644
--- a/weixin-java-qidian/pom.xml
+++ b/weixin-java-qidian/pom.xml
@@ -7,7 +7,7 @@
com.github.binarywang
wx-java
- 4.2.6.B
+ 4.2.7.B
weixin-java-qidian
From 4339c4dc57c6d1b128bb890370dc5eba83bd9345 Mon Sep 17 00:00:00 2001
From: Jerry
Date: Tue, 1 Mar 2022 15:13:13 +0800
Subject: [PATCH 0068/1155] =?UTF-8?q?:art:=20#2550=E3=80=90=E5=BC=80?=
=?UTF-8?q?=E6=94=BE=E5=B9=B3=E5=8F=B0=E3=80=91=E7=AC=AC=E4=B8=89=E6=96=B9?=
=?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=96=B0=E5=A2=9E=E5=85=A8=E5=B1=80=E9=94=99?=
=?UTF-8?q?=E8=AF=AF=E7=A0=81=E7=9A=84=E4=B8=AD=E6=96=87=E6=8F=8F=E8=BF=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../chanjar/weixin/common/error/WxError.java | 7 +
.../common/error/WxOpenErrorMsgEnum.java | 9203 +++++++++++++++++
2 files changed, 9210 insertions(+)
create mode 100644 weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxOpenErrorMsgEnum.java
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxError.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxError.java
index aa7f508f5b..1156636ea3 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxError.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxError.java
@@ -84,6 +84,13 @@ public static WxError fromJson(String json, WxType type) {
}
break;
}
+ case Open: {
+ final String msg = WxOpenErrorMsgEnum.findMsgByCode(wxError.getErrorCode());
+ if (msg != null) {
+ wxError.setErrorMsg(msg);
+ }
+ break;
+ }
default:
return wxError;
}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxOpenErrorMsgEnum.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxOpenErrorMsgEnum.java
new file mode 100644
index 0000000000..3ab1e961d8
--- /dev/null
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxOpenErrorMsgEnum.java
@@ -0,0 +1,9203 @@
+package me.chanjar.weixin.common.error;
+
+import com.google.common.collect.Maps;
+import lombok.Getter;
+
+import java.util.Map;
+
+/**
+ *
+ * 微信开放平台全局返回码.
+ * 参考文档:开放平台全局返回码
+ *
+ *
+ * @author Lam Jerry
+ */
+
+@Getter
+public enum WxOpenErrorMsgEnum {
+ /**
+ * 系统繁忙,此时请开发者稍候再试 system error
+ */
+ CODE_1(-1, "系统繁忙,此时请开发者稍候再试"),
+
+ /**
+ * 请求成功 ok
+ */
+ CODE_0(0, "请求成功"),
+
+ /**
+ * POST参数非法
+ */
+ CODE_1003(1003, "POST参数非法"),
+
+ /**
+ * 商品id不存在
+ */
+ CODE_20002(20002, "商品id不存在"),
+
+ /**
+ * 获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口 invalid credential, access_token is invalid or not latest
+ */
+ CODE_40001(40001, "获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口"),
+
+ /**
+ * 不合法的凭证类型 invalid grant_type
+ */
+ CODE_40002(40002, "不合法的凭证类型"),
+
+ /**
+ * 不合法的 OpenID ,请开发者确认 OpenID (该用户)是否已关注公众号,或是否是其他公众号的 OpenID invalid openid
+ */
+ CODE_40003(40003, "不合法的 OpenID ,请开发者确认 OpenID (该用户)是否已关注公众号,或是否是其他公众号的 OpenID"),
+
+ /**
+ * 不合法的媒体文件类型 invalid media type
+ */
+ CODE_40004(40004, "不合法的媒体文件类型"),
+
+ /**
+ * 上传素材文件格式不对 invalid file type
+ */
+ CODE_40005(40005, "上传素材文件格式不对"),
+
+ /**
+ * 上传素材文件大小超出限制 invalid meida size
+ */
+ CODE_40006(40006, "上传素材文件大小超出限制"),
+
+ /**
+ * 不合法的媒体文件 id invalid media_id
+ */
+ CODE_40007(40007, "不合法的媒体文件 id"),
+
+ /**
+ * 不合法的消息类型 invalid message type
+ */
+ CODE_40008(40008, "不合法的消息类型"),
+
+ /**
+ * 图片尺寸太大 invalid image size
+ */
+ CODE_40009(40009, "图片尺寸太大"),
+
+ /**
+ * 不合法的语音文件大小 invalid voice size
+ */
+ CODE_40010(40010, "不合法的语音文件大小"),
+
+ /**
+ * 不合法的视频文件大小 invalid video size
+ */
+ CODE_40011(40011, "不合法的视频文件大小"),
+
+ /**
+ * 不合法的缩略图文件大小 invalid thumb size
+ */
+ CODE_40012(40012, "不合法的缩略图文件大小"),
+
+ /**
+ * 不合法的appid invalid appid
+ */
+ CODE_40013(40013, "不合法的appid"),
+
+ /**
+ * 不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口 invalid access_token
+ */
+ CODE_40014(40014, "不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口"),
+
+ /**
+ * 不合法的菜单类型 invalid menu type
+ */
+ CODE_40015(40015, "不合法的菜单类型"),
+
+ /**
+ * 不合法的按钮个数 invalid button size
+ */
+ CODE_40016(40016, "不合法的按钮个数"),
+
+ /**
+ * 不合法的按钮类型 invalid button type
+ */
+ CODE_40017(40017, "不合法的按钮类型"),
+
+ /**
+ * 不合法的按钮名字长度 invalid button name size
+ */
+ CODE_40018(40018, "不合法的按钮名字长度"),
+
+ /**
+ * 不合法的按钮 KEY 长度 invalid button key size
+ */
+ CODE_40019(40019, "不合法的按钮 KEY 长度"),
+
+ /**
+ * 不合法的按钮 URL 长度 invalid button url size
+ */
+ CODE_40020(40020, "不合法的按钮 URL 长度"),
+
+ /**
+ * 不合法的菜单版本号 invalid menu version
+ */
+ CODE_40021(40021, "不合法的菜单版本号"),
+
+ /**
+ * 不合法的子菜单级数 invalid sub_menu level
+ */
+ CODE_40022(40022, "不合法的子菜单级数"),
+
+ /**
+ * 不合法的子菜单按钮个数 invalid sub button size
+ */
+ CODE_40023(40023, "不合法的子菜单按钮个数"),
+
+ /**
+ * 不合法的子菜单按钮类型 invalid sub button type
+ */
+ CODE_40024(40024, "不合法的子菜单按钮类型"),
+
+ /**
+ * 不合法的子菜单按钮名字长度 invalid sub button name size
+ */
+ CODE_40025(40025, "不合法的子菜单按钮名字长度"),
+
+ /**
+ * 不合法的子菜单按钮 KEY 长度 invalid sub button key size
+ */
+ CODE_40026(40026, "不合法的子菜单按钮 KEY 长度"),
+
+ /**
+ * 不合法的子菜单按钮 URL 长度 invalid sub button url size
+ */
+ CODE_40027(40027, "不合法的子菜单按钮 URL 长度"),
+
+ /**
+ * 不合法的自定义菜单使用用户 invalid menu api user
+ */
+ CODE_40028(40028, "不合法的自定义菜单使用用户"),
+
+ /**
+ * 无效的 oauth_code invalid code
+ */
+ CODE_40029(40029, "无效的 oauth_code"),
+
+ /**
+ * 不合法的 refresh_token invalid refresh_token
+ */
+ CODE_40030(40030, "不合法的 refresh_token"),
+
+ /**
+ * 不合法的 openid 列表 invalid openid list
+ */
+ CODE_40031(40031, "不合法的 openid 列表"),
+
+ /**
+ * 不合法的 openid 列表长度 invalid openid list size
+ */
+ CODE_40032(40032, "不合法的 openid 列表长度"),
+
+ /**
+ * 不合法的请求字符,不能包含 \\uxxxx 格式的字符 invalid charset. please check your request, if include \\uxxxx will create fail!
+ */
+ CODE_40033(40033, "不合法的请求字符,不能包含 \\uxxxx 格式的字符"),
+
+ /**
+ * invalid template size
+ */
+ CODE_40034(40034, "invalid template size"),
+
+ /**
+ * 不合法的参数 invalid args size
+ */
+ CODE_40035(40035, "不合法的参数"),
+
+ /**
+ * 不合法的 template_id 长度 invalid template_id size
+ */
+ CODE_40036(40036, "不合法的 template_id 长度"),
+
+ /**
+ * 不合法的 template_id invalid template_id
+ */
+ CODE_40037(40037, "不合法的 template_id"),
+
+ /**
+ * 不合法的请求格式 invalid packaging type
+ */
+ CODE_40038(40038, "不合法的请求格式"),
+
+ /**
+ * 不合法的 URL 长度 invalid url size
+ */
+ CODE_40039(40039, "不合法的 URL 长度"),
+
+ /**
+ * invalid plugin token
+ */
+ CODE_40040(40040, "invalid plugin token"),
+
+ /**
+ * invalid plugin id
+ */
+ CODE_40041(40041, "invalid plugin id"),
+
+ /**
+ * invalid plugin session
+ */
+ CODE_40042(40042, "invalid plugin session"),
+
+ /**
+ * invalid fav type
+ */
+ CODE_40043(40043, "invalid fav type"),
+
+ /**
+ * invalid size in link.title
+ */
+ CODE_40044(40044, "invalid size in link.title"),
+
+ /**
+ * invalid size in link.description
+ */
+ CODE_40045(40045, "invalid size in link.description"),
+
+ /**
+ * invalid size in link.iconurl
+ */
+ CODE_40046(40046, "invalid size in link.iconurl"),
+
+ /**
+ * invalid size in link.url
+ */
+ CODE_40047(40047, "invalid size in link.url"),
+
+ /**
+ * 无效的url invalid url domain
+ */
+ CODE_40048(40048, "无效的url"),
+
+ /**
+ * invalid score report type
+ */
+ CODE_40049(40049, "invalid score report type"),
+
+ /**
+ * 不合法的分组 id invalid timeline type
+ */
+ CODE_40050(40050, "不合法的分组 id"),
+
+ /**
+ * 分组名字不合法 invalid group name
+ */
+ CODE_40051(40051, "分组名字不合法"),
+
+ /**
+ * invalid action name
+ */
+ CODE_40052(40052, "invalid action name"),
+
+ /**
+ * invalid action info, please check document
+ */
+ CODE_40053(40053, "invalid action info, please check document"),
+
+ /**
+ * 不合法的子菜单按钮 url 域名 invalid sub button url domain
+ */
+ CODE_40054(40054, "不合法的子菜单按钮 url 域名"),
+
+ /**
+ * 不合法的菜单按钮 url 域名 invalid button url domain
+ */
+ CODE_40055(40055, "不合法的菜单按钮 url 域名"),
+
+ /**
+ * invalid serial code
+ */
+ CODE_40056(40056, "invalid serial code"),
+
+ /**
+ * invalid tabbar size
+ */
+ CODE_40057(40057, "invalid tabbar size"),
+
+ /**
+ * invalid tabbar name size
+ */
+ CODE_40058(40058, "invalid tabbar name size"),
+
+ /**
+ * invalid msg id
+ */
+ CODE_40059(40059, "invalid msg id"),
+
+ /**
+ * 删除单篇图文时,指定的 article_idx 不合法 invalid article idx
+ */
+ CODE_40060(40060, "删除单篇图文时,指定的 article_idx 不合法"),
+
+ /**
+ * invalid title size
+ */
+ CODE_40062(40062, "invalid title size"),
+
+ /**
+ * invalid message_ext size
+ */
+ CODE_40063(40063, "invalid message_ext size"),
+
+ /**
+ * invalid app type
+ */
+ CODE_40064(40064, "invalid app type"),
+
+ /**
+ * invalid msg status
+ */
+ CODE_40065(40065, "invalid msg status"),
+
+ /**
+ * 不合法的 url ,递交的页面被sitemap标记为拦截 invalid url
+ */
+ CODE_40066(40066, "不合法的 url ,递交的页面被sitemap标记为拦截"),
+
+ /**
+ * invalid tvid
+ */
+ CODE_40067(40067, "invalid tvid"),
+
+ /**
+ * contain mailcious url
+ */
+ CODE_40068(40068, "contain mailcious url"),
+
+ /**
+ * invalid hardware type
+ */
+ CODE_40069(40069, "invalid hardware type"),
+
+ /**
+ * invalid sku info
+ */
+ CODE_40070(40070, "invalid sku info"),
+
+ /**
+ * invalid card type
+ */
+ CODE_40071(40071, "invalid card type"),
+
+ /**
+ * invalid location id
+ */
+ CODE_40072(40072, "invalid location id"),
+
+ /**
+ * invalid card id
+ */
+ CODE_40073(40073, "invalid card id"),
+
+ /**
+ * invalid pay template id
+ */
+ CODE_40074(40074, "invalid pay template id"),
+
+ /**
+ * invalid encrypt code
+ */
+ CODE_40075(40075, "invalid encrypt code"),
+
+ /**
+ * invalid color id
+ */
+ CODE_40076(40076, "invalid color id"),
+
+ /**
+ * invalid score type
+ */
+ CODE_40077(40077, "invalid score type"),
+
+ /**
+ * invalid card status
+ */
+ CODE_40078(40078, "invalid card status"),
+
+ /**
+ * invalid time
+ */
+ CODE_40079(40079, "invalid time"),
+
+ /**
+ * invalid card ext
+ */
+ CODE_40080(40080, "invalid card ext"),
+
+ /**
+ * invalid template_id
+ */
+ CODE_40081(40081, "invalid template_id"),
+
+ /**
+ * invalid banner picture size
+ */
+ CODE_40082(40082, "invalid banner picture size"),
+
+ /**
+ * invalid banner url size
+ */
+ CODE_40083(40083, "invalid banner url size"),
+
+ /**
+ * invalid button desc size
+ */
+ CODE_40084(40084, "invalid button desc size"),
+
+ /**
+ * invalid button url size
+ */
+ CODE_40085(40085, "invalid button url size"),
+
+ /**
+ * invalid sharelink logo size
+ */
+ CODE_40086(40086, "invalid sharelink logo size"),
+
+ /**
+ * invalid sharelink desc size
+ */
+ CODE_40087(40087, "invalid sharelink desc size"),
+
+ /**
+ * invalid sharelink title size
+ */
+ CODE_40088(40088, "invalid sharelink title size"),
+
+ /**
+ * invalid platform id
+ */
+ CODE_40089(40089, "invalid platform id"),
+
+ /**
+ * invalid request source (bad client ip)
+ */
+ CODE_40090(40090, "invalid request source (bad client ip)"),
+
+ /**
+ * invalid component ticket
+ */
+ CODE_40091(40091, "invalid component ticket"),
+
+ /**
+ * invalid remark name
+ */
+ CODE_40092(40092, "invalid remark name"),
+
+ /**
+ * not completely ok, err_item will return location_id=-1,check your required_fields in json.
+ */
+ CODE_40093(40093, "not completely ok, err_item will return location_id=-1,check your required_fields in json."),
+
+ /**
+ * invalid component credential
+ */
+ CODE_40094(40094, "invalid component credential"),
+
+ /**
+ * bad source of caller
+ */
+ CODE_40095(40095, "bad source of caller"),
+
+ /**
+ * invalid biztype
+ */
+ CODE_40096(40096, "invalid biztype"),
+
+ /**
+ * 参数错误 invalid args
+ */
+ CODE_40097(40097, "参数错误"),
+
+ /**
+ * invalid poiid
+ */
+ CODE_40098(40098, "invalid poiid"),
+
+ /**
+ * invalid code, this code has consumed.
+ */
+ CODE_40099(40099, "invalid code, this code has consumed."),
+
+ /**
+ * invalid DateInfo, Make Sure OldDateInfoType==NewDateInfoType && NewBeginTime<=OldBeginTime && OldEndTime<= NewEndTime
+ */
+ CODE_40100(40100, "invalid DateInfo, Make Sure OldDateInfoType==NewDateInfoType && NewBeginTime<=OldBeginTime && OldEndTime<= NewEndTime"),
+
+ /**
+ * missing parameter
+ */
+ CODE_40101(40101, "missing parameter"),
+
+ /**
+ * invalid industry id
+ */
+ CODE_40102(40102, "invalid industry id"),
+
+ /**
+ * invalid industry index
+ */
+ CODE_40103(40103, "invalid industry index"),
+
+ /**
+ * invalid category id
+ */
+ CODE_40104(40104, "invalid category id"),
+
+ /**
+ * invalid view type
+ */
+ CODE_40105(40105, "invalid view type"),
+
+ /**
+ * invalid user name
+ */
+ CODE_40106(40106, "invalid user name"),
+
+ /**
+ * invalid card id! 1,card status must verify ok; 2,this card must have location_id
+ */
+ CODE_40107(40107, "invalid card id! 1,card status must verify ok; 2,this card must have location_id"),
+
+ /**
+ * invalid client version
+ */
+ CODE_40108(40108, "invalid client version"),
+
+ /**
+ * too many code size, must <= 100
+ */
+ CODE_40109(40109, "too many code size, must <= 100"),
+
+ /**
+ * have empty code
+ */
+ CODE_40110(40110, "have empty code"),
+
+ /**
+ * have same code
+ */
+ CODE_40111(40111, "have same code"),
+
+ /**
+ * can not set bind openid
+ */
+ CODE_40112(40112, "can not set bind openid"),
+
+ /**
+ * unsupported file type
+ */
+ CODE_40113(40113, "unsupported file type"),
+
+ /**
+ * invalid index value
+ */
+ CODE_40114(40114, "invalid index value"),
+
+ /**
+ * invalid session from
+ */
+ CODE_40115(40115, "invalid session from"),
+
+ /**
+ * invalid code
+ */
+ CODE_40116(40116, "invalid code"),
+
+ /**
+ * 分组名字不合法 invalid button media_id size
+ */
+ CODE_40117(40117, "分组名字不合法"),
+
+ /**
+ * media_id 大小不合法 invalid sub button media_id size
+ */
+ CODE_40118(40118, "media_id 大小不合法"),
+
+ /**
+ * button 类型错误 invalid use button type
+ */
+ CODE_40119(40119, "button 类型错误"),
+
+ /**
+ * 子 button 类型错误 invalid use sub button type
+ */
+ CODE_40120(40120, "子 button 类型错误"),
+
+ /**
+ * 不合法的 media_id 类型 invalid media type in view_limited
+ */
+ CODE_40121(40121, "不合法的 media_id 类型"),
+
+ /**
+ * invalid card quantity
+ */
+ CODE_40122(40122, "invalid card quantity"),
+
+ /**
+ * invalid task_id
+ */
+ CODE_40123(40123, "invalid task_id"),
+
+ /**
+ * too many custom field!
+ */
+ CODE_40124(40124, "too many custom field!"),
+
+ /**
+ * 不合法的 AppID ,请开发者检查 AppID 的正确性,避免异常字符,注意大小写 invalid appsecret
+ */
+ CODE_40125(40125, "不合法的 AppID ,请开发者检查 AppID 的正确性,避免异常字符,注意大小写"),
+
+ /**
+ * invalid text size
+ */
+ CODE_40126(40126, "invalid text size"),
+
+ /**
+ * invalid user-card status! Hint: the card was given to user, but may be deleted or expired or set unavailable !
+ */
+ CODE_40127(40127, "invalid user-card status! Hint: the card was given to user, but may be deleted or expired or set unavailable !"),
+
+ /**
+ * invalid media id! must be uploaded by api(cgi-bin/material/add_material)
+ */
+ CODE_40128(40128, "invalid media id! must be uploaded by api(cgi-bin/material/add_material)"),
+
+ /**
+ * invalid scene
+ */
+ CODE_40129(40129, "invalid scene"),
+
+ /**
+ * invalid openid list size, at least two openid
+ */
+ CODE_40130(40130, "invalid openid list size, at least two openid"),
+
+ /**
+ * out of limit of ticket
+ */
+ CODE_40131(40131, "out of limit of ticket"),
+
+ /**
+ * 微信号不合法 invalid username
+ */
+ CODE_40132(40132, "微信号不合法"),
+
+ /**
+ * invalid encryt data
+ */
+ CODE_40133(40133, "invalid encryt data"),
+
+ /**
+ * invalid not supply bonus, can not change card_id which supply bonus to be not supply
+ */
+ CODE_40135(40135, "invalid not supply bonus, can not change card_id which supply bonus to be not supply"),
+
+ /**
+ * invalid use DepositCodeMode, make sure sku.quantity>DepositCode.quantity
+ */
+ CODE_40136(40136, "invalid use DepositCodeMode, make sure sku.quantity>DepositCode.quantity"),
+
+ /**
+ * 不支持的图片格式 invalid image format
+ */
+ CODE_40137(40137, "不支持的图片格式"),
+
+ /**
+ * emphasis word can not be first neither remark
+ */
+ CODE_40138(40138, "emphasis word can not be first neither remark"),
+
+ /**
+ * invalid sub merchant id
+ */
+ CODE_40139(40139, "invalid sub merchant id"),
+
+ /**
+ * invalid sub merchant status
+ */
+ CODE_40140(40140, "invalid sub merchant status"),
+
+ /**
+ * invalid image url
+ */
+ CODE_40141(40141, "invalid image url"),
+
+ /**
+ * invalid sharecard parameters
+ */
+ CODE_40142(40142, "invalid sharecard parameters"),
+
+ /**
+ * invalid least cost info, should be 0
+ */
+ CODE_40143(40143, "invalid least cost info, should be 0"),
+
+ /**
+ * 1)maybe share_card_list.num or consume_share_self_num too big; 2)maybe card_id_list also has self-card_id;3)maybe card_id_list has many different card_id;4)maybe both consume_share_self_num and share_card_list.num bigger than 0
+ */
+ CODE_40144(40144, "1)maybe share_card_list.num or consume_share_self_num too big; 2)maybe card_id_list also has self-card_id;3)maybe card_id_list has many different card_id;4)maybe both consume_share_self_num and share_card_list.num bigger than 0"),
+
+ /**
+ * invalid update! Can not both set PayCell and CenterCellInfo(include: center_title, center_sub_title, center_url).
+ */
+ CODE_40145(40145, "invalid update! Can not both set PayCell and CenterCellInfo(include: center_title, center_sub_title, center_url)."),
+
+ /**
+ * invalid openid! card may be marked by other user!
+ */
+ CODE_40146(40146, "invalid openid! card may be marked by other user!"),
+
+ /**
+ * invalid consume! Consume time overranging restricts.
+ */
+ CODE_40147(40147, "invalid consume! Consume time overranging restricts."),
+
+ /**
+ * invalid friends card type
+ */
+ CODE_40148(40148, "invalid friends card type"),
+
+ /**
+ * invalid use time limit
+ */
+ CODE_40149(40149, "invalid use time limit"),
+
+ /**
+ * invalid card parameters
+ */
+ CODE_40150(40150, "invalid card parameters"),
+
+ /**
+ * invalid card info, text/pic hit antispam
+ */
+ CODE_40151(40151, "invalid card info, text/pic hit antispam"),
+
+ /**
+ * invalid group id
+ */
+ CODE_40152(40152, "invalid group id"),
+
+ /**
+ * self consume cell for friends card must need verify code
+ */
+ CODE_40153(40153, "self consume cell for friends card must need verify code"),
+
+ /**
+ * invalid voip parameters
+ */
+ CODE_40154(40154, "invalid voip parameters"),
+
+ /**
+ * 请勿添加其他公众号的主页链接 please don't contain other home page url
+ */
+ CODE_40155(40155, "请勿添加其他公众号的主页链接"),
+
+ /**
+ * invalid face recognize parameters
+ */
+ CODE_40156(40156, "invalid face recognize parameters"),
+
+ /**
+ * invalid picture, has no face
+ */
+ CODE_40157(40157, "invalid picture, has no face"),
+
+ /**
+ * invalid use_custom_code, need be false
+ */
+ CODE_40158(40158, "invalid use_custom_code, need be false"),
+
+ /**
+ * invalid length for path, or the data is not json string
+ */
+ CODE_40159(40159, "invalid length for path, or the data is not json string"),
+
+ /**
+ * invalid image file
+ */
+ CODE_40160(40160, "invalid image file"),
+
+ /**
+ * image file not match
+ */
+ CODE_40161(40161, "image file not match"),
+
+ /**
+ * invalid lifespan
+ */
+ CODE_40162(40162, "invalid lifespan"),
+
+ /**
+ * oauth_code已使用 code been used
+ */
+ CODE_40163(40163, "oauth_code已使用"),
+
+ /**
+ * invalid ip, not in whitelist
+ */
+ CODE_40164(40164, "invalid ip, not in whitelist"),
+
+ /**
+ * invalid weapp pagepath
+ */
+ CODE_40165(40165, "invalid weapp pagepath"),
+
+ /**
+ * invalid weapp appid
+ */
+ CODE_40166(40166, "invalid weapp appid"),
+
+ /**
+ * there is no relation with plugin appid
+ */
+ CODE_40167(40167, "there is no relation with plugin appid"),
+
+ /**
+ * unlinked weapp card
+ */
+ CODE_40168(40168, "unlinked weapp card"),
+
+ /**
+ * invalid length for scene, or the data is not json string
+ */
+ CODE_40169(40169, "invalid length for scene, or the data is not json string"),
+
+ /**
+ * args count exceed count limit
+ */
+ CODE_40170(40170, "args count exceed count limit"),
+
+ /**
+ * product id can not empty and the length cannot exceed 32
+ */
+ CODE_40171(40171, "product id can not empty and the length cannot exceed 32"),
+
+ /**
+ * can not have same product id
+ */
+ CODE_40172(40172, "can not have same product id"),
+
+ /**
+ * there is no bind relation
+ */
+ CODE_40173(40173, "there is no bind relation"),
+
+ /**
+ * not card user
+ */
+ CODE_40174(40174, "not card user"),
+
+ /**
+ * invalid material id
+ */
+ CODE_40175(40175, "invalid material id"),
+
+ /**
+ * invalid template id
+ */
+ CODE_40176(40176, "invalid template id"),
+
+ /**
+ * invalid product id
+ */
+ CODE_40177(40177, "invalid product id"),
+
+ /**
+ * invalid sign
+ */
+ CODE_40178(40178, "invalid sign"),
+
+ /**
+ * Function is adjusted, rules are not allowed to add or update
+ */
+ CODE_40179(40179, "Function is adjusted, rules are not allowed to add or update"),
+
+ /**
+ * invalid client tmp token
+ */
+ CODE_40180(40180, "invalid client tmp token"),
+
+ /**
+ * invalid opengid
+ */
+ CODE_40181(40181, "invalid opengid"),
+
+ /**
+ * invalid pack_id
+ */
+ CODE_40182(40182, "invalid pack_id"),
+
+ /**
+ * invalid product_appid, product_appid should bind with wxa_appid
+ */
+ CODE_40183(40183, "invalid product_appid, product_appid should bind with wxa_appid"),
+
+ /**
+ * invalid url path
+ */
+ CODE_40184(40184, "invalid url path"),
+
+ /**
+ * invalid auth_token, or auth_token is expired
+ */
+ CODE_40185(40185, "invalid auth_token, or auth_token is expired"),
+
+ /**
+ * invalid delegate
+ */
+ CODE_40186(40186, "invalid delegate"),
+
+ /**
+ * invalid ip
+ */
+ CODE_40187(40187, "invalid ip"),
+
+ /**
+ * invalid scope
+ */
+ CODE_40188(40188, "invalid scope"),
+
+ /**
+ * invalid width
+ */
+ CODE_40189(40189, "invalid width"),
+
+ /**
+ * invalid delegate time
+ */
+ CODE_40190(40190, "invalid delegate time"),
+
+ /**
+ * invalid pic_url
+ */
+ CODE_40191(40191, "invalid pic_url"),
+
+ /**
+ * invalid author in news
+ */
+ CODE_40192(40192, "invalid author in news"),
+
+ /**
+ * invalid recommend length
+ */
+ CODE_40193(40193, "invalid recommend length"),
+
+ /**
+ * illegal recommend
+ */
+ CODE_40194(40194, "illegal recommend"),
+
+ /**
+ * invalid show_num
+ */
+ CODE_40195(40195, "invalid show_num"),
+
+ /**
+ * invalid smartmsg media_id
+ */
+ CODE_40196(40196, "invalid smartmsg media_id"),
+
+ /**
+ * invalid smartmsg media num
+ */
+ CODE_40197(40197, "invalid smartmsg media num"),
+
+ /**
+ * invalid default msg article size, must be same as show_num
+ */
+ CODE_40198(40198, "invalid default msg article size, must be same as show_num"),
+
+ /**
+ * 运单 ID 不存在,未查到运单 waybill_id not found
+ */
+ CODE_40199(40199, "运单 ID 不存在,未查到运单"),
+
+ /**
+ * invalid account type
+ */
+ CODE_40200(40200, "invalid account type"),
+
+ /**
+ * invalid check url
+ */
+ CODE_40201(40201, "invalid check url"),
+
+ /**
+ * invalid check action
+ */
+ CODE_40202(40202, "invalid check action"),
+
+ /**
+ * invalid check operator
+ */
+ CODE_40203(40203, "invalid check operator"),
+
+ /**
+ * can not delete wash or rumor article
+ */
+ CODE_40204(40204, "can not delete wash or rumor article"),
+
+ /**
+ * invalid check keywords string
+ */
+ CODE_40205(40205, "invalid check keywords string"),
+
+ /**
+ * invalid check begin stamp
+ */
+ CODE_40206(40206, "invalid check begin stamp"),
+
+ /**
+ * invalid check alive seconds
+ */
+ CODE_40207(40207, "invalid check alive seconds"),
+
+ /**
+ * invalid check notify id
+ */
+ CODE_40208(40208, "invalid check notify id"),
+
+ /**
+ * invalid check notify msg
+ */
+ CODE_40209(40209, "invalid check notify msg"),
+
+ /**
+ * pages 中的path参数不存在或为空 invalid check wxa path
+ */
+ CODE_40210(40210, "pages 中的path参数不存在或为空"),
+
+ /**
+ * invalid scope_data
+ */
+ CODE_40211(40211, "invalid scope_data"),
+
+ /**
+ * paegs 当中存在不合法的query,query格式遵循URL标准,即k1=v1&k2=v2 invalid query
+ */
+ CODE_40212(40212, "paegs 当中存在不合法的query,query格式遵循URL标准,即k1=v1&k2=v2"),
+
+ /**
+ * invalid href tag
+ */
+ CODE_40213(40213, "invalid href tag"),
+
+ /**
+ * invalid href text
+ */
+ CODE_40214(40214, "invalid href text"),
+
+ /**
+ * invalid image count
+ */
+ CODE_40215(40215, "invalid image count"),
+
+ /**
+ * invalid desc
+ */
+ CODE_40216(40216, "invalid desc"),
+
+ /**
+ * invalid video count
+ */
+ CODE_40217(40217, "invalid video count"),
+
+ /**
+ * invalid video id
+ */
+ CODE_40218(40218, "invalid video id"),
+
+ /**
+ * pages不存在或者参数为空 pages is empty
+ */
+ CODE_40219(40219, "pages不存在或者参数为空"),
+
+ /**
+ * data_list is empty
+ */
+ CODE_40220(40220, "data_list is empty"),
+
+ /**
+ * invalid Content-Encoding
+ */
+ CODE_40221(40221, "invalid Content-Encoding"),
+
+ /**
+ * invalid request idc domain
+ */
+ CODE_40222(40222, "invalid request idc domain"),
+
+ /**
+ * 缺少 access_token 参数 access_token missing
+ */
+ CODE_41001(41001, "缺少 access_token 参数"),
+
+ /**
+ * 缺少 appid 参数 appid missing
+ */
+ CODE_41002(41002, "缺少 appid 参数"),
+
+ /**
+ * 缺少 refresh_token 参数 refresh_token missing
+ */
+ CODE_41003(41003, "缺少 refresh_token 参数"),
+
+ /**
+ * 缺少 secret 参数 appsecret missing
+ */
+ CODE_41004(41004, "缺少 secret 参数"),
+
+ /**
+ * 缺少多媒体文件数据,传输素材无视频或图片内容 media data missing
+ */
+ CODE_41005(41005, "缺少多媒体文件数据,传输素材无视频或图片内容"),
+
+ /**
+ * 缺少 media_id 参数 media_id missing
+ */
+ CODE_41006(41006, "缺少 media_id 参数"),
+
+ /**
+ * 缺少子菜单数据 sub_menu data missing
+ */
+ CODE_41007(41007, "缺少子菜单数据"),
+
+ /**
+ * 缺少 oauth code missing code
+ */
+ CODE_41008(41008, "缺少 oauth code"),
+
+ /**
+ * 缺少 openid missing openid
+ */
+ CODE_41009(41009, "缺少 openid"),
+
+ /**
+ * 缺失 url 参数 missing url
+ */
+ CODE_41010(41010, "缺失 url 参数"),
+
+ /**
+ * missing required fields! please check document and request json!
+ */
+ CODE_41011(41011, "missing required fields! please check document and request json!"),
+
+ /**
+ * missing card id
+ */
+ CODE_41012(41012, "missing card id"),
+
+ /**
+ * missing code
+ */
+ CODE_41013(41013, "missing code"),
+
+ /**
+ * missing ticket_class
+ */
+ CODE_41014(41014, "missing ticket_class"),
+
+ /**
+ * missing show_time
+ */
+ CODE_41015(41015, "missing show_time"),
+
+ /**
+ * missing screening_room
+ */
+ CODE_41016(41016, "missing screening_room"),
+
+ /**
+ * missing seat_number
+ */
+ CODE_41017(41017, "missing seat_number"),
+
+ /**
+ * missing component_appid
+ */
+ CODE_41018(41018, "missing component_appid"),
+
+ /**
+ * missing platform_secret
+ */
+ CODE_41019(41019, "missing platform_secret"),
+
+ /**
+ * missing platform_ticket
+ */
+ CODE_41020(41020, "missing platform_ticket"),
+
+ /**
+ * missing component_access_token
+ */
+ CODE_41021(41021, "missing component_access_token"),
+
+ /**
+ * missing "display" field
+ */
+ CODE_41024(41024, "missing \"display\" field"),
+
+ /**
+ * poi_list empty
+ */
+ CODE_41025(41025, "poi_list empty"),
+
+ /**
+ * missing image list info, text maybe empty
+ */
+ CODE_41026(41026, "missing image list info, text maybe empty"),
+
+ /**
+ * missing voip call key
+ */
+ CODE_41027(41027, "missing voip call key"),
+
+ /**
+ * invalid form id
+ */
+ CODE_41028(41028, "invalid form id"),
+
+ /**
+ * form id used count reach limit
+ */
+ CODE_41029(41029, "form id used count reach limit"),
+
+ /**
+ * page路径不正确,需要保证在现网版本小程序中存在,与app.json保持一致 invalid page
+ */
+ CODE_41030(41030, "page路径不正确,需要保证在现网版本小程序中存在,与app.json保持一致"),
+
+ /**
+ * the form id have been blocked!
+ */
+ CODE_41031(41031, "the form id have been blocked!"),
+
+ /**
+ * not allow to send message with submitted form id, for punishment
+ */
+ CODE_41032(41032, "not allow to send message with submitted form id, for punishment"),
+
+ /**
+ * 只允许通过api创建的小程序使用 invaid register type
+ */
+ CODE_41033(41033, "只允许通过api创建的小程序使用"),
+
+ /**
+ * not allow to send message with submitted form id, for punishment
+ */
+ CODE_41034(41034, "not allow to send message with submitted form id, for punishment"),
+
+ /**
+ * not allow to send message with prepay id, for punishment
+ */
+ CODE_41035(41035, "not allow to send message with prepay id, for punishment"),
+
+ /**
+ * appid ad cid
+ */
+ CODE_41036(41036, "appid ad cid"),
+
+ /**
+ * appid ad_mch_appid
+ */
+ CODE_41037(41037, "appid ad_mch_appid"),
+
+ /**
+ * appid pos_type
+ */
+ CODE_41038(41038, "appid pos_type"),
+
+ /**
+ * access_token 超时,请检查 access_token 的有效期,请参考基础支持 - 获取 access_token 中,对 access_token 的详细机制说明 access_token expired
+ */
+ CODE_42001(42001, "access_token 超时,请检查 access_token 的有效期,请参考基础支持 - 获取 access_token 中,对 access_token 的详细机制说明"),
+
+ /**
+ * refresh_token 超时 refresh_token expired
+ */
+ CODE_42002(42002, "refresh_token 超时"),
+
+ /**
+ * oauth_code 超时 code expired
+ */
+ CODE_42003(42003, "oauth_code 超时"),
+
+ /**
+ * plugin token expired
+ */
+ CODE_42004(42004, "plugin token expired"),
+
+ /**
+ * api usage expired
+ */
+ CODE_42005(42005, "api usage expired"),
+
+ /**
+ * component_access_token expired
+ */
+ CODE_42006(42006, "component_access_token expired"),
+
+ /**
+ * 用户修改微信密码, accesstoken 和 refreshtoken 失效,需要重新授权 access_token and refresh_token exception
+ */
+ CODE_42007(42007, "用户修改微信密码, accesstoken 和 refreshtoken 失效,需要重新授权"),
+
+ /**
+ * voip call key expired
+ */
+ CODE_42008(42008, "voip call key expired"),
+
+ /**
+ * client tmp token expired
+ */
+ CODE_42009(42009, "client tmp token expired"),
+
+ /**
+ * 需要 GET 请求 require GET method
+ */
+ CODE_43001(43001, "需要 GET 请求"),
+
+ /**
+ * 需要 POST 请求 require POST method
+ */
+ CODE_43002(43002, "需要 POST 请求"),
+
+ /**
+ * 需要 HTTPS 请求 require https
+ */
+ CODE_43003(43003, "需要 HTTPS 请求"),
+
+ /**
+ * 需要接收者关注 require subscribe
+ */
+ CODE_43004(43004, "需要接收者关注"),
+
+ /**
+ * 需要好友关系 require friend relations
+ */
+ CODE_43005(43005, "需要好友关系"),
+
+ /**
+ * require not block
+ */
+ CODE_43006(43006, "require not block"),
+
+ /**
+ * require bizuser authorize
+ */
+ CODE_43007(43007, "require bizuser authorize"),
+
+ /**
+ * require biz pay auth
+ */
+ CODE_43008(43008, "require biz pay auth"),
+
+ /**
+ * can not use custom code, need authorize
+ */
+ CODE_43009(43009, "can not use custom code, need authorize"),
+
+ /**
+ * can not use balance, need authorize
+ */
+ CODE_43010(43010, "can not use balance, need authorize"),
+
+ /**
+ * can not use bonus, need authorize
+ */
+ CODE_43011(43011, "can not use bonus, need authorize"),
+
+ /**
+ * can not use custom url, need authorize
+ */
+ CODE_43012(43012, "can not use custom url, need authorize"),
+
+ /**
+ * can not use shake card, need authorize
+ */
+ CODE_43013(43013, "can not use shake card, need authorize"),
+
+ /**
+ * require check agent
+ */
+ CODE_43014(43014, "require check agent"),
+
+ /**
+ * require authorize by wechat team to use this function!
+ */
+ CODE_43015(43015, "require authorize by wechat team to use this function!"),
+
+ /**
+ * 小程序未认证 require verify
+ */
+ CODE_43016(43016, "小程序未认证"),
+
+ /**
+ * require location id!
+ */
+ CODE_43017(43017, "require location id!"),
+
+ /**
+ * code has no been mark!
+ */
+ CODE_43018(43018, "code has no been mark!"),
+
+ /**
+ * 需要将接收者从黑名单中移除 require remove blacklist
+ */
+ CODE_43019(43019, "需要将接收者从黑名单中移除"),
+
+ /**
+ * change template too frequently
+ */
+ CODE_43100(43100, "change template too frequently"),
+
+ /**
+ * 用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系 user refuse to accept the msg
+ */
+ CODE_43101(43101, "用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系"),
+
+ /**
+ * the tempalte is not subscriptiontype
+ */
+ CODE_43102(43102, "the tempalte is not subscriptiontype"),
+
+ /**
+ * the api only can cancel the subscription
+ */
+ CODE_43103(43103, "the api only can cancel the subscription"),
+
+ /**
+ * this appid does not have permission
+ */
+ CODE_43104(43104, "this appid does not have permission"),
+
+ /**
+ * news has no binding relation with template_id
+ */
+ CODE_43105(43105, "news has no binding relation with template_id"),
+
+ /**
+ * not allow to add template, for punishment
+ */
+ CODE_43106(43106, "not allow to add template, for punishment"),
+
+ /**
+ * 多媒体文件为空 empty media data
+ */
+ CODE_44001(44001, "多媒体文件为空"),
+
+ /**
+ * POST 的数据包为空 empty post data
+ */
+ CODE_44002(44002, "POST 的数据包为空"),
+
+ /**
+ * 图文消息内容为空 empty news data
+ */
+ CODE_44003(44003, "图文消息内容为空"),
+
+ /**
+ * 文本消息内容为空 empty content
+ */
+ CODE_44004(44004, "文本消息内容为空"),
+
+ /**
+ * 空白的列表 empty list size
+ */
+ CODE_44005(44005, "空白的列表"),
+
+ /**
+ * empty file data
+ */
+ CODE_44006(44006, "empty file data"),
+
+ /**
+ * repeated msg id
+ */
+ CODE_44007(44007, "repeated msg id"),
+
+ /**
+ * image url size out of limit
+ */
+ CODE_44997(44997, "image url size out of limit"),
+
+ /**
+ * keyword string media size out of limit
+ */
+ CODE_44998(44998, "keyword string media size out of limit"),
+
+ /**
+ * keywords list size out of limit
+ */
+ CODE_44999(44999, "keywords list size out of limit"),
+
+ /**
+ * msg_id size out of limit
+ */
+ CODE_45000(45000, "msg_id size out of limit"),
+
+ /**
+ * 多媒体文件大小超过限制 media size out of limit
+ */
+ CODE_45001(45001, "多媒体文件大小超过限制"),
+
+ /**
+ * 消息内容超过限制 content size out of limit
+ */
+ CODE_45002(45002, "消息内容超过限制"),
+
+ /**
+ * 标题字段超过限制 title size out of limit
+ */
+ CODE_45003(45003, "标题字段超过限制"),
+
+ /**
+ * 描述字段超过限制 description size out of limit
+ */
+ CODE_45004(45004, "描述字段超过限制"),
+
+ /**
+ * 链接字段超过限制 url size out of limit
+ */
+ CODE_45005(45005, "链接字段超过限制"),
+
+ /**
+ * 图片链接字段超过限制 picurl size out of limit
+ */
+ CODE_45006(45006, "图片链接字段超过限制"),
+
+ /**
+ * 语音播放时间超过限制 playtime out of limit
+ */
+ CODE_45007(45007, "语音播放时间超过限制"),
+
+ /**
+ * 图文消息超过限制 article size out of limit
+ */
+ CODE_45008(45008, "图文消息超过限制"),
+
+ /**
+ * 接口调用超过限制 reach max api daily quota limit
+ */
+ CODE_45009(45009, "接口调用超过限制"),
+
+ /**
+ * 创建菜单个数超过限制 create menu limit
+ */
+ CODE_45010(45010, "创建菜单个数超过限制"),
+
+ /**
+ * API 调用太频繁,请稍候再试 api minute-quota reach limit, must slower, retry next minute
+ */
+ CODE_45011(45011, "API 调用太频繁,请稍候再试"),
+
+ /**
+ * 模板大小超过限制 template size out of limit
+ */
+ CODE_45012(45012, "模板大小超过限制"),
+
+ /**
+ * too many template args
+ */
+ CODE_45013(45013, "too many template args"),
+
+ /**
+ * template message size out of limit
+ */
+ CODE_45014(45014, "template message size out of limit"),
+
+ /**
+ * 回复时间超过限制 response out of time limit or subscription is canceled
+ */
+ CODE_45015(45015, "回复时间超过限制"),
+
+ /**
+ * 系统分组,不允许修改 can't modify sys group
+ */
+ CODE_45016(45016, "系统分组,不允许修改"),
+
+ /**
+ * 分组名字过长 can't set group name too long sys group
+ */
+ CODE_45017(45017, "分组名字过长"),
+
+ /**
+ * 分组数量超过上限 too many group now, no need to add new
+ */
+ CODE_45018(45018, "分组数量超过上限"),
+
+ /**
+ * too many openid, please input less
+ */
+ CODE_45019(45019, "too many openid, please input less"),
+
+ /**
+ * too many image, please input less
+ */
+ CODE_45020(45020, "too many image, please input less"),
+
+ /**
+ * some argument may be out of length limit! please check document and request json!
+ */
+ CODE_45021(45021, "some argument may be out of length limit! please check document and request json!"),
+
+ /**
+ * bonus is out of limit
+ */
+ CODE_45022(45022, "bonus is out of limit"),
+
+ /**
+ * balance is out of limit
+ */
+ CODE_45023(45023, "balance is out of limit"),
+
+ /**
+ * rank template number is out of limit
+ */
+ CODE_45024(45024, "rank template number is out of limit"),
+
+ /**
+ * poiid count is out of limit
+ */
+ CODE_45025(45025, "poiid count is out of limit"),
+
+ /**
+ * template num exceeds limit
+ */
+ CODE_45026(45026, "template num exceeds limit"),
+
+ /**
+ * template conflict with industry
+ */
+ CODE_45027(45027, "template conflict with industry"),
+
+ /**
+ * has no masssend quota
+ */
+ CODE_45028(45028, "has no masssend quota"),
+
+ /**
+ * qrcode count out of limit
+ */
+ CODE_45029(45029, "qrcode count out of limit"),
+
+ /**
+ * limit cardid, not support this function
+ */
+ CODE_45030(45030, "limit cardid, not support this function"),
+
+ /**
+ * stock is out of limit
+ */
+ CODE_45031(45031, "stock is out of limit"),
+
+ /**
+ * not inner ip for special acct in white-list
+ */
+ CODE_45032(45032, "not inner ip for special acct in white-list"),
+
+ /**
+ * user get card num is out of get_limit
+ */
+ CODE_45033(45033, "user get card num is out of get_limit"),
+
+ /**
+ * media file count is out of limit
+ */
+ CODE_45034(45034, "media file count is out of limit"),
+
+ /**
+ * access clientip is not registered, not in ip-white-list
+ */
+ CODE_45035(45035, "access clientip is not registered, not in ip-white-list"),
+
+ /**
+ * User receive announcement limit
+ */
+ CODE_45036(45036, "User receive announcement limit"),
+
+ /**
+ * user out of time limit or never talked in tempsession
+ */
+ CODE_45037(45037, "user out of time limit or never talked in tempsession"),
+
+ /**
+ * user subscribed, cannot use tempsession api
+ */
+ CODE_45038(45038, "user subscribed, cannot use tempsession api"),
+
+ /**
+ * card_list_size out of limit
+ */
+ CODE_45039(45039, "card_list_size out of limit"),
+
+ /**
+ * reach max monthly quota limit
+ */
+ CODE_45040(45040, "reach max monthly quota limit"),
+
+ /**
+ * this card reach total sku quantity limit!
+ */
+ CODE_45041(45041, "this card reach total sku quantity limit!"),
+
+ /**
+ * limit card type, this card type can NOT create by sub merchant
+ */
+ CODE_45042(45042, "limit card type, this card type can NOT create by sub merchant"),
+
+ /**
+ * can not set share_friends=true because has no Abstract Or Text_Img_List has no img Or image url not valid
+ */
+ CODE_45043(45043, "can not set share_friends=true because has no Abstract Or Text_Img_List has no img Or image url not valid"),
+
+ /**
+ * icon url size in abstract is out of limit
+ */
+ CODE_45044(45044, "icon url size in abstract is out of limit"),
+
+ /**
+ * unauthorized friends card, please contact administrator
+ */
+ CODE_45045(45045, "unauthorized friends card, please contact administrator"),
+
+ /**
+ * operate field conflict, CenterCell, PayCell, SelfConsumeCell conflict
+ */
+ CODE_45046(45046, "operate field conflict, CenterCell, PayCell, SelfConsumeCell conflict"),
+
+ /**
+ * 客服接口下行条数超过上限 out of response count limit
+ */
+ CODE_45047(45047, "客服接口下行条数超过上限"),
+
+ /**
+ * menu use invalid type
+ */
+ CODE_45048(45048, "menu use invalid type"),
+
+ /**
+ * ivr use invalid type
+ */
+ CODE_45049(45049, "ivr use invalid type"),
+
+ /**
+ * custom msg use invalid type
+ */
+ CODE_45050(45050, "custom msg use invalid type"),
+
+ /**
+ * template msg use invalid link
+ */
+ CODE_45051(45051, "template msg use invalid link"),
+
+ /**
+ * masssend msg use invalid type
+ */
+ CODE_45052(45052, "masssend msg use invalid type"),
+
+ /**
+ * exceed consume verify code size
+ */
+ CODE_45053(45053, "exceed consume verify code size"),
+
+ /**
+ * below consume verify code size
+ */
+ CODE_45054(45054, "below consume verify code size"),
+
+ /**
+ * the code is not in consume verify code charset
+ */
+ CODE_45055(45055, "the code is not in consume verify code charset"),
+
+ /**
+ * too many tag now, no need to add new
+ */
+ CODE_45056(45056, "too many tag now, no need to add new"),
+
+ /**
+ * can't delete the tag that has too many fans
+ */
+ CODE_45057(45057, "can't delete the tag that has too many fans"),
+
+ /**
+ * can't modify sys tag
+ */
+ CODE_45058(45058, "can't modify sys tag"),
+
+ /**
+ * can not tagging one user too much
+ */
+ CODE_45059(45059, "can not tagging one user too much"),
+
+ /**
+ * media is applied in ivr or menu, can not be deleted
+ */
+ CODE_45060(45060, "media is applied in ivr or menu, can not be deleted"),
+
+ /**
+ * maybe the update frequency is too often, please try again
+ */
+ CODE_45061(45061, "maybe the update frequency is too often, please try again"),
+
+ /**
+ * has agreement ad. please use mp.weixin.qq.com
+ */
+ CODE_45062(45062, "has agreement ad. please use mp.weixin.qq.com"),
+
+ /**
+ * accesstoken is not xiaochengxu
+ */
+ CODE_45063(45063, "accesstoken is not xiaochengxu"),
+
+ /**
+ * 创建菜单包含未关联的小程序 no permission to use weapp in menu
+ */
+ CODE_45064(45064, "创建菜单包含未关联的小程序"),
+
+ /**
+ * 相同 clientmsgid 已存在群发记录,返回数据中带有已存在的群发任务的 msgid clientmsgid exist
+ */
+ CODE_45065(45065, "相同 clientmsgid 已存在群发记录,返回数据中带有已存在的群发任务的 msgid"),
+
+ /**
+ * 相同 clientmsgid 重试速度过快,请间隔1分钟重试 same clientmsgid retry too fast
+ */
+ CODE_45066(45066, "相同 clientmsgid 重试速度过快,请间隔1分钟重试"),
+
+ /**
+ * clientmsgid 长度超过限制 clientmsgid size out of limit
+ */
+ CODE_45067(45067, "clientmsgid 长度超过限制"),
+
+ /**
+ * file size out of limit
+ */
+ CODE_45068(45068, "file size out of limit"),
+
+ /**
+ * product list size out of limit
+ */
+ CODE_45069(45069, "product list size out of limit"),
+
+ /**
+ * the business account have been created
+ */
+ CODE_45070(45070, "the business account have been created"),
+
+ /**
+ * business account not found
+ */
+ CODE_45071(45071, "business account not found"),
+
+ /**
+ * command字段取值不对 invalid command
+ */
+ CODE_45072(45072, "command字段取值不对"),
+
+ /**
+ * not inner vip for sns in white list
+ */
+ CODE_45073(45073, "not inner vip for sns in white list"),
+
+ /**
+ * material list size out of limit, you should delete the useless material
+ */
+ CODE_45074(45074, "material list size out of limit, you should delete the useless material"),
+
+ /**
+ * invalid keyword id
+ */
+ CODE_45075(45075, "invalid keyword id"),
+
+ /**
+ * invalid count
+ */
+ CODE_45076(45076, "invalid count"),
+
+ /**
+ * number of business account reach limit
+ */
+ CODE_45077(45077, "number of business account reach limit"),
+
+ /**
+ * nickname is illegal!
+ */
+ CODE_45078(45078, "nickname is illegal!"),
+
+ /**
+ * nickname is forbidden!(matched forbidden keyword)
+ */
+ CODE_45079(45079, "nickname is forbidden!(matched forbidden keyword)"),
+
+ /**
+ * 下发输入状态,需要之前30秒内跟用户有过消息交互 need sending message to user, or recving message from user in the last 30 seconds before typing
+ */
+ CODE_45080(45080, "下发输入状态,需要之前30秒内跟用户有过消息交互"),
+
+ /**
+ * 已经在输入状态,不可重复下发 you are already typing
+ */
+ CODE_45081(45081, "已经在输入状态,不可重复下发"),
+
+ /**
+ * need icp license for the url domain
+ */
+ CODE_45082(45082, "need icp license for the url domain"),
+
+ /**
+ * the speed out of range
+ */
+ CODE_45083(45083, "the speed out of range"),
+
+ /**
+ * No speed message
+ */
+ CODE_45084(45084, "No speed message"),
+
+ /**
+ * speed server err
+ */
+ CODE_45085(45085, "speed server err"),
+
+ /**
+ * invalid attrbute 'data-miniprogram-appid'
+ */
+ CODE_45086(45086, "invalid attrbute 'data-miniprogram-appid'"),
+
+ /**
+ * customer service message from this account have been blocked!
+ */
+ CODE_45087(45087, "customer service message from this account have been blocked!"),
+
+ /**
+ * action size out of limit
+ */
+ CODE_45088(45088, "action size out of limit"),
+
+ /**
+ * expired
+ */
+ CODE_45089(45089, "expired"),
+
+ /**
+ * invalid group msg ticket
+ */
+ CODE_45090(45090, "invalid group msg ticket"),
+
+ /**
+ * account_name is illegal!
+ */
+ CODE_45091(45091, "account_name is illegal!"),
+
+ /**
+ * no voice data
+ */
+ CODE_45092(45092, "no voice data"),
+
+ /**
+ * no quota to send msg
+ */
+ CODE_45093(45093, "no quota to send msg"),
+
+ /**
+ * not allow to send custom message when user enter session, for punishment
+ */
+ CODE_45094(45094, "not allow to send custom message when user enter session, for punishment"),
+
+ /**
+ * not allow to modify stock for the advertisement batch
+ */
+ CODE_45095(45095, "not allow to modify stock for the advertisement batch"),
+
+ /**
+ * invalid qrcode
+ */
+ CODE_45096(45096, "invalid qrcode"),
+
+ /**
+ * invalid qrcode prefix
+ */
+ CODE_45097(45097, "invalid qrcode prefix"),
+
+ /**
+ * msgmenu list size is out of limit
+ */
+ CODE_45098(45098, "msgmenu list size is out of limit"),
+
+ /**
+ * msgmenu item content size is out of limit
+ */
+ CODE_45099(45099, "msgmenu item content size is out of limit"),
+
+ /**
+ * invalid size of keyword_id_list
+ */
+ CODE_45100(45100, "invalid size of keyword_id_list"),
+
+ /**
+ * hit upload limit
+ */
+ CODE_45101(45101, "hit upload limit"),
+
+ /**
+ * this api have been blocked temporarily.
+ */
+ CODE_45102(45102, "this api have been blocked temporarily."),
+
+ /**
+ * This API has been unsupported
+ */
+ CODE_45103(45103, "This API has been unsupported"),
+
+ /**
+ * reach max domain quota limit
+ */
+ CODE_45104(45104, "reach max domain quota limit"),
+
+ /**
+ * the consume verify code not found
+ */
+ CODE_45154(45154, "the consume verify code not found"),
+
+ /**
+ * the consume verify code is existed
+ */
+ CODE_45155(45155, "the consume verify code is existed"),
+
+ /**
+ * the consume verify code's length not invalid
+ */
+ CODE_45156(45156, "the consume verify code's length not invalid"),
+
+ /**
+ * invalid tag name
+ */
+ CODE_45157(45157, "invalid tag name"),
+
+ /**
+ * tag name too long
+ */
+ CODE_45158(45158, "tag name too long"),
+
+ /**
+ * invalid tag id
+ */
+ CODE_45159(45159, "invalid tag id"),
+
+ /**
+ * invalid category to create card
+ */
+ CODE_45160(45160, "invalid category to create card"),
+
+ /**
+ * this video id must be generated by calling upload api
+ */
+ CODE_45161(45161, "this video id must be generated by calling upload api"),
+
+ /**
+ * invalid type
+ */
+ CODE_45162(45162, "invalid type"),
+
+ /**
+ * invalid sort_method
+ */
+ CODE_45163(45163, "invalid sort_method"),
+
+ /**
+ * invalid offset
+ */
+ CODE_45164(45164, "invalid offset"),
+
+ /**
+ * invalid limit
+ */
+ CODE_45165(45165, "invalid limit"),
+
+ /**
+ * invalid content
+ */
+ CODE_45166(45166, "invalid content"),
+
+ /**
+ * invalid voip call key
+ */
+ CODE_45167(45167, "invalid voip call key"),
+
+ /**
+ * keyword in blacklist
+ */
+ CODE_45168(45168, "keyword in blacklist"),
+
+ /**
+ * part or whole of the requests from the very app is temporary blocked by supervisor
+ */
+ CODE_45501(45501, "part or whole of the requests from the very app is temporary blocked by supervisor"),
+
+ /**
+ * 不存在媒体数据,media_id 不存在 media data no exist
+ */
+ CODE_46001(46001, "不存在媒体数据,media_id 不存在"),
+
+ /**
+ * 不存在的菜单版本 menu version no exist
+ */
+ CODE_46002(46002, "不存在的菜单版本"),
+
+ /**
+ * 不存在的菜单数据 menu no exist
+ */
+ CODE_46003(46003, "不存在的菜单数据"),
+
+ /**
+ * 不存在的用户 user no exist
+ */
+ CODE_46004(46004, "不存在的用户"),
+
+ /**
+ * poi no exist
+ */
+ CODE_46005(46005, "poi no exist"),
+
+ /**
+ * voip file not exist
+ */
+ CODE_46006(46006, "voip file not exist"),
+
+ /**
+ * file being transcoded, please try later
+ */
+ CODE_46007(46007, "file being transcoded, please try later"),
+
+ /**
+ * result id not exist
+ */
+ CODE_46008(46008, "result id not exist"),
+
+ /**
+ * there is no user data
+ */
+ CODE_46009(46009, "there is no user data"),
+
+ /**
+ * this api have been not supported since 2020-01-11 00:00:00, please use new api(subscribeMessage)!
+ */
+ CODE_46101(46101, "this api have been not supported since 2020-01-11 00:00:00, please use new api(subscribeMessage)!"),
+
+ /**
+ * 解析 JSON/XML 内容错误 data format error
+ */
+ CODE_47001(47001, "解析 JSON/XML 内容错误"),
+
+ /**
+ * data format error, do NOT use json unicode encode (\\uxxxx\\uxxxx), please use utf8 encoded text!
+ */
+ CODE_47002(47002, "data format error, do NOT use json unicode encode (\\uxxxx\\uxxxx), please use utf8 encoded text!"),
+
+ /**
+ * 模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错 argument invalid!
+ */
+ CODE_47003(47003, "模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错"),
+
+ /**
+ * 每次提交的页面数超过1000(备注:每次提交页面数应小于或等于1000) submit pages count more than each quota
+ */
+ CODE_47004(47004, "每次提交的页面数超过1000(备注:每次提交页面数应小于或等于1000)"),
+
+ /**
+ * tabbar no exist
+ */
+ CODE_47005(47005, "tabbar no exist"),
+
+ /**
+ * 当天提交页面数达到了配额上限,请明天再试 submit pages count reach daily limit, please try tomorrow
+ */
+ CODE_47006(47006, "当天提交页面数达到了配额上限,请明天再试"),
+
+ /**
+ * 搜索结果总数超过了1000条 search results count more than limit
+ */
+ CODE_47101(47101, "搜索结果总数超过了1000条"),
+
+ /**
+ * next_page_info参数错误 next_page_info error
+ */
+ CODE_47102(47102, "next_page_info参数错误"),
+
+ /**
+ * 参数 activity_id 错误 activity_id error
+ */
+ CODE_47501(47501, "参数 activity_id 错误"),
+
+ /**
+ * 参数 target_state 错误 target_state error
+ */
+ CODE_47502(47502, "参数 target_state 错误"),
+
+ /**
+ * 参数 version_type 错误 version_type error
+ */
+ CODE_47503(47503, "参数 version_type 错误"),
+
+ /**
+ * activity_id activity_id expired time
+ */
+ CODE_47504(47504, "activity_id"),
+
+ /**
+ * api 功能未授权,请确认公众号已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限 api unauthorized
+ */
+ CODE_48001(48001, "api 功能未授权,请确认公众号已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限"),
+
+ /**
+ * 粉丝拒收消息(粉丝在公众号选项中,关闭了 “ 接收消息 ” ) user block receive message
+ */
+ CODE_48002(48002, "粉丝拒收消息(粉丝在公众号选项中,关闭了 “ 接收消息 ” )"),
+
+ /**
+ * user not agree mass-send protocol
+ */
+ CODE_48003(48003, "user not agree mass-send protocol"),
+
+ /**
+ * api 接口被封禁,请登录 mp.weixin.qq.com 查看详情 api forbidden for irregularities, view detail on mp.weixin.qq.com
+ */
+ CODE_48004(48004, "api 接口被封禁,请登录 mp.weixin.qq.com 查看详情"),
+
+ /**
+ * api 禁止删除被自动回复和自定义菜单引用的素材 forbid to delete material used by auto-reply or menu
+ */
+ CODE_48005(48005, "api 禁止删除被自动回复和自定义菜单引用的素材"),
+
+ /**
+ * api 禁止清零调用次数,因为清零次数达到上限 forbid to clear quota because of reaching the limit
+ */
+ CODE_48006(48006, "api 禁止清零调用次数,因为清零次数达到上限"),
+
+ /**
+ * forbid to use other's voip call key
+ */
+ CODE_48007(48007, "forbid to use other's voip call key"),
+
+ /**
+ * 没有该类型消息的发送权限 no permission for this msgtype
+ */
+ CODE_48008(48008, "没有该类型消息的发送权限"),
+
+ /**
+ * this api is expired
+ */
+ CODE_48009(48009, "this api is expired"),
+
+ /**
+ * forbid to modify the material, please see more information on mp.weixin.qq.com
+ */
+ CODE_48010(48010, "forbid to modify the material, please see more information on mp.weixin.qq.com"),
+
+ /**
+ * disabled template id
+ */
+ CODE_48011(48011, "disabled template id"),
+
+ /**
+ * invalid token
+ */
+ CODE_48012(48012, "invalid token"),
+
+ /**
+ * 该视频非新接口上传,不能用于视频消息群发
+ */
+ CODE_48013(48013, "该视频非新接口上传,不能用于视频消息群发"),
+
+ /**
+ * 该视频审核状态异常,请检查后重试
+ */
+ CODE_48014(48014, "该视频审核状态异常,请检查后重试"),
+
+ /**
+ * 该账号无留言功能权限
+ */
+ CODE_48015(48015, "该账号无留言功能权限"),
+
+ /**
+ * 该账号不满足智能配置"观看更多"视频条件
+ */
+ CODE_48016(48016, "该账号不满足智能配置\"观看更多\"视频条件"),
+
+ /**
+ * not same appid with appid of access_token
+ */
+ CODE_49001(49001, "not same appid with appid of access_token"),
+
+ /**
+ * empty openid or transid
+ */
+ CODE_49002(49002, "empty openid or transid"),
+
+ /**
+ * not match openid with appid
+ */
+ CODE_49003(49003, "not match openid with appid"),
+
+ /**
+ * not match signature
+ */
+ CODE_49004(49004, "not match signature"),
+
+ /**
+ * not existed transid
+ */
+ CODE_49005(49005, "not existed transid"),
+
+ /**
+ * missing arg two_dim_code
+ */
+ CODE_49006(49006, "missing arg two_dim_code"),
+
+ /**
+ * invalid two_dim_code
+ */
+ CODE_49007(49007, "invalid two_dim_code"),
+
+ /**
+ * invalid qrcode
+ */
+ CODE_49008(49008, "invalid qrcode"),
+
+ /**
+ * missing arg qrcode
+ */
+ CODE_49009(49009, "missing arg qrcode"),
+
+ /**
+ * invalid partner id
+ */
+ CODE_49010(49010, "invalid partner id"),
+
+ /**
+ * not existed feedbackid
+ */
+ CODE_49300(49300, "not existed feedbackid"),
+
+ /**
+ * feedback exist
+ */
+ CODE_49301(49301, "feedback exist"),
+
+ /**
+ * feedback status already changed
+ */
+ CODE_49302(49302, "feedback status already changed"),
+
+ /**
+ * 用户未授权该 api api unauthorized or user unauthorized
+ */
+ CODE_50001(50001, "用户未授权该 api"),
+
+ /**
+ * 用户受限,可能是用户帐号被冻结或注销 user limited
+ */
+ CODE_50002(50002, "用户受限,可能是用户帐号被冻结或注销"),
+
+ /**
+ * user unexpected, maybe not in white list
+ */
+ CODE_50003(50003, "user unexpected, maybe not in white list"),
+
+ /**
+ * user not allow to use accesstoken, maybe for punishment
+ */
+ CODE_50004(50004, "user not allow to use accesstoken, maybe for punishment"),
+
+ /**
+ * 用户未关注公众号 user is unsubscribed
+ */
+ CODE_50005(50005, "用户未关注公众号"),
+
+ /**
+ * user has switched off friends authorization
+ */
+ CODE_50006(50006, "user has switched off friends authorization"),
+
+ /**
+ * enterprise father account not exist
+ */
+ CODE_51000(51000, "enterprise father account not exist"),
+
+ /**
+ * enterprise child account not belong to the father
+ */
+ CODE_51001(51001, "enterprise child account not belong to the father"),
+
+ /**
+ * enterprise verify message not correct
+ */
+ CODE_51002(51002, "enterprise verify message not correct"),
+
+ /**
+ * invalid enterprise child list size
+ */
+ CODE_51003(51003, "invalid enterprise child list size"),
+
+ /**
+ * not a enterprise father account
+ */
+ CODE_51004(51004, "not a enterprise father account"),
+
+ /**
+ * not a enterprise child account
+ */
+ CODE_51005(51005, "not a enterprise child account"),
+
+ /**
+ * invalid nick name
+ */
+ CODE_51006(51006, "invalid nick name"),
+
+ /**
+ * not a enterprise account
+ */
+ CODE_51007(51007, "not a enterprise account"),
+
+ /**
+ * invalid email
+ */
+ CODE_51008(51008, "invalid email"),
+
+ /**
+ * invalid pwd
+ */
+ CODE_51009(51009, "invalid pwd"),
+
+ /**
+ * repeated email
+ */
+ CODE_51010(51010, "repeated email"),
+
+ /**
+ * access deny
+ */
+ CODE_51011(51011, "access deny"),
+
+ /**
+ * need verify code
+ */
+ CODE_51012(51012, "need verify code"),
+
+ /**
+ * wrong verify code
+ */
+ CODE_51013(51013, "wrong verify code"),
+
+ /**
+ * need modify pwd
+ */
+ CODE_51014(51014, "need modify pwd"),
+
+ /**
+ * user not exist
+ */
+ CODE_51015(51015, "user not exist"),
+
+ /**
+ * tv info not exist
+ */
+ CODE_51020(51020, "tv info not exist"),
+
+ /**
+ * stamp crossed
+ */
+ CODE_51021(51021, "stamp crossed"),
+
+ /**
+ * invalid stamp range
+ */
+ CODE_51022(51022, "invalid stamp range"),
+
+ /**
+ * stamp not match date
+ */
+ CODE_51023(51023, "stamp not match date"),
+
+ /**
+ * empty program name
+ */
+ CODE_51024(51024, "empty program name"),
+
+ /**
+ * empty action url
+ */
+ CODE_51025(51025, "empty action url"),
+
+ /**
+ * program name size out of limit
+ */
+ CODE_51026(51026, "program name size out of limit"),
+
+ /**
+ * action url size out of limit
+ */
+ CODE_51027(51027, "action url size out of limit"),
+
+ /**
+ * invalid program name
+ */
+ CODE_51028(51028, "invalid program name"),
+
+ /**
+ * invalid action url
+ */
+ CODE_51029(51029, "invalid action url"),
+
+ /**
+ * invalid action id
+ */
+ CODE_51030(51030, "invalid action id"),
+
+ /**
+ * invalid action offset
+ */
+ CODE_51031(51031, "invalid action offset"),
+
+ /**
+ * empty action title
+ */
+ CODE_51032(51032, "empty action title"),
+
+ /**
+ * action title size out of limit
+ */
+ CODE_51033(51033, "action title size out of limit"),
+
+ /**
+ * empty action icon url
+ */
+ CODE_51034(51034, "empty action icon url"),
+
+ /**
+ * action icon url out of limit
+ */
+ CODE_51035(51035, "action icon url out of limit"),
+
+ /**
+ * pic is not from cdn
+ */
+ CODE_52000(52000, "pic is not from cdn"),
+
+ /**
+ * wechat price is not less than origin price
+ */
+ CODE_52001(52001, "wechat price is not less than origin price"),
+
+ /**
+ * category/sku is wrong
+ */
+ CODE_52002(52002, "category/sku is wrong"),
+
+ /**
+ * product id not existed
+ */
+ CODE_52003(52003, "product id not existed"),
+
+ /**
+ * category id is not exist, or doesn't has sub category
+ */
+ CODE_52004(52004, "category id is not exist, or doesn't has sub category"),
+
+ /**
+ * quantity is zero
+ */
+ CODE_52005(52005, "quantity is zero"),
+
+ /**
+ * area code is invalid
+ */
+ CODE_52006(52006, "area code is invalid"),
+
+ /**
+ * express template param is error
+ */
+ CODE_52007(52007, "express template param is error"),
+
+ /**
+ * express template id is not existed
+ */
+ CODE_52008(52008, "express template id is not existed"),
+
+ /**
+ * group name is empty
+ */
+ CODE_52009(52009, "group name is empty"),
+
+ /**
+ * group id is not existed
+ */
+ CODE_52010(52010, "group id is not existed"),
+
+ /**
+ * mod_action is invalid
+ */
+ CODE_52011(52011, "mod_action is invalid"),
+
+ /**
+ * shelf components count is greater than 20
+ */
+ CODE_52012(52012, "shelf components count is greater than 20"),
+
+ /**
+ * shelf component is empty
+ */
+ CODE_52013(52013, "shelf component is empty"),
+
+ /**
+ * shelf id is not existed
+ */
+ CODE_52014(52014, "shelf id is not existed"),
+
+ /**
+ * order id is not existed
+ */
+ CODE_52015(52015, "order id is not existed"),
+
+ /**
+ * order filter param is invalid
+ */
+ CODE_52016(52016, "order filter param is invalid"),
+
+ /**
+ * order express param is invalid
+ */
+ CODE_52017(52017, "order express param is invalid"),
+
+ /**
+ * order delivery param is invalid
+ */
+ CODE_52018(52018, "order delivery param is invalid"),
+
+ /**
+ * brand name empty
+ */
+ CODE_52019(52019, "brand name empty"),
+
+ /**
+ * principal limit exceed
+ */
+ CODE_53000(53000, "principal limit exceed"),
+
+ /**
+ * principal in black list
+ */
+ CODE_53001(53001, "principal in black list"),
+
+ /**
+ * mobile limit exceed
+ */
+ CODE_53002(53002, "mobile limit exceed"),
+
+ /**
+ * idcard limit exceed
+ */
+ CODE_53003(53003, "idcard limit exceed"),
+
+ /**
+ * 名称格式不合法 nickname invalid
+ */
+ CODE_53010(53010, "名称格式不合法"),
+
+ /**
+ * 名称检测命中频率限制 check nickname too frequently
+ */
+ CODE_53011(53011, "名称检测命中频率限制"),
+
+ /**
+ * 禁止使用该名称 nickname ban
+ */
+ CODE_53012(53012, "禁止使用该名称"),
+
+ /**
+ * 公众号:名称与已有公众号名称重复;小程序:该名称与已有小程序名称重复 nickname has been occupied
+ */
+ CODE_53013(53013, "公众号:名称与已有公众号名称重复;小程序:该名称与已有小程序名称重复"),
+
+ /**
+ * 公众号:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}
+ */
+ CODE_53014(53014, "公众号:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}"),
+
+ /**
+ * 公众号:该名称与已有小程序名称重复,需与该小程序帐号相同主体才可申请;小程序:该名称与已有公众号名称重复,需与该公众号帐号相同主体才可申请
+ */
+ CODE_53015(53015, "公众号:该名称与已有小程序名称重复,需与该小程序帐号相同主体才可申请;小程序:该名称与已有公众号名称重复,需与该公众号帐号相同主体才可申请"),
+
+ /**
+ * 公众号:该名称与已有多个小程序名称重复,暂不支持申请;小程序:该名称与已有多个公众号名称重复,暂不支持申请
+ */
+ CODE_53016(53016, "公众号:该名称与已有多个小程序名称重复,暂不支持申请;小程序:该名称与已有多个公众号名称重复,暂不支持申请"),
+
+ /**
+ * 公众号:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}
+ */
+ CODE_53017(53017, "公众号:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}"),
+
+ /**
+ * 名称命中微信号 nickname hit alias
+ */
+ CODE_53018(53018, "名称命中微信号"),
+
+ /**
+ * 名称在保护期内 nickname protected by infringement
+ */
+ CODE_53019(53019, "名称在保护期内"),
+
+ /**
+ * order not found
+ */
+ CODE_53100(53100, "订单不存在"),
+
+ /**
+ * order already paid
+ */
+ CODE_53101(53101, "已经支付的订单"),
+
+ /**
+ * already has checking order, can not apply
+ */
+ CODE_53102(53102, "已有检查单,不能申请"),
+
+ /**
+ * order can not do refill
+ */
+ CODE_53103(53103, "order can not do refill"),
+
+ /**
+ * 本月功能介绍修改次数已用完 modify signature quota limit exceed
+ */
+ CODE_53200(53200, "本月功能介绍修改次数已用完"),
+
+ /**
+ * 功能介绍内容命中黑名单关键字 signature in black list, can not use
+ */
+ CODE_53201(53201, "功能介绍内容命中黑名单关键字"),
+
+ /**
+ * 本月头像修改次数已用完 modify avatar quota limit exceed
+ */
+ CODE_53202(53202, "本月头像修改次数已用完"),
+
+ /**
+ * can't be modified for the time being
+ */
+ CODE_53203(53203, "暂时还不能修改"),
+
+ /**
+ * signature invalid
+ */
+ CODE_53204(53204, "无效签名"),
+
+ /**
+ * 超出每月次数限制
+ */
+ CODE_53300(53300, "超出每月次数限制"),
+
+ /**
+ * 超出可配置类目总数限制
+ */
+ CODE_53301(53301, "超出可配置类目总数限制"),
+
+ /**
+ * 当前账号主体类型不允许设置此种类目
+ */
+ CODE_53302(53302, "当前账号主体类型不允许设置此种类目"),
+
+ /**
+ * 提交的参数不合法
+ */
+ CODE_53303(53303, "提交的参数不合法"),
+
+ /**
+ * 与已有类目重复
+ */
+ CODE_53304(53304, "与已有类目重复"),
+
+ /**
+ * 包含未通过IPC校验的类目
+ */
+ CODE_53305(53305, "包含未通过IPC校验的类目"),
+
+ /**
+ * 修改类目只允许修改类目资质,不允许修改类目ID
+ */
+ CODE_53306(53306, "修改类目只允许修改类目资质,不允许修改类目ID"),
+
+ /**
+ * 只有审核失败的类目允许修改
+ */
+ CODE_53307(53307, "只有审核失败的类目允许修改"),
+
+ /**
+ * 审核中的类目不允许删除
+ */
+ CODE_53308(53308, "审核中的类目不允许删除"),
+
+ /**
+ * 社交红包不允许删除
+ */
+ CODE_53309(53309, "社交红包不允许删除"),
+
+ /**
+ * 类目超过上限,但是可以添加apply_reason参数申请更多类目
+ */
+ CODE_53310(53310, "类目超过上限,但是可以添加apply_reason参数申请更多类目"),
+
+ /**
+ * 需要提交资料信息
+ */
+ CODE_53311(53311, "需要提交资料信息"),
+
+ /**
+ * empty jsapi name
+ */
+ CODE_60005(60005, "空的jsapi名称"),
+
+ /**
+ * user cancel the auth
+ */
+ CODE_60006(60006, "用户取消该授权"),
+
+ /**
+ * invalid component type
+ */
+ CODE_61000(61000, "无效的第三方类型"),
+
+ /**
+ * component type and component appid is not match
+ */
+ CODE_61001(61001, "第三方类型与第三方APPID不匹配"),
+
+ /**
+ * the third appid is not open KF
+ */
+ CODE_61002(61002, "第三方APPID没有开放客服"),
+
+ /**
+ * component is not authorized by this account
+ */
+ CODE_61003(61003, "帐号未授权"),
+
+ /**
+ * api 功能未授权,请确认公众号/小程序已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限 access clientip is not registered
+ */
+ CODE_61004(61004, "api 功能未授权,请确认公众号/小程序已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限"),
+
+ /**
+ * component ticket is expired
+ */
+ CODE_61005(61005, "ticket 已过期"),
+
+ /**
+ * component ticket is invalid
+ */
+ CODE_61006(61006, "无效 ticket"),
+
+ /**
+ * api is unauthorized to component
+ */
+ CODE_61007(61007, "接口未授权给第三方平台"),
+
+ /**
+ * component req key is duplicated
+ */
+ CODE_61008(61008, "第三方请求的key存在重复"),
+
+ /**
+ * code is invalid
+ */
+ CODE_61009(61009, "无效code"),
+
+ /**
+ * code is expired
+ */
+ CODE_61010(61010, "code已过期"),
+
+ /**
+ * invalid component
+ */
+ CODE_61011(61011, "无效的第三方平台"),
+
+ /**
+ * invalid option name
+ */
+ CODE_61012(61012, "无效的选项名称"),
+
+ /**
+ * invalid option value
+ */
+ CODE_61013(61013, "无效的选项值"),
+
+ /**
+ * must use component token for component api
+ */
+ CODE_61014(61014, "必须使用component接口的token"),
+
+ /**
+ * must use biz account token for not component api
+ */
+ CODE_61015(61015, "必须使用商业帐号token,而不是component api"),
+
+ /**
+ * function category of API need be confirmed by component
+ */
+ CODE_61016(61016, "function category of API need be confirmed by component"),
+
+ /**
+ * function category is not authorized
+ */
+ CODE_61017(61017, "function category is not authorized"),
+
+ /**
+ * already confirm
+ */
+ CODE_61018(61018, "已确认"),
+
+ /**
+ * not need confirm
+ */
+ CODE_61019(61019, "不需要确认"),
+
+ /**
+ * err parameter
+ */
+ CODE_61020(61020, "err parameter"),
+
+ /**
+ * can't confirm
+ */
+ CODE_61021(61021, "can't confirm"),
+
+ /**
+ * can't resubmit
+ */
+ CODE_61022(61022, "can't resubmit"),
+
+ /**
+ * refresh_token is invalid
+ */
+ CODE_61023(61023, "refresh_token is invalid"),
+
+ /**
+ * must use api(api_component_token) to get token for component acct
+ */
+ CODE_61024(61024, "must use api(api_component_token) to get token for component acct"),
+
+ /**
+ * read-only option
+ */
+ CODE_61025(61025, "read-only option"),
+
+ /**
+ * register access deny
+ */
+ CODE_61026(61026, "register access deny"),
+
+ /**
+ * register limit exceed
+ */
+ CODE_61027(61027, "register limit exceed"),
+
+ /**
+ * component is unpublished
+ */
+ CODE_61028(61028, "component is unpublished"),
+
+ /**
+ * component need republish with base category
+ */
+ CODE_61029(61029, "component need republish with base category"),
+
+ /**
+ * component cancel authorization not allowed
+ */
+ CODE_61030(61030, "component cancel authorization not allowed"),
+
+ /**
+ * invalid realname type
+ */
+ CODE_61051(61051, "invalid realname type"),
+
+ /**
+ * need to be certified
+ */
+ CODE_61052(61052, "need to be certified"),
+
+ /**
+ * realname exceed limits
+ */
+ CODE_61053(61053, "realname exceed limits"),
+
+ /**
+ * realname in black list
+ */
+ CODE_61054(61054, "realname in black list"),
+
+ /**
+ * exceed quota per month
+ */
+ CODE_61055(61055, "exceed quota per month"),
+
+ /**
+ * copy_wx_verify is required option
+ */
+ CODE_61056(61056, "copy_wx_verify is required option"),
+
+ /**
+ * invalid ticket
+ */
+ CODE_61058(61058, "invalid ticket"),
+
+ /**
+ * overseas access deny
+ */
+ CODE_61061(61061, "overseas access deny"),
+
+ /**
+ * admin exceed limits
+ */
+ CODE_61063(61063, "admin exceed limits"),
+
+ /**
+ * admin in black list
+ */
+ CODE_61064(61064, "admin in black list"),
+
+ /**
+ * idcard exceed limits
+ */
+ CODE_61065(61065, "idcard exceed limits"),
+
+ /**
+ * idcard in black list
+ */
+ CODE_61066(61066, "idcard in black list"),
+
+ /**
+ * mobile exceed limits
+ */
+ CODE_61067(61067, "mobile exceed limits"),
+
+ /**
+ * mobile in black list
+ */
+ CODE_61068(61068, "mobile in black list"),
+
+ /**
+ * invalid admin
+ */
+ CODE_61069(61069, "invalid admin"),
+
+ /**
+ * name, idcard, wechat name not in accordance
+ */
+ CODE_61070(61070, "name, idcard, wechat name not in accordance"),
+
+ /**
+ * invalid url
+ */
+ CODE_61100(61100, "invalid url"),
+
+ /**
+ * invalid openid
+ */
+ CODE_61101(61101, "invalid openid"),
+
+ /**
+ * share relation not existed
+ */
+ CODE_61102(61102, "share relation not existed"),
+
+ /**
+ * product wording not set
+ */
+ CODE_61200(61200, "product wording not set"),
+
+ /**
+ * invalid base info
+ */
+ CODE_61300(61300, "invalid base info"),
+
+ /**
+ * invalid detail info
+ */
+ CODE_61301(61301, "invalid detail info"),
+
+ /**
+ * invalid action info
+ */
+ CODE_61302(61302, "invalid action info"),
+
+ /**
+ * brand info not exist
+ */
+ CODE_61303(61303, "brand info not exist"),
+
+ /**
+ * invalid product id
+ */
+ CODE_61304(61304, "invalid product id"),
+
+ /**
+ * invalid key info
+ */
+ CODE_61305(61305, "invalid key info"),
+
+ /**
+ * invalid appid
+ */
+ CODE_61306(61306, "invalid appid"),
+
+ /**
+ * invalid card id
+ */
+ CODE_61307(61307, "invalid card id"),
+
+ /**
+ * base info not exist
+ */
+ CODE_61308(61308, "base info not exist"),
+
+ /**
+ * detail info not exist
+ */
+ CODE_61309(61309, "detail info not exist"),
+
+ /**
+ * action info not exist
+ */
+ CODE_61310(61310, "action info not exist"),
+
+ /**
+ * invalid media info
+ */
+ CODE_61311(61311, "invalid media info"),
+
+ /**
+ * invalid buffer size
+ */
+ CODE_61312(61312, "invalid buffer size"),
+
+ /**
+ * invalid buffer
+ */
+ CODE_61313(61313, "invalid buffer"),
+
+ /**
+ * invalid qrcode extinfo
+ */
+ CODE_61314(61314, "invalid qrcode extinfo"),
+
+ /**
+ * invalid local ext info
+ */
+ CODE_61315(61315, "invalid local ext info"),
+
+ /**
+ * key conflict
+ */
+ CODE_61316(61316, "key conflict"),
+
+ /**
+ * ticket invalid
+ */
+ CODE_61317(61317, "ticket invalid"),
+
+ /**
+ * verify not pass
+ */
+ CODE_61318(61318, "verify not pass"),
+
+ /**
+ * category invalid
+ */
+ CODE_61319(61319, "category invalid"),
+
+ /**
+ * merchant info not exist
+ */
+ CODE_61320(61320, "merchant info not exist"),
+
+ /**
+ * cate id is a leaf node
+ */
+ CODE_61321(61321, "cate id is a leaf node"),
+
+ /**
+ * category id no permision
+ */
+ CODE_61322(61322, "category id no permision"),
+
+ /**
+ * barcode no permision
+ */
+ CODE_61323(61323, "barcode no permision"),
+
+ /**
+ * exceed max action num
+ */
+ CODE_61324(61324, "exceed max action num"),
+
+ /**
+ * brandinfo invalid store mgr type
+ */
+ CODE_61325(61325, "brandinfo invalid store mgr type"),
+
+ /**
+ * anti-spam blocked
+ */
+ CODE_61326(61326, "anti-spam blocked"),
+
+ /**
+ * comment reach limit
+ */
+ CODE_61327(61327, "comment reach limit"),
+
+ /**
+ * comment data is not the newest
+ */
+ CODE_61328(61328, "comment data is not the newest"),
+
+ /**
+ * comment hit ban word
+ */
+ CODE_61329(61329, "comment hit ban word"),
+
+ /**
+ * image already add
+ */
+ CODE_61330(61330, "image already add"),
+
+ /**
+ * image never add
+ */
+ CODE_61331(61331, "image never add"),
+
+ /**
+ * warning, image quanlity too low
+ */
+ CODE_61332(61332, "warning, image quanlity too low"),
+
+ /**
+ * warning, image simility too high
+ */
+ CODE_61333(61333, "warning, image simility too high"),
+
+ /**
+ * product not exists
+ */
+ CODE_61334(61334, "product not exists"),
+
+ /**
+ * key apply fail
+ */
+ CODE_61335(61335, "key apply fail"),
+
+ /**
+ * check status fail
+ */
+ CODE_61336(61336, "check status fail"),
+
+ /**
+ * product already exists
+ */
+ CODE_61337(61337, "product already exists"),
+
+ /**
+ * forbid delete
+ */
+ CODE_61338(61338, "forbid delete"),
+
+ /**
+ * firmcode claimed
+ */
+ CODE_61339(61339, "firmcode claimed"),
+
+ /**
+ * check firm info fail
+ */
+ CODE_61340(61340, "check firm info fail"),
+
+ /**
+ * too many white list uin
+ */
+ CODE_61341(61341, "too many white list uin"),
+
+ /**
+ * keystandard not match
+ */
+ CODE_61342(61342, "keystandard not match"),
+
+ /**
+ * keystandard error
+ */
+ CODE_61343(61343, "keystandard error"),
+
+ /**
+ * id map not exists
+ */
+ CODE_61344(61344, "id map not exists"),
+
+ /**
+ * invalid action code
+ */
+ CODE_61345(61345, "invalid action code"),
+
+ /**
+ * invalid actioninfo store
+ */
+ CODE_61346(61346, "invalid actioninfo store"),
+
+ /**
+ * invalid actioninfo media
+ */
+ CODE_61347(61347, "invalid actioninfo media"),
+
+ /**
+ * invalid actioninfo text
+ */
+ CODE_61348(61348, "invalid actioninfo text"),
+
+ /**
+ * invalid input data
+ */
+ CODE_61350(61350, "invalid input data"),
+
+ /**
+ * input data exceed max size
+ */
+ CODE_61351(61351, "input data exceed max size"),
+
+ /**
+ * kf_account error
+ */
+ CODE_61400(61400, "kf_account error"),
+
+ /**
+ * kf system alredy transfer
+ */
+ CODE_61401(61401, "kf system alredy transfer"),
+
+ /**
+ * 系统错误 (system error)
+ */
+ CODE_61450(61450, "系统错误 (system error)"),
+
+ /**
+ * 参数错误 (invalid parameter)
+ */
+ CODE_61451(61451, "参数错误 (invalid parameter)"),
+
+ /**
+ * 无效客服账号 (invalid kf_account)
+ */
+ CODE_61452(61452, "无效客服账号 (invalid kf_account)"),
+
+ /**
+ * 客服帐号已存在 (kf_account exsited)
+ */
+ CODE_61453(61453, "客服帐号已存在 (kf_account exsited)"),
+
+ /**
+ * 客服帐号名长度超过限制 ( 仅允许 10 个英文字符,不包括 @ 及 @ 后的公众号的微信号 )(invalid kf_acount length)
+ */
+ CODE_61454(61454, "客服帐号名长度超过限制 ( 仅允许 10 个英文字符,不包括 @ 及 @ 后的公众号的微信号 )(invalid kf_acount length)"),
+
+ /**
+ * 客服帐号名包含非法字符 ( 仅允许英文 + 数字 )(illegal character in kf_account)
+ */
+ CODE_61455(61455, "客服帐号名包含非法字符 ( 仅允许英文 + 数字 )(illegal character in kf_account)"),
+
+ /**
+ * 客服帐号个数超过限制 (10 个客服账号 )(kf_account count exceeded)
+ */
+ CODE_61456(61456, "客服帐号个数超过限制 (10 个客服账号 )(kf_account count exceeded)"),
+
+ /**
+ * 无效头像文件类型 (invalid file type)
+ */
+ CODE_61457(61457, "无效头像文件类型 (invalid file type)"),
+
+ /**
+ * 日期格式错误 date format error
+ */
+ CODE_61500(61500, "日期格式错误"),
+
+ /**
+ * date range error
+ */
+ CODE_61501(61501, "date range error"),
+
+ /**
+ * this is game miniprogram, data api is not supported
+ */
+ CODE_61502(61502, "this is game miniprogram, data api is not supported"),
+
+ /**
+ * data not ready, please try later
+ */
+ CODE_61503(61503, "data not ready, please try later"),
+
+ /**
+ * trying to access other's app
+ */
+ CODE_62001(62001, "trying to access other's app"),
+
+ /**
+ * app name already exists
+ */
+ CODE_62002(62002, "app name already exists"),
+
+ /**
+ * please provide at least one platform
+ */
+ CODE_62003(62003, "please provide at least one platform"),
+
+ /**
+ * invalid app name
+ */
+ CODE_62004(62004, "invalid app name"),
+
+ /**
+ * invalid app id
+ */
+ CODE_62005(62005, "invalid app id"),
+
+ /**
+ * 部分参数为空 some arguments is empty
+ */
+ CODE_63001(63001, "部分参数为空"),
+
+ /**
+ * 无效的签名 invalid signature
+ */
+ CODE_63002(63002, "无效的签名"),
+
+ /**
+ * invalid signature method
+ */
+ CODE_63003(63003, "invalid signature method"),
+
+ /**
+ * no authroize
+ */
+ CODE_63004(63004, "no authroize"),
+
+ /**
+ * gen ticket fail
+ */
+ CODE_63149(63149, "gen ticket fail"),
+
+ /**
+ * set ticket fail
+ */
+ CODE_63152(63152, "set ticket fail"),
+
+ /**
+ * shortid decode fail
+ */
+ CODE_63153(63153, "shortid decode fail"),
+
+ /**
+ * invalid status
+ */
+ CODE_63154(63154, "invalid status"),
+
+ /**
+ * invalid color
+ */
+ CODE_63155(63155, "invalid color"),
+
+ /**
+ * invalid tag
+ */
+ CODE_63156(63156, "invalid tag"),
+
+ /**
+ * invalid recommend
+ */
+ CODE_63157(63157, "invalid recommend"),
+
+ /**
+ * branditem out of limits
+ */
+ CODE_63158(63158, "branditem out of limits"),
+
+ /**
+ * retail_price empty
+ */
+ CODE_63159(63159, "retail_price empty"),
+
+ /**
+ * priceinfo invalid
+ */
+ CODE_63160(63160, "priceinfo invalid"),
+
+ /**
+ * antifake module num limit
+ */
+ CODE_63161(63161, "antifake module num limit"),
+
+ /**
+ * antifake native_type err
+ */
+ CODE_63162(63162, "antifake native_type err"),
+
+ /**
+ * antifake link not exists
+ */
+ CODE_63163(63163, "antifake link not exists"),
+
+ /**
+ * module type not exist
+ */
+ CODE_63164(63164, "module type not exist"),
+
+ /**
+ * module info not exist
+ */
+ CODE_63165(63165, "module info not exist"),
+
+ /**
+ * item is beding verified
+ */
+ CODE_63166(63166, "item is beding verified"),
+
+ /**
+ * item not published
+ */
+ CODE_63167(63167, "item not published"),
+
+ /**
+ * verify not pass
+ */
+ CODE_63168(63168, "verify not pass"),
+
+ /**
+ * already published
+ */
+ CODE_63169(63169, "already published"),
+
+ /**
+ * only banner or media
+ */
+ CODE_63170(63170, "only banner or media"),
+
+ /**
+ * card num limit
+ */
+ CODE_63171(63171, "card num limit"),
+
+ /**
+ * user num limit
+ */
+ CODE_63172(63172, "user num limit"),
+
+ /**
+ * text num limit
+ */
+ CODE_63173(63173, "text num limit"),
+
+ /**
+ * link card user sum limit
+ */
+ CODE_63174(63174, "link card user sum limit"),
+
+ /**
+ * detail info error
+ */
+ CODE_63175(63175, "detail info error"),
+
+ /**
+ * not this type
+ */
+ CODE_63176(63176, "not this type"),
+
+ /**
+ * src or secretkey or version or expired_time is wrong
+ */
+ CODE_63177(63177, "src or secretkey or version or expired_time is wrong"),
+
+ /**
+ * appid wrong
+ */
+ CODE_63178(63178, "appid wrong"),
+
+ /**
+ * openid num limit
+ */
+ CODE_63179(63179, "openid num limit"),
+
+ /**
+ * this app msg not found
+ */
+ CODE_63180(63180, "this app msg not found"),
+
+ /**
+ * get history app msg end
+ */
+ CODE_63181(63181, "get history app msg end"),
+
+ /**
+ * openid_list empty
+ */
+ CODE_63182(63182, "openid_list empty"),
+
+ /**
+ * unknown deeplink type
+ */
+ CODE_65001(65001, "unknown deeplink type"),
+
+ /**
+ * deeplink unauthorized
+ */
+ CODE_65002(65002, "deeplink unauthorized"),
+
+ /**
+ * bad deeplink
+ */
+ CODE_65003(65003, "bad deeplink"),
+
+ /**
+ * deeplinks of the very type are supposed to have short-life
+ */
+ CODE_65004(65004, "deeplinks of the very type are supposed to have short-life"),
+
+ /**
+ * invalid categories
+ */
+ CODE_65104(65104, "invalid categories"),
+
+ /**
+ * invalid photo url
+ */
+ CODE_65105(65105, "invalid photo url"),
+
+ /**
+ * poi audit state must be approved
+ */
+ CODE_65106(65106, "poi audit state must be approved"),
+
+ /**
+ * poi not allowed modify now
+ */
+ CODE_65107(65107, "poi not allowed modify now"),
+
+ /**
+ * invalid business name
+ */
+ CODE_65109(65109, "invalid business name"),
+
+ /**
+ * invalid address
+ */
+ CODE_65110(65110, "invalid address"),
+
+ /**
+ * invalid telephone
+ */
+ CODE_65111(65111, "invalid telephone"),
+
+ /**
+ * invalid city
+ */
+ CODE_65112(65112, "invalid city"),
+
+ /**
+ * invalid province
+ */
+ CODE_65113(65113, "invalid province"),
+
+ /**
+ * photo list empty
+ */
+ CODE_65114(65114, "photo list empty"),
+
+ /**
+ * poi_id is not exist
+ */
+ CODE_65115(65115, "poi_id is not exist"),
+
+ /**
+ * poi has been deleted
+ */
+ CODE_65116(65116, "poi has been deleted"),
+
+ /**
+ * cannot delete poi
+ */
+ CODE_65117(65117, "cannot delete poi"),
+
+ /**
+ * store status is invalid
+ */
+ CODE_65118(65118, "store status is invalid"),
+
+ /**
+ * lack of qualification for relevant principals
+ */
+ CODE_65119(65119, "lack of qualification for relevant principals"),
+
+ /**
+ * category info is not found
+ */
+ CODE_65120(65120, "category info is not found"),
+
+ /**
+ * room_name is empty, please check your input
+ */
+ CODE_65201(65201, "room_name is empty, please check your input"),
+
+ /**
+ * user_id is empty, please check your input
+ */
+ CODE_65202(65202, "user_id is empty, please check your input"),
+
+ /**
+ * invalid check ticket
+ */
+ CODE_65203(65203, "invalid check ticket"),
+
+ /**
+ * invalid check ticket opt code
+ */
+ CODE_65204(65204, "invalid check ticket opt code"),
+
+ /**
+ * check ticket out of time
+ */
+ CODE_65205(65205, "check ticket out of time"),
+
+ /**
+ * 不存在此 menuid 对应的个性化菜单 this menu is not conditionalmenu
+ */
+ CODE_65301(65301, "不存在此 menuid 对应的个性化菜单"),
+
+ /**
+ * 没有相应的用户 no such user
+ */
+ CODE_65302(65302, "没有相应的用户"),
+
+ /**
+ * 没有默认菜单,不能创建个性化菜单 there is no selfmenu, please create selfmenu first
+ */
+ CODE_65303(65303, "没有默认菜单,不能创建个性化菜单"),
+
+ /**
+ * MatchRule 信息为空 match rule empty
+ */
+ CODE_65304(65304, "MatchRule 信息为空"),
+
+ /**
+ * 个性化菜单数量受限 menu count limit
+ */
+ CODE_65305(65305, "个性化菜单数量受限"),
+
+ /**
+ * 不支持个性化菜单的帐号 conditional menu not support
+ */
+ CODE_65306(65306, "不支持个性化菜单的帐号"),
+
+ /**
+ * 个性化菜单信息为空 conditional menu is empty
+ */
+ CODE_65307(65307, "个性化菜单信息为空"),
+
+ /**
+ * 包含没有响应类型的 button exist empty button act
+ */
+ CODE_65308(65308, "包含没有响应类型的 button"),
+
+ /**
+ * 个性化菜单开关处于关闭状态 conditional menu switch is closed
+ */
+ CODE_65309(65309, "个性化菜单开关处于关闭状态"),
+
+ /**
+ * 填写了省份或城市信息,国家信息不能为空 region info: country is empty
+ */
+ CODE_65310(65310, "填写了省份或城市信息,国家信息不能为空"),
+
+ /**
+ * 填写了城市信息,省份信息不能为空 region info: province is empty
+ */
+ CODE_65311(65311, "填写了城市信息,省份信息不能为空"),
+
+ /**
+ * 不合法的国家信息 invalid country info
+ */
+ CODE_65312(65312, "不合法的国家信息"),
+
+ /**
+ * 不合法的省份信息 invalid province info
+ */
+ CODE_65313(65313, "不合法的省份信息"),
+
+ /**
+ * 不合法的城市信息 invalid city info
+ */
+ CODE_65314(65314, "不合法的城市信息"),
+
+ /**
+ * not fans
+ */
+ CODE_65315(65315, "not fans"),
+
+ /**
+ * 该公众号的菜单设置了过多的域名外跳(最多跳转到 3 个域名的链接) domain count reach limit
+ */
+ CODE_65316(65316, "该公众号的菜单设置了过多的域名外跳(最多跳转到 3 个域名的链接)"),
+
+ /**
+ * 不合法的 URL contain invalid url
+ */
+ CODE_65317(65317, "不合法的 URL"),
+
+ /**
+ * must use utf-8 charset
+ */
+ CODE_65318(65318, "must use utf-8 charset"),
+
+ /**
+ * not allow to create menu
+ */
+ CODE_65319(65319, "not allow to create menu"),
+
+ /**
+ * please enable new custom service, or wait for a while if you have enabled
+ */
+ CODE_65400(65400, "please enable new custom service, or wait for a while if you have enabled"),
+
+ /**
+ * invalid custom service account
+ */
+ CODE_65401(65401, "invalid custom service account"),
+
+ /**
+ * the custom service account need to bind a wechat user
+ */
+ CODE_65402(65402, "the custom service account need to bind a wechat user"),
+
+ /**
+ * illegal nickname
+ */
+ CODE_65403(65403, "illegal nickname"),
+
+ /**
+ * illegal custom service account
+ */
+ CODE_65404(65404, "illegal custom service account"),
+
+ /**
+ * custom service account number reach limit
+ */
+ CODE_65405(65405, "custom service account number reach limit"),
+
+ /**
+ * custom service account exists
+ */
+ CODE_65406(65406, "custom service account exists"),
+
+ /**
+ * the wechat user have been one of your workers
+ */
+ CODE_65407(65407, "the wechat user have been one of your workers"),
+
+ /**
+ * you have already invited the wechat user
+ */
+ CODE_65408(65408, "you have already invited the wechat user"),
+
+ /**
+ * wechat account invalid
+ */
+ CODE_65409(65409, "wechat account invalid"),
+
+ /**
+ * too many custom service accounts bound by the worker
+ */
+ CODE_65410(65410, "too many custom service accounts bound by the worker"),
+
+ /**
+ * a effective invitation to bind the custom service account exists
+ */
+ CODE_65411(65411, "a effective invitation to bind the custom service account exists"),
+
+ /**
+ * the custom service account have been bound by a wechat user
+ */
+ CODE_65412(65412, "the custom service account have been bound by a wechat user"),
+
+ /**
+ * no effective session for the customer
+ */
+ CODE_65413(65413, "no effective session for the customer"),
+
+ /**
+ * another worker is serving the customer
+ */
+ CODE_65414(65414, "another worker is serving the customer"),
+
+ /**
+ * the worker is not online
+ */
+ CODE_65415(65415, "the worker is not online"),
+
+ /**
+ * param invalid, please check
+ */
+ CODE_65416(65416, "param invalid, please check"),
+
+ /**
+ * it is too long from the starttime to endtime
+ */
+ CODE_65417(65417, "it is too long from the starttime to endtime"),
+
+ /**
+ * homepage not exists
+ */
+ CODE_65450(65450, "homepage not exists"),
+
+ /**
+ * invalid store type
+ */
+ CODE_68002(68002, "invalid store type"),
+
+ /**
+ * invalid store name
+ */
+ CODE_68003(68003, "invalid store name"),
+
+ /**
+ * invalid store wxa path
+ */
+ CODE_68004(68004, "invalid store wxa path"),
+
+ /**
+ * miss store wxa path
+ */
+ CODE_68005(68005, "miss store wxa path"),
+
+ /**
+ * invalid kefu type
+ */
+ CODE_68006(68006, "invalid kefu type"),
+
+ /**
+ * invalid kefu wxa path
+ */
+ CODE_68007(68007, "invalid kefu wxa path"),
+
+ /**
+ * invalid kefu phone number
+ */
+ CODE_68008(68008, "invalid kefu phone number"),
+
+ /**
+ * invalid sub mch id
+ */
+ CODE_68009(68009, "invalid sub mch id"),
+
+ /**
+ * store id has exist
+ */
+ CODE_68010(68010, "store id has exist"),
+
+ /**
+ * miss store name
+ */
+ CODE_68011(68011, "miss store name"),
+
+ /**
+ * miss create time
+ */
+ CODE_68012(68012, "miss create time"),
+
+ /**
+ * invalid status
+ */
+ CODE_68013(68013, "invalid status"),
+
+ /**
+ * invalid receiver info
+ */
+ CODE_68014(68014, "invalid receiver info"),
+
+ /**
+ * invalid product
+ */
+ CODE_68015(68015, "invalid product"),
+
+ /**
+ * invalid pay type
+ */
+ CODE_68016(68016, "invalid pay type"),
+
+ /**
+ * invalid fast mail no
+ */
+ CODE_68017(68017, "invalid fast mail no"),
+
+ /**
+ * invalid busi id
+ */
+ CODE_68018(68018, "invalid busi id"),
+
+ /**
+ * miss product sku
+ */
+ CODE_68019(68019, "miss product sku"),
+
+ /**
+ * invalid service type
+ */
+ CODE_68020(68020, "invalid service type"),
+
+ /**
+ * invalid service status
+ */
+ CODE_68021(68021, "invalid service status"),
+
+ /**
+ * invalid service_id
+ */
+ CODE_68022(68022, "invalid service_id"),
+
+ /**
+ * service_id has exist
+ */
+ CODE_68023(68023, "service_id has exist"),
+
+ /**
+ * miss service wxa path
+ */
+ CODE_68024(68024, "miss service wxa path"),
+
+ /**
+ * invalid product sku
+ */
+ CODE_68025(68025, "invalid product sku"),
+
+ /**
+ * invalid product spu
+ */
+ CODE_68026(68026, "invalid product spu"),
+
+ /**
+ * miss product spu
+ */
+ CODE_68027(68027, "miss product spu"),
+
+ /**
+ * can not find product spu and spu in order list
+ */
+ CODE_68028(68028, "can not find product spu and spu in order list"),
+
+ /**
+ * sku and spu duplicated
+ */
+ CODE_68029(68029, "sku and spu duplicated"),
+
+ /**
+ * busi_id has exist
+ */
+ CODE_68030(68030, "busi_id has exist"),
+
+ /**
+ * update fail
+ */
+ CODE_68031(68031, "update fail"),
+
+ /**
+ * busi_id not exist
+ */
+ CODE_68032(68032, "busi_id not exist"),
+
+ /**
+ * store no exist
+ */
+ CODE_68033(68033, "store no exist"),
+
+ /**
+ * miss product number
+ */
+ CODE_68034(68034, "miss product number"),
+
+ /**
+ * miss wxa order detail path
+ */
+ CODE_68035(68035, "miss wxa order detail path"),
+
+ /**
+ * there is no enough products to refund
+ */
+ CODE_68036(68036, "there is no enough products to refund"),
+
+ /**
+ * invalid refund info
+ */
+ CODE_68037(68037, "invalid refund info"),
+
+ /**
+ * shipped but no fast mail info
+ */
+ CODE_68038(68038, "shipped but no fast mail info"),
+
+ /**
+ * invalid wechat pay no
+ */
+ CODE_68039(68039, "invalid wechat pay no"),
+
+ /**
+ * all product has been refunded, the order can not be finished
+ */
+ CODE_68040(68040, "all product has been refunded, the order can not be finished"),
+
+ /**
+ * invalid service create time, it must bigger than the time of order
+ */
+ CODE_68041(68041, "invalid service create time, it must bigger than the time of order"),
+
+ /**
+ * invalid total cost, it must be smaller than the sum of product and shipping cost
+ */
+ CODE_68042(68042, "invalid total cost, it must be smaller than the sum of product and shipping cost"),
+
+ /**
+ * invalid role
+ */
+ CODE_68043(68043, "invalid role"),
+
+ /**
+ * invalid service_available args
+ */
+ CODE_68044(68044, "invalid service_available args"),
+
+ /**
+ * invalid order type
+ */
+ CODE_68045(68045, "invalid order type"),
+
+ /**
+ * invalid order deliver type
+ */
+ CODE_68046(68046, "invalid order deliver type"),
+
+ /**
+ * require store_id
+ */
+ CODE_68500(68500, "require store_id"),
+
+ /**
+ * invalid store_id
+ */
+ CODE_68501(68501, "invalid store_id"),
+
+ /**
+ * invalid parameter, parameter is zero or missing
+ */
+ CODE_71001(71001, "invalid parameter, parameter is zero or missing"),
+
+ /**
+ * invalid orderid, may be the other parameter not fit with orderid
+ */
+ CODE_71002(71002, "invalid orderid, may be the other parameter not fit with orderid"),
+
+ /**
+ * coin not enough
+ */
+ CODE_71003(71003, "coin not enough"),
+
+ /**
+ * card is expired
+ */
+ CODE_71004(71004, "card is expired"),
+
+ /**
+ * limit exe count
+ */
+ CODE_71005(71005, "limit exe count"),
+
+ /**
+ * limit coin count, 1 <= coin_count <= 100000
+ */
+ CODE_71006(71006, "limit coin count, 1 <= coin_count <= 100000"),
+
+ /**
+ * order finish
+ */
+ CODE_71007(71007, "order finish"),
+
+ /**
+ * order time out
+ */
+ CODE_71008(71008, "order time out"),
+
+ /**
+ * no match card
+ */
+ CODE_72001(72001, "no match card"),
+
+ /**
+ * mchid is not bind appid
+ */
+ CODE_72002(72002, "mchid is not bind appid"),
+
+ /**
+ * invalid card type, need member card
+ */
+ CODE_72003(72003, "invalid card type, need member card"),
+
+ /**
+ * mchid is occupied by the other appid
+ */
+ CODE_72004(72004, "mchid is occupied by the other appid"),
+
+ /**
+ * out of mchid size limit
+ */
+ CODE_72005(72005, "out of mchid size limit"),
+
+ /**
+ * invald title
+ */
+ CODE_72006(72006, "invald title"),
+
+ /**
+ * invalid reduce cost, can not less than 100
+ */
+ CODE_72007(72007, "invalid reduce cost, can not less than 100"),
+
+ /**
+ * invalid least cost, most larger than reduce cost
+ */
+ CODE_72008(72008, "invalid least cost, most larger than reduce cost"),
+
+ /**
+ * invalid get limit, can not over 50
+ */
+ CODE_72009(72009, "invalid get limit, can not over 50"),
+
+ /**
+ * invalid mchid
+ */
+ CODE_72010(72010, "invalid mchid"),
+
+ /**
+ * invalid activate_ticket.Maybe this ticket is not belong this AppId
+ */
+ CODE_72011(72011, "invalid activate_ticket.Maybe this ticket is not belong this AppId"),
+
+ /**
+ * activate_ticket has been expired
+ */
+ CODE_72012(72012, "activate_ticket has been expired"),
+
+ /**
+ * unauthorized order_id or authorization is expired
+ */
+ CODE_72013(72013, "unauthorized order_id or authorization is expired"),
+
+ /**
+ * task card share stock can not modify stock
+ */
+ CODE_72014(72014, "task card share stock can not modify stock"),
+
+ /**
+ * unauthorized create invoice
+ */
+ CODE_72015(72015, "unauthorized create invoice"),
+
+ /**
+ * unauthorized create member card
+ */
+ CODE_72016(72016, "unauthorized create member card"),
+
+ /**
+ * invalid invoice title
+ */
+ CODE_72017(72017, "invalid invoice title"),
+
+ /**
+ * duplicate order id, invoice had inserted to user
+ */
+ CODE_72018(72018, "duplicate order id, invoice had inserted to user"),
+
+ /**
+ * limit msg operation card list size, must <= 5
+ */
+ CODE_72019(72019, "limit msg operation card list size, must <= 5"),
+
+ /**
+ * limit consume in use limit
+ */
+ CODE_72020(72020, "limit consume in use limit"),
+
+ /**
+ * unauthorized create general card
+ */
+ CODE_72021(72021, "unauthorized create general card"),
+
+ /**
+ * user unexpected, please add user to white list
+ */
+ CODE_72022(72022, "user unexpected, please add user to white list"),
+
+ /**
+ * invoice has been lock by others
+ */
+ CODE_72023(72023, "invoice has been lock by others"),
+
+ /**
+ * invoice status error
+ */
+ CODE_72024(72024, "invoice status error"),
+
+ /**
+ * invoice token error
+ */
+ CODE_72025(72025, "invoice token error"),
+
+ /**
+ * need set wx_activate true
+ */
+ CODE_72026(72026, "need set wx_activate true"),
+
+ /**
+ * invoice action error
+ */
+ CODE_72027(72027, "invoice action error"),
+
+ /**
+ * invoice never set pay mch info
+ */
+ CODE_72028(72028, "invoice never set pay mch info"),
+
+ /**
+ * invoice never set auth field
+ */
+ CODE_72029(72029, "invoice never set auth field"),
+
+ /**
+ * invalid mchid
+ */
+ CODE_72030(72030, "invalid mchid"),
+
+ /**
+ * invalid params
+ */
+ CODE_72031(72031, "invalid params"),
+
+ /**
+ * pay gift card rule expired
+ */
+ CODE_72032(72032, "pay gift card rule expired"),
+
+ /**
+ * pay gift card rule status err
+ */
+ CODE_72033(72033, "pay gift card rule status err"),
+
+ /**
+ * invlid rule id
+ */
+ CODE_72034(72034, "invlid rule id"),
+
+ /**
+ * biz reject insert
+ */
+ CODE_72035(72035, "biz reject insert"),
+
+ /**
+ * invoice is busy, try again please
+ */
+ CODE_72036(72036, "invoice is busy, try again please"),
+
+ /**
+ * invoice owner error
+ */
+ CODE_72037(72037, "invoice owner error"),
+
+ /**
+ * invoice order never auth
+ */
+ CODE_72038(72038, "invoice order never auth"),
+
+ /**
+ * invoice must be lock first
+ */
+ CODE_72039(72039, "invoice must be lock first"),
+
+ /**
+ * invoice pdf error
+ */
+ CODE_72040(72040, "invoice pdf error"),
+
+ /**
+ * billing_code and billing_no invalid
+ */
+ CODE_72041(72041, "billing_code and billing_no invalid"),
+
+ /**
+ * billing_code and billing_no repeated
+ */
+ CODE_72042(72042, "billing_code and billing_no repeated"),
+
+ /**
+ * billing_code or billing_no size error
+ */
+ CODE_72043(72043, "billing_code or billing_no size error"),
+
+ /**
+ * scan text out of time
+ */
+ CODE_72044(72044, "scan text out of time"),
+
+ /**
+ * check_code is empty
+ */
+ CODE_72045(72045, "check_code is empty"),
+
+ /**
+ * pdf_url is invalid
+ */
+ CODE_72046(72046, "pdf_url is invalid"),
+
+ /**
+ * pdf billing_code or pdf billing_no is error
+ */
+ CODE_72047(72047, "pdf billing_code or pdf billing_no is error"),
+
+ /**
+ * insert too many invoice, need auth again
+ */
+ CODE_72048(72048, "insert too many invoice, need auth again"),
+
+ /**
+ * never auth
+ */
+ CODE_72049(72049, "never auth"),
+
+ /**
+ * auth expired, need auth again
+ */
+ CODE_72050(72050, "auth expired, need auth again"),
+
+ /**
+ * app type error
+ */
+ CODE_72051(72051, "app type error"),
+
+ /**
+ * get too many invoice
+ */
+ CODE_72052(72052, "get too many invoice"),
+
+ /**
+ * user never auth
+ */
+ CODE_72053(72053, "user never auth"),
+
+ /**
+ * invoices is inserting, wait a moment please
+ */
+ CODE_72054(72054, "invoices is inserting, wait a moment please"),
+
+ /**
+ * too many invoices
+ */
+ CODE_72055(72055, "too many invoices"),
+
+ /**
+ * order_id repeated, please check order_id
+ */
+ CODE_72056(72056, "order_id repeated, please check order_id"),
+
+ /**
+ * today insert limit
+ */
+ CODE_72057(72057, "today insert limit"),
+
+ /**
+ * callback biz error
+ */
+ CODE_72058(72058, "callback biz error"),
+
+ /**
+ * this invoice is giving to others, wait a moment please
+ */
+ CODE_72059(72059, "this invoice is giving to others, wait a moment please"),
+
+ /**
+ * this invoice has been cancelled, check the reimburse_status please
+ */
+ CODE_72060(72060, "this invoice has been cancelled, check the reimburse_status please"),
+
+ /**
+ * this invoice has been closed, check the reimburse_status please
+ */
+ CODE_72061(72061, "this invoice has been closed, check the reimburse_status please"),
+
+ /**
+ * this code_auth_key is limited, try other code_auth_key please
+ */
+ CODE_72062(72062, "this code_auth_key is limited, try other code_auth_key please"),
+
+ /**
+ * biz contact is empty, set contact first please
+ */
+ CODE_72063(72063, "biz contact is empty, set contact first please"),
+
+ /**
+ * tbc error
+ */
+ CODE_72064(72064, "tbc error"),
+
+ /**
+ * tbc logic error
+ */
+ CODE_72065(72065, "tbc logic error"),
+
+ /**
+ * the card is send for advertisement, not allow modify time and budget
+ */
+ CODE_72066(72066, "the card is send for advertisement, not allow modify time and budget"),
+
+ /**
+ * BatchInsertAuthKey_Expired
+ */
+ CODE_72067(72067, "BatchInsertAuthKey_Expired"),
+
+ /**
+ * BatchInsertAuthKey_Owner
+ */
+ CODE_72068(72068, "BatchInsertAuthKey_Owner"),
+
+ /**
+ * BATCHTASKRUN_ERROR
+ */
+ CODE_72069(72069, "BATCHTASKRUN_ERROR"),
+
+ /**
+ * BIZ_TITLE_KEY_OUT_TIME
+ */
+ CODE_72070(72070, "BIZ_TITLE_KEY_OUT_TIME"),
+
+ /**
+ * Discern_GaoPeng_Error
+ */
+ CODE_72071(72071, "Discern_GaoPeng_Error"),
+
+ /**
+ * Discern_Type_Error
+ */
+ CODE_72072(72072, "Discern_Type_Error"),
+
+ /**
+ * Fee_Error
+ */
+ CODE_72073(72073, "Fee_Error"),
+
+ /**
+ * HAS_Auth
+ */
+ CODE_72074(72074, "HAS_Auth"),
+
+ /**
+ * HAS_SEND
+ */
+ CODE_72075(72075, "HAS_SEND"),
+
+ /**
+ * INVOICESIGN
+ */
+ CODE_72076(72076, "INVOICESIGN"),
+
+ /**
+ * KEY_DELETED
+ */
+ CODE_72077(72077, "KEY_DELETED"),
+
+ /**
+ * KEY_EXPIRED
+ */
+ CODE_72078(72078, "KEY_EXPIRED"),
+
+ /**
+ * MOUNT_ERROR
+ */
+ CODE_72079(72079, "MOUNT_ERROR"),
+
+ /**
+ * NO_FOUND
+ */
+ CODE_72080(72080, "NO_FOUND"),
+
+ /**
+ * No_Pull_Pdf
+ */
+ CODE_72081(72081, "No_Pull_Pdf"),
+
+ /**
+ * PDF_CHECK_ERROR
+ */
+ CODE_72082(72082, "PDF_CHECK_ERROR"),
+
+ /**
+ * PULL_PDF_FAIL
+ */
+ CODE_72083(72083, "PULL_PDF_FAIL"),
+
+ /**
+ * PUSH_BIZ_EMPTY
+ */
+ CODE_72084(72084, "PUSH_BIZ_EMPTY"),
+
+ /**
+ * SDK_APPID_ERROR
+ */
+ CODE_72085(72085, "SDK_APPID_ERROR"),
+
+ /**
+ * SDK_BIZ_ERROR
+ */
+ CODE_72086(72086, "SDK_BIZ_ERROR"),
+
+ /**
+ * SDK_URL_ERROR
+ */
+ CODE_72087(72087, "SDK_URL_ERROR"),
+
+ /**
+ * Search_Title_Fail
+ */
+ CODE_72088(72088, "Search_Title_Fail"),
+
+ /**
+ * TITLE_BUSY
+ */
+ CODE_72089(72089, "TITLE_BUSY"),
+
+ /**
+ * TITLE_NO_FOUND
+ */
+ CODE_72090(72090, "TITLE_NO_FOUND"),
+
+ /**
+ * TOKEN_ERR
+ */
+ CODE_72091(72091, "TOKEN_ERR"),
+
+ /**
+ * USER_TITLE_NOT_FOUND
+ */
+ CODE_72092(72092, "USER_TITLE_NOT_FOUND"),
+
+ /**
+ * Verify_3rd_Fail
+ */
+ CODE_72093(72093, "Verify_3rd_Fail"),
+
+ /**
+ * sys error make out invoice failed
+ */
+ CODE_73000(73000, "sys error make out invoice failed"),
+
+ /**
+ * wxopenid error
+ */
+ CODE_73001(73001, "wxopenid error"),
+
+ /**
+ * ddh orderid empty
+ */
+ CODE_73002(73002, "ddh orderid empty"),
+
+ /**
+ * wxopenid empty
+ */
+ CODE_73003(73003, "wxopenid empty"),
+
+ /**
+ * fpqqlsh empty
+ */
+ CODE_73004(73004, "fpqqlsh empty"),
+
+ /**
+ * not a commercial
+ */
+ CODE_73005(73005, "not a commercial"),
+
+ /**
+ * kplx empty
+ */
+ CODE_73006(73006, "kplx empty"),
+
+ /**
+ * nsrmc empty
+ */
+ CODE_73007(73007, "nsrmc empty"),
+
+ /**
+ * nsrdz empty
+ */
+ CODE_73008(73008, "nsrdz empty"),
+
+ /**
+ * nsrdh empty
+ */
+ CODE_73009(73009, "nsrdh empty"),
+
+ /**
+ * ghfmc empty
+ */
+ CODE_73010(73010, "ghfmc empty"),
+
+ /**
+ * kpr empty
+ */
+ CODE_73011(73011, "kpr empty"),
+
+ /**
+ * jshj empty
+ */
+ CODE_73012(73012, "jshj empty"),
+
+ /**
+ * hjje empty
+ */
+ CODE_73013(73013, "hjje empty"),
+
+ /**
+ * hjse empty
+ */
+ CODE_73014(73014, "hjse empty"),
+
+ /**
+ * hylx empty
+ */
+ CODE_73015(73015, "hylx empty"),
+
+ /**
+ * nsrsbh empty
+ */
+ CODE_73016(73016, "nsrsbh empty"),
+
+ /**
+ * kaipiao plat error
+ */
+ CODE_73100(73100, "kaipiao plat error"),
+
+ /**
+ * nsrsbh not cmp
+ */
+ CODE_73101(73101, "nsrsbh not cmp"),
+
+ /**
+ * invalid wxa appid in url_cell, wxa appid is need to bind biz appid
+ */
+ CODE_73103(73103, "invalid wxa appid in url_cell, wxa appid is need to bind biz appid"),
+
+ /**
+ * reach frequency limit
+ */
+ CODE_73104(73104, "reach frequency limit"),
+
+ /**
+ * Kp plat make invoice timeout, please try again with the same fpqqlsh
+ */
+ CODE_73105(73105, "Kp plat make invoice timeout, please try again with the same fpqqlsh"),
+
+ /**
+ * Fpqqlsh exist with different ddh
+ */
+ CODE_73106(73106, "Fpqqlsh exist with different ddh"),
+
+ /**
+ * Fpqqlsh is processing, please wait and query later
+ */
+ CODE_73107(73107, "Fpqqlsh is processing, please wait and query later"),
+
+ /**
+ * This ddh with other fpqqlsh already exist
+ */
+ CODE_73108(73108, "This ddh with other fpqqlsh already exist"),
+
+ /**
+ * This Fpqqlsh not exist in kpplat
+ */
+ CODE_73109(73109, "This Fpqqlsh not exist in kpplat"),
+
+ /**
+ * get card detail by card id and code fail
+ */
+ CODE_73200(73200, "get card detail by card id and code fail"),
+
+ /**
+ * get cloud invoice record fail
+ */
+ CODE_73201(73201, "get cloud invoice record fail"),
+
+ /**
+ * get appinfo fail
+ */
+ CODE_73202(73202, "get appinfo fail"),
+
+ /**
+ * get invoice category or rule kv error
+ */
+ CODE_73203(73203, "get invoice category or rule kv error"),
+
+ /**
+ * request card not exist
+ */
+ CODE_73204(73204, "request card not exist"),
+
+ /**
+ * 朋友的券玩法升级中,当前暂停创建,请创建其他类型卡券
+ */
+ CODE_73205(73205, "朋友的券玩法升级中,当前暂停创建,请创建其他类型卡券"),
+
+ /**
+ * 朋友的券玩法升级中,当前暂停券点充值,请创建其他类型卡券
+ */
+ CODE_73206(73206, "朋友的券玩法升级中,当前暂停券点充值,请创建其他类型卡券"),
+
+ /**
+ * 朋友的券玩法升级中,当前暂停开通券点账户
+ */
+ CODE_73207(73207, "朋友的券玩法升级中,当前暂停开通券点账户"),
+
+ /**
+ * 朋友的券玩法升级中,当前不支持修改库存
+ */
+ CODE_73208(73208, "朋友的券玩法升级中,当前不支持修改库存"),
+
+ /**
+ * 朋友的券玩法升级中,当前不支持修改有效期
+ */
+ CODE_73209(73209, "朋友的券玩法升级中,当前不支持修改有效期"),
+
+ /**
+ * 当前批次不支持修改卡券批次库存
+ */
+ CODE_73210(73210, "当前批次不支持修改卡券批次库存"),
+
+ /**
+ * 不再支持配置网页链接跳转,请选择小程序替代
+ */
+ CODE_73211(73211, "不再支持配置网页链接跳转,请选择小程序替代"),
+
+ /**
+ * unauthorized backup member
+ */
+ CODE_73212(73212, "unauthorized backup member"),
+
+ /**
+ * invalid code type
+ */
+ CODE_73213(73213, "invalid code type"),
+
+ /**
+ * the user is already a member
+ */
+ CODE_73214(73214, "the user is already a member"),
+
+ /**
+ * 支付打通券能力已下线,请直接使用微信支付代金券API:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/convention/chapter1_1.shtml
+ */
+ CODE_73215(73215, "支付打通券能力已下线,请直接使用微信支付代金券API:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/convention/chapter1_1.shtml"),
+
+ /**
+ * 不合法的按钮名字,请从中选择一个:使用礼品卡/立即使用/去点外卖
+ */
+ CODE_73216(73216, "不合法的按钮名字,请从中选择一个:使用礼品卡/立即使用/去点外卖"),
+
+ /**
+ * 礼品卡本身没有设置appname和path,不允许在修改接口设置
+ */
+ CODE_73217(73217, "礼品卡本身没有设置appname和path,不允许在修改接口设置"),
+
+ /**
+ * 未授权使用礼品卡落地页跳转小程序功能
+ */
+ CODE_73218(73218, "未授权使用礼品卡落地页跳转小程序功能"),
+
+ /**
+ * not find this wx_hotel_id info
+ */
+ CODE_74000(74000, "not find this wx_hotel_id info"),
+
+ /**
+ * request some param empty
+ */
+ CODE_74001(74001, "request some param empty"),
+
+ /**
+ * request some param error
+ */
+ CODE_74002(74002, "request some param error"),
+
+ /**
+ * request some param error
+ */
+ CODE_74003(74003, "request some param error"),
+
+ /**
+ * datetime error
+ */
+ CODE_74004(74004, "datetime error"),
+
+ /**
+ * checkin mode error
+ */
+ CODE_74005(74005, "checkin mode error"),
+
+ /**
+ * carid from error
+ */
+ CODE_74007(74007, "carid from error"),
+
+ /**
+ * this hotel routecode not exist
+ */
+ CODE_74008(74008, "this hotel routecode not exist"),
+
+ /**
+ * this hotel routecode info error contract developer
+ */
+ CODE_74009(74009, "this hotel routecode info error contract developer"),
+
+ /**
+ * maybe not support report mode
+ */
+ CODE_74010(74010, "maybe not support report mode"),
+
+ /**
+ * pic deocde not ok maybe its not good picdata
+ */
+ CODE_74011(74011, "pic deocde not ok maybe its not good picdata"),
+
+ /**
+ * verify sys erro
+ */
+ CODE_74021(74021, "verify sys erro"),
+
+ /**
+ * inner police erro
+ */
+ CODE_74022(74022, "inner police erro"),
+
+ /**
+ * unable to detect the face
+ */
+ CODE_74023(74023, "unable to detect the face"),
+
+ /**
+ * report checkin 2 lvye sys erro
+ */
+ CODE_74040(74040, "report checkin 2 lvye sys erro"),
+
+ /**
+ * report checkou 2 lvye sys erro
+ */
+ CODE_74041(74041, "report checkou 2 lvye sys erro"),
+
+ /**
+ * some param emtpy please check
+ */
+ CODE_75001(75001, "some param emtpy please check"),
+
+ /**
+ * param illegal please check
+ */
+ CODE_75002(75002, "param illegal please check"),
+
+ /**
+ * sys error kv store error
+ */
+ CODE_75003(75003, "sys error kv store error"),
+
+ /**
+ * sys error kvstring store error
+ */
+ CODE_75004(75004, "sys error kvstring store error"),
+
+ /**
+ * product not exist please check your product_id
+ */
+ CODE_75005(75005, "product not exist please check your product_id"),
+
+ /**
+ * order not exist please check order_id and buyer_appid
+ */
+ CODE_75006(75006, "order not exist please check order_id and buyer_appid"),
+
+ /**
+ * do not allow this status to change please check this order_id status now
+ */
+ CODE_75007(75007, "do not allow this status to change please check this order_id status now"),
+
+ /**
+ * product has exist please use new id
+ */
+ CODE_75008(75008, "product has exist please use new id"),
+
+ /**
+ * notify order status failed
+ */
+ CODE_75009(75009, "notify order status failed"),
+
+ /**
+ * buyer bussiness info not exist
+ */
+ CODE_75010(75010, "buyer bussiness info not exist"),
+
+ /**
+ * you had registered
+ */
+ CODE_75011(75011, "you had registered"),
+
+ /**
+ * store image key to kv error, please try again
+ */
+ CODE_75012(75012, "store image key to kv error, please try again"),
+
+ /**
+ * get image fail, please check you image key
+ */
+ CODE_75013(75013, "get image fail, please check you image key"),
+
+ /**
+ * this key is not belong to you
+ */
+ CODE_75014(75014, "this key is not belong to you"),
+
+ /**
+ * this key is expired
+ */
+ CODE_75015(75015, "this key is expired"),
+
+ /**
+ * encrypt decode key fail
+ */
+ CODE_75016(75016, "encrypt decode key fail"),
+
+ /**
+ * encrypt encode key fail
+ */
+ CODE_75017(75017, "encrypt encode key fail"),
+
+ /**
+ * bind buyer business info fail please contact us
+ */
+ CODE_75018(75018, "bind buyer business info fail please contact us"),
+
+ /**
+ * this key is empty, user may not upload file
+ */
+ CODE_75019(75019, "this key is empty, user may not upload file"),
+
+ /**
+ * 系统错误,请稍后再试
+ */
+ CODE_80000(80000, "系统错误,请稍后再试"),
+
+ /**
+ * 参数格式校验错误
+ */
+ CODE_80001(80001, "参数格式校验错误"),
+
+ /**
+ * 签名失败
+ */
+ CODE_80002(80002, "签名失败"),
+
+ /**
+ * 该日期订单未生成
+ */
+ CODE_80003(80003, "该日期订单未生成"),
+
+ /**
+ * 用户未绑卡
+ */
+ CODE_80004(80004, "用户未绑卡"),
+
+ /**
+ * 姓名不符
+ */
+ CODE_80005(80005, "姓名不符"),
+
+ /**
+ * 身份证不符
+ */
+ CODE_80006(80006, "身份证不符"),
+
+ /**
+ * 获取城市信息失败
+ */
+ CODE_80007(80007, "获取城市信息失败"),
+
+ /**
+ * 未找到指定少儿信息
+ */
+ CODE_80008(80008, "未找到指定少儿信息"),
+
+ /**
+ * 少儿身份证不符
+ */
+ CODE_80009(80009, "少儿身份证不符"),
+
+ /**
+ * 少儿未绑定
+ */
+ CODE_80010(80010, "少儿未绑定"),
+
+ /**
+ * 签约号不符
+ */
+ CODE_80011(80011, "签约号不符"),
+
+ /**
+ * 该地区局方配置不存在
+ */
+ CODE_80012(80012, "该地区局方配置不存在"),
+
+ /**
+ * 调用方appid与局方配置不匹配
+ */
+ CODE_80013(80013, "调用方appid与局方配置不匹配"),
+
+ /**
+ * 获取消息账号失败
+ */
+ CODE_80014(80014, "获取消息账号失败"),
+
+ /**
+ * 非法的插件版本
+ */
+ CODE_80066(80066, "非法的插件版本"),
+
+ /**
+ * 找不到使用的插件
+ */
+ CODE_80067(80067, "找不到使用的插件"),
+
+ /**
+ * 没有权限使用该插件
+ */
+ CODE_80082(80082, "没有权限使用该插件"),
+
+ /**
+ * 商家未接入
+ */
+ CODE_80101(80101, "商家未接入"),
+
+ /**
+ * 实名校验code不存在
+ */
+ CODE_80111(80111, "实名校验code不存在"),
+
+ /**
+ * code并发冲突
+ */
+ CODE_80112(80112, "code并发冲突"),
+
+ /**
+ * 无效code
+ */
+ CODE_80113(80113, "无效code"),
+
+ /**
+ * report_type无效
+ */
+ CODE_80201(80201, "report_type无效"),
+
+ /**
+ * service_type无效
+ */
+ CODE_80202(80202, "service_type无效"),
+
+ /**
+ * 申请单不存在
+ */
+ CODE_80300(80300, "申请单不存在"),
+
+ /**
+ * 申请单不属于该账号
+ */
+ CODE_80301(80301, "申请单不属于该账号"),
+
+ /**
+ * 激活号段有重叠
+ */
+ CODE_80302(80302, "激活号段有重叠"),
+
+ /**
+ * 码格式错误
+ */
+ CODE_80303(80303, "码格式错误"),
+
+ /**
+ * 该码未激活
+ */
+ CODE_80304(80304, "该码未激活"),
+
+ /**
+ * 激活失败
+ */
+ CODE_80305(80305, "激活失败"),
+
+ /**
+ * 码索引超出申请范围
+ */
+ CODE_80306(80306, "码索引超出申请范围"),
+
+ /**
+ * 申请已存在
+ */
+ CODE_80307(80307, "申请已存在"),
+
+ /**
+ * 子任务未完成
+ */
+ CODE_80308(80308, "子任务未完成"),
+
+ /**
+ * 子任务文件过期
+ */
+ CODE_80309(80309, "子任务文件过期"),
+
+ /**
+ * 子任务不存在
+ */
+ CODE_80310(80310, "子任务不存在"),
+
+ /**
+ * 获取文件失败
+ */
+ CODE_80311(80311, "获取文件失败"),
+
+ /**
+ * 加密数据失败
+ */
+ CODE_80312(80312, "加密数据失败"),
+
+ /**
+ * 加密数据密钥不存在,请联系接口人申请
+ */
+ CODE_80313(80313, "加密数据密钥不存在,请联系接口人申请"),
+
+ /**
+ * can not set page_id in AddGiftCardPage
+ */
+ CODE_81000(81000, "can not set page_id in AddGiftCardPage"),
+
+ /**
+ * card_list is empty
+ */
+ CODE_81001(81001, "card_list is empty"),
+
+ /**
+ * card_id is not giftcard
+ */
+ CODE_81002(81002, "card_id is not giftcard"),
+
+ /**
+ * banner_pic_url is empty
+ */
+ CODE_81004(81004, "banner_pic_url is empty"),
+
+ /**
+ * banner_pic_url is not from cdn
+ */
+ CODE_81005(81005, "banner_pic_url is not from cdn"),
+
+ /**
+ * giftcard_wrap_pic_url_list is empty
+ */
+ CODE_81006(81006, "giftcard_wrap_pic_url_list is empty"),
+
+ /**
+ * giftcard_wrap_pic_url_list is not from cdn
+ */
+ CODE_81007(81007, "giftcard_wrap_pic_url_list is not from cdn"),
+
+ /**
+ * address is empty
+ */
+ CODE_81008(81008, "address is empty"),
+
+ /**
+ * service_phone is invalid
+ */
+ CODE_81009(81009, "service_phone is invalid"),
+
+ /**
+ * biz_description is empty
+ */
+ CODE_81010(81010, "biz_description is empty"),
+
+ /**
+ * invalid page_id
+ */
+ CODE_81011(81011, "invalid page_id"),
+
+ /**
+ * invalid order_id
+ */
+ CODE_81012(81012, "invalid order_id"),
+
+ /**
+ * invalid TIME_RANGE, begin_time + 31day must less than end_time
+ */
+ CODE_81013(81013, "invalid TIME_RANGE, begin_time + 31day must less than end_time"),
+
+ /**
+ * invalid count! count must equal or less than 100
+ */
+ CODE_81014(81014, "invalid count! count must equal or less than 100"),
+
+ /**
+ * invalid category_index OR category.title is empty OR is_banner but has_category_index
+ */
+ CODE_81015(81015, "invalid category_index OR category.title is empty OR is_banner but has_category_index"),
+
+ /**
+ * is_banner is more than 1
+ */
+ CODE_81016(81016, "is_banner is more than 1"),
+
+ /**
+ * order status error, please check pay status or gifting_status
+ */
+ CODE_81017(81017, "order status error, please check pay status or gifting_status"),
+
+ /**
+ * refund reduplicate, the order is already refunded
+ */
+ CODE_81018(81018, "refund reduplicate, the order is already refunded"),
+
+ /**
+ * lock order fail! the order is refunding by another request
+ */
+ CODE_81019(81019, "lock order fail! the order is refunding by another request"),
+
+ /**
+ * Invalid Args! page_id.size!=0 but all==true, or page_id.size==0 but all==false.
+ */
+ CODE_81020(81020, "Invalid Args! page_id.size!=0 but all==true, or page_id.size==0 but all==false."),
+
+ /**
+ * Empty theme_pic_url.
+ */
+ CODE_81021(81021, "Empty theme_pic_url."),
+
+ /**
+ * Empty theme.title.
+ */
+ CODE_81022(81022, "Empty theme.title."),
+
+ /**
+ * Empty theme.title_title.
+ */
+ CODE_81023(81023, "Empty theme.title_title."),
+
+ /**
+ * Empty theme.item_list.
+ */
+ CODE_81024(81024, "Empty theme.item_list."),
+
+ /**
+ * Empty theme.pic_item_list.
+ */
+ CODE_81025(81025, "Empty theme.pic_item_list."),
+
+ /**
+ * Invalid theme.title.length .
+ */
+ CODE_81026(81026, "Invalid theme.title.length ."),
+
+ /**
+ * Empty background_pic_url.
+ */
+ CODE_81027(81027, "Empty background_pic_url."),
+
+ /**
+ * Empty default_gifting_msg.
+ */
+ CODE_81028(81028, "Empty default_gifting_msg."),
+
+ /**
+ * Duplicate order_id
+ */
+ CODE_81029(81029, "Duplicate order_id"),
+
+ /**
+ * PreAlloc code fail
+ */
+ CODE_81030(81030, "PreAlloc code fail"),
+
+ /**
+ * Too many theme participate_activity
+ */
+ CODE_81031(81031, "Too many theme participate_activity"),
+
+ /**
+ * biz_template_id not exist
+ */
+ CODE_82000(82000, "biz_template_id not exist"),
+
+ /**
+ * result_page_style_id not exist
+ */
+ CODE_82001(82001, "result_page_style_id not exist"),
+
+ /**
+ * deal_msg_style_id not exist
+ */
+ CODE_82002(82002, "deal_msg_style_id not exist"),
+
+ /**
+ * card_style_id not exist
+ */
+ CODE_82003(82003, "card_style_id not exist"),
+
+ /**
+ * biz template not audit OK
+ */
+ CODE_82010(82010, "biz template not audit OK"),
+
+ /**
+ * biz template banned
+ */
+ CODE_82011(82011, "biz template banned"),
+
+ /**
+ * user not use service first
+ */
+ CODE_82020(82020, "user not use service first"),
+
+ /**
+ * exceed long period
+ */
+ CODE_82021(82021, "exceed long period"),
+
+ /**
+ * exceed long period max send cnt
+ */
+ CODE_82022(82022, "exceed long period max send cnt"),
+
+ /**
+ * exceed short period max send cnt
+ */
+ CODE_82023(82023, "exceed short period max send cnt"),
+
+ /**
+ * exceed data size limit
+ */
+ CODE_82024(82024, "exceed data size limit"),
+
+ /**
+ * invalid url
+ */
+ CODE_82025(82025, "invalid url"),
+
+ /**
+ * service disabled
+ */
+ CODE_82026(82026, "service disabled"),
+
+ /**
+ * invalid miniprogram appid
+ */
+ CODE_82027(82027, "invalid miniprogram appid"),
+
+ /**
+ * wx_cs_code should not be empty.
+ */
+ CODE_82100(82100, "wx_cs_code should not be empty."),
+
+ /**
+ * wx_cs_code is invalid.
+ */
+ CODE_82101(82101, "wx_cs_code is invalid."),
+
+ /**
+ * wx_cs_code is expire.
+ */
+ CODE_82102(82102, "wx_cs_code is expire."),
+
+ /**
+ * user_ip should not be empty.
+ */
+ CODE_82103(82103, "user_ip should not be empty."),
+
+ /**
+ * 公众平台账号与服务id不匹配
+ */
+ CODE_82200(82200, "公众平台账号与服务id不匹配"),
+
+ /**
+ * 该停车场已存在,请勿重复添加
+ */
+ CODE_82201(82201, "该停车场已存在,请勿重复添加"),
+
+ /**
+ * 该停车场信息不存在,请先导入
+ */
+ CODE_82202(82202, "该停车场信息不存在,请先导入"),
+
+ /**
+ * 停车场价格格式不正确
+ */
+ CODE_82203(82203, "停车场价格格式不正确"),
+
+ /**
+ * appid与code不匹配
+ */
+ CODE_82204(82204, "appid与code不匹配"),
+
+ /**
+ * wx_park_code字段为空
+ */
+ CODE_82205(82205, "wx_park_code字段为空"),
+
+ /**
+ * wx_park_code无效或已过期
+ */
+ CODE_82206(82206, "wx_park_code无效或已过期"),
+
+ /**
+ * 电话字段为空
+ */
+ CODE_82207(82207, "电话字段为空"),
+
+ /**
+ * 关闭时间格式不正确
+ */
+ CODE_82208(82208, "关闭时间格式不正确"),
+
+ /**
+ * 该appid不支持开通城市服务插件
+ */
+ CODE_82300(82300, "该appid不支持开通城市服务插件"),
+
+ /**
+ * 添加插件失败
+ */
+ CODE_82301(82301, "添加插件失败"),
+
+ /**
+ * 未添加城市服务插件
+ */
+ CODE_82302(82302, "未添加城市服务插件"),
+
+ /**
+ * fileid无效
+ */
+ CODE_82303(82303, "fileid无效"),
+
+ /**
+ * 临时文件过期
+ */
+ CODE_82304(82304, "临时文件过期"),
+
+ /**
+ * there is some param not exist
+ */
+ CODE_83000(83000, "there is some param not exist"),
+
+ /**
+ * system error
+ */
+ CODE_83001(83001, "system error"),
+
+ /**
+ * create_url_sence_failed
+ */
+ CODE_83002(83002, "create_url_sence_failed"),
+
+ /**
+ * appid maybe error or retry
+ */
+ CODE_83003(83003, "appid maybe error or retry"),
+
+ /**
+ * create appid auth failed or retry
+ */
+ CODE_83004(83004, "create appid auth failed or retry"),
+
+ /**
+ * wxwebencrytoken errro
+ */
+ CODE_83005(83005, "wxwebencrytoken errro"),
+
+ /**
+ * wxwebencrytoken expired or no exist
+ */
+ CODE_83006(83006, "wxwebencrytoken expired or no exist"),
+
+ /**
+ * wxwebencrytoken expired
+ */
+ CODE_83007(83007, "wxwebencrytoken expired"),
+
+ /**
+ * wxwebencrytoken no auth
+ */
+ CODE_83008(83008, "wxwebencrytoken no auth"),
+
+ /**
+ * wxwebencrytoken not the mate with openid
+ */
+ CODE_83009(83009, "wxwebencrytoken not the mate with openid"),
+
+ /**
+ * no exist service
+ */
+ CODE_83200(83200, "no exist service"),
+
+ /**
+ * uin has not the service
+ */
+ CODE_83201(83201, "uin has not the service"),
+
+ /**
+ * params is not json or not json array
+ */
+ CODE_83202(83202, "params is not json or not json array"),
+
+ /**
+ * params num exceed 10
+ */
+ CODE_83203(83203, "params num exceed 10"),
+
+ /**
+ * object has not key
+ */
+ CODE_83204(83204, "object has not key"),
+
+ /**
+ * key is not string
+ */
+ CODE_83205(83205, "key is not string"),
+
+ /**
+ * object has not value
+ */
+ CODE_83206(83206, "object has not value"),
+
+ /**
+ * value is not string
+ */
+ CODE_83207(83207, "value is not string"),
+
+ /**
+ * key or value is empty
+ */
+ CODE_83208(83208, "key or value is empty"),
+
+ /**
+ * key exist repeated
+ */
+ CODE_83209(83209, "key exist repeated"),
+
+ /**
+ * invalid identify id
+ */
+ CODE_84001(84001, "invalid identify id"),
+
+ /**
+ * user data expired
+ */
+ CODE_84002(84002, "user data expired"),
+
+ /**
+ * user data not exist
+ */
+ CODE_84003(84003, "user data not exist"),
+
+ /**
+ * video upload fail!
+ */
+ CODE_84004(84004, "video upload fail!"),
+
+ /**
+ * video download fail! please try again
+ */
+ CODE_84005(84005, "video download fail! please try again"),
+
+ /**
+ * name or id_card_number empty
+ */
+ CODE_84006(84006, "name or id_card_number empty"),
+
+ /**
+ * 微信号不存在或微信号设置为不可搜索 user not exist or user cannot be searched
+ */
+ CODE_85001(85001, "微信号不存在或微信号设置为不可搜索"),
+
+ /**
+ * 小程序绑定的体验者数量达到上限 number of tester reach bind limit
+ */
+ CODE_85002(85002, "小程序绑定的体验者数量达到上限"),
+
+ /**
+ * 微信号绑定的小程序体验者达到上限 user already bind too many weapps
+ */
+ CODE_85003(85003, "微信号绑定的小程序体验者达到上限"),
+
+ /**
+ * 微信号已经绑定 user already bind
+ */
+ CODE_85004(85004, "微信号已经绑定"),
+
+ /**
+ * appid not bind weapp
+ */
+ CODE_85005(85005, "appid not bind weapp"),
+
+ /**
+ * 标签格式错误 tag is in invalid format
+ */
+ CODE_85006(85006, "标签格式错误"),
+
+ /**
+ * 页面路径错误 page is in invalid format
+ */
+ CODE_85007(85007, "页面路径错误"),
+
+ /**
+ * 当前小程序没有已经审核通过的类目,请添加类目成功后重试 category is in invalid format
+ */
+ CODE_85008(85008, "当前小程序没有已经审核通过的类目,请添加类目成功后重试"),
+
+ /**
+ * 已经有正在审核的版本 already submit a version under auditing
+ */
+ CODE_85009(85009, "已经有正在审核的版本"),
+
+ /**
+ * item_list 有项目为空 missing required data
+ */
+ CODE_85010(85010, "item_list 有项目为空"),
+
+ /**
+ * 标题填写错误 title is in invalid format
+ */
+ CODE_85011(85011, "标题填写错误"),
+
+ /**
+ * 无效的审核 id invalid audit id
+ */
+ CODE_85012(85012, "无效的审核 id"),
+
+ /**
+ * 无效的自定义配置 invalid ext_json, parse fail or containing invalid path
+ */
+ CODE_85013(85013, "无效的自定义配置"),
+
+ /**
+ * 无效的模板编号 template not exist
+ */
+ CODE_85014(85014, "无效的模板编号"),
+
+ /**
+ * 该账号不是小程序账号/版本输入错误
+ */
+ CODE_85015(85015, "该账号不是小程序账号/版本输入错误"),
+
+ /**
+ * 版本输入错误
+ */
+// CODE_85015(85015, "版本输入错误"),
+
+ /**
+ * 域名数量超过限制 ,总数不能超过1000 exceed valid domain count
+ */
+ CODE_85016(85016, "域名数量超过限制 ,总数不能超过1000"),
+
+ /**
+ * 没有新增域名,请确认小程序已经添加了域名或该域名是否没有在第三方平台添加 no domain to modify after filtered, please confirm the domain has been set in miniprogram or open
+ */
+ CODE_85017(85017, "没有新增域名,请确认小程序已经添加了域名或该域名是否没有在第三方平台添加"),
+
+ /**
+ * 域名没有在第三方平台设置
+ */
+ CODE_85018(85018, "域名没有在第三方平台设置"),
+
+ /**
+ * 没有审核版本 no version is under auditing
+ */
+ CODE_85019(85019, "没有审核版本"),
+
+ /**
+ * 审核状态未满足发布 status not allowed
+ */
+ CODE_85020(85020, "审核状态未满足发布"),
+
+ /**
+ * status not allowed
+ */
+ CODE_85021(85021, "status not allowed"),
+
+ /**
+ * invalid action
+ */
+ CODE_85022(85022, "invalid action"),
+
+ /**
+ * 审核列表填写的项目数不在 1-5 以内 item size is not in valid range
+ */
+ CODE_85023(85023, "审核列表填写的项目数不在 1-5 以内"),
+
+ /**
+ * need complete material
+ */
+ CODE_85024(85024, "need complete material"),
+
+ /**
+ * this phone reach bind limit
+ */
+ CODE_85025(85025, "this phone reach bind limit"),
+
+ /**
+ * this wechat account reach bind limit
+ */
+ CODE_85026(85026, "this wechat account reach bind limit"),
+
+ /**
+ * this idcard reach bind limit
+ */
+ CODE_85027(85027, "this idcard reach bind limit"),
+
+ /**
+ * this contractor reach bind limit
+ */
+ CODE_85028(85028, "this contractor reach bind limit"),
+
+ /**
+ * nickname has used
+ */
+ CODE_85029(85029, "nickname has used"),
+
+ /**
+ * invalid nickname size(4-30)
+ */
+ CODE_85030(85030, "invalid nickname size(4-30)"),
+
+ /**
+ * nickname is forbidden
+ */
+ CODE_85031(85031, "nickname is forbidden"),
+
+ /**
+ * nickname is complained
+ */
+ CODE_85032(85032, "nickname is complained"),
+
+ /**
+ * nickname is illegal
+ */
+ CODE_85033(85033, "nickname is illegal"),
+
+ /**
+ * nickname is protected
+ */
+ CODE_85034(85034, "nickname is protected"),
+
+ /**
+ * nickname is forbidden for different contractor
+ */
+ CODE_85035(85035, "nickname is forbidden for different contractor"),
+
+ /**
+ * introduction is illegal
+ */
+ CODE_85036(85036, "introduction is illegal"),
+
+ /**
+ * store has added
+ */
+ CODE_85038(85038, "store has added"),
+
+ /**
+ * store has added by others
+ */
+ CODE_85039(85039, "store has added by others"),
+
+ /**
+ * store has added by yourseld
+ */
+ CODE_85040(85040, "store has added by yourseld"),
+
+ /**
+ * credential has used
+ */
+ CODE_85041(85041, "credential has used"),
+
+ /**
+ * nearby reach limit
+ */
+ CODE_85042(85042, "nearby reach limit"),
+
+ /**
+ * 模板错误 invalid template, something wrong?
+ */
+ CODE_85043(85043, "模板错误"),
+
+ /**
+ * 代码包超过大小限制 package exceed max limit
+ */
+ CODE_85044(85044, "代码包超过大小限制"),
+
+ /**
+ * ext_json 有不存在的路径 some path in ext_json not exist
+ */
+ CODE_85045(85045, "ext_json 有不存在的路径"),
+
+ /**
+ * tabBar 中缺少 path pagepath missing in tabbar list
+ */
+ CODE_85046(85046, "tabBar 中缺少 path"),
+
+ /**
+ * pages 字段为空 pages are empty
+ */
+ CODE_85047(85047, "pages 字段为空"),
+
+ /**
+ * ext_json 解析失败 parse ext_json fail
+ */
+ CODE_85048(85048, "ext_json 解析失败"),
+
+ /**
+ * reach headimg or introduction quota limit
+ */
+ CODE_85049(85049, "reach headimg or introduction quota limit"),
+
+ /**
+ * verifying, don't apply again
+ */
+ CODE_85050(85050, "verifying, don't apply again"),
+
+ /**
+ * version_desc或者preview_info超限 data too large
+ */
+ CODE_85051(85051, "version_desc或者preview_info超限"),
+
+ /**
+ * app is already released
+ */
+ CODE_85052(85052, "app is already released"),
+
+ /**
+ * please apply merchant first
+ */
+ CODE_85053(85053, "please apply merchant first"),
+
+ /**
+ * poi_id is null, please upgrade first
+ */
+ CODE_85054(85054, "poi_id is null, please upgrade first"),
+
+ /**
+ * map_poi_id is invalid
+ */
+ CODE_85055(85055, "map_poi_id is invalid"),
+
+ /**
+ * mediaid is invalid
+ */
+ CODE_85056(85056, "mediaid is invalid"),
+
+ /**
+ * invalid widget data format
+ */
+ CODE_85057(85057, "invalid widget data format"),
+
+ /**
+ * no valid audit_id exist
+ */
+ CODE_85058(85058, "no valid audit_id exist"),
+
+ /**
+ * overseas access deny
+ */
+ CODE_85059(85059, "overseas access deny"),
+
+ /**
+ * invalid taskid
+ */
+ CODE_85060(85060, "invalid taskid"),
+
+ /**
+ * this phone reach bind limit
+ */
+ CODE_85061(85061, "this phone reach bind limit"),
+
+ /**
+ * this phone in black list
+ */
+ CODE_85062(85062, "this phone in black list"),
+
+ /**
+ * idcard in black list
+ */
+ CODE_85063(85063, "idcard in black list"),
+
+ /**
+ * 找不到模板 template not found
+ */
+ CODE_85064(85064, "找不到模板"),
+
+ /**
+ * 模板库已满 template list is full
+ */
+ CODE_85065(85065, "模板库已满"),
+
+ /**
+ * 链接错误 illegal prefix
+ */
+ CODE_85066(85066, "链接错误"),
+
+ /**
+ * input data error
+ */
+ CODE_85067(85067, "input data error"),
+
+ /**
+ * 测试链接不是子链接 test url is not the sub prefix
+ */
+ CODE_85068(85068, "测试链接不是子链接"),
+
+ /**
+ * 校验文件失败 check confirm file fail
+ */
+ CODE_85069(85069, "校验文件失败"),
+
+ /**
+ * 个人类型小程序无法设置二维码规则 prefix in black list
+ */
+ CODE_85070(85070, "个人类型小程序无法设置二维码规则"),
+
+ /**
+ * 已添加该链接,请勿重复添加 prefix added repeated
+ */
+ CODE_85071(85071, "已添加该链接,请勿重复添加"),
+
+ /**
+ * 该链接已被占用 prefix owned by other
+ */
+ CODE_85072(85072, "该链接已被占用"),
+
+ /**
+ * 二维码规则已满 prefix beyond limit
+ */
+ CODE_85073(85073, "二维码规则已满"),
+
+ /**
+ * 小程序未发布, 小程序必须先发布代码才可以发布二维码跳转规则 not published
+ */
+ CODE_85074(85074, "小程序未发布, 小程序必须先发布代码才可以发布二维码跳转规则"),
+
+ /**
+ * 个人类型小程序无法设置二维码规则 can not access
+ */
+ CODE_85075(85075, "个人类型小程序无法设置二维码规则"),
+
+ /**
+ * 小程序类目信息失效(类目中含有官方下架的类目,请重新选择类目) some category you choose is no longger supported, please choose other category
+ */
+ CODE_85077(85077, "小程序类目信息失效(类目中含有官方下架的类目,请重新选择类目)"),
+
+ /**
+ * operator info error
+ */
+ CODE_85078(85078, "operator info error"),
+
+ /**
+ * 小程序没有线上版本,不能进行灰度 miniprogram has no online release
+ */
+ CODE_85079(85079, "小程序没有线上版本,不能进行灰度"),
+
+ /**
+ * 小程序提交的审核未审核通过 miniprogram commit not approved
+ */
+ CODE_85080(85080, "小程序提交的审核未审核通过"),
+
+ /**
+ * 无效的发布比例 invalid gray percentage
+ */
+ CODE_85081(85081, "无效的发布比例"),
+
+ /**
+ * 当前的发布比例需要比之前设置的高 gray percentage too low
+ */
+ CODE_85082(85082, "当前的发布比例需要比之前设置的高"),
+
+ /**
+ * 搜索标记位被封禁,无法修改 search status is banned
+ */
+ CODE_85083(85083, "搜索标记位被封禁,无法修改"),
+
+ /**
+ * 非法的 status 值,只能填 0 或者 1 search status invalid
+ */
+ CODE_85084(85084, "非法的 status 值,只能填 0 或者 1"),
+
+ /**
+ * 小程序提审数量已达本月上限,请点击查看 submit audit reach limit pleasetry later
+ */
+ CODE_85085(85085, "小程序提审数量已达本月上限,请点击查看"),
+
+ /**
+ * 提交代码审核之前需提前上传代码 must commit before submit audit
+ */
+ CODE_85086(85086, "提交代码审核之前需提前上传代码"),
+
+ /**
+ * 小程序已使用 api navigateToMiniProgram,请声明跳转 appid 列表后再次提交 navigatetominiprogram appid list empty
+ */
+ CODE_85087(85087, "小程序已使用 api navigateToMiniProgram,请声明跳转 appid 列表后再次提交"),
+
+ /**
+ * no qbase privilege
+ */
+ CODE_85088(85088, "no qbase privilege"),
+
+ /**
+ * config not found
+ */
+ CODE_85089(85089, "config not found"),
+
+ /**
+ * wait and commit for this exappid later
+ */
+ CODE_85090(85090, "wait and commit for this exappid later"),
+
+ /**
+ * 小程序的搜索开关被关闭。请访问设置页面打开开关再重试 search status was turned off
+ */
+ CODE_85091(85091, "小程序的搜索开关被关闭。请访问设置页面打开开关再重试"),
+
+ /**
+ * preview_info格式错误 invalid preview_info format
+ */
+ CODE_85092(85092, "preview_info格式错误"),
+
+ /**
+ * preview_info 视频或者图片个数超限 invalid preview_info size
+ */
+ CODE_85093(85093, "preview_info 视频或者图片个数超限"),
+
+ /**
+ * 需提供审核机制说明信息 need add ugc declare
+ */
+ CODE_85094(85094, "需提供审核机制说明信息"),
+
+ /**
+ * 小程序不能发送该运动类型或运动类型不存在
+ */
+ CODE_85101(85101, "小程序不能发送该运动类型或运动类型不存在"),
+
+ /**
+ * 数值异常
+ */
+ CODE_85102(85102, "数值异常"),
+
+ /**
+ * 不是由第三方代小程序进行调用 should be called only from third party
+ */
+ CODE_86000(86000, "不是由第三方代小程序进行调用"),
+
+ /**
+ * 不存在第三方的已经提交的代码 component experience version not exists
+ */
+ CODE_86001(86001, "不存在第三方的已经提交的代码"),
+
+ /**
+ * 小程序还未设置昵称、头像、简介。请先设置完后再重新提交 miniprogram have not completed init procedure
+ */
+ CODE_86002(86002, "小程序还未设置昵称、头像、简介。请先设置完后再重新提交"),
+
+ /**
+ * component do not has category mall
+ */
+ CODE_86003(86003, "component do not has category mall"),
+
+ /**
+ * invalid wechat
+ */
+ CODE_86004(86004, "invalid wechat"),
+
+ /**
+ * wechat limit frequency
+ */
+ CODE_86005(86005, "wechat limit frequency"),
+
+ /**
+ * has no quota to send group msg
+ */
+ CODE_86006(86006, "has no quota to send group msg"),
+
+ /**
+ * 小程序禁止提交
+ */
+ CODE_86007(86007, "小程序禁止提交"),
+
+ /**
+ * 服务商被处罚,限制全部代码提审能力
+ */
+ CODE_86008(86008, "服务商被处罚,限制全部代码提审能力"),
+
+ /**
+ * 服务商新增小程序代码提审能力被限制
+ */
+ CODE_86009(86009, "服务商新增小程序代码提审能力被限制"),
+
+ /**
+ * 服务商迭代小程序代码提审能力被限制
+ */
+ CODE_86010(86010, "服务商迭代小程序代码提审能力被限制"),
+
+ /**
+ * 小游戏不能提交 this is game miniprogram, submit audit is forbidden
+ */
+ CODE_87006(87006, "小游戏不能提交"),
+
+ /**
+ * session_key is not existd or expired
+ */
+ CODE_87007(87007, "session_key is not existd or expired"),
+
+ /**
+ * invalid sig_method
+ */
+ CODE_87008(87008, "invalid sig_method"),
+
+ /**
+ * 无效的签名 invalid signature
+ */
+ CODE_87009(87009, "无效的签名"),
+
+ /**
+ * invalid buffer size
+ */
+ CODE_87010(87010, "invalid buffer size"),
+
+ /**
+ * 现网已经在灰度发布,不能进行版本回退 wxa has a gray release plan, forbid revert release
+ */
+ CODE_87011(87011, "现网已经在灰度发布,不能进行版本回退"),
+
+ /**
+ * 该版本不能回退,可能的原因:1:无上一个线上版用于回退 2:此版本为已回退版本,不能回退 3:此版本为回退功能上线之前的版本,不能回退 forbid revert this version release
+ */
+ CODE_87012(87012, "该版本不能回退,可能的原因:1:无上一个线上版用于回退 2:此版本为已回退版本,不能回退 3:此版本为回退功能上线之前的版本,不能回退"),
+
+ /**
+ * 撤回次数达到上限(每天5次,每个月 10 次) no quota to undo code
+ */
+ CODE_87013(87013, "撤回次数达到上限(每天5次,每个月 10 次)"),
+
+ /**
+ * risky content
+ */
+ CODE_87014(87014, "risky content"),
+
+ /**
+ * query timeout, try a content with less size
+ */
+ CODE_87015(87015, "query timeout, try a content with less size"),
+
+ /**
+ * some key-value in list meet length exceed
+ */
+ CODE_87016(87016, "some key-value in list meet length exceed"),
+
+ /**
+ * user storage size exceed, delete some keys and try again
+ */
+ CODE_87017(87017, "user storage size exceed, delete some keys and try again"),
+
+ /**
+ * user has stored too much keys. delete some keys and try again
+ */
+ CODE_87018(87018, "user has stored too much keys. delete some keys and try again"),
+
+ /**
+ * some keys in list meet length exceed
+ */
+ CODE_87019(87019, "some keys in list meet length exceed"),
+
+ /**
+ * need friend
+ */
+ CODE_87080(87080, "need friend"),
+
+ /**
+ * invalid openid
+ */
+ CODE_87081(87081, "invalid openid"),
+
+ /**
+ * invalid key
+ */
+ CODE_87082(87082, "invalid key"),
+
+ /**
+ * invalid operation
+ */
+ CODE_87083(87083, "invalid operation"),
+
+ /**
+ * invalid opnum
+ */
+ CODE_87084(87084, "invalid opnum"),
+
+ /**
+ * check fail
+ */
+ CODE_87085(87085, "check fail"),
+
+ /**
+ * without comment privilege
+ */
+ CODE_88000(88000, "without comment privilege"),
+
+ /**
+ * msg_data is not exists
+ */
+ CODE_88001(88001, "msg_data is not exists"),
+
+ /**
+ * the article is limit for safety
+ */
+ CODE_88002(88002, "the article is limit for safety"),
+
+ /**
+ * elected comment upper limit
+ */
+ CODE_88003(88003, "elected comment upper limit"),
+
+ /**
+ * comment was deleted by user
+ */
+ CODE_88004(88004, "comment was deleted by user"),
+
+ /**
+ * already reply
+ */
+ CODE_88005(88005, "already reply"),
+
+ /**
+ * reply content beyond max len or content len is zero
+ */
+ CODE_88007(88007, "reply content beyond max len or content len is zero"),
+
+ /**
+ * comment is not exists
+ */
+ CODE_88008(88008, "comment is not exists"),
+
+ /**
+ * reply is not exists
+ */
+ CODE_88009(88009, "reply is not exists"),
+
+ /**
+ * count range error. cout <= 0 or count > 50
+ */
+ CODE_88010(88010, "count range error. cout <= 0 or count > 50"),
+
+ /**
+ * the article is limit for safety
+ */
+ CODE_88011(88011, "the article is limit for safety"),
+
+ /**
+ * account has bound open,该公众号/小程序已经绑定了开放平台帐号 account has bound open
+ */
+ CODE_89000(89000, "account has bound open,该公众号/小程序已经绑定了开放平台帐号"),
+
+ /**
+ * not same contractor,Authorizer 与开放平台帐号主体不相同 not same contractor
+ */
+ CODE_89001(89001, "not same contractor,Authorizer 与开放平台帐号主体不相同"),
+
+ /**
+ * open not exists,该公众号/小程序未绑定微信开放平台帐号。 open not exists
+ */
+ CODE_89002(89002, "open not exists,该公众号/小程序未绑定微信开放平台帐号。"),
+
+ /**
+ * 该开放平台帐号并非通过 api 创建,不允许操作 open is not created by api
+ */
+ CODE_89003(89003, "该开放平台帐号并非通过 api 创建,不允许操作"),
+
+ /**
+ * 该开放平台帐号所绑定的公众号/小程序已达上限(100 个)
+ */
+ CODE_89004(89004, "该开放平台帐号所绑定的公众号/小程序已达上限(100 个)"),
+
+ /**
+ * without add video ability, the ability was banned
+ */
+ CODE_89005(89005, "without add video ability, the ability was banned"),
+
+ /**
+ * without upload video ability, the ability was banned
+ */
+ CODE_89006(89006, "without upload video ability, the ability was banned"),
+
+ /**
+ * wxa quota limit
+ */
+ CODE_89007(89007, "wxa quota limit"),
+
+ /**
+ * overseas account can not link
+ */
+ CODE_89008(89008, "overseas account can not link"),
+
+ /**
+ * wxa reach link limit
+ */
+ CODE_89009(89009, "wxa reach link limit"),
+
+ /**
+ * link message has sent
+ */
+ CODE_89010(89010, "link message has sent"),
+
+ /**
+ * can not unlink nearby wxa
+ */
+ CODE_89011(89011, "can not unlink nearby wxa"),
+
+ /**
+ * can not unlink store or mall
+ */
+ CODE_89012(89012, "can not unlink store or mall"),
+
+ /**
+ * wxa is banned
+ */
+ CODE_89013(89013, "wxa is banned"),
+
+ /**
+ * support version error
+ */
+ CODE_89014(89014, "support version error"),
+
+ /**
+ * has linked wxa
+ */
+ CODE_89015(89015, "has linked wxa"),
+
+ /**
+ * reach same realname quota
+ */
+ CODE_89016(89016, "reach same realname quota"),
+
+ /**
+ * reach different realname quota
+ */
+ CODE_89017(89017, "reach different realname quota"),
+
+ /**
+ * unlink message has sent
+ */
+ CODE_89018(89018, "unlink message has sent"),
+
+ /**
+ * 业务域名无更改,无需重复设置 webview domain not change
+ */
+ CODE_89019(89019, "业务域名无更改,无需重复设置"),
+
+ /**
+ * 尚未设置小程序业务域名,请先在第三方平台中设置小程序业务域名后在调用本接口 open's webview domain is null! Need to set open's webview domain first!
+ */
+ CODE_89020(89020, "尚未设置小程序业务域名,请先在第三方平台中设置小程序业务域名后在调用本接口"),
+
+ /**
+ * 请求保存的域名不是第三方平台中已设置的小程序业务域名或子域名 request domain is not open's webview domain!
+ */
+ CODE_89021(89021, "请求保存的域名不是第三方平台中已设置的小程序业务域名或子域名"),
+
+ /**
+ * delete domain is not exist!
+ */
+ CODE_89022(89022, "delete domain is not exist!"),
+
+ /**
+ * 业务域名数量超过限制,最多可以添加100个业务域名 webview domain exceed limit
+ */
+ CODE_89029(89029, "业务域名数量超过限制,最多可以添加100个业务域名"),
+
+ /**
+ * operation reach month limit
+ */
+ CODE_89030(89030, "operation reach month limit"),
+
+ /**
+ * user bind reach limit
+ */
+ CODE_89031(89031, "user bind reach limit"),
+
+ /**
+ * weapp bind members reach limit
+ */
+ CODE_89032(89032, "weapp bind members reach limit"),
+
+ /**
+ * empty wx or openid
+ */
+ CODE_89033(89033, "empty wx or openid"),
+
+ /**
+ * userstr is invalid
+ */
+ CODE_89034(89034, "userstr is invalid"),
+
+ /**
+ * linking from mp
+ */
+ CODE_89035(89035, "linking from mp"),
+
+ /**
+ * 个人小程序不支持调用 setwebviewdomain 接口 not support single
+ */
+ CODE_89231(89231, "个人小程序不支持调用 setwebviewdomain 接口"),
+
+ /**
+ * hit black contractor
+ */
+ CODE_89235(89235, "hit black contractor"),
+
+ /**
+ * 该插件不能申请 this plugin can not apply
+ */
+ CODE_89236(89236, "该插件不能申请"),
+
+ /**
+ * 已经添加该插件 plugin has send apply message or already bind
+ */
+ CODE_89237(89237, "已经添加该插件"),
+
+ /**
+ * 申请或使用的插件已经达到上限 plugin count reach limit
+ */
+ CODE_89238(89238, "申请或使用的插件已经达到上限"),
+
+ /**
+ * 该插件不存在 plugin no exist
+ */
+ CODE_89239(89239, "该插件不存在"),
+
+ /**
+ * only applying status can be agreed or refused
+ */
+ CODE_89240(89240, "only applying status can be agreed or refused"),
+
+ /**
+ * only refused status can be deleted, please refused first
+ */
+ CODE_89241(89241, "only refused status can be deleted, please refused first"),
+
+ /**
+ * appid is no in the apply list, make sure appid is right
+ */
+ CODE_89242(89242, "appid is no in the apply list, make sure appid is right"),
+
+ /**
+ * 该申请为“待确认”状态,不可删除 can not delete apply request in 24 hours
+ */
+ CODE_89243(89243, "该申请为“待确认”状态,不可删除"),
+
+ /**
+ * 不存在该插件 appid plugin appid is no in the plugin list, make sure plugin appid is right
+ */
+ CODE_89244(89244, "不存在该插件 appid"),
+
+ /**
+ * mini program forbidden to link
+ */
+ CODE_89245(89245, "mini program forbidden to link"),
+
+ /**
+ * plugins with special category are used only by specific apps
+ */
+ CODE_89246(89246, "plugins with special category are used only by specific apps"),
+
+ /**
+ * 系统内部错误 inner error, retry after some while
+ */
+ CODE_89247(89247, "系统内部错误"),
+
+ /**
+ * invalid code type
+ */
+ CODE_89248(89248, "invalid code type"),
+
+ /**
+ * task running
+ */
+ CODE_89249(89249, "task running"),
+
+ /**
+ * 内部错误 inner error, retry after some while
+ */
+ CODE_89250(89250, "内部错误"),
+
+ /**
+ * 模板消息已下发,待法人人脸核身校验 legal person checking
+ */
+ CODE_89251(89251, "模板消息已下发,待法人人脸核身校验"),
+
+ /**
+ * 法人&企业信息一致性校验中 front checking
+ */
+ CODE_89253(89253, "法人&企业信息一致性校验中"),
+
+ /**
+ * lack of some component rights
+ */
+ CODE_89254(89254, "lack of some component rights"),
+
+ /**
+ * code参数无效,请检查code长度以及内容是否正确;注意code_type的值不同需要传的code长度不一样 enterprise code invalid
+ */
+ CODE_89255(89255, "code参数无效,请检查code长度以及内容是否正确;注意code_type的值不同需要传的code长度不一样"),
+
+ /**
+ * token 信息有误 no component info
+ */
+ CODE_89256(89256, "token 信息有误"),
+
+ /**
+ * 该插件版本不支持快速更新 no such version
+ */
+ CODE_89257(89257, "该插件版本不支持快速更新"),
+
+ /**
+ * 当前小程序帐号存在灰度发布中的版本,不可操作快速更新 code is gray online
+ */
+ CODE_89258(89258, "当前小程序帐号存在灰度发布中的版本,不可操作快速更新"),
+
+ /**
+ * zhibo plugin is not allow to delete
+ */
+ CODE_89259(89259, "zhibo plugin is not allow to delete"),
+
+ /**
+ * 订单无效 invalid trade
+ */
+ CODE_89300(89300, "订单无效"),
+
+ /**
+ * 系统不稳定,请稍后再试,如多次失败请通过社区反馈
+ */
+ CODE_89401(89401, "系统不稳定,请稍后再试,如多次失败请通过社区反馈"),
+
+ /**
+ * 该小程序不在待审核队列,请检查是否已提交审核或已审完
+ */
+ CODE_89402(89402, "该小程序不在待审核队列,请检查是否已提交审核或已审完"),
+
+ /**
+ * 本单属于平台不支持加急种类,请等待正常审核流程
+ */
+ CODE_89403(89403, "本单属于平台不支持加急种类,请等待正常审核流程"),
+
+ /**
+ * 本单已加速成功,请勿重复提交
+ */
+ CODE_89404(89404, "本单已加速成功,请勿重复提交"),
+
+ /**
+ * 本月加急额度已用完,请提高提审质量以获取更多额度
+ */
+ CODE_89405(89405, "本月加急额度已用完,请提高提审质量以获取更多额度"),
+
+ /**
+ * 公众号有未处理的确认请求,请稍候重试
+ */
+ CODE_89501(89501, "公众号有未处理的确认请求,请稍候重试"),
+
+ /**
+ * 请耐心等待管理员确认
+ */
+ CODE_89502(89502, "请耐心等待管理员确认"),
+
+ /**
+ * 此次调用需要管理员确认,请耐心等候
+ */
+ CODE_89503(89503, "此次调用需要管理员确认,请耐心等候"),
+
+ /**
+ * 正在等管理员确认,请耐心等待
+ */
+ CODE_89504(89504, "正在等管理员确认,请耐心等待"),
+
+ /**
+ * 正在等管理员确认,请稍候重试
+ */
+ CODE_89505(89505, "正在等管理员确认,请稍候重试"),
+
+ /**
+ * 该IP调用求请求已被公众号管理员拒绝,请24小时后再试,建议调用前与管理员沟通确认
+ */
+ CODE_89506(89506, "该IP调用求请求已被公众号管理员拒绝,请24小时后再试,建议调用前与管理员沟通确认"),
+
+ /**
+ * 该IP调用求请求已被公众号管理员拒绝,请1小时后再试,建议调用前与管理员沟通确认
+ */
+ CODE_89507(89507, "该IP调用求请求已被公众号管理员拒绝,请1小时后再试,建议调用前与管理员沟通确认"),
+
+ /**
+ * invalid order id
+ */
+ CODE_90001(90001, "invalid order id"),
+
+ /**
+ * invalid busi id
+ */
+ CODE_90002(90002, "invalid busi id"),
+
+ /**
+ * invalid bill date
+ */
+ CODE_90003(90003, "invalid bill date"),
+
+ /**
+ * invalid bill type
+ */
+ CODE_90004(90004, "invalid bill type"),
+
+ /**
+ * invalid platform
+ */
+ CODE_90005(90005, "invalid platform"),
+
+ /**
+ * bill not exists
+ */
+ CODE_90006(90006, "bill not exists"),
+
+ /**
+ * invalid openid
+ */
+ CODE_90007(90007, "invalid openid"),
+
+ /**
+ * mp_sig error
+ */
+ CODE_90009(90009, "mp_sig error"),
+
+ /**
+ * no session
+ */
+ CODE_90010(90010, "no session"),
+
+ /**
+ * sig error
+ */
+ CODE_90011(90011, "sig error"),
+
+ /**
+ * order exist
+ */
+ CODE_90012(90012, "order exist"),
+
+ /**
+ * balance not enough
+ */
+ CODE_90013(90013, "balance not enough"),
+
+ /**
+ * order has been confirmed
+ */
+ CODE_90014(90014, "order has been confirmed"),
+
+ /**
+ * order has been canceled
+ */
+ CODE_90015(90015, "order has been canceled"),
+
+ /**
+ * order is being processed
+ */
+ CODE_90016(90016, "order is being processed"),
+
+ /**
+ * no privilege
+ */
+ CODE_90017(90017, "no privilege"),
+
+ /**
+ * invalid parameter
+ */
+ CODE_90018(90018, "invalid parameter"),
+
+ /**
+ * 不是公众号快速创建的小程序 not fast register
+ */
+ CODE_91001(91001, "不是公众号快速创建的小程序"),
+
+ /**
+ * 小程序发布后不可改名 has published
+ */
+ CODE_91002(91002, "小程序发布后不可改名"),
+
+ /**
+ * 改名状态不合法 invalid change stat
+ */
+ CODE_91003(91003, "改名状态不合法"),
+
+ /**
+ * 昵称不合法 invalid nickname
+ */
+ CODE_91004(91004, "昵称不合法"),
+
+ /**
+ * 昵称 15 天主体保护 nickname protected
+ */
+ CODE_91005(91005, "昵称 15 天主体保护"),
+
+ /**
+ * 昵称命中微信号 nickname used by username
+ */
+ CODE_91006(91006, "昵称命中微信号"),
+
+ /**
+ * 昵称已被占用 nickname used
+ */
+ CODE_91007(91007, "昵称已被占用"),
+
+ /**
+ * 昵称命中 7 天侵权保护期 nickname protected
+ */
+ CODE_91008(91008, "昵称命中 7 天侵权保护期"),
+
+ /**
+ * 需要提交材料 nickname need proof
+ */
+ CODE_91009(91009, "需要提交材料"),
+
+ /**
+ * 其他错误
+ */
+ CODE_91010(91010, "其他错误"),
+
+ /**
+ * 查不到昵称修改审核单信息
+ */
+ CODE_91011(91011, "查不到昵称修改审核单信息"),
+
+ /**
+ * 其它错误
+ */
+ CODE_91012(91012, "其它错误"),
+
+ /**
+ * 占用名字过多 lock name too more
+ */
+ CODE_91013(91013, "占用名字过多"),
+
+ /**
+ * +号规则 同一类型关联名主体不一致 diff master plus
+ */
+ CODE_91014(91014, "+号规则 同一类型关联名主体不一致"),
+
+ /**
+ * 原始名不同类型主体不一致 diff master
+ */
+ CODE_91015(91015, "原始名不同类型主体不一致"),
+
+ /**
+ * 名称占用者 ≥2 name more owner
+ */
+ CODE_91016(91016, "名称占用者 ≥2"),
+
+ /**
+ * +号规则 不同类型关联名主体不一致 other diff master plus
+ */
+ CODE_91017(91017, "+号规则 不同类型关联名主体不一致"),
+
+ /**
+ * 组织类型小程序发布后,侵权被清空昵称,需走认证改名
+ */
+ CODE_91018(91018, "组织类型小程序发布后,侵权被清空昵称,需走认证改名"),
+
+ /**
+ * 小程序正在审核中
+ */
+ CODE_91019(91019, "小程序正在审核中"),
+
+ /**
+ * 该经营资质已添加,请勿重复添加
+ */
+ CODE_92000(92000, "该经营资质已添加,请勿重复添加"),
+
+ /**
+ * 附近地点添加数量达到上线,无法继续添加
+ */
+ CODE_92002(92002, "附近地点添加数量达到上线,无法继续添加"),
+
+ /**
+ * 地点已被其它小程序占用
+ */
+ CODE_92003(92003, "地点已被其它小程序占用"),
+
+ /**
+ * 附近功能被封禁
+ */
+ CODE_92004(92004, "附近功能被封禁"),
+
+ /**
+ * 地点正在审核中
+ */
+ CODE_92005(92005, "地点正在审核中"),
+
+ /**
+ * 地点正在展示小程序
+ */
+ CODE_92006(92006, "地点正在展示小程序"),
+
+ /**
+ * 地点审核失败
+ */
+ CODE_92007(92007, "地点审核失败"),
+
+ /**
+ * 小程序未展示在该地点
+ */
+ CODE_92008(92008, "小程序未展示在该地点"),
+
+ /**
+ * 小程序未上架或不可见
+ */
+ CODE_93009(93009, "小程序未上架或不可见"),
+
+ /**
+ * 地点不存在
+ */
+ CODE_93010(93010, "地点不存在"),
+
+ /**
+ * 个人类型小程序不可用
+ */
+ CODE_93011(93011, "个人类型小程序不可用"),
+
+ /**
+ * 非普通类型小程序(门店小程序、小店小程序等)不可用
+ */
+ CODE_93012(93012, "非普通类型小程序(门店小程序、小店小程序等)不可用"),
+
+ /**
+ * 从腾讯地图获取地址详细信息失败
+ */
+ CODE_93013(93013, "从腾讯地图获取地址详细信息失败"),
+
+ /**
+ * 同一资质证件号重复添加
+ */
+ CODE_93014(93014, "同一资质证件号重复添加"),
+
+ /**
+ * 附近类目审核中
+ */
+ CODE_93015(93015, "附近类目审核中"),
+
+ /**
+ * 服务标签个数超限制(官方最多5个,自定义最多4个)
+ */
+ CODE_93016(93016, "服务标签个数超限制(官方最多5个,自定义最多4个)"),
+
+ /**
+ * 服务标签或者客服的名字不符合要求
+ */
+ CODE_93017(93017, "服务标签或者客服的名字不符合要求"),
+
+ /**
+ * 服务能力中填写的小程序appid不是同主体小程序
+ */
+ CODE_93018(93018, "服务能力中填写的小程序appid不是同主体小程序"),
+
+ /**
+ * 申请类目之后才能添加附近地点
+ */
+ CODE_93019(93019, "申请类目之后才能添加附近地点"),
+
+ /**
+ * qualification_list无效
+ */
+ CODE_93020(93020, "qualification_list无效"),
+
+ /**
+ * company_name字段为空
+ */
+ CODE_93021(93021, "company_name字段为空"),
+
+ /**
+ * credential字段为空
+ */
+ CODE_93022(93022, "credential字段为空"),
+
+ /**
+ * address字段为空
+ */
+ CODE_93023(93023, "address字段为空"),
+
+ /**
+ * qualification_list字段为空
+ */
+ CODE_93024(93024, "qualification_list字段为空"),
+
+ /**
+ * 服务appid对应的path不存在
+ */
+ CODE_93025(93025, "服务appid对应的path不存在"),
+
+ /**
+ * missing cert_serialno
+ */
+ CODE_94001(94001, "missing cert_serialno"),
+
+ /**
+ * use not register wechat pay
+ */
+ CODE_94002(94002, "use not register wechat pay"),
+
+ /**
+ * invalid sign
+ */
+ CODE_94003(94003, "invalid sign"),
+
+ /**
+ * user do not has real name info
+ */
+ CODE_94004(94004, "user do not has real name info"),
+
+ /**
+ * invalid user token
+ */
+ CODE_94005(94005, "invalid user token"),
+
+ /**
+ * appid unauthorized
+ */
+ CODE_94006(94006, "appid unauthorized"),
+
+ /**
+ * appid unbind mchid
+ */
+ CODE_94007(94007, "appid unbind mchid"),
+
+ /**
+ * invalid timestamp
+ */
+ CODE_94008(94008, "invalid timestamp"),
+
+ /**
+ * invalid cert_serialno, cert_serialno's size should be 40
+ */
+ CODE_94009(94009, "invalid cert_serialno, cert_serialno's size should be 40"),
+
+ /**
+ * invalid mch_id
+ */
+ CODE_94010(94010, "invalid mch_id"),
+
+ /**
+ * timestamp expired
+ */
+ CODE_94011(94011, "timestamp expired"),
+
+ /**
+ * appid和商户号的绑定关系不存在
+ */
+ CODE_94012(94012, "appid和商户号的绑定关系不存在"),
+
+ /**
+ * wxcode decode fail
+ */
+ CODE_95001(95001, "wxcode decode fail"),
+
+ /**
+ * wxcode recognize unautuorized
+ */
+ CODE_95002(95002, "wxcode recognize unautuorized"),
+
+ /**
+ * get product by page args invalid
+ */
+ CODE_95101(95101, "get product by page args invalid"),
+
+ /**
+ * get product materials by cond args invalid
+ */
+ CODE_95102(95102, "get product materials by cond args invalid"),
+
+ /**
+ * material id list size out of limit
+ */
+ CODE_95103(95103, "material id list size out of limit"),
+
+ /**
+ * import product frequence out of limit
+ */
+ CODE_95104(95104, "import product frequence out of limit"),
+
+ /**
+ * mp is importing products, api is rejected to import
+ */
+ CODE_95105(95105, "mp is importing products, api is rejected to import"),
+
+ /**
+ * api is rejected to import, need to set commission ratio on mp first
+ */
+ CODE_95106(95106, "api is rejected to import, need to set commission ratio on mp first"),
+
+ /**
+ * invalid image url
+ */
+ CODE_101000(101000, "无效图片链接"),
+
+ /**
+ * certificate not found
+ */
+ CODE_101001(101001, "未找到证书"),
+
+ /**
+ * not enough market quota
+ */
+ CODE_101002(101002, "not enough market quota"),
+
+ /**
+ * 入参错误
+ */
+ CODE_200002(200002, "入参错误"),
+
+ /**
+ * 此账号已被封禁,无法操作
+ */
+ CODE_200011(200011, "此账号已被封禁,无法操作"),
+
+ /**
+ * 个人模板数已达上限,上限25个
+ */
+ CODE_200012(200012, "个人模板数已达上限,上限25个"),
+
+ /**
+ * 此模板已被封禁,无法选用
+ */
+ CODE_200013(200013, "此模板已被封禁,无法选用"),
+
+ /**
+ * 模板 tid 参数错误
+ */
+ CODE_200014(200014, "模板 tid 参数错误"),
+
+ /**
+ * start 参数错误
+ */
+ CODE_200016(200016, "start 参数错误"),
+
+ /**
+ * limit 参数错误
+ */
+ CODE_200017(200017, "limit 参数错误"),
+
+ /**
+ * 类目 ids 缺失
+ */
+ CODE_200018(200018, "类目 ids 缺失"),
+
+ /**
+ * 类目 ids 不合法
+ */
+ CODE_200019(200019, "类目 ids 不合法"),
+
+ /**
+ * 关键词列表 kidList 参数错误
+ */
+ CODE_200020(200020, "关键词列表 kidList 参数错误"),
+
+ /**
+ * 场景描述 sceneDesc 参数错误
+ */
+ CODE_200021(200021, "场景描述 sceneDesc 参数错误"),
+
+ /**
+ * 禁止创建/更新商品(如商品创建功能被封禁) 或 禁止编辑&更新房间
+ */
+ CODE_300001(300001, "禁止创建/更新商品(如商品创建功能被封禁) 或 禁止编辑&更新房间"),
+
+ /**
+ * 名称长度不符合规则
+ */
+ CODE_300002(300002, "名称长度不符合规则"),
+
+ /**
+ * 价格输入不合规(如现价比原价大、传入价格非数字等)
+ */
+ CODE_300003(300003, "价格输入不合规(如现价比原价大、传入价格非数字等)"),
+
+ /**
+ * 商品名称存在违规违法内容
+ */
+ CODE_300004(300004, "商品名称存在违规违法内容"),
+
+ /**
+ * 商品图片存在违规违法内容
+ */
+ CODE_300005(300005, "商品图片存在违规违法内容"),
+
+ /**
+ * 图片上传失败(如mediaID过期)
+ */
+ CODE_300006(300006, "图片上传失败(如mediaID过期)"),
+
+ /**
+ * 线上小程序版本不存在该链接
+ */
+ CODE_300007(300007, "线上小程序版本不存在该链接"),
+
+ /**
+ * 添加商品失败
+ */
+ CODE_300008(300008, "添加商品失败"),
+
+ /**
+ * 商品审核撤回失败
+ */
+ CODE_300009(300009, "商品审核撤回失败"),
+
+ /**
+ * 商品审核状态不对(如商品审核中)
+ */
+ CODE_300010(300010, "商品审核状态不对(如商品审核中)"),
+
+ /**
+ * 操作非法(API不允许操作非API创建的商品)
+ */
+ CODE_300011(300011, "操作非法(API不允许操作非API创建的商品)"),
+
+ /**
+ * 没有提审额度(每天500次提审额度)
+ */
+ CODE_300012(300012, "没有提审额度(每天500次提审额度)"),
+
+ /**
+ * 提审失败
+ */
+ CODE_300013(300013, "提审失败"),
+
+ /**
+ * 审核中,无法删除(非零代表失败)
+ */
+ CODE_300014(300014, "审核中,无法删除(非零代表失败)"),
+
+ /**
+ * 商品未提审
+ */
+ CODE_300017(300017, "商品未提审"),
+
+ /**
+ * 商品添加成功,审核失败
+ */
+ CODE_300021(300021, "商品添加成功,审核失败"),
+
+ /**
+ * 此房间号不存在
+ */
+ CODE_300022(300022, "此房间号不存在"),
+
+ /**
+ * 房间状态 拦截(当前房间状态不允许此操作)
+ */
+ CODE_300023(300023, "房间状态 拦截(当前房间状态不允许此操作)"),
+
+ /**
+ * 商品不存在
+ */
+ CODE_300024(300024, "商品不存在"),
+
+ /**
+ * 商品审核未通过
+ */
+ CODE_300025(300025, "商品审核未通过"),
+
+ /**
+ * 房间商品数量已经满额
+ */
+ CODE_300026(300026, "房间商品数量已经满额"),
+
+ /**
+ * 导入商品失败
+ */
+ CODE_300027(300027, "导入商品失败"),
+
+ /**
+ * 房间名称违规
+ */
+ CODE_300028(300028, "房间名称违规"),
+
+ /**
+ * 主播昵称违规
+ */
+ CODE_300029(300029, "主播昵称违规"),
+
+ /**
+ * 主播微信号不合法
+ */
+ CODE_300030(300030, "主播微信号不合法"),
+
+ /**
+ * 直播间封面图不合规
+ */
+ CODE_300031(300031, "直播间封面图不合规"),
+
+ /**
+ * 直播间分享图违规
+ */
+ CODE_300032(300032, "直播间分享图违规"),
+
+ /**
+ * 添加商品超过直播间上限
+ */
+ CODE_300033(300033, "添加商品超过直播间上限"),
+
+ /**
+ * 主播微信昵称长度不符合要求
+ */
+ CODE_300034(300034, "主播微信昵称长度不符合要求"),
+
+ /**
+ * 主播微信号不存在
+ */
+ CODE_300035(300035, "主播微信号不存在"),
+
+ /**
+ * 主播微信号未实名认证
+ */
+ CODE_300036(300036, "主播微信号未实名认证"),
+
+ /**
+ * invalid file name
+ */
+ CODE_600001(600001, "invalid file name"),
+
+ /**
+ * no permission to upload file
+ */
+ CODE_600002(600002, "no permission to upload file"),
+
+ /**
+ * invalid size of source
+ */
+ CODE_600003(600003, "invalid size of source"),
+
+ /**
+ * 票据已存在
+ */
+ CODE_928000(928000, "票据已存在"),
+
+ /**
+ * 票据不存在
+ */
+ CODE_928001(928001, "票据不存在"),
+
+ /**
+ * sysem error
+ */
+ CODE_930555(930555, "sysem error"),
+
+ /**
+ * delivery timeout
+ */
+ CODE_930556(930556, "delivery timeout"),
+
+ /**
+ * delivery system error
+ */
+ CODE_930557(930557, "delivery system error"),
+
+ /**
+ * delivery logic error
+ */
+ CODE_930558(930558, "delivery logic error"),
+
+ /**
+ * 沙盒环境openid无效 invaild openid
+ */
+ CODE_930559(930559, "沙盒环境openid无效"),
+
+ /**
+ * shopid need bind first
+ */
+ CODE_930560(930560, "shopid need bind first"),
+
+ /**
+ * 参数错误 args error
+ */
+ CODE_930561(930561, "参数错误"),
+
+ /**
+ * order already exists
+ */
+ CODE_930562(930562, "order already exists"),
+
+ /**
+ * 订单不存在 order not exists
+ */
+ CODE_930563(930563, "订单不存在"),
+
+ /**
+ * 沙盒环境调用无配额 quota run out, try next day
+ */
+ CODE_930564(930564, "沙盒环境调用无配额"),
+
+ /**
+ * order finished
+ */
+ CODE_930565(930565, "order finished"),
+
+ /**
+ * not support, plz auth at mp.weixin.qq.com
+ */
+ CODE_930566(930566, "not support, plz auth at mp.weixin.qq.com"),
+
+ /**
+ * shop arg error
+ */
+ CODE_930567(930567, "shop arg error"),
+
+ /**
+ * 不支持个人类型小程序 not personal account
+ */
+ CODE_930568(930568, "不支持个人类型小程序"),
+
+ /**
+ * 已经开通不需要再开通 already open
+ */
+ CODE_930569(930569, "已经开通不需要再开通"),
+
+ /**
+ * cargo_first_class or cargo_second_class invalid
+ */
+ CODE_930570(930570, "cargo_first_class or cargo_second_class invalid"),
+
+ /**
+ * 该商户没有内测权限,请先申请权限: https://wj.qq.com/s2/7243532/fcfb/
+ */
+ CODE_930571(930571, "该商户没有内测权限,请先申请权限: https://wj.qq.com/s2/7243532/fcfb/"),
+
+ /**
+ * fee already set
+ */
+ CODE_931010(931010, "fee already set"),
+
+ /**
+ * unbind download url
+ */
+ CODE_6000100(6000100, "unbind download url"),
+
+ /**
+ * no response data
+ */
+ CODE_6000101(6000101, "no response data"),
+
+ /**
+ * response data too big
+ */
+ CODE_6000102(6000102, "response data too big"),
+
+ /**
+ * POST 数据参数不合法
+ */
+ CODE_9001001(9001001, "POST 数据参数不合法"),
+
+ /**
+ * 远端服务不可用
+ */
+ CODE_9001002(9001002, "远端服务不可用"),
+
+ /**
+ * Ticket 不合法
+ */
+ CODE_9001003(9001003, "Ticket 不合法"),
+
+ /**
+ * 获取摇周边用户信息失败
+ */
+ CODE_9001004(9001004, "获取摇周边用户信息失败"),
+
+ /**
+ * 获取商户信息失败
+ */
+ CODE_9001005(9001005, "获取商户信息失败"),
+
+ /**
+ * 获取 OpenID 失败
+ */
+ CODE_9001006(9001006, "获取 OpenID 失败"),
+
+ /**
+ * 上传文件缺失
+ */
+ CODE_9001007(9001007, "上传文件缺失"),
+
+ /**
+ * 上传素材的文件类型不合法
+ */
+ CODE_9001008(9001008, "上传素材的文件类型不合法"),
+
+ /**
+ * 上传素材的文件尺寸不合法
+ */
+ CODE_9001009(9001009, "上传素材的文件尺寸不合法"),
+
+ /**
+ * 上传失败
+ */
+ CODE_9001010(9001010, "上传失败"),
+
+ /**
+ * 帐号不合法
+ */
+ CODE_9001020(9001020, "帐号不合法"),
+
+ /**
+ * 已有设备激活率低于 50% ,不能新增设备
+ */
+ CODE_9001021(9001021, "已有设备激活率低于 50% ,不能新增设备"),
+
+ /**
+ * 设备申请数不合法,必须为大于 0 的数字
+ */
+ CODE_9001022(9001022, "设备申请数不合法,必须为大于 0 的数字"),
+
+ /**
+ * 已存在审核中的设备 ID 申请
+ */
+ CODE_9001023(9001023, "已存在审核中的设备 ID 申请"),
+
+ /**
+ * 一次查询设备 ID 数量不能超过 50
+ */
+ CODE_9001024(9001024, "一次查询设备 ID 数量不能超过 50"),
+
+ /**
+ * 设备 ID 不合法
+ */
+ CODE_9001025(9001025, "设备 ID 不合法"),
+
+ /**
+ * 页面 ID 不合法
+ */
+ CODE_9001026(9001026, "页面 ID 不合法"),
+
+ /**
+ * 页面参数不合法
+ */
+ CODE_9001027(9001027, "页面参数不合法"),
+
+ /**
+ * 一次删除页面 ID 数量不能超过 10
+ */
+ CODE_9001028(9001028, "一次删除页面 ID 数量不能超过 10"),
+
+ /**
+ * 页面已应用在设备中,请先解除应用关系再删除
+ */
+ CODE_9001029(9001029, "页面已应用在设备中,请先解除应用关系再删除"),
+
+ /**
+ * 一次查询页面 ID 数量不能超过 50
+ */
+ CODE_9001030(9001030, "一次查询页面 ID 数量不能超过 50"),
+
+ /**
+ * 时间区间不合法
+ */
+ CODE_9001031(9001031, "时间区间不合法"),
+
+ /**
+ * 保存设备与页面的绑定关系参数错误
+ */
+ CODE_9001032(9001032, "保存设备与页面的绑定关系参数错误"),
+
+ /**
+ * 门店 ID 不合法
+ */
+ CODE_9001033(9001033, "门店 ID 不合法"),
+
+ /**
+ * 设备备注信息过长
+ */
+ CODE_9001034(9001034, "设备备注信息过长"),
+
+ /**
+ * 设备申请参数不合法
+ */
+ CODE_9001035(9001035, "设备申请参数不合法"),
+
+ /**
+ * 查询起始值 begin 不合法
+ */
+ CODE_9001036(9001036, "查询起始值 begin 不合法"),
+
+ /**
+ * params invalid
+ */
+ CODE_9002008(9002008, "params invalid"),
+
+ /**
+ * shop id not exist
+ */
+ CODE_9002009(9002009, "shop id not exist"),
+
+ /**
+ * ssid or password should start with "WX"
+ */
+ CODE_9002010(9002010, "ssid or password should start with \"WX\""),
+
+ /**
+ * ssid can not include chinese
+ */
+ CODE_9002011(9002011, "ssid can not include chinese"),
+
+ /**
+ * passsword can not include chinese
+ */
+ CODE_9002012(9002012, "passsword can not include chinese"),
+
+ /**
+ * password must be between 8 and 24 characters
+ */
+ CODE_9002013(9002013, "password must be between 8 and 24 characters"),
+
+ /**
+ * device exist
+ */
+ CODE_9002016(9002016, "device exist"),
+
+ /**
+ * device not exist
+ */
+ CODE_9002017(9002017, "device not exist"),
+
+ /**
+ * the size of query list reach limit
+ */
+ CODE_9002026(9002026, "the size of query list reach limit"),
+
+ /**
+ * not allowed to modify, ensure you are an certified or component account
+ */
+ CODE_9002041(9002041, "not allowed to modify, ensure you are an certified or component account"),
+
+ /**
+ * invalid ssid, can not include none utf8 characters, and should be between 1 and 32 bytes
+ */
+ CODE_9002044(9002044, "invalid ssid, can not include none utf8 characters, and should be between 1 and 32 bytes"),
+
+ /**
+ * shop id has not be audited, this bar type is not enable
+ */
+ CODE_9002052(9002052, "shop id has not be audited, this bar type is not enable"),
+
+ /**
+ * protocol type is not same with the exist device
+ */
+ CODE_9007003(9007003, "protocol type is not same with the exist device"),
+
+ /**
+ * ssid not exist
+ */
+ CODE_9007004(9007004, "ssid not exist"),
+
+ /**
+ * device count limit
+ */
+ CODE_9007005(9007005, "device count limit"),
+
+ /**
+ * card info not exist
+ */
+ CODE_9008001(9008001, "card info not exist"),
+
+ /**
+ * card expiration time is invalid
+ */
+ CODE_9008002(9008002, "card expiration time is invalid"),
+
+ /**
+ * url size invalid, keep less than 255
+ */
+ CODE_9008003(9008003, "url size invalid, keep less than 255"),
+
+ /**
+ * url can not include chinese
+ */
+ CODE_9008004(9008004, "url can not include chinese"),
+
+ /**
+ * order_id not exist
+ */
+ CODE_9200001(9200001, "order_id not exist"),
+
+ /**
+ * order of other biz
+ */
+ CODE_9200002(9200002, "order of other biz"),
+
+ /**
+ * blocked
+ */
+ CODE_9200003(9200003, "blocked"),
+
+ /**
+ * payment notice disabled
+ */
+ CODE_9200211(9200211, "payment notice disabled"),
+
+ /**
+ * payment notice not exist
+ */
+ CODE_9200231(9200231, "payment notice not exist"),
+
+ /**
+ * payment notice paid
+ */
+ CODE_9200232(9200232, "payment notice paid"),
+
+ /**
+ * payment notice canceled
+ */
+ CODE_9200233(9200233, "payment notice canceled"),
+
+ /**
+ * payment notice expired
+ */
+ CODE_9200235(9200235, "payment notice expired"),
+
+ /**
+ * bank not allow
+ */
+ CODE_9200236(9200236, "bank not allow"),
+
+ /**
+ * freq limit
+ */
+ CODE_9200295(9200295, "freq limit"),
+
+ /**
+ * suspend payment at current time
+ */
+ CODE_9200297(9200297, "suspend payment at current time"),
+
+ /**
+ * 3rd resp decrypt error
+ */
+ CODE_9200298(9200298, "3rd resp decrypt error"),
+
+ /**
+ * 3rd resp system error
+ */
+ CODE_9200299(9200299, "3rd resp system error"),
+
+ /**
+ * 3rd resp sign error
+ */
+ CODE_9200300(9200300, "3rd resp sign error"),
+
+ /**
+ * desc empty
+ */
+ CODE_9201000(9201000, "desc empty"),
+
+ /**
+ * fee not equal items'
+ */
+ CODE_9201001(9201001, "fee not equal items'"),
+
+ /**
+ * payment info incorrect
+ */
+ CODE_9201002(9201002, "payment info incorrect"),
+
+ /**
+ * fee is 0
+ */
+ CODE_9201003(9201003, "fee is 0"),
+
+ /**
+ * payment expire date format error
+ */
+ CODE_9201004(9201004, "payment expire date format error"),
+
+ /**
+ * appid error
+ */
+ CODE_9201005(9201005, "appid error"),
+
+ /**
+ * payment order id error
+ */
+ CODE_9201006(9201006, "payment order id error"),
+
+ /**
+ * openid error
+ */
+ CODE_9201007(9201007, "openid error"),
+
+ /**
+ * return_url error
+ */
+ CODE_9201008(9201008, "return_url error"),
+
+ /**
+ * ip error
+ */
+ CODE_9201009(9201009, "ip error"),
+
+ /**
+ * order_id error
+ */
+ CODE_9201010(9201010, "order_id error"),
+
+ /**
+ * reason error
+ */
+ CODE_9201011(9201011, "reason error"),
+
+ /**
+ * mch_id error
+ */
+ CODE_9201012(9201012, "mch_id error"),
+
+ /**
+ * bill_date error
+ */
+ CODE_9201013(9201013, "bill_date error"),
+
+ /**
+ * bill_type error
+ */
+ CODE_9201014(9201014, "bill_type error"),
+
+ /**
+ * trade_type error
+ */
+ CODE_9201015(9201015, "trade_type error"),
+
+ /**
+ * bank_id error
+ */
+ CODE_9201016(9201016, "bank_id error"),
+
+ /**
+ * bank_account error
+ */
+ CODE_9201017(9201017, "bank_account error"),
+
+ /**
+ * payment_notice_no error
+ */
+ CODE_9201018(9201018, "payment_notice_no error"),
+
+ /**
+ * department_code error
+ */
+ CODE_9201019(9201019, "department_code error"),
+
+ /**
+ * payment_notice_type error
+ */
+ CODE_9201020(9201020, "payment_notice_type error"),
+
+ /**
+ * region_code error
+ */
+ CODE_9201021(9201021, "region_code error"),
+
+ /**
+ * department_name error
+ */
+ CODE_9201022(9201022, "department_name error"),
+
+ /**
+ * fee not equal finance's
+ */
+ CODE_9201023(9201023, "fee not equal finance's"),
+
+ /**
+ * refund_out_id error
+ */
+ CODE_9201024(9201024, "refund_out_id error"),
+
+ /**
+ * not combined order_id
+ */
+ CODE_9201026(9201026, "not combined order_id"),
+
+ /**
+ * partial sub order is test
+ */
+ CODE_9201027(9201027, "partial sub order is test"),
+
+ /**
+ * desc too long
+ */
+ CODE_9201029(9201029, "desc too long"),
+
+ /**
+ * sub order list size error
+ */
+ CODE_9201031(9201031, "sub order list size error"),
+
+ /**
+ * sub order repeated
+ */
+ CODE_9201032(9201032, "sub order repeated"),
+
+ /**
+ * auth_code empty
+ */
+ CODE_9201033(9201033, "auth_code empty"),
+
+ /**
+ * bank_id empty but mch_id not empty
+ */
+ CODE_9201034(9201034, "bank_id empty but mch_id not empty"),
+
+ /**
+ * sum of other fees exceed total fee
+ */
+ CODE_9201035(9201035, "sum of other fees exceed total fee"),
+
+ /**
+ * other user paying
+ */
+ CODE_9202000(9202000, "other user paying"),
+
+ /**
+ * pay process not finish
+ */
+ CODE_9202001(9202001, "pay process not finish"),
+
+ /**
+ * no refund permission
+ */
+ CODE_9202002(9202002, "no refund permission"),
+
+ /**
+ * ip limit
+ */
+ CODE_9202003(9202003, "ip limit"),
+
+ /**
+ * freq limit
+ */
+ CODE_9202004(9202004, "freq limit"),
+
+ /**
+ * user weixin account abnormal
+ */
+ CODE_9202005(9202005, "user weixin account abnormal"),
+
+ /**
+ * account balance not enough
+ */
+ CODE_9202006(9202006, "account balance not enough"),
+
+ /**
+ * refund request repeated
+ */
+ CODE_9202010(9202010, "refund request repeated"),
+
+ /**
+ * has refunded
+ */
+ CODE_9202011(9202011, "has refunded"),
+
+ /**
+ * refund exceed total fee
+ */
+ CODE_9202012(9202012, "refund exceed total fee"),
+
+ /**
+ * busi_id dup
+ */
+ CODE_9202013(9202013, "busi_id dup"),
+
+ /**
+ * not check sign
+ */
+ CODE_9202016(9202016, "not check sign"),
+
+ /**
+ * check sign failed
+ */
+ CODE_9202017(9202017, "check sign failed"),
+
+ /**
+ * sub order error
+ */
+ CODE_9202018(9202018, "sub order error"),
+
+ /**
+ * order status error
+ */
+ CODE_9202020(9202020, "order status error"),
+
+ /**
+ * unified order repeatedly
+ */
+ CODE_9202021(9202021, "unified order repeatedly"),
+
+ /**
+ * request to notification url fail
+ */
+ CODE_9203000(9203000, "request to notification url fail"),
+
+ /**
+ * http request fail
+ */
+ CODE_9203001(9203001, "http request fail"),
+
+ /**
+ * http response data error
+ */
+ CODE_9203002(9203002, "http response data error"),
+
+ /**
+ * http response data RSA decrypt fail
+ */
+ CODE_9203003(9203003, "http response data RSA decrypt fail"),
+
+ /**
+ * http response data AES decrypt fail
+ */
+ CODE_9203004(9203004, "http response data AES decrypt fail"),
+
+ /**
+ * system busy, please try again later
+ */
+ CODE_9203999(9203999, "system busy, please try again later"),
+
+ /**
+ * getrealname token error
+ */
+ CODE_9204000(9204000, "getrealname token error"),
+
+ /**
+ * getrealname user or token error
+ */
+ CODE_9204001(9204001, "getrealname user or token error"),
+
+ /**
+ * getrealname appid or token error
+ */
+ CODE_9204002(9204002, "getrealname appid or token error"),
+
+ /**
+ * finance conf not exist
+ */
+ CODE_9205000(9205000, "finance conf not exist"),
+
+ /**
+ * bank conf not exist
+ */
+ CODE_9205001(9205001, "bank conf not exist"),
+
+ /**
+ * wei ban ju conf not exist
+ */
+ CODE_9205002(9205002, "wei ban ju conf not exist"),
+
+ /**
+ * symmetric key conf not exist
+ */
+ CODE_9205010(9205010, "symmetric key conf not exist"),
+
+ /**
+ * out order id not exist
+ */
+ CODE_9205101(9205101, "out order id not exist"),
+
+ /**
+ * bill not exist
+ */
+ CODE_9205201(9205201, "bill not exist"),
+
+ /**
+ * 3rd resp pay_channel empty
+ */
+ CODE_9206000(9206000, "3rd resp pay_channel empty"),
+
+ /**
+ * 3rd resp order_id empty
+ */
+ CODE_9206001(9206001, "3rd resp order_id empty"),
+
+ /**
+ * 3rd resp bill_type_code empty
+ */
+ CODE_9206002(9206002, "3rd resp bill_type_code empty"),
+
+ /**
+ * 3rd resp bill_no empty
+ */
+ CODE_9206003(9206003, "3rd resp bill_no empty"),
+
+ /**
+ * 3rd resp empty
+ */
+ CODE_9206200(9206200, "3rd resp empty"),
+
+ /**
+ * 3rd resp not json
+ */
+ CODE_9206201(9206201, "3rd resp not json"),
+
+ /**
+ * connect 3rd error
+ */
+ CODE_9206900(9206900, "connect 3rd error"),
+
+ /**
+ * connect 3rd timeout
+ */
+ CODE_9206901(9206901, "connect 3rd timeout"),
+
+ /**
+ * read 3rd resp error
+ */
+ CODE_9206910(9206910, "read 3rd resp error"),
+
+ /**
+ * read 3rd resp timeout
+ */
+ CODE_9206911(9206911, "read 3rd resp timeout"),
+
+ /**
+ * boss error
+ */
+ CODE_9207000(9207000, "boss error"),
+
+ /**
+ * wechat pay error
+ */
+ CODE_9207001(9207001, "wechat pay error"),
+
+ /**
+ * boss param error
+ */
+ CODE_9207002(9207002, "boss param error"),
+
+ /**
+ * pay error
+ */
+ CODE_9207003(9207003, "pay error"),
+
+ /**
+ * auth_code expired
+ */
+ CODE_9207004(9207004, "auth_code expired"),
+
+ /**
+ * user balance not enough
+ */
+ CODE_9207005(9207005, "user balance not enough"),
+
+ /**
+ * card not support
+ */
+ CODE_9207006(9207006, "card not support"),
+
+ /**
+ * order reversed
+ */
+ CODE_9207007(9207007, "order reversed"),
+
+ /**
+ * user paying, need input password
+ */
+ CODE_9207008(9207008, "user paying, need input password"),
+
+ /**
+ * auth_code error
+ */
+ CODE_9207009(9207009, "auth_code error"),
+
+ /**
+ * auth_code invalid
+ */
+ CODE_9207010(9207010, "auth_code invalid"),
+
+ /**
+ * not allow to reverse when user paying
+ */
+ CODE_9207011(9207011, "not allow to reverse when user paying"),
+
+ /**
+ * order paid
+ */
+ CODE_9207012(9207012, "order paid"),
+
+ /**
+ * order closed
+ */
+ CODE_9207013(9207013, "order closed"),
+
+ /**
+ * vehicle not exists
+ */
+ CODE_9207028(9207028, "vehicle not exists"),
+
+ /**
+ * vehicle request blocked
+ */
+ CODE_9207029(9207029, "vehicle request blocked"),
+
+ /**
+ * vehicle auth error
+ */
+ CODE_9207030(9207030, "vehicle auth error"),
+
+ /**
+ * contract over limit
+ */
+ CODE_9207031(9207031, "contract over limit"),
+
+ /**
+ * trade error
+ */
+ CODE_9207032(9207032, "trade error"),
+
+ /**
+ * trade time invalid
+ */
+ CODE_9207033(9207033, "trade time invalid"),
+
+ /**
+ * channel type invalid
+ */
+ CODE_9207034(9207034, "channel type invalid"),
+
+ /**
+ * expire_time range error
+ */
+ CODE_9207050(9207050, "expire_time range error"),
+
+ /**
+ * query finance error
+ */
+ CODE_9210000(9210000, "query finance error"),
+
+ /**
+ * openid error
+ */
+ CODE_9291000(9291000, "openid error"),
+
+ /**
+ * openid appid not match
+ */
+ CODE_9291001(9291001, "openid appid not match"),
+
+ /**
+ * app_appid not exist
+ */
+ CODE_9291002(9291002, "app_appid not exist"),
+
+ /**
+ * app_appid not app
+ */
+ CODE_9291003(9291003, "app_appid not app"),
+
+ /**
+ * appid empty
+ */
+ CODE_9291004(9291004, "appid empty"),
+
+ /**
+ * appid not match access_token
+ */
+ CODE_9291005(9291005, "appid not match access_token"),
+
+ /**
+ * invalid sign
+ */
+ CODE_9291006(9291006, "invalid sign"),
+
+ /**
+ * backend logic error
+ */
+ CODE_9299999(9299999, "backend logic error"),
+
+ /**
+ * begin_time can not before now
+ */
+ CODE_9300001(9300001, "begin_time can not before now"),
+
+ /**
+ * end_time can not before now
+ */
+ CODE_9300002(9300002, "end_time can not before now"),
+
+ /**
+ * begin_time must less than end_time
+ */
+ CODE_9300003(9300003, "begin_time must less than end_time"),
+
+ /**
+ * end_time - begin_time > 1year
+ */
+ CODE_9300004(9300004, "end_time - begin_time > 1year"),
+
+ /**
+ * invalid max_partic_times
+ */
+ CODE_9300005(9300005, "invalid max_partic_times"),
+
+ /**
+ * invalid activity status
+ */
+ CODE_9300006(9300006, "invalid activity status"),
+
+ /**
+ * gift_num must >0 and <=15
+ */
+ CODE_9300007(9300007, "gift_num must >0 and <=15"),
+
+ /**
+ * invalid tiny appid
+ */
+ CODE_9300008(9300008, "invalid tiny appid"),
+
+ /**
+ * activity can not finish
+ */
+ CODE_9300009(9300009, "activity can not finish"),
+
+ /**
+ * card_info_list must >= 2
+ */
+ CODE_9300010(9300010, "card_info_list must >= 2"),
+
+ /**
+ * invalid card_id
+ */
+ CODE_9300011(9300011, "invalid card_id"),
+
+ /**
+ * card_id must belong this appid
+ */
+ CODE_9300012(9300012, "card_id must belong this appid"),
+
+ /**
+ * card_id is not swipe_card or pay.cash
+ */
+ CODE_9300013(9300013, "card_id is not swipe_card or pay.cash"),
+
+ /**
+ * some card_id is out of stock
+ */
+ CODE_9300014(9300014, "some card_id is out of stock"),
+
+ /**
+ * some card_id is invalid status
+ */
+ CODE_9300015(9300015, "some card_id is invalid status"),
+
+ /**
+ * membership or new/old tinyapp user only support one
+ */
+ CODE_9300016(9300016, "membership or new/old tinyapp user only support one"),
+
+ /**
+ * invalid logic for membership
+ */
+ CODE_9300017(9300017, "invalid logic for membership"),
+
+ /**
+ * invalid logic for tinyapp new/old user
+ */
+ CODE_9300018(9300018, "invalid logic for tinyapp new/old user"),
+
+ /**
+ * invalid activity type
+ */
+ CODE_9300019(9300019, "invalid activity type"),
+
+ /**
+ * invalid activity_id
+ */
+ CODE_9300020(9300020, "invalid activity_id"),
+
+ /**
+ * invalid help_max_times
+ */
+ CODE_9300021(9300021, "invalid help_max_times"),
+
+ /**
+ * invalid cover_url
+ */
+ CODE_9300022(9300022, "invalid cover_url"),
+
+ /**
+ * invalid gen_limit
+ */
+ CODE_9300023(9300023, "invalid gen_limit"),
+
+ /**
+ * card's end_time cannot early than act's end_time
+ */
+ CODE_9300024(9300024, "card's end_time cannot early than act's end_time"),
+
+ /**
+ * 快递侧逻辑错误,详细原因需要看 delivery_resultcode, 请先确认一下编码方式,python建议 json.dumps(b, ensure_ascii=False),php建议 json_encode($arr, JSON_UNESCAPED_UNICODE) Delivery side error
+ */
+ CODE_9300501(9300501, "快递侧逻辑错误,详细原因需要看 delivery_resultcode, 请先确认一下编码方式,python建议 json.dumps(b, ensure_ascii=False),php建议 json_encode($arr, JSON_UNESCAPED_UNICODE)"),
+
+ /**
+ * 快递公司系统错误 Delivery side sys error
+ */
+ CODE_9300502(9300502, "快递公司系统错误"),
+
+ /**
+ * delivery_id 不存在 Specified delivery id is not registerred
+ */
+ CODE_9300503(9300503, "delivery_id 不存在"),
+
+ /**
+ * service_type 不存在 Specified delivery id has beed banned
+ */
+ CODE_9300504(9300504, "service_type 不存在"),
+
+ /**
+ * Shop banned
+ */
+ CODE_9300505(9300505, "Shop banned"),
+
+ /**
+ * 运单 ID 已经存在轨迹,不可取消 Order can't cancel
+ */
+ CODE_9300506(9300506, "运单 ID 已经存在轨迹,不可取消"),
+
+ /**
+ * Token 不正确 invalid token, can't decryption or decryption result is different from the plaintext
+ */
+ CODE_9300507(9300507, "Token 不正确"),
+
+ /**
+ * order id has been used
+ */
+ CODE_9300508(9300508, "order id has been used"),
+
+ /**
+ * speed limit, retry too fast
+ */
+ CODE_9300509(9300509, "speed limit, retry too fast"),
+
+ /**
+ * invalid service type
+ */
+ CODE_9300510(9300510, "invalid service type"),
+
+ /**
+ * invalid branch id
+ */
+ CODE_9300511(9300511, "invalid branch id"),
+
+ /**
+ * 模板格式错误,渲染失败 invalid waybill template format
+ */
+ CODE_9300512(9300512, "模板格式错误,渲染失败"),
+
+ /**
+ * out of quota
+ */
+ CODE_9300513(9300513, "out of quota"),
+
+ /**
+ * add net branch fail, try update branch api
+ */
+ CODE_9300514(9300514, "add net branch fail, try update branch api"),
+
+ /**
+ * wxa appid not exist
+ */
+ CODE_9300515(9300515, "wxa appid not exist"),
+
+ /**
+ * wxa appid and current bizuin is not linked or not the same owner
+ */
+ CODE_9300516(9300516, "wxa appid and current bizuin is not linked or not the same owner"),
+
+ /**
+ * update_type 不正确,请使用"bind" 或者“unbind” invalid update_type, please use [bind] or [unbind]
+ */
+ CODE_9300517(9300517, "update_type 不正确,请使用\"bind\" 或者“unbind”"),
+
+ /**
+ * invalid delivery id
+ */
+ CODE_9300520(9300520, "invalid delivery id"),
+
+ /**
+ * the orderid is in our system, and waybill is generating
+ */
+ CODE_9300521(9300521, "the orderid is in our system, and waybill is generating"),
+
+ /**
+ * this orderid is repeated
+ */
+ CODE_9300522(9300522, "this orderid is repeated"),
+
+ /**
+ * quota is not enough; go to charge please
+ */
+ CODE_9300523(9300523, "quota is not enough; go to charge please"),
+
+ /**
+ * 订单已取消(一般为重复取消订单) order already canceled
+ */
+ CODE_9300524(9300524, "订单已取消(一般为重复取消订单)"),
+
+ /**
+ * bizid未绑定 biz id not bind
+ */
+ CODE_9300525(9300525, "bizid未绑定"),
+
+ /**
+ * 参数字段长度不正确 arg size exceed limit
+ */
+ CODE_9300526(9300526, "参数字段长度不正确"),
+
+ /**
+ * delivery does not support quota
+ */
+ CODE_9300527(9300527, "delivery does not support quota"),
+
+ /**
+ * invalid waybill_id
+ */
+ CODE_9300528(9300528, "invalid waybill_id"),
+
+ /**
+ * 账号已绑定过 biz_id already binded
+ */
+ CODE_9300529(9300529, "账号已绑定过"),
+
+ /**
+ * 解绑的biz_id不存在 biz_id is not exist
+ */
+ CODE_9300530(9300530, "解绑的biz_id不存在"),
+
+ /**
+ * bizid无效 或者密码错误 invalid biz_id or password
+ */
+ CODE_9300531(9300531, "bizid无效 或者密码错误"),
+
+ /**
+ * 绑定已提交,审核中 bind submit, and is checking
+ */
+ CODE_9300532(9300532, "绑定已提交,审核中"),
+
+ /**
+ * invalid tagid_list
+ */
+ CODE_9300533(9300533, "invalid tagid_list"),
+
+ /**
+ * add_source=2时,wx_appid和当前小程序不同主体 invalid appid, not same body
+ */
+ CODE_9300534(9300534, "add_source=2时,wx_appid和当前小程序不同主体"),
+
+ /**
+ * shop字段商品缩略图 url、商品名称为空或者非法,或者商品数量为0 invalid shop arg
+ */
+ CODE_9300535(9300535, "shop字段商品缩略图 url、商品名称为空或者非法,或者商品数量为0"),
+
+ /**
+ * add_source=2时,wx_appid无效 invalid wxa_appid
+ */
+ CODE_9300536(9300536, "add_source=2时,wx_appid无效"),
+
+ /**
+ * freq limit
+ */
+ CODE_9300537(9300537, "freq limit"),
+
+ /**
+ * input task empty
+ */
+ CODE_9300538(9300538, "input task empty"),
+
+ /**
+ * too many task
+ */
+ CODE_9300539(9300539, "too many task"),
+
+ /**
+ * task not exist
+ */
+ CODE_9300540(9300540, "task not exist"),
+
+ /**
+ * delivery callback error
+ */
+ CODE_9300541(9300541, "delivery callback error"),
+
+ /**
+ * id_card_no is invalid
+ */
+ CODE_9300601(9300601, "id_card_no is invalid"),
+
+ /**
+ * name is invalid
+ */
+ CODE_9300602(9300602, "name is invalid"),
+
+ /**
+ * plate_no is invalid
+ */
+ CODE_9300603(9300603, "plate_no is invalid"),
+
+ /**
+ * auth_key decode error
+ */
+ CODE_9300604(9300604, "auth_key decode error"),
+
+ /**
+ * auth_key is expired
+ */
+ CODE_9300605(9300605, "auth_key is expired"),
+
+ /**
+ * auth_key and appinfo not match
+ */
+ CODE_9300606(9300606, "auth_key and appinfo not match"),
+
+ /**
+ * user not confirm
+ */
+ CODE_9300607(9300607, "user not confirm"),
+
+ /**
+ * user confirm is expired
+ */
+ CODE_9300608(9300608, "user confirm is expired"),
+
+ /**
+ * api exceed limit
+ */
+ CODE_9300609(9300609, "api exceed limit"),
+
+ /**
+ * car license info is invalid
+ */
+ CODE_9300610(9300610, "car license info is invalid"),
+
+ /**
+ * varification type not support
+ */
+ CODE_9300611(9300611, "varification type not support"),
+
+ /**
+ * input param error
+ */
+ CODE_9300701(9300701, "input param error"),
+
+ /**
+ * this code has been used
+ */
+ CODE_9300702(9300702, "this code has been used"),
+
+ /**
+ * invalid date
+ */
+ CODE_9300703(9300703, "invalid date"),
+
+ /**
+ * not currently available
+ */
+ CODE_9300704(9300704, "not currently available"),
+
+ /**
+ * code not exist or expired
+ */
+ CODE_9300705(9300705, "code not exist or expired"),
+
+ /**
+ * code not exist or expired
+ */
+ CODE_9300706(9300706, "code not exist or expired"),
+
+ /**
+ * wxpay error
+ */
+ CODE_9300707(9300707, "wxpay error"),
+
+ /**
+ * wxpay overlimit
+ */
+ CODE_9300708(9300708, "wxpay overlimit"),
+
+ /**
+ * 无效的微信号
+ */
+ CODE_9300801(9300801, "无效的微信号"),
+
+ /**
+ * 服务号未开通导购功能
+ */
+ CODE_9300802(9300802, "服务号未开通导购功能"),
+
+ /**
+ * 微信号已经绑定为导购
+ */
+ CODE_9300803(9300803, "微信号已经绑定为导购"),
+
+ /**
+ * 该微信号不是导购
+ */
+ CODE_9300804(9300804, "该微信号不是导购"),
+
+ /**
+ * 微信号已经被其他账号绑定为导购
+ */
+ CODE_9300805(9300805, "微信号已经被其他账号绑定为导购"),
+
+ /**
+ * 粉丝和导购不存在绑定关系
+ */
+ CODE_9300806(9300806, "粉丝和导购不存在绑定关系"),
+
+ /**
+ * 标签值无效,不是可选标签值
+ */
+ CODE_9300807(9300807, "标签值无效,不是可选标签值"),
+
+ /**
+ * 标签值不存在
+ */
+ CODE_9300808(9300808, "标签值不存在"),
+
+ /**
+ * 展示标签值不存在
+ */
+ CODE_9300809(9300809, "展示标签值不存在"),
+
+ /**
+ * 导购昵称太长,最多16个字符
+ */
+ CODE_9300810(9300810, "导购昵称太长,最多16个字符"),
+
+ /**
+ * 只支持mmbiz.qpic.cn域名的图片
+ */
+ CODE_9300811(9300811, "只支持mmbiz.qpic.cn域名的图片"),
+
+ /**
+ * 达到导购绑定个数限制
+ */
+ CODE_9300812(9300812, "达到导购绑定个数限制"),
+
+ /**
+ * 达到导购粉丝绑定个数限制
+ */
+ CODE_9300813(9300813, "达到导购粉丝绑定个数限制"),
+
+ /**
+ * 敏感词个数超过上限
+ */
+ CODE_9300814(9300814, "敏感词个数超过上限"),
+
+ /**
+ * 快捷回复个数超过上限
+ */
+ CODE_9300815(9300815, "快捷回复个数超过上限"),
+
+ /**
+ * 文字素材个数超过上限
+ */
+ CODE_9300816(9300816, "文字素材个数超过上限"),
+
+ /**
+ * 小程序卡片素材个数超过上限
+ */
+ CODE_9300817(9300817, "小程序卡片素材个数超过上限"),
+
+ /**
+ * 图片素材个数超过上限
+ */
+ CODE_9300818(9300818, "图片素材个数超过上限"),
+
+ /**
+ * mediaid 有误
+ */
+ CODE_9300819(9300819, "mediaid 有误"),
+
+ /**
+ * 可查询标签类别超过上限
+ */
+ CODE_9300820(9300820, "可查询标签类别超过上限"),
+
+ /**
+ * 小程序卡片内appid不符合要求
+ */
+ CODE_9300821(9300821, "小程序卡片内appid不符合要求"),
+
+ /**
+ * 标签类别的名字无效
+ */
+ CODE_9300822(9300822, "标签类别的名字无效"),
+
+ /**
+ * 查询聊天记录时间参数有误
+ */
+ CODE_9300823(9300823, "查询聊天记录时间参数有误"),
+
+ /**
+ * 自动回复字数太长
+ */
+ CODE_9300824(9300824, "自动回复字数太长"),
+
+ /**
+ * 导购群组id错误
+ */
+ CODE_9300825(9300825, "导购群组id错误"),
+
+ /**
+ * 维护中
+ */
+ CODE_9300826(9300826, "维护中"),
+
+ /**
+ * invalid parameter
+ */
+ CODE_9301001(9301001, "invalid parameter"),
+
+ /**
+ * call api service failed
+ */
+ CODE_9301002(9301002, "call api service failed"),
+
+ /**
+ * internal exception
+ */
+ CODE_9301003(9301003, "internal exception"),
+
+ /**
+ * save data error
+ */
+ CODE_9301004(9301004, "save data error"),
+
+ /**
+ * invalid appid
+ */
+ CODE_9301006(9301006, "invalid appid"),
+
+ /**
+ * invalid api config
+ */
+ CODE_9301007(9301007, "invalid api config"),
+
+ /**
+ * invalid api info
+ */
+ CODE_9301008(9301008, "invalid api info"),
+
+ /**
+ * add result check failed
+ */
+ CODE_9301009(9301009, "add result check failed"),
+
+ /**
+ * consumption failure
+ */
+ CODE_9301010(9301010, "consumption failure"),
+
+ /**
+ * frequency limit reached
+ */
+ CODE_9301011(9301011, "frequency limit reached"),
+
+ /**
+ * service timeout
+ */
+ CODE_9301012(9301012, "service timeout"),
+
+ /**
+ * 该开发小程序已开通小程序直播权限,不支持发布版本。如需发版,请解绑开发小程序后再操作。
+ */
+ CODE_9400001(9400001, "该开发小程序已开通小程序直播权限,不支持发布版本。如需发版,请解绑开发小程序后再操作。"),
+
+ /**
+ * 商品已存在
+ */
+ CODE_9401001(9401001, "商品已存在"),
+
+ /**
+ * 商品不存在
+ */
+ CODE_9401002(9401002, "商品不存在"),
+
+ /**
+ * 类目已存在
+ */
+ CODE_9401003(9401003, "类目已存在"),
+
+ /**
+ * 类目不存在
+ */
+ CODE_9401004(9401004, "类目不存在"),
+
+ /**
+ * SKU已存在
+ */
+ CODE_9401005(9401005, "SKU已存在"),
+
+ /**
+ * SKU不存在
+ */
+ CODE_9401006(9401006, "SKU不存在"),
+
+ /**
+ * 属性已存在
+ */
+ CODE_9401007(9401007, "属性已存在"),
+
+ /**
+ * 属性不存在
+ */
+ CODE_9401008(9401008, "属性不存在"),
+
+ /**
+ * 非法参数
+ */
+ CODE_9401020(9401020, "非法参数"),
+
+ /**
+ * 没有商品权限
+ */
+ CODE_9401021(9401021, "没有商品权限"),
+
+ /**
+ * SPU NOT ALLOW
+ */
+ CODE_9401022(9401022, "SPU NOT ALLOW"),
+
+ /**
+ * SPU_NOT_ALLOW_EDIT
+ */
+ CODE_9401023(9401023, "SPU_NOT_ALLOW_EDIT"),
+
+ /**
+ * SKU NOT ALLOW
+ */
+ CODE_9401024(9401024, "SKU NOT ALLOW"),
+
+ /**
+ * SKU_NOT_ALLOW_EDIT
+ */
+ CODE_9401025(9401025, "SKU_NOT_ALLOW_EDIT"),
+
+ /**
+ * limit too large
+ */
+ CODE_9402001(9402001, "limit too large"),
+
+ /**
+ * single send been blocked
+ */
+ CODE_9402002(9402002, "single send been blocked"),
+
+ /**
+ * all send been blocked
+ */
+ CODE_9402003(9402003, "all send been blocked"),
+
+ /**
+ * invalid msg id
+ */
+ CODE_9402004(9402004, "invalid msg id"),
+
+ /**
+ * send msg too quick
+ */
+ CODE_9402005(9402005, "send msg too quick"),
+
+ /**
+ * send to single user too quick
+ */
+ CODE_9402006(9402006, "send to single user too quick"),
+
+ /**
+ * send to all user too quick
+ */
+ CODE_9402007(9402007, "send to all user too quick"),
+
+ /**
+ * send type error
+ */
+ CODE_9402008(9402008, "send type error"),
+
+ /**
+ * can not send this msg
+ */
+ CODE_9402009(9402009, "can not send this msg"),
+
+ /**
+ * content too long or no content
+ */
+ CODE_9402010(9402010, "content too long or no content"),
+
+ /**
+ * path not exist
+ */
+ CODE_9402011(9402011, "path not exist"),
+
+ /**
+ * contain evil word
+ */
+ CODE_9402012(9402012, "contain evil word"),
+
+ /**
+ * path need html suffix
+ */
+ CODE_9402013(9402013, "path need html suffix"),
+
+ /**
+ * not open to personal body type
+ */
+ CODE_9402014(9402014, "not open to personal body type"),
+
+ /**
+ * not open to violation body type
+ */
+ CODE_9402015(9402015, "not open to violation body type"),
+
+ /**
+ * not open to low quality provider
+ */
+ CODE_9402016(9402016, "not open to low quality provider"),
+
+ /**
+ * invalid product_id
+ */
+ CODE_9402101(9402101, "invalid product_id"),
+
+ /**
+ * device_id count more than limit
+ */
+ CODE_9402102(9402102, "device_id count more than limit"),
+
+ /**
+ * 请勿频繁提交,待上一次操作完成后再提交 concurrent limit
+ */
+ CODE_9402202(9402202, "请勿频繁提交,待上一次操作完成后再提交"),
+
+ /**
+ * user not book this ad id
+ */
+ CODE_9402301(9402301, "user not book this ad id"),
+
+ /**
+ * 消息类型错误!
+ */
+ CODE_9403000(9403000, "消息类型错误!"),
+
+ /**
+ * 消息字段的内容过长!
+ */
+ CODE_9403001(9403001, "消息字段的内容过长!"),
+
+ /**
+ * 消息字段的内容违规!
+ */
+ CODE_9403002(9403002, "消息字段的内容违规!"),
+
+ /**
+ * 发送的微信号太多!
+ */
+ CODE_9403003(9403003, "发送的微信号太多!"),
+
+ /**
+ * 存在错误的微信号!
+ */
+ CODE_9403004(9403004, "存在错误的微信号!"),
+
+ /**
+ * 直播间列表为空 live room not exsits
+ */
+ CODE_9410000(9410000, "直播间列表为空"),
+
+ /**
+ * 获取房间失败 inner error: get room fail
+ */
+ CODE_9410001(9410001, "获取房间失败"),
+
+ /**
+ * 获取商品失败 inner error: get goods fail
+ */
+ CODE_9410002(9410002, "获取商品失败"),
+
+ /**
+ * 获取回放失败 inner error: get replay url fail
+ */
+ CODE_9410003(9410003, "获取回放失败");
+
+
+
+ private final int code;
+ private final String msg;
+
+ WxOpenErrorMsgEnum(int code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ static final Map valueMap = Maps.newHashMap();
+
+ static {
+ for (com.pxys.wechatgroup.common.error.WxOpenErrorMsgEnum value : com.pxys.wechatgroup.common.error.WxOpenErrorMsgEnum.values()) {
+ valueMap.put(value.code, value.msg);
+ }
+ }
+
+ /**
+ * 通过错误代码查找其中文含义.
+ */
+ public static String findMsgByCode(int code) {
+ return valueMap.getOrDefault(code, null);
+ }
+}
From 533ea253d6485917019f94c7da7c47b2cf429760 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Tue, 1 Mar 2022 15:31:40 +0800
Subject: [PATCH 0069/1155] Update bug_report.md
---
.github/ISSUE_TEMPLATE/bug_report.md | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index d87b6c73fa..c15adca964 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -8,7 +8,8 @@ assignees: ''
---
# 提问前,请确保阅读过项目首页说明以及wiki开发文档相关内容,尤其是常见问题部分。完成内容后,请务必移除包括本句在内的无用内容,以免影响阅读,否则直接关闭,谢谢合作~
-# 另外如果确认属于bug,而且已明确如何修复,请参考贡献指南直接提交PR,省的浪费时间在这里描述问题,非常感谢配合
+
+## 另外如果确认属于bug,而且已明确如何修复,请参考贡献指南直接提交PR,省的浪费时间在这里描述问题,非常感谢配合
### 简要描述
__简单概括描述下你所遇到的问题。__
@@ -21,4 +22,7 @@ __简单概括描述下你所遇到的问题。__
__尽量详细描述。请不要使用截图,尽量使用文字描述,代码直接贴上来,日志则请附在后面所示区域。__
### 日志
-__将日志放在 [pastebin](https://paste.ubuntu.com/) 或者其他地方,并将其url地址贴在这里__
+__如果日志不多,直接使用md代码引用格式贴在此处,否则如果太长,请将日志放在 [pastebin](https://paste.ubuntu.com/) 或者其他地方,然后将其url地址贴在这里__
+```
+日志请写于此处
+```
From abaec2faf96d7f279e00b67eb637aaba21781728 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Tue, 1 Mar 2022 15:47:28 +0800
Subject: [PATCH 0070/1155] =?UTF-8?q?:art:=20=E3=80=90=E5=B0=8F=E7=A8=8B?=
=?UTF-8?q?=E5=BA=8F=E3=80=91=E8=8E=B7=E5=8F=96=E5=B0=8F=E7=A8=8B=E5=BA=8F?=
=?UTF-8?q?=E7=A0=81=E7=9A=84createWxaCode=E7=9B=B8=E5=85=B3=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=E6=94=AF=E6=8C=81envVersion=E5=8F=82=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../wx/miniapp/api/WxMaQrcodeService.java | 51 ++++++++++---------
.../api/impl/WxMaQrcodeServiceImpl.java | 44 +++++++++-------
.../binarywang/wx/miniapp/bean/WxaCode.java | 5 ++
.../wx/miniapp/bean/WxaCodeUnlimit.java | 4 +-
.../wx/miniapp/constant/WxMaConstants.java | 5 ++
.../api/impl/WxMaQrcodeServiceImplTest.java | 12 ++---
6 files changed, 71 insertions(+), 50 deletions(-)
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java
index 46fc97d2b5..ececed036e 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java
@@ -101,45 +101,48 @@ public interface WxMaQrcodeService {
/**
* 接口A: 获取小程序码.
*
- * @param path 不能为空,最大长度 128 字节
- * @param width 默认430 二维码的宽度
- * @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
- * @param lineColor autoColor 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"}
- * @param isHyaline 是否需要透明底色, isHyaline 为true时,生成透明底色的小程序码
+ * @param path 不能为空,最大长度 128 字节
+ * @param envVersion 默认"release" 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
+ * @param width 默认430 二维码的宽度
+ * @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
+ * @param lineColor autoColor 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"}
+ * @param isHyaline 是否需要透明底色, isHyaline 为true时,生成透明底色的小程序码
* @return 文件内容字节数组
* @throws WxErrorException 异常
*/
- byte[] createWxaCodeBytes(String path, int width, boolean autoColor, WxMaCodeLineColor lineColor, boolean isHyaline)
- throws WxErrorException;
+ byte[] createWxaCodeBytes(String path, String envVersion, int width, boolean autoColor, WxMaCodeLineColor lineColor,
+ boolean isHyaline) throws WxErrorException;
/**
* 接口A: 获取小程序码.
*
- * @param path 不能为空,最大长度 128 字节
- * @param width 默认430 二维码的宽度
- * @param filePath 二维码生成的文件路径,例如: /var/temp
- * @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
- * @param lineColor autoColor 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"}
- * @param isHyaline 是否需要透明底色, isHyaline 为true时,生成透明底色的小程序码
+ * @param path 不能为空,最大长度 128 字节
+ * @param envVersion 默认"release" 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
+ * @param width 默认430 二维码的宽度
+ * @param filePath 二维码生成的文件路径,例如: /var/temp
+ * @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
+ * @param lineColor autoColor 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"}
+ * @param isHyaline 是否需要透明底色, isHyaline 为true时,生成透明底色的小程序码
* @return 文件对象
* @throws WxErrorException 异常
*/
- File createWxaCode(String path, int width, String filePath, boolean autoColor, WxMaCodeLineColor lineColor, boolean isHyaline)
- throws WxErrorException;
+ File createWxaCode(String path, String envVersion, int width, String filePath, boolean autoColor,
+ WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException;
/**
* 接口A: 获取小程序码.
*
- * @param path 不能为空,最大长度 128 字节
- * @param width 默认430 二维码的宽度
- * @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
- * @param lineColor autoColor 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"}
- * @param isHyaline 是否需要透明底色, isHyaline 为true时,生成透明底色的小程序码
+ * @param path 不能为空,最大长度 128 字节
+ * @param envVersion 默认"release" 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
+ * @param width 默认430 二维码的宽度
+ * @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
+ * @param lineColor autoColor 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"}
+ * @param isHyaline 是否需要透明底色, isHyaline 为true时,生成透明底色的小程序码
* @return 文件对象
* @throws WxErrorException 异常
*/
- File createWxaCode(String path, int width, boolean autoColor, WxMaCodeLineColor lineColor, boolean isHyaline)
- throws WxErrorException;
+ File createWxaCode(String path, String envVersion, int width, boolean autoColor, WxMaCodeLineColor lineColor,
+ boolean isHyaline) throws WxErrorException;
/**
* 接口A: 获取小程序码.
@@ -229,8 +232,8 @@ byte[] createWxaCodeUnlimitBytes(String scene, String page, boolean checkPath, S
* @return 文件对象
* @throws WxErrorException 异常
*/
- File createWxaCodeUnlimit(String scene, String page, String filePath, boolean checkPath, String envVersion, int width, boolean autoColor,
- WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException;
+ File createWxaCodeUnlimit(String scene, String page, String filePath, boolean checkPath, String envVersion, int width,
+ boolean autoColor, WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException;
/**
* 接口B: 获取小程序码(永久有效、数量暂无限制).
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java
index 072119bc2a..cc7fc51feb 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java
@@ -10,10 +10,12 @@
import cn.binarywang.wx.miniapp.executor.QrcodeRequestExecutor;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
+import org.apache.commons.lang3.StringUtils;
import java.io.File;
import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.Qrcode.*;
+import static cn.binarywang.wx.miniapp.constant.WxMaConstants.DEFAULT_ENV_VERSION;
/**
* @author Binary Wang
@@ -40,11 +42,12 @@ public File createQrcode(String path) throws WxErrorException {
}
@Override
- public byte[] createWxaCodeBytes(String path, int width, boolean autoColor, WxMaCodeLineColor lineColor, boolean isHyaline)
- throws WxErrorException {
+ public byte[] createWxaCodeBytes(String path, String envVersion, int width, boolean autoColor,
+ WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException {
return this.service.execute(QrcodeBytesRequestExecutor.create(this.service.getRequestHttp()), GET_WXACODE_URL,
WxaCode.builder()
.path(path)
+ .envVersion(StringUtils.defaultIfEmpty(envVersion, DEFAULT_ENV_VERSION))
.width(width)
.autoColor(autoColor)
.lineColor(lineColor)
@@ -53,11 +56,12 @@ public byte[] createWxaCodeBytes(String path, int width, boolean autoColor, WxMa
}
@Override
- public File createWxaCode(String path, int width, boolean autoColor, WxMaCodeLineColor lineColor, boolean isHyaline)
- throws WxErrorException {
+ public File createWxaCode(String path, String envVersion, int width, boolean autoColor, WxMaCodeLineColor lineColor,
+ boolean isHyaline) throws WxErrorException {
return this.service.execute(QrcodeRequestExecutor.create(this.service.getRequestHttp()), GET_WXACODE_URL,
WxaCode.builder()
.path(path)
+ .envVersion(StringUtils.defaultIfEmpty(envVersion, DEFAULT_ENV_VERSION))
.width(width)
.autoColor(autoColor)
.lineColor(lineColor)
@@ -67,7 +71,7 @@ public File createWxaCode(String path, int width, boolean autoColor, WxMaCodeLin
@Override
public File createWxaCode(String path, int width) throws WxErrorException {
- return this.createWxaCode(path, width, true, null, false);
+ return this.createWxaCode(path, null, width, true, null, false);
}
@Override
@@ -76,21 +80,22 @@ public File createWxaCode(String path) throws WxErrorException {
}
@Override
- public byte[] createWxaCodeUnlimitBytes(String scene, String page, boolean checkPath, String envVersion, int width, boolean autoColor,
- WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException {
+ public byte[] createWxaCodeUnlimitBytes(String scene, String page, boolean checkPath, String envVersion, int width,
+ boolean autoColor, WxMaCodeLineColor lineColor, boolean isHyaline)
+ throws WxErrorException {
return this.service.execute(QrcodeBytesRequestExecutor.create(this.service.getRequestHttp()),
GET_WXACODE_UNLIMIT_URL, this.buildWxaCodeUnlimit(scene, page, checkPath, envVersion, width, autoColor, lineColor, isHyaline));
}
@Override
- public File createWxaCodeUnlimit(String scene, String page, boolean checkPath, String envVersion, int width, boolean autoColor,
- WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException {
+ public File createWxaCodeUnlimit(String scene, String page, boolean checkPath, String envVersion, int width,
+ boolean autoColor, WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException {
return this.service.execute(QrcodeRequestExecutor.create(this.service.getRequestHttp()),
GET_WXACODE_UNLIMIT_URL, this.buildWxaCodeUnlimit(scene, page, checkPath, envVersion, width, autoColor, lineColor, isHyaline));
}
- private WxaCodeUnlimit buildWxaCodeUnlimit(String scene, String page, boolean checkPath, String envVersion, int width, boolean autoColor,
- WxMaCodeLineColor lineColor, boolean isHyaline) {
+ private WxaCodeUnlimit buildWxaCodeUnlimit(String scene, String page, boolean checkPath, String envVersion, int width,
+ boolean autoColor, WxMaCodeLineColor lineColor, boolean isHyaline) {
WxaCodeUnlimit wxaCodeUnlimit = new WxaCodeUnlimit();
wxaCodeUnlimit.setScene(scene);
wxaCodeUnlimit.setPage(page);
@@ -106,7 +111,7 @@ private WxaCodeUnlimit buildWxaCodeUnlimit(String scene, String page, boolean ch
@Override
public File createWxaCodeUnlimit(String scene, String page) throws WxErrorException {
- return this.createWxaCodeUnlimit(scene, page, true, "release", 430, true, null, false);
+ return this.createWxaCodeUnlimit(scene, page, true, DEFAULT_ENV_VERSION, 430, true, null, false);
}
@Override
@@ -121,12 +126,12 @@ public File createQrcode(String path, String filePath) throws WxErrorException {
}
@Override
- public File createWxaCode(String path, int width, String filePath, boolean autoColor, WxMaCodeLineColor lineColor,
- boolean isHyaline)
- throws WxErrorException {
+ public File createWxaCode(String path, String envVersion, int width, String filePath, boolean autoColor,
+ WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException {
return this.service.execute(QrcodeRequestExecutor.create(this.service.getRequestHttp(), filePath), GET_WXACODE_URL,
WxaCode.builder()
.path(path)
+ .envVersion(StringUtils.defaultIfEmpty(envVersion, DEFAULT_ENV_VERSION))
.width(width)
.autoColor(autoColor)
.lineColor(lineColor)
@@ -136,7 +141,7 @@ public File createWxaCode(String path, int width, String filePath, boolean autoC
@Override
public File createWxaCode(String path, int width, String filePath) throws WxErrorException {
- return this.createWxaCode(path, width, filePath, true, null, false);
+ return this.createWxaCode(path, null, width, filePath, true, null, false);
}
@Override
@@ -145,15 +150,16 @@ public File createWxaCode(String path, String filePath) throws WxErrorException
}
@Override
- public File createWxaCodeUnlimit(String scene, String page, String filePath, boolean checkPath, String envVersion, int width, boolean autoColor,
- WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException {
+ public File createWxaCodeUnlimit(String scene, String page, String filePath, boolean checkPath, String envVersion,
+ int width, boolean autoColor, WxMaCodeLineColor lineColor, boolean isHyaline)
+ throws WxErrorException {
return this.service.execute(QrcodeRequestExecutor.create(this.service.getRequestHttp(), filePath),
GET_WXACODE_UNLIMIT_URL, this.buildWxaCodeUnlimit(scene, page, checkPath, envVersion, width, autoColor, lineColor, isHyaline));
}
@Override
public File createWxaCodeUnlimit(String scene, String page, String filePath) throws WxErrorException {
- return this.createWxaCodeUnlimit(scene, page, filePath, true, "release", 430, true, null, false);
+ return this.createWxaCodeUnlimit(scene, page, filePath, true, DEFAULT_ENV_VERSION, 430, true, null, false);
}
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCode.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCode.java
index 2361355adf..2711ccb242 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCode.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCode.java
@@ -10,6 +10,8 @@
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
+import static cn.binarywang.wx.miniapp.constant.WxMaConstants.DEFAULT_ENV_VERSION;
+
/**
* 小程序码.
*
@@ -26,6 +28,9 @@ public class WxaCode extends AbstractWxMaQrcodeWrapper implements Serializable {
private String path;
+ @SerializedName("env_version")
+ private String envVersion = DEFAULT_ENV_VERSION;
+
@Builder.Default
private int width = 430;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCodeUnlimit.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCodeUnlimit.java
index 32e713ad84..351ee5c9e2 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCodeUnlimit.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxaCodeUnlimit.java
@@ -7,6 +7,8 @@
import java.io.Serializable;
+import static cn.binarywang.wx.miniapp.constant.WxMaConstants.DEFAULT_ENV_VERSION;
+
/**
* 小程序码接口B.
*
@@ -24,7 +26,7 @@ public class WxaCodeUnlimit extends AbstractWxMaQrcodeWrapper implements Seriali
private boolean checkPath = true;
@SerializedName("env_version")
- private String envVersion = "release";
+ private String envVersion = DEFAULT_ENV_VERSION;
private int width = 430;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java
index 8ac322aa5f..646d909fca 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java
@@ -11,6 +11,11 @@ public abstract class WxMaConstants {
private WxMaConstants() {
}
+ /**
+ * 默认的env_version值
+ */
+ public static final String DEFAULT_ENV_VERSION = "release";
+
/**
* 微信接口返回的参数errcode.
*/
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java
index 25988f5fd5..d45651ba2a 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java
@@ -1,13 +1,13 @@
package cn.binarywang.wx.miniapp.api.impl;
-import java.io.File;
-
-import org.testng.annotations.*;
-
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.test.ApiTestModule;
import com.google.inject.Inject;
import me.chanjar.weixin.common.error.WxErrorException;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import java.io.File;
import static org.assertj.core.api.Assertions.assertThat;
@@ -46,7 +46,7 @@ public void testCreateQrcodeBytes() throws WxErrorException {
@Test
public void testCreateWxaCodeBytes() throws WxErrorException {
- final byte[] wxCode = this.wxService.getQrcodeService().createWxaCodeBytes("111", 122, true, null, false);
+ final byte[] wxCode = this.wxService.getQrcodeService().createWxaCodeBytes("111", null, 122, true, null, false);
assertThat(wxCode).isNotNull();
}
@@ -70,7 +70,7 @@ public void testCreateWxaCodeByFile() throws WxErrorException {
@Test
public void testCreateQrcodeUnlimitByFile() throws WxErrorException {
- final File wxCode = this.wxService.getQrcodeService().createWxaCodeUnlimit("111",null,"/opt/logs");
+ final File wxCode = this.wxService.getQrcodeService().createWxaCodeUnlimit("111", null, "/opt/logs");
assertThat(wxCode).isNotNull();
}
}
From 400fbc926a2d01ddfe7cbd445f54222e62e7b714 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Tue, 1 Mar 2022 16:36:54 +0800
Subject: [PATCH 0071/1155] =?UTF-8?q?:art:=20=E4=B8=A4=E4=B8=AA=E6=B0=B8?=
=?UTF-8?q?=E4=B9=85=E5=9B=BE=E6=96=87=E7=B4=A0=E6=9D=90=E7=9B=B8=E5=85=B3?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=B7=B2=E4=B8=8B=E7=BA=BF=EF=BC=8C=E6=A0=87?=
=?UTF-8?q?=E8=AE=B0=E4=B8=BA=E8=BF=87=E6=97=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/me/chanjar/weixin/mp/api/WxMpMaterialService.java | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java
index afccd004e0..1f7e8d3a2e 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java
@@ -165,7 +165,9 @@ public interface WxMpMaterialService {
* @param news 上传的图文消息, 请看{@link WxMpMaterialNews}
* @return the wx mp material upload result
* @throws WxErrorException the wx error exception
+ * @deprecated 关于永久图文素材相关接口下线的公告: https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&announce_id=11644831863qFQSh&version=&token=2085564289&lang=zh_CN
*/
+ @Deprecated
WxMpMaterialUploadResult materialNewsUpload(WxMpMaterialNews news) throws WxErrorException;
/**
@@ -221,7 +223,9 @@ public interface WxMpMaterialService {
* @param wxMpMaterialArticleUpdate 用来更新图文素材的bean, 请看{@link WxMpMaterialArticleUpdate}
* @return the boolean
* @throws WxErrorException the wx error exception
+ * @deprecated 关于永久图文素材相关接口下线的公告: https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&announce_id=11644831863qFQSh&version=&token=2085564289&lang=zh_CN
*/
+ @Deprecated
boolean materialNewsUpdate(WxMpMaterialArticleUpdate wxMpMaterialArticleUpdate) throws WxErrorException;
/**
From e8596bceffa1e5bf0ae70f78f276f83e52e3af67 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Thu, 3 Mar 2022 23:17:54 +0800
Subject: [PATCH 0072/1155] =?UTF-8?q?:art:=20=E4=BC=98=E5=8C=96=E9=83=A8?=
=?UTF-8?q?=E5=88=86=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/error/WxOpenErrorMsgEnum.java | 18361 ++++++++--------
.../weixin/common/util/json/GsonParser.java | 1 -
2 files changed, 9180 insertions(+), 9182 deletions(-)
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxOpenErrorMsgEnum.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxOpenErrorMsgEnum.java
index 3ab1e961d8..edcc0a28d8 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxOpenErrorMsgEnum.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxOpenErrorMsgEnum.java
@@ -16,9188 +16,9187 @@
@Getter
public enum WxOpenErrorMsgEnum {
- /**
- * 系统繁忙,此时请开发者稍候再试 system error
- */
- CODE_1(-1, "系统繁忙,此时请开发者稍候再试"),
-
- /**
- * 请求成功 ok
- */
- CODE_0(0, "请求成功"),
-
- /**
- * POST参数非法
- */
- CODE_1003(1003, "POST参数非法"),
-
- /**
- * 商品id不存在
- */
- CODE_20002(20002, "商品id不存在"),
-
- /**
- * 获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口 invalid credential, access_token is invalid or not latest
- */
- CODE_40001(40001, "获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口"),
-
- /**
- * 不合法的凭证类型 invalid grant_type
- */
- CODE_40002(40002, "不合法的凭证类型"),
-
- /**
- * 不合法的 OpenID ,请开发者确认 OpenID (该用户)是否已关注公众号,或是否是其他公众号的 OpenID invalid openid
- */
- CODE_40003(40003, "不合法的 OpenID ,请开发者确认 OpenID (该用户)是否已关注公众号,或是否是其他公众号的 OpenID"),
-
- /**
- * 不合法的媒体文件类型 invalid media type
- */
- CODE_40004(40004, "不合法的媒体文件类型"),
-
- /**
- * 上传素材文件格式不对 invalid file type
- */
- CODE_40005(40005, "上传素材文件格式不对"),
-
- /**
- * 上传素材文件大小超出限制 invalid meida size
- */
- CODE_40006(40006, "上传素材文件大小超出限制"),
-
- /**
- * 不合法的媒体文件 id invalid media_id
- */
- CODE_40007(40007, "不合法的媒体文件 id"),
-
- /**
- * 不合法的消息类型 invalid message type
- */
- CODE_40008(40008, "不合法的消息类型"),
-
- /**
- * 图片尺寸太大 invalid image size
- */
- CODE_40009(40009, "图片尺寸太大"),
-
- /**
- * 不合法的语音文件大小 invalid voice size
- */
- CODE_40010(40010, "不合法的语音文件大小"),
-
- /**
- * 不合法的视频文件大小 invalid video size
- */
- CODE_40011(40011, "不合法的视频文件大小"),
-
- /**
- * 不合法的缩略图文件大小 invalid thumb size
- */
- CODE_40012(40012, "不合法的缩略图文件大小"),
-
- /**
- * 不合法的appid invalid appid
- */
- CODE_40013(40013, "不合法的appid"),
-
- /**
- * 不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口 invalid access_token
- */
- CODE_40014(40014, "不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口"),
-
- /**
- * 不合法的菜单类型 invalid menu type
- */
- CODE_40015(40015, "不合法的菜单类型"),
-
- /**
- * 不合法的按钮个数 invalid button size
- */
- CODE_40016(40016, "不合法的按钮个数"),
-
- /**
- * 不合法的按钮类型 invalid button type
- */
- CODE_40017(40017, "不合法的按钮类型"),
-
- /**
- * 不合法的按钮名字长度 invalid button name size
- */
- CODE_40018(40018, "不合法的按钮名字长度"),
-
- /**
- * 不合法的按钮 KEY 长度 invalid button key size
- */
- CODE_40019(40019, "不合法的按钮 KEY 长度"),
-
- /**
- * 不合法的按钮 URL 长度 invalid button url size
- */
- CODE_40020(40020, "不合法的按钮 URL 长度"),
-
- /**
- * 不合法的菜单版本号 invalid menu version
- */
- CODE_40021(40021, "不合法的菜单版本号"),
-
- /**
- * 不合法的子菜单级数 invalid sub_menu level
- */
- CODE_40022(40022, "不合法的子菜单级数"),
-
- /**
- * 不合法的子菜单按钮个数 invalid sub button size
- */
- CODE_40023(40023, "不合法的子菜单按钮个数"),
-
- /**
- * 不合法的子菜单按钮类型 invalid sub button type
- */
- CODE_40024(40024, "不合法的子菜单按钮类型"),
-
- /**
- * 不合法的子菜单按钮名字长度 invalid sub button name size
- */
- CODE_40025(40025, "不合法的子菜单按钮名字长度"),
-
- /**
- * 不合法的子菜单按钮 KEY 长度 invalid sub button key size
- */
- CODE_40026(40026, "不合法的子菜单按钮 KEY 长度"),
-
- /**
- * 不合法的子菜单按钮 URL 长度 invalid sub button url size
- */
- CODE_40027(40027, "不合法的子菜单按钮 URL 长度"),
-
- /**
- * 不合法的自定义菜单使用用户 invalid menu api user
- */
- CODE_40028(40028, "不合法的自定义菜单使用用户"),
-
- /**
- * 无效的 oauth_code invalid code
- */
- CODE_40029(40029, "无效的 oauth_code"),
-
- /**
- * 不合法的 refresh_token invalid refresh_token
- */
- CODE_40030(40030, "不合法的 refresh_token"),
-
- /**
- * 不合法的 openid 列表 invalid openid list
- */
- CODE_40031(40031, "不合法的 openid 列表"),
-
- /**
- * 不合法的 openid 列表长度 invalid openid list size
- */
- CODE_40032(40032, "不合法的 openid 列表长度"),
-
- /**
- * 不合法的请求字符,不能包含 \\uxxxx 格式的字符 invalid charset. please check your request, if include \\uxxxx will create fail!
- */
- CODE_40033(40033, "不合法的请求字符,不能包含 \\uxxxx 格式的字符"),
-
- /**
- * invalid template size
- */
- CODE_40034(40034, "invalid template size"),
-
- /**
- * 不合法的参数 invalid args size
- */
- CODE_40035(40035, "不合法的参数"),
-
- /**
- * 不合法的 template_id 长度 invalid template_id size
- */
- CODE_40036(40036, "不合法的 template_id 长度"),
-
- /**
- * 不合法的 template_id invalid template_id
- */
- CODE_40037(40037, "不合法的 template_id"),
-
- /**
- * 不合法的请求格式 invalid packaging type
- */
- CODE_40038(40038, "不合法的请求格式"),
-
- /**
- * 不合法的 URL 长度 invalid url size
- */
- CODE_40039(40039, "不合法的 URL 长度"),
-
- /**
- * invalid plugin token
- */
- CODE_40040(40040, "invalid plugin token"),
-
- /**
- * invalid plugin id
- */
- CODE_40041(40041, "invalid plugin id"),
-
- /**
- * invalid plugin session
- */
- CODE_40042(40042, "invalid plugin session"),
-
- /**
- * invalid fav type
- */
- CODE_40043(40043, "invalid fav type"),
-
- /**
- * invalid size in link.title
- */
- CODE_40044(40044, "invalid size in link.title"),
-
- /**
- * invalid size in link.description
- */
- CODE_40045(40045, "invalid size in link.description"),
-
- /**
- * invalid size in link.iconurl
- */
- CODE_40046(40046, "invalid size in link.iconurl"),
-
- /**
- * invalid size in link.url
- */
- CODE_40047(40047, "invalid size in link.url"),
-
- /**
- * 无效的url invalid url domain
- */
- CODE_40048(40048, "无效的url"),
-
- /**
- * invalid score report type
- */
- CODE_40049(40049, "invalid score report type"),
-
- /**
- * 不合法的分组 id invalid timeline type
- */
- CODE_40050(40050, "不合法的分组 id"),
-
- /**
- * 分组名字不合法 invalid group name
- */
- CODE_40051(40051, "分组名字不合法"),
-
- /**
- * invalid action name
- */
- CODE_40052(40052, "invalid action name"),
-
- /**
- * invalid action info, please check document
- */
- CODE_40053(40053, "invalid action info, please check document"),
-
- /**
- * 不合法的子菜单按钮 url 域名 invalid sub button url domain
- */
- CODE_40054(40054, "不合法的子菜单按钮 url 域名"),
-
- /**
- * 不合法的菜单按钮 url 域名 invalid button url domain
- */
- CODE_40055(40055, "不合法的菜单按钮 url 域名"),
-
- /**
- * invalid serial code
- */
- CODE_40056(40056, "invalid serial code"),
-
- /**
- * invalid tabbar size
- */
- CODE_40057(40057, "invalid tabbar size"),
-
- /**
- * invalid tabbar name size
- */
- CODE_40058(40058, "invalid tabbar name size"),
-
- /**
- * invalid msg id
- */
- CODE_40059(40059, "invalid msg id"),
-
- /**
- * 删除单篇图文时,指定的 article_idx 不合法 invalid article idx
- */
- CODE_40060(40060, "删除单篇图文时,指定的 article_idx 不合法"),
-
- /**
- * invalid title size
- */
- CODE_40062(40062, "invalid title size"),
-
- /**
- * invalid message_ext size
- */
- CODE_40063(40063, "invalid message_ext size"),
-
- /**
- * invalid app type
- */
- CODE_40064(40064, "invalid app type"),
-
- /**
- * invalid msg status
- */
- CODE_40065(40065, "invalid msg status"),
-
- /**
- * 不合法的 url ,递交的页面被sitemap标记为拦截 invalid url
- */
- CODE_40066(40066, "不合法的 url ,递交的页面被sitemap标记为拦截"),
-
- /**
- * invalid tvid
- */
- CODE_40067(40067, "invalid tvid"),
-
- /**
- * contain mailcious url
- */
- CODE_40068(40068, "contain mailcious url"),
-
- /**
- * invalid hardware type
- */
- CODE_40069(40069, "invalid hardware type"),
-
- /**
- * invalid sku info
- */
- CODE_40070(40070, "invalid sku info"),
-
- /**
- * invalid card type
- */
- CODE_40071(40071, "invalid card type"),
-
- /**
- * invalid location id
- */
- CODE_40072(40072, "invalid location id"),
-
- /**
- * invalid card id
- */
- CODE_40073(40073, "invalid card id"),
-
- /**
- * invalid pay template id
- */
- CODE_40074(40074, "invalid pay template id"),
-
- /**
- * invalid encrypt code
- */
- CODE_40075(40075, "invalid encrypt code"),
-
- /**
- * invalid color id
- */
- CODE_40076(40076, "invalid color id"),
-
- /**
- * invalid score type
- */
- CODE_40077(40077, "invalid score type"),
-
- /**
- * invalid card status
- */
- CODE_40078(40078, "invalid card status"),
-
- /**
- * invalid time
- */
- CODE_40079(40079, "invalid time"),
-
- /**
- * invalid card ext
- */
- CODE_40080(40080, "invalid card ext"),
-
- /**
- * invalid template_id
- */
- CODE_40081(40081, "invalid template_id"),
-
- /**
- * invalid banner picture size
- */
- CODE_40082(40082, "invalid banner picture size"),
-
- /**
- * invalid banner url size
- */
- CODE_40083(40083, "invalid banner url size"),
-
- /**
- * invalid button desc size
- */
- CODE_40084(40084, "invalid button desc size"),
-
- /**
- * invalid button url size
- */
- CODE_40085(40085, "invalid button url size"),
-
- /**
- * invalid sharelink logo size
- */
- CODE_40086(40086, "invalid sharelink logo size"),
-
- /**
- * invalid sharelink desc size
- */
- CODE_40087(40087, "invalid sharelink desc size"),
-
- /**
- * invalid sharelink title size
- */
- CODE_40088(40088, "invalid sharelink title size"),
-
- /**
- * invalid platform id
- */
- CODE_40089(40089, "invalid platform id"),
-
- /**
- * invalid request source (bad client ip)
- */
- CODE_40090(40090, "invalid request source (bad client ip)"),
-
- /**
- * invalid component ticket
- */
- CODE_40091(40091, "invalid component ticket"),
-
- /**
- * invalid remark name
- */
- CODE_40092(40092, "invalid remark name"),
-
- /**
- * not completely ok, err_item will return location_id=-1,check your required_fields in json.
- */
- CODE_40093(40093, "not completely ok, err_item will return location_id=-1,check your required_fields in json."),
-
- /**
- * invalid component credential
- */
- CODE_40094(40094, "invalid component credential"),
-
- /**
- * bad source of caller
- */
- CODE_40095(40095, "bad source of caller"),
-
- /**
- * invalid biztype
- */
- CODE_40096(40096, "invalid biztype"),
-
- /**
- * 参数错误 invalid args
- */
- CODE_40097(40097, "参数错误"),
-
- /**
- * invalid poiid
- */
- CODE_40098(40098, "invalid poiid"),
-
- /**
- * invalid code, this code has consumed.
- */
- CODE_40099(40099, "invalid code, this code has consumed."),
-
- /**
- * invalid DateInfo, Make Sure OldDateInfoType==NewDateInfoType && NewBeginTime<=OldBeginTime && OldEndTime<= NewEndTime
- */
- CODE_40100(40100, "invalid DateInfo, Make Sure OldDateInfoType==NewDateInfoType && NewBeginTime<=OldBeginTime && OldEndTime<= NewEndTime"),
-
- /**
- * missing parameter
- */
- CODE_40101(40101, "missing parameter"),
-
- /**
- * invalid industry id
- */
- CODE_40102(40102, "invalid industry id"),
-
- /**
- * invalid industry index
- */
- CODE_40103(40103, "invalid industry index"),
-
- /**
- * invalid category id
- */
- CODE_40104(40104, "invalid category id"),
-
- /**
- * invalid view type
- */
- CODE_40105(40105, "invalid view type"),
-
- /**
- * invalid user name
- */
- CODE_40106(40106, "invalid user name"),
-
- /**
- * invalid card id! 1,card status must verify ok; 2,this card must have location_id
- */
- CODE_40107(40107, "invalid card id! 1,card status must verify ok; 2,this card must have location_id"),
-
- /**
- * invalid client version
- */
- CODE_40108(40108, "invalid client version"),
-
- /**
- * too many code size, must <= 100
- */
- CODE_40109(40109, "too many code size, must <= 100"),
-
- /**
- * have empty code
- */
- CODE_40110(40110, "have empty code"),
-
- /**
- * have same code
- */
- CODE_40111(40111, "have same code"),
-
- /**
- * can not set bind openid
- */
- CODE_40112(40112, "can not set bind openid"),
-
- /**
- * unsupported file type
- */
- CODE_40113(40113, "unsupported file type"),
-
- /**
- * invalid index value
- */
- CODE_40114(40114, "invalid index value"),
-
- /**
- * invalid session from
- */
- CODE_40115(40115, "invalid session from"),
-
- /**
- * invalid code
- */
- CODE_40116(40116, "invalid code"),
-
- /**
- * 分组名字不合法 invalid button media_id size
- */
- CODE_40117(40117, "分组名字不合法"),
-
- /**
- * media_id 大小不合法 invalid sub button media_id size
- */
- CODE_40118(40118, "media_id 大小不合法"),
-
- /**
- * button 类型错误 invalid use button type
- */
- CODE_40119(40119, "button 类型错误"),
-
- /**
- * 子 button 类型错误 invalid use sub button type
- */
- CODE_40120(40120, "子 button 类型错误"),
-
- /**
- * 不合法的 media_id 类型 invalid media type in view_limited
- */
- CODE_40121(40121, "不合法的 media_id 类型"),
-
- /**
- * invalid card quantity
- */
- CODE_40122(40122, "invalid card quantity"),
-
- /**
- * invalid task_id
- */
- CODE_40123(40123, "invalid task_id"),
-
- /**
- * too many custom field!
- */
- CODE_40124(40124, "too many custom field!"),
-
- /**
- * 不合法的 AppID ,请开发者检查 AppID 的正确性,避免异常字符,注意大小写 invalid appsecret
- */
- CODE_40125(40125, "不合法的 AppID ,请开发者检查 AppID 的正确性,避免异常字符,注意大小写"),
-
- /**
- * invalid text size
- */
- CODE_40126(40126, "invalid text size"),
-
- /**
- * invalid user-card status! Hint: the card was given to user, but may be deleted or expired or set unavailable !
- */
- CODE_40127(40127, "invalid user-card status! Hint: the card was given to user, but may be deleted or expired or set unavailable !"),
-
- /**
- * invalid media id! must be uploaded by api(cgi-bin/material/add_material)
- */
- CODE_40128(40128, "invalid media id! must be uploaded by api(cgi-bin/material/add_material)"),
-
- /**
- * invalid scene
- */
- CODE_40129(40129, "invalid scene"),
-
- /**
- * invalid openid list size, at least two openid
- */
- CODE_40130(40130, "invalid openid list size, at least two openid"),
-
- /**
- * out of limit of ticket
- */
- CODE_40131(40131, "out of limit of ticket"),
-
- /**
- * 微信号不合法 invalid username
- */
- CODE_40132(40132, "微信号不合法"),
-
- /**
- * invalid encryt data
- */
- CODE_40133(40133, "invalid encryt data"),
-
- /**
- * invalid not supply bonus, can not change card_id which supply bonus to be not supply
- */
- CODE_40135(40135, "invalid not supply bonus, can not change card_id which supply bonus to be not supply"),
-
- /**
- * invalid use DepositCodeMode, make sure sku.quantity>DepositCode.quantity
- */
- CODE_40136(40136, "invalid use DepositCodeMode, make sure sku.quantity>DepositCode.quantity"),
-
- /**
- * 不支持的图片格式 invalid image format
- */
- CODE_40137(40137, "不支持的图片格式"),
-
- /**
- * emphasis word can not be first neither remark
- */
- CODE_40138(40138, "emphasis word can not be first neither remark"),
-
- /**
- * invalid sub merchant id
- */
- CODE_40139(40139, "invalid sub merchant id"),
-
- /**
- * invalid sub merchant status
- */
- CODE_40140(40140, "invalid sub merchant status"),
-
- /**
- * invalid image url
- */
- CODE_40141(40141, "invalid image url"),
-
- /**
- * invalid sharecard parameters
- */
- CODE_40142(40142, "invalid sharecard parameters"),
-
- /**
- * invalid least cost info, should be 0
- */
- CODE_40143(40143, "invalid least cost info, should be 0"),
-
- /**
- * 1)maybe share_card_list.num or consume_share_self_num too big; 2)maybe card_id_list also has self-card_id;3)maybe card_id_list has many different card_id;4)maybe both consume_share_self_num and share_card_list.num bigger than 0
- */
- CODE_40144(40144, "1)maybe share_card_list.num or consume_share_self_num too big; 2)maybe card_id_list also has self-card_id;3)maybe card_id_list has many different card_id;4)maybe both consume_share_self_num and share_card_list.num bigger than 0"),
-
- /**
- * invalid update! Can not both set PayCell and CenterCellInfo(include: center_title, center_sub_title, center_url).
- */
- CODE_40145(40145, "invalid update! Can not both set PayCell and CenterCellInfo(include: center_title, center_sub_title, center_url)."),
-
- /**
- * invalid openid! card may be marked by other user!
- */
- CODE_40146(40146, "invalid openid! card may be marked by other user!"),
-
- /**
- * invalid consume! Consume time overranging restricts.
- */
- CODE_40147(40147, "invalid consume! Consume time overranging restricts."),
-
- /**
- * invalid friends card type
- */
- CODE_40148(40148, "invalid friends card type"),
-
- /**
- * invalid use time limit
- */
- CODE_40149(40149, "invalid use time limit"),
-
- /**
- * invalid card parameters
- */
- CODE_40150(40150, "invalid card parameters"),
-
- /**
- * invalid card info, text/pic hit antispam
- */
- CODE_40151(40151, "invalid card info, text/pic hit antispam"),
-
- /**
- * invalid group id
- */
- CODE_40152(40152, "invalid group id"),
-
- /**
- * self consume cell for friends card must need verify code
- */
- CODE_40153(40153, "self consume cell for friends card must need verify code"),
-
- /**
- * invalid voip parameters
- */
- CODE_40154(40154, "invalid voip parameters"),
-
- /**
- * 请勿添加其他公众号的主页链接 please don't contain other home page url
- */
- CODE_40155(40155, "请勿添加其他公众号的主页链接"),
-
- /**
- * invalid face recognize parameters
- */
- CODE_40156(40156, "invalid face recognize parameters"),
-
- /**
- * invalid picture, has no face
- */
- CODE_40157(40157, "invalid picture, has no face"),
-
- /**
- * invalid use_custom_code, need be false
- */
- CODE_40158(40158, "invalid use_custom_code, need be false"),
-
- /**
- * invalid length for path, or the data is not json string
- */
- CODE_40159(40159, "invalid length for path, or the data is not json string"),
-
- /**
- * invalid image file
- */
- CODE_40160(40160, "invalid image file"),
-
- /**
- * image file not match
- */
- CODE_40161(40161, "image file not match"),
-
- /**
- * invalid lifespan
- */
- CODE_40162(40162, "invalid lifespan"),
-
- /**
- * oauth_code已使用 code been used
- */
- CODE_40163(40163, "oauth_code已使用"),
-
- /**
- * invalid ip, not in whitelist
- */
- CODE_40164(40164, "invalid ip, not in whitelist"),
-
- /**
- * invalid weapp pagepath
- */
- CODE_40165(40165, "invalid weapp pagepath"),
-
- /**
- * invalid weapp appid
- */
- CODE_40166(40166, "invalid weapp appid"),
-
- /**
- * there is no relation with plugin appid
- */
- CODE_40167(40167, "there is no relation with plugin appid"),
-
- /**
- * unlinked weapp card
- */
- CODE_40168(40168, "unlinked weapp card"),
-
- /**
- * invalid length for scene, or the data is not json string
- */
- CODE_40169(40169, "invalid length for scene, or the data is not json string"),
-
- /**
- * args count exceed count limit
- */
- CODE_40170(40170, "args count exceed count limit"),
-
- /**
- * product id can not empty and the length cannot exceed 32
- */
- CODE_40171(40171, "product id can not empty and the length cannot exceed 32"),
-
- /**
- * can not have same product id
- */
- CODE_40172(40172, "can not have same product id"),
-
- /**
- * there is no bind relation
- */
- CODE_40173(40173, "there is no bind relation"),
-
- /**
- * not card user
- */
- CODE_40174(40174, "not card user"),
-
- /**
- * invalid material id
- */
- CODE_40175(40175, "invalid material id"),
-
- /**
- * invalid template id
- */
- CODE_40176(40176, "invalid template id"),
-
- /**
- * invalid product id
- */
- CODE_40177(40177, "invalid product id"),
-
- /**
- * invalid sign
- */
- CODE_40178(40178, "invalid sign"),
-
- /**
- * Function is adjusted, rules are not allowed to add or update
- */
- CODE_40179(40179, "Function is adjusted, rules are not allowed to add or update"),
-
- /**
- * invalid client tmp token
- */
- CODE_40180(40180, "invalid client tmp token"),
-
- /**
- * invalid opengid
- */
- CODE_40181(40181, "invalid opengid"),
-
- /**
- * invalid pack_id
- */
- CODE_40182(40182, "invalid pack_id"),
-
- /**
- * invalid product_appid, product_appid should bind with wxa_appid
- */
- CODE_40183(40183, "invalid product_appid, product_appid should bind with wxa_appid"),
-
- /**
- * invalid url path
- */
- CODE_40184(40184, "invalid url path"),
-
- /**
- * invalid auth_token, or auth_token is expired
- */
- CODE_40185(40185, "invalid auth_token, or auth_token is expired"),
-
- /**
- * invalid delegate
- */
- CODE_40186(40186, "invalid delegate"),
-
- /**
- * invalid ip
- */
- CODE_40187(40187, "invalid ip"),
-
- /**
- * invalid scope
- */
- CODE_40188(40188, "invalid scope"),
-
- /**
- * invalid width
- */
- CODE_40189(40189, "invalid width"),
-
- /**
- * invalid delegate time
- */
- CODE_40190(40190, "invalid delegate time"),
-
- /**
- * invalid pic_url
- */
- CODE_40191(40191, "invalid pic_url"),
-
- /**
- * invalid author in news
- */
- CODE_40192(40192, "invalid author in news"),
-
- /**
- * invalid recommend length
- */
- CODE_40193(40193, "invalid recommend length"),
-
- /**
- * illegal recommend
- */
- CODE_40194(40194, "illegal recommend"),
-
- /**
- * invalid show_num
- */
- CODE_40195(40195, "invalid show_num"),
-
- /**
- * invalid smartmsg media_id
- */
- CODE_40196(40196, "invalid smartmsg media_id"),
-
- /**
- * invalid smartmsg media num
- */
- CODE_40197(40197, "invalid smartmsg media num"),
-
- /**
- * invalid default msg article size, must be same as show_num
- */
- CODE_40198(40198, "invalid default msg article size, must be same as show_num"),
-
- /**
- * 运单 ID 不存在,未查到运单 waybill_id not found
- */
- CODE_40199(40199, "运单 ID 不存在,未查到运单"),
-
- /**
- * invalid account type
- */
- CODE_40200(40200, "invalid account type"),
-
- /**
- * invalid check url
- */
- CODE_40201(40201, "invalid check url"),
-
- /**
- * invalid check action
- */
- CODE_40202(40202, "invalid check action"),
-
- /**
- * invalid check operator
- */
- CODE_40203(40203, "invalid check operator"),
-
- /**
- * can not delete wash or rumor article
- */
- CODE_40204(40204, "can not delete wash or rumor article"),
-
- /**
- * invalid check keywords string
- */
- CODE_40205(40205, "invalid check keywords string"),
-
- /**
- * invalid check begin stamp
- */
- CODE_40206(40206, "invalid check begin stamp"),
-
- /**
- * invalid check alive seconds
- */
- CODE_40207(40207, "invalid check alive seconds"),
-
- /**
- * invalid check notify id
- */
- CODE_40208(40208, "invalid check notify id"),
-
- /**
- * invalid check notify msg
- */
- CODE_40209(40209, "invalid check notify msg"),
-
- /**
- * pages 中的path参数不存在或为空 invalid check wxa path
- */
- CODE_40210(40210, "pages 中的path参数不存在或为空"),
-
- /**
- * invalid scope_data
- */
- CODE_40211(40211, "invalid scope_data"),
-
- /**
- * paegs 当中存在不合法的query,query格式遵循URL标准,即k1=v1&k2=v2 invalid query
- */
- CODE_40212(40212, "paegs 当中存在不合法的query,query格式遵循URL标准,即k1=v1&k2=v2"),
-
- /**
- * invalid href tag
- */
- CODE_40213(40213, "invalid href tag"),
-
- /**
- * invalid href text
- */
- CODE_40214(40214, "invalid href text"),
-
- /**
- * invalid image count
- */
- CODE_40215(40215, "invalid image count"),
-
- /**
- * invalid desc
- */
- CODE_40216(40216, "invalid desc"),
-
- /**
- * invalid video count
- */
- CODE_40217(40217, "invalid video count"),
-
- /**
- * invalid video id
- */
- CODE_40218(40218, "invalid video id"),
-
- /**
- * pages不存在或者参数为空 pages is empty
- */
- CODE_40219(40219, "pages不存在或者参数为空"),
-
- /**
- * data_list is empty
- */
- CODE_40220(40220, "data_list is empty"),
-
- /**
- * invalid Content-Encoding
- */
- CODE_40221(40221, "invalid Content-Encoding"),
-
- /**
- * invalid request idc domain
- */
- CODE_40222(40222, "invalid request idc domain"),
-
- /**
- * 缺少 access_token 参数 access_token missing
- */
- CODE_41001(41001, "缺少 access_token 参数"),
-
- /**
- * 缺少 appid 参数 appid missing
- */
- CODE_41002(41002, "缺少 appid 参数"),
-
- /**
- * 缺少 refresh_token 参数 refresh_token missing
- */
- CODE_41003(41003, "缺少 refresh_token 参数"),
-
- /**
- * 缺少 secret 参数 appsecret missing
- */
- CODE_41004(41004, "缺少 secret 参数"),
-
- /**
- * 缺少多媒体文件数据,传输素材无视频或图片内容 media data missing
- */
- CODE_41005(41005, "缺少多媒体文件数据,传输素材无视频或图片内容"),
-
- /**
- * 缺少 media_id 参数 media_id missing
- */
- CODE_41006(41006, "缺少 media_id 参数"),
-
- /**
- * 缺少子菜单数据 sub_menu data missing
- */
- CODE_41007(41007, "缺少子菜单数据"),
-
- /**
- * 缺少 oauth code missing code
- */
- CODE_41008(41008, "缺少 oauth code"),
-
- /**
- * 缺少 openid missing openid
- */
- CODE_41009(41009, "缺少 openid"),
-
- /**
- * 缺失 url 参数 missing url
- */
- CODE_41010(41010, "缺失 url 参数"),
-
- /**
- * missing required fields! please check document and request json!
- */
- CODE_41011(41011, "missing required fields! please check document and request json!"),
-
- /**
- * missing card id
- */
- CODE_41012(41012, "missing card id"),
-
- /**
- * missing code
- */
- CODE_41013(41013, "missing code"),
-
- /**
- * missing ticket_class
- */
- CODE_41014(41014, "missing ticket_class"),
-
- /**
- * missing show_time
- */
- CODE_41015(41015, "missing show_time"),
-
- /**
- * missing screening_room
- */
- CODE_41016(41016, "missing screening_room"),
-
- /**
- * missing seat_number
- */
- CODE_41017(41017, "missing seat_number"),
-
- /**
- * missing component_appid
- */
- CODE_41018(41018, "missing component_appid"),
-
- /**
- * missing platform_secret
- */
- CODE_41019(41019, "missing platform_secret"),
-
- /**
- * missing platform_ticket
- */
- CODE_41020(41020, "missing platform_ticket"),
-
- /**
- * missing component_access_token
- */
- CODE_41021(41021, "missing component_access_token"),
-
- /**
- * missing "display" field
- */
- CODE_41024(41024, "missing \"display\" field"),
-
- /**
- * poi_list empty
- */
- CODE_41025(41025, "poi_list empty"),
-
- /**
- * missing image list info, text maybe empty
- */
- CODE_41026(41026, "missing image list info, text maybe empty"),
-
- /**
- * missing voip call key
- */
- CODE_41027(41027, "missing voip call key"),
-
- /**
- * invalid form id
- */
- CODE_41028(41028, "invalid form id"),
-
- /**
- * form id used count reach limit
- */
- CODE_41029(41029, "form id used count reach limit"),
-
- /**
- * page路径不正确,需要保证在现网版本小程序中存在,与app.json保持一致 invalid page
- */
- CODE_41030(41030, "page路径不正确,需要保证在现网版本小程序中存在,与app.json保持一致"),
-
- /**
- * the form id have been blocked!
- */
- CODE_41031(41031, "the form id have been blocked!"),
-
- /**
- * not allow to send message with submitted form id, for punishment
- */
- CODE_41032(41032, "not allow to send message with submitted form id, for punishment"),
-
- /**
- * 只允许通过api创建的小程序使用 invaid register type
- */
- CODE_41033(41033, "只允许通过api创建的小程序使用"),
-
- /**
- * not allow to send message with submitted form id, for punishment
- */
- CODE_41034(41034, "not allow to send message with submitted form id, for punishment"),
-
- /**
- * not allow to send message with prepay id, for punishment
- */
- CODE_41035(41035, "not allow to send message with prepay id, for punishment"),
-
- /**
- * appid ad cid
- */
- CODE_41036(41036, "appid ad cid"),
-
- /**
- * appid ad_mch_appid
- */
- CODE_41037(41037, "appid ad_mch_appid"),
-
- /**
- * appid pos_type
- */
- CODE_41038(41038, "appid pos_type"),
-
- /**
- * access_token 超时,请检查 access_token 的有效期,请参考基础支持 - 获取 access_token 中,对 access_token 的详细机制说明 access_token expired
- */
- CODE_42001(42001, "access_token 超时,请检查 access_token 的有效期,请参考基础支持 - 获取 access_token 中,对 access_token 的详细机制说明"),
-
- /**
- * refresh_token 超时 refresh_token expired
- */
- CODE_42002(42002, "refresh_token 超时"),
-
- /**
- * oauth_code 超时 code expired
- */
- CODE_42003(42003, "oauth_code 超时"),
-
- /**
- * plugin token expired
- */
- CODE_42004(42004, "plugin token expired"),
-
- /**
- * api usage expired
- */
- CODE_42005(42005, "api usage expired"),
-
- /**
- * component_access_token expired
- */
- CODE_42006(42006, "component_access_token expired"),
-
- /**
- * 用户修改微信密码, accesstoken 和 refreshtoken 失效,需要重新授权 access_token and refresh_token exception
- */
- CODE_42007(42007, "用户修改微信密码, accesstoken 和 refreshtoken 失效,需要重新授权"),
-
- /**
- * voip call key expired
- */
- CODE_42008(42008, "voip call key expired"),
-
- /**
- * client tmp token expired
- */
- CODE_42009(42009, "client tmp token expired"),
-
- /**
- * 需要 GET 请求 require GET method
- */
- CODE_43001(43001, "需要 GET 请求"),
-
- /**
- * 需要 POST 请求 require POST method
- */
- CODE_43002(43002, "需要 POST 请求"),
-
- /**
- * 需要 HTTPS 请求 require https
- */
- CODE_43003(43003, "需要 HTTPS 请求"),
-
- /**
- * 需要接收者关注 require subscribe
- */
- CODE_43004(43004, "需要接收者关注"),
-
- /**
- * 需要好友关系 require friend relations
- */
- CODE_43005(43005, "需要好友关系"),
-
- /**
- * require not block
- */
- CODE_43006(43006, "require not block"),
-
- /**
- * require bizuser authorize
- */
- CODE_43007(43007, "require bizuser authorize"),
-
- /**
- * require biz pay auth
- */
- CODE_43008(43008, "require biz pay auth"),
-
- /**
- * can not use custom code, need authorize
- */
- CODE_43009(43009, "can not use custom code, need authorize"),
-
- /**
- * can not use balance, need authorize
- */
- CODE_43010(43010, "can not use balance, need authorize"),
-
- /**
- * can not use bonus, need authorize
- */
- CODE_43011(43011, "can not use bonus, need authorize"),
-
- /**
- * can not use custom url, need authorize
- */
- CODE_43012(43012, "can not use custom url, need authorize"),
-
- /**
- * can not use shake card, need authorize
- */
- CODE_43013(43013, "can not use shake card, need authorize"),
-
- /**
- * require check agent
- */
- CODE_43014(43014, "require check agent"),
-
- /**
- * require authorize by wechat team to use this function!
- */
- CODE_43015(43015, "require authorize by wechat team to use this function!"),
-
- /**
- * 小程序未认证 require verify
- */
- CODE_43016(43016, "小程序未认证"),
-
- /**
- * require location id!
- */
- CODE_43017(43017, "require location id!"),
-
- /**
- * code has no been mark!
- */
- CODE_43018(43018, "code has no been mark!"),
-
- /**
- * 需要将接收者从黑名单中移除 require remove blacklist
- */
- CODE_43019(43019, "需要将接收者从黑名单中移除"),
-
- /**
- * change template too frequently
- */
- CODE_43100(43100, "change template too frequently"),
-
- /**
- * 用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系 user refuse to accept the msg
- */
- CODE_43101(43101, "用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系"),
-
- /**
- * the tempalte is not subscriptiontype
- */
- CODE_43102(43102, "the tempalte is not subscriptiontype"),
-
- /**
- * the api only can cancel the subscription
- */
- CODE_43103(43103, "the api only can cancel the subscription"),
-
- /**
- * this appid does not have permission
- */
- CODE_43104(43104, "this appid does not have permission"),
-
- /**
- * news has no binding relation with template_id
- */
- CODE_43105(43105, "news has no binding relation with template_id"),
-
- /**
- * not allow to add template, for punishment
- */
- CODE_43106(43106, "not allow to add template, for punishment"),
-
- /**
- * 多媒体文件为空 empty media data
- */
- CODE_44001(44001, "多媒体文件为空"),
-
- /**
- * POST 的数据包为空 empty post data
- */
- CODE_44002(44002, "POST 的数据包为空"),
-
- /**
- * 图文消息内容为空 empty news data
- */
- CODE_44003(44003, "图文消息内容为空"),
-
- /**
- * 文本消息内容为空 empty content
- */
- CODE_44004(44004, "文本消息内容为空"),
-
- /**
- * 空白的列表 empty list size
- */
- CODE_44005(44005, "空白的列表"),
-
- /**
- * empty file data
- */
- CODE_44006(44006, "empty file data"),
-
- /**
- * repeated msg id
- */
- CODE_44007(44007, "repeated msg id"),
-
- /**
- * image url size out of limit
- */
- CODE_44997(44997, "image url size out of limit"),
-
- /**
- * keyword string media size out of limit
- */
- CODE_44998(44998, "keyword string media size out of limit"),
-
- /**
- * keywords list size out of limit
- */
- CODE_44999(44999, "keywords list size out of limit"),
-
- /**
- * msg_id size out of limit
- */
- CODE_45000(45000, "msg_id size out of limit"),
-
- /**
- * 多媒体文件大小超过限制 media size out of limit
- */
- CODE_45001(45001, "多媒体文件大小超过限制"),
-
- /**
- * 消息内容超过限制 content size out of limit
- */
- CODE_45002(45002, "消息内容超过限制"),
-
- /**
- * 标题字段超过限制 title size out of limit
- */
- CODE_45003(45003, "标题字段超过限制"),
-
- /**
- * 描述字段超过限制 description size out of limit
- */
- CODE_45004(45004, "描述字段超过限制"),
-
- /**
- * 链接字段超过限制 url size out of limit
- */
- CODE_45005(45005, "链接字段超过限制"),
-
- /**
- * 图片链接字段超过限制 picurl size out of limit
- */
- CODE_45006(45006, "图片链接字段超过限制"),
-
- /**
- * 语音播放时间超过限制 playtime out of limit
- */
- CODE_45007(45007, "语音播放时间超过限制"),
-
- /**
- * 图文消息超过限制 article size out of limit
- */
- CODE_45008(45008, "图文消息超过限制"),
-
- /**
- * 接口调用超过限制 reach max api daily quota limit
- */
- CODE_45009(45009, "接口调用超过限制"),
-
- /**
- * 创建菜单个数超过限制 create menu limit
- */
- CODE_45010(45010, "创建菜单个数超过限制"),
-
- /**
- * API 调用太频繁,请稍候再试 api minute-quota reach limit, must slower, retry next minute
- */
- CODE_45011(45011, "API 调用太频繁,请稍候再试"),
-
- /**
- * 模板大小超过限制 template size out of limit
- */
- CODE_45012(45012, "模板大小超过限制"),
-
- /**
- * too many template args
- */
- CODE_45013(45013, "too many template args"),
-
- /**
- * template message size out of limit
- */
- CODE_45014(45014, "template message size out of limit"),
-
- /**
- * 回复时间超过限制 response out of time limit or subscription is canceled
- */
- CODE_45015(45015, "回复时间超过限制"),
-
- /**
- * 系统分组,不允许修改 can't modify sys group
- */
- CODE_45016(45016, "系统分组,不允许修改"),
-
- /**
- * 分组名字过长 can't set group name too long sys group
- */
- CODE_45017(45017, "分组名字过长"),
-
- /**
- * 分组数量超过上限 too many group now, no need to add new
- */
- CODE_45018(45018, "分组数量超过上限"),
-
- /**
- * too many openid, please input less
- */
- CODE_45019(45019, "too many openid, please input less"),
-
- /**
- * too many image, please input less
- */
- CODE_45020(45020, "too many image, please input less"),
-
- /**
- * some argument may be out of length limit! please check document and request json!
- */
- CODE_45021(45021, "some argument may be out of length limit! please check document and request json!"),
-
- /**
- * bonus is out of limit
- */
- CODE_45022(45022, "bonus is out of limit"),
-
- /**
- * balance is out of limit
- */
- CODE_45023(45023, "balance is out of limit"),
-
- /**
- * rank template number is out of limit
- */
- CODE_45024(45024, "rank template number is out of limit"),
-
- /**
- * poiid count is out of limit
- */
- CODE_45025(45025, "poiid count is out of limit"),
-
- /**
- * template num exceeds limit
- */
- CODE_45026(45026, "template num exceeds limit"),
-
- /**
- * template conflict with industry
- */
- CODE_45027(45027, "template conflict with industry"),
-
- /**
- * has no masssend quota
- */
- CODE_45028(45028, "has no masssend quota"),
-
- /**
- * qrcode count out of limit
- */
- CODE_45029(45029, "qrcode count out of limit"),
-
- /**
- * limit cardid, not support this function
- */
- CODE_45030(45030, "limit cardid, not support this function"),
-
- /**
- * stock is out of limit
- */
- CODE_45031(45031, "stock is out of limit"),
-
- /**
- * not inner ip for special acct in white-list
- */
- CODE_45032(45032, "not inner ip for special acct in white-list"),
-
- /**
- * user get card num is out of get_limit
- */
- CODE_45033(45033, "user get card num is out of get_limit"),
-
- /**
- * media file count is out of limit
- */
- CODE_45034(45034, "media file count is out of limit"),
-
- /**
- * access clientip is not registered, not in ip-white-list
- */
- CODE_45035(45035, "access clientip is not registered, not in ip-white-list"),
-
- /**
- * User receive announcement limit
- */
- CODE_45036(45036, "User receive announcement limit"),
-
- /**
- * user out of time limit or never talked in tempsession
- */
- CODE_45037(45037, "user out of time limit or never talked in tempsession"),
-
- /**
- * user subscribed, cannot use tempsession api
- */
- CODE_45038(45038, "user subscribed, cannot use tempsession api"),
-
- /**
- * card_list_size out of limit
- */
- CODE_45039(45039, "card_list_size out of limit"),
-
- /**
- * reach max monthly quota limit
- */
- CODE_45040(45040, "reach max monthly quota limit"),
-
- /**
- * this card reach total sku quantity limit!
- */
- CODE_45041(45041, "this card reach total sku quantity limit!"),
-
- /**
- * limit card type, this card type can NOT create by sub merchant
- */
- CODE_45042(45042, "limit card type, this card type can NOT create by sub merchant"),
-
- /**
- * can not set share_friends=true because has no Abstract Or Text_Img_List has no img Or image url not valid
- */
- CODE_45043(45043, "can not set share_friends=true because has no Abstract Or Text_Img_List has no img Or image url not valid"),
-
- /**
- * icon url size in abstract is out of limit
- */
- CODE_45044(45044, "icon url size in abstract is out of limit"),
-
- /**
- * unauthorized friends card, please contact administrator
- */
- CODE_45045(45045, "unauthorized friends card, please contact administrator"),
-
- /**
- * operate field conflict, CenterCell, PayCell, SelfConsumeCell conflict
- */
- CODE_45046(45046, "operate field conflict, CenterCell, PayCell, SelfConsumeCell conflict"),
-
- /**
- * 客服接口下行条数超过上限 out of response count limit
- */
- CODE_45047(45047, "客服接口下行条数超过上限"),
-
- /**
- * menu use invalid type
- */
- CODE_45048(45048, "menu use invalid type"),
-
- /**
- * ivr use invalid type
- */
- CODE_45049(45049, "ivr use invalid type"),
-
- /**
- * custom msg use invalid type
- */
- CODE_45050(45050, "custom msg use invalid type"),
-
- /**
- * template msg use invalid link
- */
- CODE_45051(45051, "template msg use invalid link"),
-
- /**
- * masssend msg use invalid type
- */
- CODE_45052(45052, "masssend msg use invalid type"),
-
- /**
- * exceed consume verify code size
- */
- CODE_45053(45053, "exceed consume verify code size"),
-
- /**
- * below consume verify code size
- */
- CODE_45054(45054, "below consume verify code size"),
-
- /**
- * the code is not in consume verify code charset
- */
- CODE_45055(45055, "the code is not in consume verify code charset"),
-
- /**
- * too many tag now, no need to add new
- */
- CODE_45056(45056, "too many tag now, no need to add new"),
-
- /**
- * can't delete the tag that has too many fans
- */
- CODE_45057(45057, "can't delete the tag that has too many fans"),
-
- /**
- * can't modify sys tag
- */
- CODE_45058(45058, "can't modify sys tag"),
-
- /**
- * can not tagging one user too much
- */
- CODE_45059(45059, "can not tagging one user too much"),
-
- /**
- * media is applied in ivr or menu, can not be deleted
- */
- CODE_45060(45060, "media is applied in ivr or menu, can not be deleted"),
-
- /**
- * maybe the update frequency is too often, please try again
- */
- CODE_45061(45061, "maybe the update frequency is too often, please try again"),
-
- /**
- * has agreement ad. please use mp.weixin.qq.com
- */
- CODE_45062(45062, "has agreement ad. please use mp.weixin.qq.com"),
-
- /**
- * accesstoken is not xiaochengxu
- */
- CODE_45063(45063, "accesstoken is not xiaochengxu"),
-
- /**
- * 创建菜单包含未关联的小程序 no permission to use weapp in menu
- */
- CODE_45064(45064, "创建菜单包含未关联的小程序"),
-
- /**
- * 相同 clientmsgid 已存在群发记录,返回数据中带有已存在的群发任务的 msgid clientmsgid exist
- */
- CODE_45065(45065, "相同 clientmsgid 已存在群发记录,返回数据中带有已存在的群发任务的 msgid"),
-
- /**
- * 相同 clientmsgid 重试速度过快,请间隔1分钟重试 same clientmsgid retry too fast
- */
- CODE_45066(45066, "相同 clientmsgid 重试速度过快,请间隔1分钟重试"),
-
- /**
- * clientmsgid 长度超过限制 clientmsgid size out of limit
- */
- CODE_45067(45067, "clientmsgid 长度超过限制"),
-
- /**
- * file size out of limit
- */
- CODE_45068(45068, "file size out of limit"),
-
- /**
- * product list size out of limit
- */
- CODE_45069(45069, "product list size out of limit"),
-
- /**
- * the business account have been created
- */
- CODE_45070(45070, "the business account have been created"),
-
- /**
- * business account not found
- */
- CODE_45071(45071, "business account not found"),
-
- /**
- * command字段取值不对 invalid command
- */
- CODE_45072(45072, "command字段取值不对"),
-
- /**
- * not inner vip for sns in white list
- */
- CODE_45073(45073, "not inner vip for sns in white list"),
-
- /**
- * material list size out of limit, you should delete the useless material
- */
- CODE_45074(45074, "material list size out of limit, you should delete the useless material"),
-
- /**
- * invalid keyword id
- */
- CODE_45075(45075, "invalid keyword id"),
-
- /**
- * invalid count
- */
- CODE_45076(45076, "invalid count"),
-
- /**
- * number of business account reach limit
- */
- CODE_45077(45077, "number of business account reach limit"),
-
- /**
- * nickname is illegal!
- */
- CODE_45078(45078, "nickname is illegal!"),
-
- /**
- * nickname is forbidden!(matched forbidden keyword)
- */
- CODE_45079(45079, "nickname is forbidden!(matched forbidden keyword)"),
-
- /**
- * 下发输入状态,需要之前30秒内跟用户有过消息交互 need sending message to user, or recving message from user in the last 30 seconds before typing
- */
- CODE_45080(45080, "下发输入状态,需要之前30秒内跟用户有过消息交互"),
-
- /**
- * 已经在输入状态,不可重复下发 you are already typing
- */
- CODE_45081(45081, "已经在输入状态,不可重复下发"),
-
- /**
- * need icp license for the url domain
- */
- CODE_45082(45082, "need icp license for the url domain"),
-
- /**
- * the speed out of range
- */
- CODE_45083(45083, "the speed out of range"),
-
- /**
- * No speed message
- */
- CODE_45084(45084, "No speed message"),
-
- /**
- * speed server err
- */
- CODE_45085(45085, "speed server err"),
-
- /**
- * invalid attrbute 'data-miniprogram-appid'
- */
- CODE_45086(45086, "invalid attrbute 'data-miniprogram-appid'"),
-
- /**
- * customer service message from this account have been blocked!
- */
- CODE_45087(45087, "customer service message from this account have been blocked!"),
-
- /**
- * action size out of limit
- */
- CODE_45088(45088, "action size out of limit"),
-
- /**
- * expired
- */
- CODE_45089(45089, "expired"),
-
- /**
- * invalid group msg ticket
- */
- CODE_45090(45090, "invalid group msg ticket"),
-
- /**
- * account_name is illegal!
- */
- CODE_45091(45091, "account_name is illegal!"),
-
- /**
- * no voice data
- */
- CODE_45092(45092, "no voice data"),
-
- /**
- * no quota to send msg
- */
- CODE_45093(45093, "no quota to send msg"),
-
- /**
- * not allow to send custom message when user enter session, for punishment
- */
- CODE_45094(45094, "not allow to send custom message when user enter session, for punishment"),
-
- /**
- * not allow to modify stock for the advertisement batch
- */
- CODE_45095(45095, "not allow to modify stock for the advertisement batch"),
-
- /**
- * invalid qrcode
- */
- CODE_45096(45096, "invalid qrcode"),
-
- /**
- * invalid qrcode prefix
- */
- CODE_45097(45097, "invalid qrcode prefix"),
-
- /**
- * msgmenu list size is out of limit
- */
- CODE_45098(45098, "msgmenu list size is out of limit"),
-
- /**
- * msgmenu item content size is out of limit
- */
- CODE_45099(45099, "msgmenu item content size is out of limit"),
-
- /**
- * invalid size of keyword_id_list
- */
- CODE_45100(45100, "invalid size of keyword_id_list"),
-
- /**
- * hit upload limit
- */
- CODE_45101(45101, "hit upload limit"),
-
- /**
- * this api have been blocked temporarily.
- */
- CODE_45102(45102, "this api have been blocked temporarily."),
-
- /**
- * This API has been unsupported
- */
- CODE_45103(45103, "This API has been unsupported"),
-
- /**
- * reach max domain quota limit
- */
- CODE_45104(45104, "reach max domain quota limit"),
-
- /**
- * the consume verify code not found
- */
- CODE_45154(45154, "the consume verify code not found"),
-
- /**
- * the consume verify code is existed
- */
- CODE_45155(45155, "the consume verify code is existed"),
-
- /**
- * the consume verify code's length not invalid
- */
- CODE_45156(45156, "the consume verify code's length not invalid"),
-
- /**
- * invalid tag name
- */
- CODE_45157(45157, "invalid tag name"),
-
- /**
- * tag name too long
- */
- CODE_45158(45158, "tag name too long"),
-
- /**
- * invalid tag id
- */
- CODE_45159(45159, "invalid tag id"),
-
- /**
- * invalid category to create card
- */
- CODE_45160(45160, "invalid category to create card"),
-
- /**
- * this video id must be generated by calling upload api
- */
- CODE_45161(45161, "this video id must be generated by calling upload api"),
-
- /**
- * invalid type
- */
- CODE_45162(45162, "invalid type"),
-
- /**
- * invalid sort_method
- */
- CODE_45163(45163, "invalid sort_method"),
-
- /**
- * invalid offset
- */
- CODE_45164(45164, "invalid offset"),
-
- /**
- * invalid limit
- */
- CODE_45165(45165, "invalid limit"),
-
- /**
- * invalid content
- */
- CODE_45166(45166, "invalid content"),
-
- /**
- * invalid voip call key
- */
- CODE_45167(45167, "invalid voip call key"),
-
- /**
- * keyword in blacklist
- */
- CODE_45168(45168, "keyword in blacklist"),
-
- /**
- * part or whole of the requests from the very app is temporary blocked by supervisor
- */
- CODE_45501(45501, "part or whole of the requests from the very app is temporary blocked by supervisor"),
-
- /**
- * 不存在媒体数据,media_id 不存在 media data no exist
- */
- CODE_46001(46001, "不存在媒体数据,media_id 不存在"),
-
- /**
- * 不存在的菜单版本 menu version no exist
- */
- CODE_46002(46002, "不存在的菜单版本"),
-
- /**
- * 不存在的菜单数据 menu no exist
- */
- CODE_46003(46003, "不存在的菜单数据"),
-
- /**
- * 不存在的用户 user no exist
- */
- CODE_46004(46004, "不存在的用户"),
-
- /**
- * poi no exist
- */
- CODE_46005(46005, "poi no exist"),
-
- /**
- * voip file not exist
- */
- CODE_46006(46006, "voip file not exist"),
-
- /**
- * file being transcoded, please try later
- */
- CODE_46007(46007, "file being transcoded, please try later"),
-
- /**
- * result id not exist
- */
- CODE_46008(46008, "result id not exist"),
-
- /**
- * there is no user data
- */
- CODE_46009(46009, "there is no user data"),
-
- /**
- * this api have been not supported since 2020-01-11 00:00:00, please use new api(subscribeMessage)!
- */
- CODE_46101(46101, "this api have been not supported since 2020-01-11 00:00:00, please use new api(subscribeMessage)!"),
-
- /**
- * 解析 JSON/XML 内容错误 data format error
- */
- CODE_47001(47001, "解析 JSON/XML 内容错误"),
-
- /**
- * data format error, do NOT use json unicode encode (\\uxxxx\\uxxxx), please use utf8 encoded text!
- */
- CODE_47002(47002, "data format error, do NOT use json unicode encode (\\uxxxx\\uxxxx), please use utf8 encoded text!"),
-
- /**
- * 模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错 argument invalid!
- */
- CODE_47003(47003, "模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错"),
-
- /**
- * 每次提交的页面数超过1000(备注:每次提交页面数应小于或等于1000) submit pages count more than each quota
- */
- CODE_47004(47004, "每次提交的页面数超过1000(备注:每次提交页面数应小于或等于1000)"),
-
- /**
- * tabbar no exist
- */
- CODE_47005(47005, "tabbar no exist"),
-
- /**
- * 当天提交页面数达到了配额上限,请明天再试 submit pages count reach daily limit, please try tomorrow
- */
- CODE_47006(47006, "当天提交页面数达到了配额上限,请明天再试"),
-
- /**
- * 搜索结果总数超过了1000条 search results count more than limit
- */
- CODE_47101(47101, "搜索结果总数超过了1000条"),
-
- /**
- * next_page_info参数错误 next_page_info error
- */
- CODE_47102(47102, "next_page_info参数错误"),
-
- /**
- * 参数 activity_id 错误 activity_id error
- */
- CODE_47501(47501, "参数 activity_id 错误"),
-
- /**
- * 参数 target_state 错误 target_state error
- */
- CODE_47502(47502, "参数 target_state 错误"),
-
- /**
- * 参数 version_type 错误 version_type error
- */
- CODE_47503(47503, "参数 version_type 错误"),
-
- /**
- * activity_id activity_id expired time
- */
- CODE_47504(47504, "activity_id"),
-
- /**
- * api 功能未授权,请确认公众号已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限 api unauthorized
- */
- CODE_48001(48001, "api 功能未授权,请确认公众号已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限"),
-
- /**
- * 粉丝拒收消息(粉丝在公众号选项中,关闭了 “ 接收消息 ” ) user block receive message
- */
- CODE_48002(48002, "粉丝拒收消息(粉丝在公众号选项中,关闭了 “ 接收消息 ” )"),
-
- /**
- * user not agree mass-send protocol
- */
- CODE_48003(48003, "user not agree mass-send protocol"),
-
- /**
- * api 接口被封禁,请登录 mp.weixin.qq.com 查看详情 api forbidden for irregularities, view detail on mp.weixin.qq.com
- */
- CODE_48004(48004, "api 接口被封禁,请登录 mp.weixin.qq.com 查看详情"),
-
- /**
- * api 禁止删除被自动回复和自定义菜单引用的素材 forbid to delete material used by auto-reply or menu
- */
- CODE_48005(48005, "api 禁止删除被自动回复和自定义菜单引用的素材"),
-
- /**
- * api 禁止清零调用次数,因为清零次数达到上限 forbid to clear quota because of reaching the limit
- */
- CODE_48006(48006, "api 禁止清零调用次数,因为清零次数达到上限"),
-
- /**
- * forbid to use other's voip call key
- */
- CODE_48007(48007, "forbid to use other's voip call key"),
-
- /**
- * 没有该类型消息的发送权限 no permission for this msgtype
- */
- CODE_48008(48008, "没有该类型消息的发送权限"),
-
- /**
- * this api is expired
- */
- CODE_48009(48009, "this api is expired"),
-
- /**
- * forbid to modify the material, please see more information on mp.weixin.qq.com
- */
- CODE_48010(48010, "forbid to modify the material, please see more information on mp.weixin.qq.com"),
-
- /**
- * disabled template id
- */
- CODE_48011(48011, "disabled template id"),
-
- /**
- * invalid token
- */
- CODE_48012(48012, "invalid token"),
-
- /**
- * 该视频非新接口上传,不能用于视频消息群发
- */
- CODE_48013(48013, "该视频非新接口上传,不能用于视频消息群发"),
-
- /**
- * 该视频审核状态异常,请检查后重试
- */
- CODE_48014(48014, "该视频审核状态异常,请检查后重试"),
-
- /**
- * 该账号无留言功能权限
- */
- CODE_48015(48015, "该账号无留言功能权限"),
-
- /**
- * 该账号不满足智能配置"观看更多"视频条件
- */
- CODE_48016(48016, "该账号不满足智能配置\"观看更多\"视频条件"),
-
- /**
- * not same appid with appid of access_token
- */
- CODE_49001(49001, "not same appid with appid of access_token"),
-
- /**
- * empty openid or transid
- */
- CODE_49002(49002, "empty openid or transid"),
-
- /**
- * not match openid with appid
- */
- CODE_49003(49003, "not match openid with appid"),
-
- /**
- * not match signature
- */
- CODE_49004(49004, "not match signature"),
-
- /**
- * not existed transid
- */
- CODE_49005(49005, "not existed transid"),
-
- /**
- * missing arg two_dim_code
- */
- CODE_49006(49006, "missing arg two_dim_code"),
-
- /**
- * invalid two_dim_code
- */
- CODE_49007(49007, "invalid two_dim_code"),
-
- /**
- * invalid qrcode
- */
- CODE_49008(49008, "invalid qrcode"),
-
- /**
- * missing arg qrcode
- */
- CODE_49009(49009, "missing arg qrcode"),
-
- /**
- * invalid partner id
- */
- CODE_49010(49010, "invalid partner id"),
-
- /**
- * not existed feedbackid
- */
- CODE_49300(49300, "not existed feedbackid"),
-
- /**
- * feedback exist
- */
- CODE_49301(49301, "feedback exist"),
-
- /**
- * feedback status already changed
- */
- CODE_49302(49302, "feedback status already changed"),
-
- /**
- * 用户未授权该 api api unauthorized or user unauthorized
- */
- CODE_50001(50001, "用户未授权该 api"),
-
- /**
- * 用户受限,可能是用户帐号被冻结或注销 user limited
- */
- CODE_50002(50002, "用户受限,可能是用户帐号被冻结或注销"),
-
- /**
- * user unexpected, maybe not in white list
- */
- CODE_50003(50003, "user unexpected, maybe not in white list"),
-
- /**
- * user not allow to use accesstoken, maybe for punishment
- */
- CODE_50004(50004, "user not allow to use accesstoken, maybe for punishment"),
-
- /**
- * 用户未关注公众号 user is unsubscribed
- */
- CODE_50005(50005, "用户未关注公众号"),
-
- /**
- * user has switched off friends authorization
- */
- CODE_50006(50006, "user has switched off friends authorization"),
-
- /**
- * enterprise father account not exist
- */
- CODE_51000(51000, "enterprise father account not exist"),
-
- /**
- * enterprise child account not belong to the father
- */
- CODE_51001(51001, "enterprise child account not belong to the father"),
-
- /**
- * enterprise verify message not correct
- */
- CODE_51002(51002, "enterprise verify message not correct"),
-
- /**
- * invalid enterprise child list size
- */
- CODE_51003(51003, "invalid enterprise child list size"),
-
- /**
- * not a enterprise father account
- */
- CODE_51004(51004, "not a enterprise father account"),
-
- /**
- * not a enterprise child account
- */
- CODE_51005(51005, "not a enterprise child account"),
-
- /**
- * invalid nick name
- */
- CODE_51006(51006, "invalid nick name"),
-
- /**
- * not a enterprise account
- */
- CODE_51007(51007, "not a enterprise account"),
-
- /**
- * invalid email
- */
- CODE_51008(51008, "invalid email"),
-
- /**
- * invalid pwd
- */
- CODE_51009(51009, "invalid pwd"),
-
- /**
- * repeated email
- */
- CODE_51010(51010, "repeated email"),
-
- /**
- * access deny
- */
- CODE_51011(51011, "access deny"),
-
- /**
- * need verify code
- */
- CODE_51012(51012, "need verify code"),
-
- /**
- * wrong verify code
- */
- CODE_51013(51013, "wrong verify code"),
-
- /**
- * need modify pwd
- */
- CODE_51014(51014, "need modify pwd"),
-
- /**
- * user not exist
- */
- CODE_51015(51015, "user not exist"),
-
- /**
- * tv info not exist
- */
- CODE_51020(51020, "tv info not exist"),
-
- /**
- * stamp crossed
- */
- CODE_51021(51021, "stamp crossed"),
-
- /**
- * invalid stamp range
- */
- CODE_51022(51022, "invalid stamp range"),
-
- /**
- * stamp not match date
- */
- CODE_51023(51023, "stamp not match date"),
-
- /**
- * empty program name
- */
- CODE_51024(51024, "empty program name"),
-
- /**
- * empty action url
- */
- CODE_51025(51025, "empty action url"),
-
- /**
- * program name size out of limit
- */
- CODE_51026(51026, "program name size out of limit"),
-
- /**
- * action url size out of limit
- */
- CODE_51027(51027, "action url size out of limit"),
-
- /**
- * invalid program name
- */
- CODE_51028(51028, "invalid program name"),
-
- /**
- * invalid action url
- */
- CODE_51029(51029, "invalid action url"),
-
- /**
- * invalid action id
- */
- CODE_51030(51030, "invalid action id"),
-
- /**
- * invalid action offset
- */
- CODE_51031(51031, "invalid action offset"),
-
- /**
- * empty action title
- */
- CODE_51032(51032, "empty action title"),
-
- /**
- * action title size out of limit
- */
- CODE_51033(51033, "action title size out of limit"),
-
- /**
- * empty action icon url
- */
- CODE_51034(51034, "empty action icon url"),
-
- /**
- * action icon url out of limit
- */
- CODE_51035(51035, "action icon url out of limit"),
-
- /**
- * pic is not from cdn
- */
- CODE_52000(52000, "pic is not from cdn"),
-
- /**
- * wechat price is not less than origin price
- */
- CODE_52001(52001, "wechat price is not less than origin price"),
-
- /**
- * category/sku is wrong
- */
- CODE_52002(52002, "category/sku is wrong"),
-
- /**
- * product id not existed
- */
- CODE_52003(52003, "product id not existed"),
-
- /**
- * category id is not exist, or doesn't has sub category
- */
- CODE_52004(52004, "category id is not exist, or doesn't has sub category"),
-
- /**
- * quantity is zero
- */
- CODE_52005(52005, "quantity is zero"),
-
- /**
- * area code is invalid
- */
- CODE_52006(52006, "area code is invalid"),
-
- /**
- * express template param is error
- */
- CODE_52007(52007, "express template param is error"),
-
- /**
- * express template id is not existed
- */
- CODE_52008(52008, "express template id is not existed"),
-
- /**
- * group name is empty
- */
- CODE_52009(52009, "group name is empty"),
-
- /**
- * group id is not existed
- */
- CODE_52010(52010, "group id is not existed"),
-
- /**
- * mod_action is invalid
- */
- CODE_52011(52011, "mod_action is invalid"),
-
- /**
- * shelf components count is greater than 20
- */
- CODE_52012(52012, "shelf components count is greater than 20"),
-
- /**
- * shelf component is empty
- */
- CODE_52013(52013, "shelf component is empty"),
-
- /**
- * shelf id is not existed
- */
- CODE_52014(52014, "shelf id is not existed"),
-
- /**
- * order id is not existed
- */
- CODE_52015(52015, "order id is not existed"),
-
- /**
- * order filter param is invalid
- */
- CODE_52016(52016, "order filter param is invalid"),
-
- /**
- * order express param is invalid
- */
- CODE_52017(52017, "order express param is invalid"),
-
- /**
- * order delivery param is invalid
- */
- CODE_52018(52018, "order delivery param is invalid"),
-
- /**
- * brand name empty
- */
- CODE_52019(52019, "brand name empty"),
-
- /**
- * principal limit exceed
- */
- CODE_53000(53000, "principal limit exceed"),
-
- /**
- * principal in black list
- */
- CODE_53001(53001, "principal in black list"),
-
- /**
- * mobile limit exceed
- */
- CODE_53002(53002, "mobile limit exceed"),
-
- /**
- * idcard limit exceed
- */
- CODE_53003(53003, "idcard limit exceed"),
-
- /**
- * 名称格式不合法 nickname invalid
- */
- CODE_53010(53010, "名称格式不合法"),
-
- /**
- * 名称检测命中频率限制 check nickname too frequently
- */
- CODE_53011(53011, "名称检测命中频率限制"),
-
- /**
- * 禁止使用该名称 nickname ban
- */
- CODE_53012(53012, "禁止使用该名称"),
-
- /**
- * 公众号:名称与已有公众号名称重复;小程序:该名称与已有小程序名称重复 nickname has been occupied
- */
- CODE_53013(53013, "公众号:名称与已有公众号名称重复;小程序:该名称与已有小程序名称重复"),
-
- /**
- * 公众号:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}
- */
- CODE_53014(53014, "公众号:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}"),
-
- /**
- * 公众号:该名称与已有小程序名称重复,需与该小程序帐号相同主体才可申请;小程序:该名称与已有公众号名称重复,需与该公众号帐号相同主体才可申请
- */
- CODE_53015(53015, "公众号:该名称与已有小程序名称重复,需与该小程序帐号相同主体才可申请;小程序:该名称与已有公众号名称重复,需与该公众号帐号相同主体才可申请"),
-
- /**
- * 公众号:该名称与已有多个小程序名称重复,暂不支持申请;小程序:该名称与已有多个公众号名称重复,暂不支持申请
- */
- CODE_53016(53016, "公众号:该名称与已有多个小程序名称重复,暂不支持申请;小程序:该名称与已有多个公众号名称重复,暂不支持申请"),
-
- /**
- * 公众号:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}
- */
- CODE_53017(53017, "公众号:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}"),
-
- /**
- * 名称命中微信号 nickname hit alias
- */
- CODE_53018(53018, "名称命中微信号"),
-
- /**
- * 名称在保护期内 nickname protected by infringement
- */
- CODE_53019(53019, "名称在保护期内"),
-
- /**
- * order not found
- */
- CODE_53100(53100, "订单不存在"),
-
- /**
- * order already paid
- */
- CODE_53101(53101, "已经支付的订单"),
-
- /**
- * already has checking order, can not apply
- */
- CODE_53102(53102, "已有检查单,不能申请"),
-
- /**
- * order can not do refill
- */
- CODE_53103(53103, "order can not do refill"),
-
- /**
- * 本月功能介绍修改次数已用完 modify signature quota limit exceed
- */
- CODE_53200(53200, "本月功能介绍修改次数已用完"),
-
- /**
- * 功能介绍内容命中黑名单关键字 signature in black list, can not use
- */
- CODE_53201(53201, "功能介绍内容命中黑名单关键字"),
-
- /**
- * 本月头像修改次数已用完 modify avatar quota limit exceed
- */
- CODE_53202(53202, "本月头像修改次数已用完"),
-
- /**
- * can't be modified for the time being
- */
- CODE_53203(53203, "暂时还不能修改"),
-
- /**
- * signature invalid
- */
- CODE_53204(53204, "无效签名"),
-
- /**
- * 超出每月次数限制
- */
- CODE_53300(53300, "超出每月次数限制"),
-
- /**
- * 超出可配置类目总数限制
- */
- CODE_53301(53301, "超出可配置类目总数限制"),
-
- /**
- * 当前账号主体类型不允许设置此种类目
- */
- CODE_53302(53302, "当前账号主体类型不允许设置此种类目"),
-
- /**
- * 提交的参数不合法
- */
- CODE_53303(53303, "提交的参数不合法"),
-
- /**
- * 与已有类目重复
- */
- CODE_53304(53304, "与已有类目重复"),
-
- /**
- * 包含未通过IPC校验的类目
- */
- CODE_53305(53305, "包含未通过IPC校验的类目"),
-
- /**
- * 修改类目只允许修改类目资质,不允许修改类目ID
- */
- CODE_53306(53306, "修改类目只允许修改类目资质,不允许修改类目ID"),
-
- /**
- * 只有审核失败的类目允许修改
- */
- CODE_53307(53307, "只有审核失败的类目允许修改"),
-
- /**
- * 审核中的类目不允许删除
- */
- CODE_53308(53308, "审核中的类目不允许删除"),
-
- /**
- * 社交红包不允许删除
- */
- CODE_53309(53309, "社交红包不允许删除"),
-
- /**
- * 类目超过上限,但是可以添加apply_reason参数申请更多类目
- */
- CODE_53310(53310, "类目超过上限,但是可以添加apply_reason参数申请更多类目"),
-
- /**
- * 需要提交资料信息
- */
- CODE_53311(53311, "需要提交资料信息"),
-
- /**
- * empty jsapi name
- */
- CODE_60005(60005, "空的jsapi名称"),
-
- /**
- * user cancel the auth
- */
- CODE_60006(60006, "用户取消该授权"),
-
- /**
- * invalid component type
- */
- CODE_61000(61000, "无效的第三方类型"),
-
- /**
- * component type and component appid is not match
- */
- CODE_61001(61001, "第三方类型与第三方APPID不匹配"),
-
- /**
- * the third appid is not open KF
- */
- CODE_61002(61002, "第三方APPID没有开放客服"),
-
- /**
- * component is not authorized by this account
- */
- CODE_61003(61003, "帐号未授权"),
-
- /**
- * api 功能未授权,请确认公众号/小程序已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限 access clientip is not registered
- */
- CODE_61004(61004, "api 功能未授权,请确认公众号/小程序已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限"),
-
- /**
- * component ticket is expired
- */
- CODE_61005(61005, "ticket 已过期"),
-
- /**
- * component ticket is invalid
- */
- CODE_61006(61006, "无效 ticket"),
-
- /**
- * api is unauthorized to component
- */
- CODE_61007(61007, "接口未授权给第三方平台"),
-
- /**
- * component req key is duplicated
- */
- CODE_61008(61008, "第三方请求的key存在重复"),
-
- /**
- * code is invalid
- */
- CODE_61009(61009, "无效code"),
-
- /**
- * code is expired
- */
- CODE_61010(61010, "code已过期"),
-
- /**
- * invalid component
- */
- CODE_61011(61011, "无效的第三方平台"),
-
- /**
- * invalid option name
- */
- CODE_61012(61012, "无效的选项名称"),
-
- /**
- * invalid option value
- */
- CODE_61013(61013, "无效的选项值"),
-
- /**
- * must use component token for component api
- */
- CODE_61014(61014, "必须使用component接口的token"),
-
- /**
- * must use biz account token for not component api
- */
- CODE_61015(61015, "必须使用商业帐号token,而不是component api"),
-
- /**
- * function category of API need be confirmed by component
- */
- CODE_61016(61016, "function category of API need be confirmed by component"),
-
- /**
- * function category is not authorized
- */
- CODE_61017(61017, "function category is not authorized"),
-
- /**
- * already confirm
- */
- CODE_61018(61018, "已确认"),
-
- /**
- * not need confirm
- */
- CODE_61019(61019, "不需要确认"),
-
- /**
- * err parameter
- */
- CODE_61020(61020, "err parameter"),
-
- /**
- * can't confirm
- */
- CODE_61021(61021, "can't confirm"),
-
- /**
- * can't resubmit
- */
- CODE_61022(61022, "can't resubmit"),
-
- /**
- * refresh_token is invalid
- */
- CODE_61023(61023, "refresh_token is invalid"),
-
- /**
- * must use api(api_component_token) to get token for component acct
- */
- CODE_61024(61024, "must use api(api_component_token) to get token for component acct"),
-
- /**
- * read-only option
- */
- CODE_61025(61025, "read-only option"),
-
- /**
- * register access deny
- */
- CODE_61026(61026, "register access deny"),
-
- /**
- * register limit exceed
- */
- CODE_61027(61027, "register limit exceed"),
-
- /**
- * component is unpublished
- */
- CODE_61028(61028, "component is unpublished"),
-
- /**
- * component need republish with base category
- */
- CODE_61029(61029, "component need republish with base category"),
-
- /**
- * component cancel authorization not allowed
- */
- CODE_61030(61030, "component cancel authorization not allowed"),
-
- /**
- * invalid realname type
- */
- CODE_61051(61051, "invalid realname type"),
-
- /**
- * need to be certified
- */
- CODE_61052(61052, "need to be certified"),
-
- /**
- * realname exceed limits
- */
- CODE_61053(61053, "realname exceed limits"),
-
- /**
- * realname in black list
- */
- CODE_61054(61054, "realname in black list"),
-
- /**
- * exceed quota per month
- */
- CODE_61055(61055, "exceed quota per month"),
-
- /**
- * copy_wx_verify is required option
- */
- CODE_61056(61056, "copy_wx_verify is required option"),
-
- /**
- * invalid ticket
- */
- CODE_61058(61058, "invalid ticket"),
-
- /**
- * overseas access deny
- */
- CODE_61061(61061, "overseas access deny"),
-
- /**
- * admin exceed limits
- */
- CODE_61063(61063, "admin exceed limits"),
-
- /**
- * admin in black list
- */
- CODE_61064(61064, "admin in black list"),
-
- /**
- * idcard exceed limits
- */
- CODE_61065(61065, "idcard exceed limits"),
-
- /**
- * idcard in black list
- */
- CODE_61066(61066, "idcard in black list"),
-
- /**
- * mobile exceed limits
- */
- CODE_61067(61067, "mobile exceed limits"),
-
- /**
- * mobile in black list
- */
- CODE_61068(61068, "mobile in black list"),
-
- /**
- * invalid admin
- */
- CODE_61069(61069, "invalid admin"),
-
- /**
- * name, idcard, wechat name not in accordance
- */
- CODE_61070(61070, "name, idcard, wechat name not in accordance"),
-
- /**
- * invalid url
- */
- CODE_61100(61100, "invalid url"),
-
- /**
- * invalid openid
- */
- CODE_61101(61101, "invalid openid"),
-
- /**
- * share relation not existed
- */
- CODE_61102(61102, "share relation not existed"),
-
- /**
- * product wording not set
- */
- CODE_61200(61200, "product wording not set"),
-
- /**
- * invalid base info
- */
- CODE_61300(61300, "invalid base info"),
-
- /**
- * invalid detail info
- */
- CODE_61301(61301, "invalid detail info"),
-
- /**
- * invalid action info
- */
- CODE_61302(61302, "invalid action info"),
-
- /**
- * brand info not exist
- */
- CODE_61303(61303, "brand info not exist"),
-
- /**
- * invalid product id
- */
- CODE_61304(61304, "invalid product id"),
-
- /**
- * invalid key info
- */
- CODE_61305(61305, "invalid key info"),
-
- /**
- * invalid appid
- */
- CODE_61306(61306, "invalid appid"),
-
- /**
- * invalid card id
- */
- CODE_61307(61307, "invalid card id"),
-
- /**
- * base info not exist
- */
- CODE_61308(61308, "base info not exist"),
-
- /**
- * detail info not exist
- */
- CODE_61309(61309, "detail info not exist"),
-
- /**
- * action info not exist
- */
- CODE_61310(61310, "action info not exist"),
-
- /**
- * invalid media info
- */
- CODE_61311(61311, "invalid media info"),
-
- /**
- * invalid buffer size
- */
- CODE_61312(61312, "invalid buffer size"),
-
- /**
- * invalid buffer
- */
- CODE_61313(61313, "invalid buffer"),
-
- /**
- * invalid qrcode extinfo
- */
- CODE_61314(61314, "invalid qrcode extinfo"),
-
- /**
- * invalid local ext info
- */
- CODE_61315(61315, "invalid local ext info"),
-
- /**
- * key conflict
- */
- CODE_61316(61316, "key conflict"),
-
- /**
- * ticket invalid
- */
- CODE_61317(61317, "ticket invalid"),
-
- /**
- * verify not pass
- */
- CODE_61318(61318, "verify not pass"),
-
- /**
- * category invalid
- */
- CODE_61319(61319, "category invalid"),
-
- /**
- * merchant info not exist
- */
- CODE_61320(61320, "merchant info not exist"),
-
- /**
- * cate id is a leaf node
- */
- CODE_61321(61321, "cate id is a leaf node"),
-
- /**
- * category id no permision
- */
- CODE_61322(61322, "category id no permision"),
-
- /**
- * barcode no permision
- */
- CODE_61323(61323, "barcode no permision"),
-
- /**
- * exceed max action num
- */
- CODE_61324(61324, "exceed max action num"),
-
- /**
- * brandinfo invalid store mgr type
- */
- CODE_61325(61325, "brandinfo invalid store mgr type"),
-
- /**
- * anti-spam blocked
- */
- CODE_61326(61326, "anti-spam blocked"),
-
- /**
- * comment reach limit
- */
- CODE_61327(61327, "comment reach limit"),
-
- /**
- * comment data is not the newest
- */
- CODE_61328(61328, "comment data is not the newest"),
-
- /**
- * comment hit ban word
- */
- CODE_61329(61329, "comment hit ban word"),
-
- /**
- * image already add
- */
- CODE_61330(61330, "image already add"),
-
- /**
- * image never add
- */
- CODE_61331(61331, "image never add"),
-
- /**
- * warning, image quanlity too low
- */
- CODE_61332(61332, "warning, image quanlity too low"),
-
- /**
- * warning, image simility too high
- */
- CODE_61333(61333, "warning, image simility too high"),
-
- /**
- * product not exists
- */
- CODE_61334(61334, "product not exists"),
-
- /**
- * key apply fail
- */
- CODE_61335(61335, "key apply fail"),
-
- /**
- * check status fail
- */
- CODE_61336(61336, "check status fail"),
-
- /**
- * product already exists
- */
- CODE_61337(61337, "product already exists"),
-
- /**
- * forbid delete
- */
- CODE_61338(61338, "forbid delete"),
-
- /**
- * firmcode claimed
- */
- CODE_61339(61339, "firmcode claimed"),
-
- /**
- * check firm info fail
- */
- CODE_61340(61340, "check firm info fail"),
-
- /**
- * too many white list uin
- */
- CODE_61341(61341, "too many white list uin"),
-
- /**
- * keystandard not match
- */
- CODE_61342(61342, "keystandard not match"),
-
- /**
- * keystandard error
- */
- CODE_61343(61343, "keystandard error"),
-
- /**
- * id map not exists
- */
- CODE_61344(61344, "id map not exists"),
-
- /**
- * invalid action code
- */
- CODE_61345(61345, "invalid action code"),
-
- /**
- * invalid actioninfo store
- */
- CODE_61346(61346, "invalid actioninfo store"),
-
- /**
- * invalid actioninfo media
- */
- CODE_61347(61347, "invalid actioninfo media"),
-
- /**
- * invalid actioninfo text
- */
- CODE_61348(61348, "invalid actioninfo text"),
-
- /**
- * invalid input data
- */
- CODE_61350(61350, "invalid input data"),
-
- /**
- * input data exceed max size
- */
- CODE_61351(61351, "input data exceed max size"),
-
- /**
- * kf_account error
- */
- CODE_61400(61400, "kf_account error"),
-
- /**
- * kf system alredy transfer
- */
- CODE_61401(61401, "kf system alredy transfer"),
-
- /**
- * 系统错误 (system error)
- */
- CODE_61450(61450, "系统错误 (system error)"),
-
- /**
- * 参数错误 (invalid parameter)
- */
- CODE_61451(61451, "参数错误 (invalid parameter)"),
-
- /**
- * 无效客服账号 (invalid kf_account)
- */
- CODE_61452(61452, "无效客服账号 (invalid kf_account)"),
-
- /**
- * 客服帐号已存在 (kf_account exsited)
- */
- CODE_61453(61453, "客服帐号已存在 (kf_account exsited)"),
-
- /**
- * 客服帐号名长度超过限制 ( 仅允许 10 个英文字符,不包括 @ 及 @ 后的公众号的微信号 )(invalid kf_acount length)
- */
- CODE_61454(61454, "客服帐号名长度超过限制 ( 仅允许 10 个英文字符,不包括 @ 及 @ 后的公众号的微信号 )(invalid kf_acount length)"),
-
- /**
- * 客服帐号名包含非法字符 ( 仅允许英文 + 数字 )(illegal character in kf_account)
- */
- CODE_61455(61455, "客服帐号名包含非法字符 ( 仅允许英文 + 数字 )(illegal character in kf_account)"),
-
- /**
- * 客服帐号个数超过限制 (10 个客服账号 )(kf_account count exceeded)
- */
- CODE_61456(61456, "客服帐号个数超过限制 (10 个客服账号 )(kf_account count exceeded)"),
-
- /**
- * 无效头像文件类型 (invalid file type)
- */
- CODE_61457(61457, "无效头像文件类型 (invalid file type)"),
-
- /**
- * 日期格式错误 date format error
- */
- CODE_61500(61500, "日期格式错误"),
-
- /**
- * date range error
- */
- CODE_61501(61501, "date range error"),
-
- /**
- * this is game miniprogram, data api is not supported
- */
- CODE_61502(61502, "this is game miniprogram, data api is not supported"),
-
- /**
- * data not ready, please try later
- */
- CODE_61503(61503, "data not ready, please try later"),
-
- /**
- * trying to access other's app
- */
- CODE_62001(62001, "trying to access other's app"),
-
- /**
- * app name already exists
- */
- CODE_62002(62002, "app name already exists"),
-
- /**
- * please provide at least one platform
- */
- CODE_62003(62003, "please provide at least one platform"),
-
- /**
- * invalid app name
- */
- CODE_62004(62004, "invalid app name"),
-
- /**
- * invalid app id
- */
- CODE_62005(62005, "invalid app id"),
-
- /**
- * 部分参数为空 some arguments is empty
- */
- CODE_63001(63001, "部分参数为空"),
-
- /**
- * 无效的签名 invalid signature
- */
- CODE_63002(63002, "无效的签名"),
-
- /**
- * invalid signature method
- */
- CODE_63003(63003, "invalid signature method"),
-
- /**
- * no authroize
- */
- CODE_63004(63004, "no authroize"),
-
- /**
- * gen ticket fail
- */
- CODE_63149(63149, "gen ticket fail"),
-
- /**
- * set ticket fail
- */
- CODE_63152(63152, "set ticket fail"),
-
- /**
- * shortid decode fail
- */
- CODE_63153(63153, "shortid decode fail"),
-
- /**
- * invalid status
- */
- CODE_63154(63154, "invalid status"),
-
- /**
- * invalid color
- */
- CODE_63155(63155, "invalid color"),
-
- /**
- * invalid tag
- */
- CODE_63156(63156, "invalid tag"),
-
- /**
- * invalid recommend
- */
- CODE_63157(63157, "invalid recommend"),
-
- /**
- * branditem out of limits
- */
- CODE_63158(63158, "branditem out of limits"),
-
- /**
- * retail_price empty
- */
- CODE_63159(63159, "retail_price empty"),
-
- /**
- * priceinfo invalid
- */
- CODE_63160(63160, "priceinfo invalid"),
-
- /**
- * antifake module num limit
- */
- CODE_63161(63161, "antifake module num limit"),
-
- /**
- * antifake native_type err
- */
- CODE_63162(63162, "antifake native_type err"),
-
- /**
- * antifake link not exists
- */
- CODE_63163(63163, "antifake link not exists"),
-
- /**
- * module type not exist
- */
- CODE_63164(63164, "module type not exist"),
-
- /**
- * module info not exist
- */
- CODE_63165(63165, "module info not exist"),
-
- /**
- * item is beding verified
- */
- CODE_63166(63166, "item is beding verified"),
-
- /**
- * item not published
- */
- CODE_63167(63167, "item not published"),
-
- /**
- * verify not pass
- */
- CODE_63168(63168, "verify not pass"),
-
- /**
- * already published
- */
- CODE_63169(63169, "already published"),
-
- /**
- * only banner or media
- */
- CODE_63170(63170, "only banner or media"),
-
- /**
- * card num limit
- */
- CODE_63171(63171, "card num limit"),
-
- /**
- * user num limit
- */
- CODE_63172(63172, "user num limit"),
-
- /**
- * text num limit
- */
- CODE_63173(63173, "text num limit"),
-
- /**
- * link card user sum limit
- */
- CODE_63174(63174, "link card user sum limit"),
-
- /**
- * detail info error
- */
- CODE_63175(63175, "detail info error"),
-
- /**
- * not this type
- */
- CODE_63176(63176, "not this type"),
-
- /**
- * src or secretkey or version or expired_time is wrong
- */
- CODE_63177(63177, "src or secretkey or version or expired_time is wrong"),
-
- /**
- * appid wrong
- */
- CODE_63178(63178, "appid wrong"),
-
- /**
- * openid num limit
- */
- CODE_63179(63179, "openid num limit"),
-
- /**
- * this app msg not found
- */
- CODE_63180(63180, "this app msg not found"),
-
- /**
- * get history app msg end
- */
- CODE_63181(63181, "get history app msg end"),
-
- /**
- * openid_list empty
- */
- CODE_63182(63182, "openid_list empty"),
-
- /**
- * unknown deeplink type
- */
- CODE_65001(65001, "unknown deeplink type"),
-
- /**
- * deeplink unauthorized
- */
- CODE_65002(65002, "deeplink unauthorized"),
-
- /**
- * bad deeplink
- */
- CODE_65003(65003, "bad deeplink"),
-
- /**
- * deeplinks of the very type are supposed to have short-life
- */
- CODE_65004(65004, "deeplinks of the very type are supposed to have short-life"),
-
- /**
- * invalid categories
- */
- CODE_65104(65104, "invalid categories"),
-
- /**
- * invalid photo url
- */
- CODE_65105(65105, "invalid photo url"),
-
- /**
- * poi audit state must be approved
- */
- CODE_65106(65106, "poi audit state must be approved"),
-
- /**
- * poi not allowed modify now
- */
- CODE_65107(65107, "poi not allowed modify now"),
-
- /**
- * invalid business name
- */
- CODE_65109(65109, "invalid business name"),
-
- /**
- * invalid address
- */
- CODE_65110(65110, "invalid address"),
-
- /**
- * invalid telephone
- */
- CODE_65111(65111, "invalid telephone"),
-
- /**
- * invalid city
- */
- CODE_65112(65112, "invalid city"),
-
- /**
- * invalid province
- */
- CODE_65113(65113, "invalid province"),
-
- /**
- * photo list empty
- */
- CODE_65114(65114, "photo list empty"),
-
- /**
- * poi_id is not exist
- */
- CODE_65115(65115, "poi_id is not exist"),
-
- /**
- * poi has been deleted
- */
- CODE_65116(65116, "poi has been deleted"),
-
- /**
- * cannot delete poi
- */
- CODE_65117(65117, "cannot delete poi"),
-
- /**
- * store status is invalid
- */
- CODE_65118(65118, "store status is invalid"),
-
- /**
- * lack of qualification for relevant principals
- */
- CODE_65119(65119, "lack of qualification for relevant principals"),
-
- /**
- * category info is not found
- */
- CODE_65120(65120, "category info is not found"),
-
- /**
- * room_name is empty, please check your input
- */
- CODE_65201(65201, "room_name is empty, please check your input"),
-
- /**
- * user_id is empty, please check your input
- */
- CODE_65202(65202, "user_id is empty, please check your input"),
-
- /**
- * invalid check ticket
- */
- CODE_65203(65203, "invalid check ticket"),
-
- /**
- * invalid check ticket opt code
- */
- CODE_65204(65204, "invalid check ticket opt code"),
-
- /**
- * check ticket out of time
- */
- CODE_65205(65205, "check ticket out of time"),
-
- /**
- * 不存在此 menuid 对应的个性化菜单 this menu is not conditionalmenu
- */
- CODE_65301(65301, "不存在此 menuid 对应的个性化菜单"),
-
- /**
- * 没有相应的用户 no such user
- */
- CODE_65302(65302, "没有相应的用户"),
-
- /**
- * 没有默认菜单,不能创建个性化菜单 there is no selfmenu, please create selfmenu first
- */
- CODE_65303(65303, "没有默认菜单,不能创建个性化菜单"),
-
- /**
- * MatchRule 信息为空 match rule empty
- */
- CODE_65304(65304, "MatchRule 信息为空"),
-
- /**
- * 个性化菜单数量受限 menu count limit
- */
- CODE_65305(65305, "个性化菜单数量受限"),
-
- /**
- * 不支持个性化菜单的帐号 conditional menu not support
- */
- CODE_65306(65306, "不支持个性化菜单的帐号"),
-
- /**
- * 个性化菜单信息为空 conditional menu is empty
- */
- CODE_65307(65307, "个性化菜单信息为空"),
-
- /**
- * 包含没有响应类型的 button exist empty button act
- */
- CODE_65308(65308, "包含没有响应类型的 button"),
-
- /**
- * 个性化菜单开关处于关闭状态 conditional menu switch is closed
- */
- CODE_65309(65309, "个性化菜单开关处于关闭状态"),
-
- /**
- * 填写了省份或城市信息,国家信息不能为空 region info: country is empty
- */
- CODE_65310(65310, "填写了省份或城市信息,国家信息不能为空"),
-
- /**
- * 填写了城市信息,省份信息不能为空 region info: province is empty
- */
- CODE_65311(65311, "填写了城市信息,省份信息不能为空"),
-
- /**
- * 不合法的国家信息 invalid country info
- */
- CODE_65312(65312, "不合法的国家信息"),
-
- /**
- * 不合法的省份信息 invalid province info
- */
- CODE_65313(65313, "不合法的省份信息"),
-
- /**
- * 不合法的城市信息 invalid city info
- */
- CODE_65314(65314, "不合法的城市信息"),
-
- /**
- * not fans
- */
- CODE_65315(65315, "not fans"),
-
- /**
- * 该公众号的菜单设置了过多的域名外跳(最多跳转到 3 个域名的链接) domain count reach limit
- */
- CODE_65316(65316, "该公众号的菜单设置了过多的域名外跳(最多跳转到 3 个域名的链接)"),
-
- /**
- * 不合法的 URL contain invalid url
- */
- CODE_65317(65317, "不合法的 URL"),
-
- /**
- * must use utf-8 charset
- */
- CODE_65318(65318, "must use utf-8 charset"),
-
- /**
- * not allow to create menu
- */
- CODE_65319(65319, "not allow to create menu"),
-
- /**
- * please enable new custom service, or wait for a while if you have enabled
- */
- CODE_65400(65400, "please enable new custom service, or wait for a while if you have enabled"),
-
- /**
- * invalid custom service account
- */
- CODE_65401(65401, "invalid custom service account"),
-
- /**
- * the custom service account need to bind a wechat user
- */
- CODE_65402(65402, "the custom service account need to bind a wechat user"),
-
- /**
- * illegal nickname
- */
- CODE_65403(65403, "illegal nickname"),
-
- /**
- * illegal custom service account
- */
- CODE_65404(65404, "illegal custom service account"),
-
- /**
- * custom service account number reach limit
- */
- CODE_65405(65405, "custom service account number reach limit"),
-
- /**
- * custom service account exists
- */
- CODE_65406(65406, "custom service account exists"),
-
- /**
- * the wechat user have been one of your workers
- */
- CODE_65407(65407, "the wechat user have been one of your workers"),
-
- /**
- * you have already invited the wechat user
- */
- CODE_65408(65408, "you have already invited the wechat user"),
-
- /**
- * wechat account invalid
- */
- CODE_65409(65409, "wechat account invalid"),
-
- /**
- * too many custom service accounts bound by the worker
- */
- CODE_65410(65410, "too many custom service accounts bound by the worker"),
-
- /**
- * a effective invitation to bind the custom service account exists
- */
- CODE_65411(65411, "a effective invitation to bind the custom service account exists"),
-
- /**
- * the custom service account have been bound by a wechat user
- */
- CODE_65412(65412, "the custom service account have been bound by a wechat user"),
-
- /**
- * no effective session for the customer
- */
- CODE_65413(65413, "no effective session for the customer"),
-
- /**
- * another worker is serving the customer
- */
- CODE_65414(65414, "another worker is serving the customer"),
-
- /**
- * the worker is not online
- */
- CODE_65415(65415, "the worker is not online"),
-
- /**
- * param invalid, please check
- */
- CODE_65416(65416, "param invalid, please check"),
-
- /**
- * it is too long from the starttime to endtime
- */
- CODE_65417(65417, "it is too long from the starttime to endtime"),
-
- /**
- * homepage not exists
- */
- CODE_65450(65450, "homepage not exists"),
-
- /**
- * invalid store type
- */
- CODE_68002(68002, "invalid store type"),
-
- /**
- * invalid store name
- */
- CODE_68003(68003, "invalid store name"),
-
- /**
- * invalid store wxa path
- */
- CODE_68004(68004, "invalid store wxa path"),
-
- /**
- * miss store wxa path
- */
- CODE_68005(68005, "miss store wxa path"),
-
- /**
- * invalid kefu type
- */
- CODE_68006(68006, "invalid kefu type"),
-
- /**
- * invalid kefu wxa path
- */
- CODE_68007(68007, "invalid kefu wxa path"),
-
- /**
- * invalid kefu phone number
- */
- CODE_68008(68008, "invalid kefu phone number"),
-
- /**
- * invalid sub mch id
- */
- CODE_68009(68009, "invalid sub mch id"),
-
- /**
- * store id has exist
- */
- CODE_68010(68010, "store id has exist"),
-
- /**
- * miss store name
- */
- CODE_68011(68011, "miss store name"),
-
- /**
- * miss create time
- */
- CODE_68012(68012, "miss create time"),
-
- /**
- * invalid status
- */
- CODE_68013(68013, "invalid status"),
-
- /**
- * invalid receiver info
- */
- CODE_68014(68014, "invalid receiver info"),
-
- /**
- * invalid product
- */
- CODE_68015(68015, "invalid product"),
-
- /**
- * invalid pay type
- */
- CODE_68016(68016, "invalid pay type"),
-
- /**
- * invalid fast mail no
- */
- CODE_68017(68017, "invalid fast mail no"),
-
- /**
- * invalid busi id
- */
- CODE_68018(68018, "invalid busi id"),
-
- /**
- * miss product sku
- */
- CODE_68019(68019, "miss product sku"),
-
- /**
- * invalid service type
- */
- CODE_68020(68020, "invalid service type"),
-
- /**
- * invalid service status
- */
- CODE_68021(68021, "invalid service status"),
-
- /**
- * invalid service_id
- */
- CODE_68022(68022, "invalid service_id"),
-
- /**
- * service_id has exist
- */
- CODE_68023(68023, "service_id has exist"),
-
- /**
- * miss service wxa path
- */
- CODE_68024(68024, "miss service wxa path"),
-
- /**
- * invalid product sku
- */
- CODE_68025(68025, "invalid product sku"),
-
- /**
- * invalid product spu
- */
- CODE_68026(68026, "invalid product spu"),
-
- /**
- * miss product spu
- */
- CODE_68027(68027, "miss product spu"),
-
- /**
- * can not find product spu and spu in order list
- */
- CODE_68028(68028, "can not find product spu and spu in order list"),
-
- /**
- * sku and spu duplicated
- */
- CODE_68029(68029, "sku and spu duplicated"),
-
- /**
- * busi_id has exist
- */
- CODE_68030(68030, "busi_id has exist"),
-
- /**
- * update fail
- */
- CODE_68031(68031, "update fail"),
-
- /**
- * busi_id not exist
- */
- CODE_68032(68032, "busi_id not exist"),
-
- /**
- * store no exist
- */
- CODE_68033(68033, "store no exist"),
-
- /**
- * miss product number
- */
- CODE_68034(68034, "miss product number"),
-
- /**
- * miss wxa order detail path
- */
- CODE_68035(68035, "miss wxa order detail path"),
-
- /**
- * there is no enough products to refund
- */
- CODE_68036(68036, "there is no enough products to refund"),
-
- /**
- * invalid refund info
- */
- CODE_68037(68037, "invalid refund info"),
-
- /**
- * shipped but no fast mail info
- */
- CODE_68038(68038, "shipped but no fast mail info"),
-
- /**
- * invalid wechat pay no
- */
- CODE_68039(68039, "invalid wechat pay no"),
-
- /**
- * all product has been refunded, the order can not be finished
- */
- CODE_68040(68040, "all product has been refunded, the order can not be finished"),
-
- /**
- * invalid service create time, it must bigger than the time of order
- */
- CODE_68041(68041, "invalid service create time, it must bigger than the time of order"),
-
- /**
- * invalid total cost, it must be smaller than the sum of product and shipping cost
- */
- CODE_68042(68042, "invalid total cost, it must be smaller than the sum of product and shipping cost"),
-
- /**
- * invalid role
- */
- CODE_68043(68043, "invalid role"),
-
- /**
- * invalid service_available args
- */
- CODE_68044(68044, "invalid service_available args"),
-
- /**
- * invalid order type
- */
- CODE_68045(68045, "invalid order type"),
-
- /**
- * invalid order deliver type
- */
- CODE_68046(68046, "invalid order deliver type"),
-
- /**
- * require store_id
- */
- CODE_68500(68500, "require store_id"),
-
- /**
- * invalid store_id
- */
- CODE_68501(68501, "invalid store_id"),
-
- /**
- * invalid parameter, parameter is zero or missing
- */
- CODE_71001(71001, "invalid parameter, parameter is zero or missing"),
-
- /**
- * invalid orderid, may be the other parameter not fit with orderid
- */
- CODE_71002(71002, "invalid orderid, may be the other parameter not fit with orderid"),
-
- /**
- * coin not enough
- */
- CODE_71003(71003, "coin not enough"),
-
- /**
- * card is expired
- */
- CODE_71004(71004, "card is expired"),
-
- /**
- * limit exe count
- */
- CODE_71005(71005, "limit exe count"),
-
- /**
- * limit coin count, 1 <= coin_count <= 100000
- */
- CODE_71006(71006, "limit coin count, 1 <= coin_count <= 100000"),
-
- /**
- * order finish
- */
- CODE_71007(71007, "order finish"),
-
- /**
- * order time out
- */
- CODE_71008(71008, "order time out"),
-
- /**
- * no match card
- */
- CODE_72001(72001, "no match card"),
-
- /**
- * mchid is not bind appid
- */
- CODE_72002(72002, "mchid is not bind appid"),
-
- /**
- * invalid card type, need member card
- */
- CODE_72003(72003, "invalid card type, need member card"),
-
- /**
- * mchid is occupied by the other appid
- */
- CODE_72004(72004, "mchid is occupied by the other appid"),
-
- /**
- * out of mchid size limit
- */
- CODE_72005(72005, "out of mchid size limit"),
-
- /**
- * invald title
- */
- CODE_72006(72006, "invald title"),
-
- /**
- * invalid reduce cost, can not less than 100
- */
- CODE_72007(72007, "invalid reduce cost, can not less than 100"),
-
- /**
- * invalid least cost, most larger than reduce cost
- */
- CODE_72008(72008, "invalid least cost, most larger than reduce cost"),
-
- /**
- * invalid get limit, can not over 50
- */
- CODE_72009(72009, "invalid get limit, can not over 50"),
-
- /**
- * invalid mchid
- */
- CODE_72010(72010, "invalid mchid"),
-
- /**
- * invalid activate_ticket.Maybe this ticket is not belong this AppId
- */
- CODE_72011(72011, "invalid activate_ticket.Maybe this ticket is not belong this AppId"),
-
- /**
- * activate_ticket has been expired
- */
- CODE_72012(72012, "activate_ticket has been expired"),
-
- /**
- * unauthorized order_id or authorization is expired
- */
- CODE_72013(72013, "unauthorized order_id or authorization is expired"),
-
- /**
- * task card share stock can not modify stock
- */
- CODE_72014(72014, "task card share stock can not modify stock"),
-
- /**
- * unauthorized create invoice
- */
- CODE_72015(72015, "unauthorized create invoice"),
-
- /**
- * unauthorized create member card
- */
- CODE_72016(72016, "unauthorized create member card"),
-
- /**
- * invalid invoice title
- */
- CODE_72017(72017, "invalid invoice title"),
-
- /**
- * duplicate order id, invoice had inserted to user
- */
- CODE_72018(72018, "duplicate order id, invoice had inserted to user"),
-
- /**
- * limit msg operation card list size, must <= 5
- */
- CODE_72019(72019, "limit msg operation card list size, must <= 5"),
-
- /**
- * limit consume in use limit
- */
- CODE_72020(72020, "limit consume in use limit"),
-
- /**
- * unauthorized create general card
- */
- CODE_72021(72021, "unauthorized create general card"),
-
- /**
- * user unexpected, please add user to white list
- */
- CODE_72022(72022, "user unexpected, please add user to white list"),
-
- /**
- * invoice has been lock by others
- */
- CODE_72023(72023, "invoice has been lock by others"),
-
- /**
- * invoice status error
- */
- CODE_72024(72024, "invoice status error"),
-
- /**
- * invoice token error
- */
- CODE_72025(72025, "invoice token error"),
-
- /**
- * need set wx_activate true
- */
- CODE_72026(72026, "need set wx_activate true"),
-
- /**
- * invoice action error
- */
- CODE_72027(72027, "invoice action error"),
-
- /**
- * invoice never set pay mch info
- */
- CODE_72028(72028, "invoice never set pay mch info"),
-
- /**
- * invoice never set auth field
- */
- CODE_72029(72029, "invoice never set auth field"),
-
- /**
- * invalid mchid
- */
- CODE_72030(72030, "invalid mchid"),
-
- /**
- * invalid params
- */
- CODE_72031(72031, "invalid params"),
-
- /**
- * pay gift card rule expired
- */
- CODE_72032(72032, "pay gift card rule expired"),
-
- /**
- * pay gift card rule status err
- */
- CODE_72033(72033, "pay gift card rule status err"),
-
- /**
- * invlid rule id
- */
- CODE_72034(72034, "invlid rule id"),
-
- /**
- * biz reject insert
- */
- CODE_72035(72035, "biz reject insert"),
-
- /**
- * invoice is busy, try again please
- */
- CODE_72036(72036, "invoice is busy, try again please"),
-
- /**
- * invoice owner error
- */
- CODE_72037(72037, "invoice owner error"),
-
- /**
- * invoice order never auth
- */
- CODE_72038(72038, "invoice order never auth"),
-
- /**
- * invoice must be lock first
- */
- CODE_72039(72039, "invoice must be lock first"),
-
- /**
- * invoice pdf error
- */
- CODE_72040(72040, "invoice pdf error"),
-
- /**
- * billing_code and billing_no invalid
- */
- CODE_72041(72041, "billing_code and billing_no invalid"),
-
- /**
- * billing_code and billing_no repeated
- */
- CODE_72042(72042, "billing_code and billing_no repeated"),
-
- /**
- * billing_code or billing_no size error
- */
- CODE_72043(72043, "billing_code or billing_no size error"),
-
- /**
- * scan text out of time
- */
- CODE_72044(72044, "scan text out of time"),
-
- /**
- * check_code is empty
- */
- CODE_72045(72045, "check_code is empty"),
-
- /**
- * pdf_url is invalid
- */
- CODE_72046(72046, "pdf_url is invalid"),
-
- /**
- * pdf billing_code or pdf billing_no is error
- */
- CODE_72047(72047, "pdf billing_code or pdf billing_no is error"),
-
- /**
- * insert too many invoice, need auth again
- */
- CODE_72048(72048, "insert too many invoice, need auth again"),
-
- /**
- * never auth
- */
- CODE_72049(72049, "never auth"),
-
- /**
- * auth expired, need auth again
- */
- CODE_72050(72050, "auth expired, need auth again"),
-
- /**
- * app type error
- */
- CODE_72051(72051, "app type error"),
-
- /**
- * get too many invoice
- */
- CODE_72052(72052, "get too many invoice"),
-
- /**
- * user never auth
- */
- CODE_72053(72053, "user never auth"),
-
- /**
- * invoices is inserting, wait a moment please
- */
- CODE_72054(72054, "invoices is inserting, wait a moment please"),
-
- /**
- * too many invoices
- */
- CODE_72055(72055, "too many invoices"),
-
- /**
- * order_id repeated, please check order_id
- */
- CODE_72056(72056, "order_id repeated, please check order_id"),
-
- /**
- * today insert limit
- */
- CODE_72057(72057, "today insert limit"),
-
- /**
- * callback biz error
- */
- CODE_72058(72058, "callback biz error"),
-
- /**
- * this invoice is giving to others, wait a moment please
- */
- CODE_72059(72059, "this invoice is giving to others, wait a moment please"),
-
- /**
- * this invoice has been cancelled, check the reimburse_status please
- */
- CODE_72060(72060, "this invoice has been cancelled, check the reimburse_status please"),
-
- /**
- * this invoice has been closed, check the reimburse_status please
- */
- CODE_72061(72061, "this invoice has been closed, check the reimburse_status please"),
-
- /**
- * this code_auth_key is limited, try other code_auth_key please
- */
- CODE_72062(72062, "this code_auth_key is limited, try other code_auth_key please"),
-
- /**
- * biz contact is empty, set contact first please
- */
- CODE_72063(72063, "biz contact is empty, set contact first please"),
-
- /**
- * tbc error
- */
- CODE_72064(72064, "tbc error"),
-
- /**
- * tbc logic error
- */
- CODE_72065(72065, "tbc logic error"),
-
- /**
- * the card is send for advertisement, not allow modify time and budget
- */
- CODE_72066(72066, "the card is send for advertisement, not allow modify time and budget"),
-
- /**
- * BatchInsertAuthKey_Expired
- */
- CODE_72067(72067, "BatchInsertAuthKey_Expired"),
-
- /**
- * BatchInsertAuthKey_Owner
- */
- CODE_72068(72068, "BatchInsertAuthKey_Owner"),
-
- /**
- * BATCHTASKRUN_ERROR
- */
- CODE_72069(72069, "BATCHTASKRUN_ERROR"),
-
- /**
- * BIZ_TITLE_KEY_OUT_TIME
- */
- CODE_72070(72070, "BIZ_TITLE_KEY_OUT_TIME"),
-
- /**
- * Discern_GaoPeng_Error
- */
- CODE_72071(72071, "Discern_GaoPeng_Error"),
-
- /**
- * Discern_Type_Error
- */
- CODE_72072(72072, "Discern_Type_Error"),
-
- /**
- * Fee_Error
- */
- CODE_72073(72073, "Fee_Error"),
-
- /**
- * HAS_Auth
- */
- CODE_72074(72074, "HAS_Auth"),
-
- /**
- * HAS_SEND
- */
- CODE_72075(72075, "HAS_SEND"),
-
- /**
- * INVOICESIGN
- */
- CODE_72076(72076, "INVOICESIGN"),
-
- /**
- * KEY_DELETED
- */
- CODE_72077(72077, "KEY_DELETED"),
-
- /**
- * KEY_EXPIRED
- */
- CODE_72078(72078, "KEY_EXPIRED"),
-
- /**
- * MOUNT_ERROR
- */
- CODE_72079(72079, "MOUNT_ERROR"),
-
- /**
- * NO_FOUND
- */
- CODE_72080(72080, "NO_FOUND"),
-
- /**
- * No_Pull_Pdf
- */
- CODE_72081(72081, "No_Pull_Pdf"),
-
- /**
- * PDF_CHECK_ERROR
- */
- CODE_72082(72082, "PDF_CHECK_ERROR"),
-
- /**
- * PULL_PDF_FAIL
- */
- CODE_72083(72083, "PULL_PDF_FAIL"),
-
- /**
- * PUSH_BIZ_EMPTY
- */
- CODE_72084(72084, "PUSH_BIZ_EMPTY"),
-
- /**
- * SDK_APPID_ERROR
- */
- CODE_72085(72085, "SDK_APPID_ERROR"),
-
- /**
- * SDK_BIZ_ERROR
- */
- CODE_72086(72086, "SDK_BIZ_ERROR"),
-
- /**
- * SDK_URL_ERROR
- */
- CODE_72087(72087, "SDK_URL_ERROR"),
-
- /**
- * Search_Title_Fail
- */
- CODE_72088(72088, "Search_Title_Fail"),
-
- /**
- * TITLE_BUSY
- */
- CODE_72089(72089, "TITLE_BUSY"),
-
- /**
- * TITLE_NO_FOUND
- */
- CODE_72090(72090, "TITLE_NO_FOUND"),
-
- /**
- * TOKEN_ERR
- */
- CODE_72091(72091, "TOKEN_ERR"),
-
- /**
- * USER_TITLE_NOT_FOUND
- */
- CODE_72092(72092, "USER_TITLE_NOT_FOUND"),
-
- /**
- * Verify_3rd_Fail
- */
- CODE_72093(72093, "Verify_3rd_Fail"),
-
- /**
- * sys error make out invoice failed
- */
- CODE_73000(73000, "sys error make out invoice failed"),
-
- /**
- * wxopenid error
- */
- CODE_73001(73001, "wxopenid error"),
-
- /**
- * ddh orderid empty
- */
- CODE_73002(73002, "ddh orderid empty"),
-
- /**
- * wxopenid empty
- */
- CODE_73003(73003, "wxopenid empty"),
-
- /**
- * fpqqlsh empty
- */
- CODE_73004(73004, "fpqqlsh empty"),
-
- /**
- * not a commercial
- */
- CODE_73005(73005, "not a commercial"),
-
- /**
- * kplx empty
- */
- CODE_73006(73006, "kplx empty"),
-
- /**
- * nsrmc empty
- */
- CODE_73007(73007, "nsrmc empty"),
-
- /**
- * nsrdz empty
- */
- CODE_73008(73008, "nsrdz empty"),
-
- /**
- * nsrdh empty
- */
- CODE_73009(73009, "nsrdh empty"),
-
- /**
- * ghfmc empty
- */
- CODE_73010(73010, "ghfmc empty"),
-
- /**
- * kpr empty
- */
- CODE_73011(73011, "kpr empty"),
-
- /**
- * jshj empty
- */
- CODE_73012(73012, "jshj empty"),
-
- /**
- * hjje empty
- */
- CODE_73013(73013, "hjje empty"),
-
- /**
- * hjse empty
- */
- CODE_73014(73014, "hjse empty"),
-
- /**
- * hylx empty
- */
- CODE_73015(73015, "hylx empty"),
-
- /**
- * nsrsbh empty
- */
- CODE_73016(73016, "nsrsbh empty"),
-
- /**
- * kaipiao plat error
- */
- CODE_73100(73100, "kaipiao plat error"),
-
- /**
- * nsrsbh not cmp
- */
- CODE_73101(73101, "nsrsbh not cmp"),
-
- /**
- * invalid wxa appid in url_cell, wxa appid is need to bind biz appid
- */
- CODE_73103(73103, "invalid wxa appid in url_cell, wxa appid is need to bind biz appid"),
-
- /**
- * reach frequency limit
- */
- CODE_73104(73104, "reach frequency limit"),
-
- /**
- * Kp plat make invoice timeout, please try again with the same fpqqlsh
- */
- CODE_73105(73105, "Kp plat make invoice timeout, please try again with the same fpqqlsh"),
-
- /**
- * Fpqqlsh exist with different ddh
- */
- CODE_73106(73106, "Fpqqlsh exist with different ddh"),
-
- /**
- * Fpqqlsh is processing, please wait and query later
- */
- CODE_73107(73107, "Fpqqlsh is processing, please wait and query later"),
-
- /**
- * This ddh with other fpqqlsh already exist
- */
- CODE_73108(73108, "This ddh with other fpqqlsh already exist"),
-
- /**
- * This Fpqqlsh not exist in kpplat
- */
- CODE_73109(73109, "This Fpqqlsh not exist in kpplat"),
-
- /**
- * get card detail by card id and code fail
- */
- CODE_73200(73200, "get card detail by card id and code fail"),
-
- /**
- * get cloud invoice record fail
- */
- CODE_73201(73201, "get cloud invoice record fail"),
-
- /**
- * get appinfo fail
- */
- CODE_73202(73202, "get appinfo fail"),
-
- /**
- * get invoice category or rule kv error
- */
- CODE_73203(73203, "get invoice category or rule kv error"),
-
- /**
- * request card not exist
- */
- CODE_73204(73204, "request card not exist"),
-
- /**
- * 朋友的券玩法升级中,当前暂停创建,请创建其他类型卡券
- */
- CODE_73205(73205, "朋友的券玩法升级中,当前暂停创建,请创建其他类型卡券"),
-
- /**
- * 朋友的券玩法升级中,当前暂停券点充值,请创建其他类型卡券
- */
- CODE_73206(73206, "朋友的券玩法升级中,当前暂停券点充值,请创建其他类型卡券"),
-
- /**
- * 朋友的券玩法升级中,当前暂停开通券点账户
- */
- CODE_73207(73207, "朋友的券玩法升级中,当前暂停开通券点账户"),
-
- /**
- * 朋友的券玩法升级中,当前不支持修改库存
- */
- CODE_73208(73208, "朋友的券玩法升级中,当前不支持修改库存"),
-
- /**
- * 朋友的券玩法升级中,当前不支持修改有效期
- */
- CODE_73209(73209, "朋友的券玩法升级中,当前不支持修改有效期"),
-
- /**
- * 当前批次不支持修改卡券批次库存
- */
- CODE_73210(73210, "当前批次不支持修改卡券批次库存"),
-
- /**
- * 不再支持配置网页链接跳转,请选择小程序替代
- */
- CODE_73211(73211, "不再支持配置网页链接跳转,请选择小程序替代"),
-
- /**
- * unauthorized backup member
- */
- CODE_73212(73212, "unauthorized backup member"),
-
- /**
- * invalid code type
- */
- CODE_73213(73213, "invalid code type"),
-
- /**
- * the user is already a member
- */
- CODE_73214(73214, "the user is already a member"),
-
- /**
- * 支付打通券能力已下线,请直接使用微信支付代金券API:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/convention/chapter1_1.shtml
- */
- CODE_73215(73215, "支付打通券能力已下线,请直接使用微信支付代金券API:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/convention/chapter1_1.shtml"),
-
- /**
- * 不合法的按钮名字,请从中选择一个:使用礼品卡/立即使用/去点外卖
- */
- CODE_73216(73216, "不合法的按钮名字,请从中选择一个:使用礼品卡/立即使用/去点外卖"),
-
- /**
- * 礼品卡本身没有设置appname和path,不允许在修改接口设置
- */
- CODE_73217(73217, "礼品卡本身没有设置appname和path,不允许在修改接口设置"),
-
- /**
- * 未授权使用礼品卡落地页跳转小程序功能
- */
- CODE_73218(73218, "未授权使用礼品卡落地页跳转小程序功能"),
-
- /**
- * not find this wx_hotel_id info
- */
- CODE_74000(74000, "not find this wx_hotel_id info"),
-
- /**
- * request some param empty
- */
- CODE_74001(74001, "request some param empty"),
-
- /**
- * request some param error
- */
- CODE_74002(74002, "request some param error"),
-
- /**
- * request some param error
- */
- CODE_74003(74003, "request some param error"),
-
- /**
- * datetime error
- */
- CODE_74004(74004, "datetime error"),
-
- /**
- * checkin mode error
- */
- CODE_74005(74005, "checkin mode error"),
-
- /**
- * carid from error
- */
- CODE_74007(74007, "carid from error"),
-
- /**
- * this hotel routecode not exist
- */
- CODE_74008(74008, "this hotel routecode not exist"),
-
- /**
- * this hotel routecode info error contract developer
- */
- CODE_74009(74009, "this hotel routecode info error contract developer"),
-
- /**
- * maybe not support report mode
- */
- CODE_74010(74010, "maybe not support report mode"),
-
- /**
- * pic deocde not ok maybe its not good picdata
- */
- CODE_74011(74011, "pic deocde not ok maybe its not good picdata"),
-
- /**
- * verify sys erro
- */
- CODE_74021(74021, "verify sys erro"),
-
- /**
- * inner police erro
- */
- CODE_74022(74022, "inner police erro"),
-
- /**
- * unable to detect the face
- */
- CODE_74023(74023, "unable to detect the face"),
-
- /**
- * report checkin 2 lvye sys erro
- */
- CODE_74040(74040, "report checkin 2 lvye sys erro"),
-
- /**
- * report checkou 2 lvye sys erro
- */
- CODE_74041(74041, "report checkou 2 lvye sys erro"),
-
- /**
- * some param emtpy please check
- */
- CODE_75001(75001, "some param emtpy please check"),
-
- /**
- * param illegal please check
- */
- CODE_75002(75002, "param illegal please check"),
-
- /**
- * sys error kv store error
- */
- CODE_75003(75003, "sys error kv store error"),
-
- /**
- * sys error kvstring store error
- */
- CODE_75004(75004, "sys error kvstring store error"),
-
- /**
- * product not exist please check your product_id
- */
- CODE_75005(75005, "product not exist please check your product_id"),
-
- /**
- * order not exist please check order_id and buyer_appid
- */
- CODE_75006(75006, "order not exist please check order_id and buyer_appid"),
-
- /**
- * do not allow this status to change please check this order_id status now
- */
- CODE_75007(75007, "do not allow this status to change please check this order_id status now"),
-
- /**
- * product has exist please use new id
- */
- CODE_75008(75008, "product has exist please use new id"),
-
- /**
- * notify order status failed
- */
- CODE_75009(75009, "notify order status failed"),
-
- /**
- * buyer bussiness info not exist
- */
- CODE_75010(75010, "buyer bussiness info not exist"),
-
- /**
- * you had registered
- */
- CODE_75011(75011, "you had registered"),
-
- /**
- * store image key to kv error, please try again
- */
- CODE_75012(75012, "store image key to kv error, please try again"),
-
- /**
- * get image fail, please check you image key
- */
- CODE_75013(75013, "get image fail, please check you image key"),
-
- /**
- * this key is not belong to you
- */
- CODE_75014(75014, "this key is not belong to you"),
-
- /**
- * this key is expired
- */
- CODE_75015(75015, "this key is expired"),
-
- /**
- * encrypt decode key fail
- */
- CODE_75016(75016, "encrypt decode key fail"),
-
- /**
- * encrypt encode key fail
- */
- CODE_75017(75017, "encrypt encode key fail"),
-
- /**
- * bind buyer business info fail please contact us
- */
- CODE_75018(75018, "bind buyer business info fail please contact us"),
-
- /**
- * this key is empty, user may not upload file
- */
- CODE_75019(75019, "this key is empty, user may not upload file"),
-
- /**
- * 系统错误,请稍后再试
- */
- CODE_80000(80000, "系统错误,请稍后再试"),
-
- /**
- * 参数格式校验错误
- */
- CODE_80001(80001, "参数格式校验错误"),
-
- /**
- * 签名失败
- */
- CODE_80002(80002, "签名失败"),
-
- /**
- * 该日期订单未生成
- */
- CODE_80003(80003, "该日期订单未生成"),
-
- /**
- * 用户未绑卡
- */
- CODE_80004(80004, "用户未绑卡"),
-
- /**
- * 姓名不符
- */
- CODE_80005(80005, "姓名不符"),
-
- /**
- * 身份证不符
- */
- CODE_80006(80006, "身份证不符"),
-
- /**
- * 获取城市信息失败
- */
- CODE_80007(80007, "获取城市信息失败"),
-
- /**
- * 未找到指定少儿信息
- */
- CODE_80008(80008, "未找到指定少儿信息"),
-
- /**
- * 少儿身份证不符
- */
- CODE_80009(80009, "少儿身份证不符"),
-
- /**
- * 少儿未绑定
- */
- CODE_80010(80010, "少儿未绑定"),
-
- /**
- * 签约号不符
- */
- CODE_80011(80011, "签约号不符"),
-
- /**
- * 该地区局方配置不存在
- */
- CODE_80012(80012, "该地区局方配置不存在"),
-
- /**
- * 调用方appid与局方配置不匹配
- */
- CODE_80013(80013, "调用方appid与局方配置不匹配"),
-
- /**
- * 获取消息账号失败
- */
- CODE_80014(80014, "获取消息账号失败"),
-
- /**
- * 非法的插件版本
- */
- CODE_80066(80066, "非法的插件版本"),
-
- /**
- * 找不到使用的插件
- */
- CODE_80067(80067, "找不到使用的插件"),
-
- /**
- * 没有权限使用该插件
- */
- CODE_80082(80082, "没有权限使用该插件"),
-
- /**
- * 商家未接入
- */
- CODE_80101(80101, "商家未接入"),
-
- /**
- * 实名校验code不存在
- */
- CODE_80111(80111, "实名校验code不存在"),
-
- /**
- * code并发冲突
- */
- CODE_80112(80112, "code并发冲突"),
-
- /**
- * 无效code
- */
- CODE_80113(80113, "无效code"),
-
- /**
- * report_type无效
- */
- CODE_80201(80201, "report_type无效"),
-
- /**
- * service_type无效
- */
- CODE_80202(80202, "service_type无效"),
-
- /**
- * 申请单不存在
- */
- CODE_80300(80300, "申请单不存在"),
-
- /**
- * 申请单不属于该账号
- */
- CODE_80301(80301, "申请单不属于该账号"),
-
- /**
- * 激活号段有重叠
- */
- CODE_80302(80302, "激活号段有重叠"),
-
- /**
- * 码格式错误
- */
- CODE_80303(80303, "码格式错误"),
-
- /**
- * 该码未激活
- */
- CODE_80304(80304, "该码未激活"),
-
- /**
- * 激活失败
- */
- CODE_80305(80305, "激活失败"),
-
- /**
- * 码索引超出申请范围
- */
- CODE_80306(80306, "码索引超出申请范围"),
-
- /**
- * 申请已存在
- */
- CODE_80307(80307, "申请已存在"),
-
- /**
- * 子任务未完成
- */
- CODE_80308(80308, "子任务未完成"),
-
- /**
- * 子任务文件过期
- */
- CODE_80309(80309, "子任务文件过期"),
-
- /**
- * 子任务不存在
- */
- CODE_80310(80310, "子任务不存在"),
-
- /**
- * 获取文件失败
- */
- CODE_80311(80311, "获取文件失败"),
-
- /**
- * 加密数据失败
- */
- CODE_80312(80312, "加密数据失败"),
-
- /**
- * 加密数据密钥不存在,请联系接口人申请
- */
- CODE_80313(80313, "加密数据密钥不存在,请联系接口人申请"),
-
- /**
- * can not set page_id in AddGiftCardPage
- */
- CODE_81000(81000, "can not set page_id in AddGiftCardPage"),
-
- /**
- * card_list is empty
- */
- CODE_81001(81001, "card_list is empty"),
-
- /**
- * card_id is not giftcard
- */
- CODE_81002(81002, "card_id is not giftcard"),
-
- /**
- * banner_pic_url is empty
- */
- CODE_81004(81004, "banner_pic_url is empty"),
-
- /**
- * banner_pic_url is not from cdn
- */
- CODE_81005(81005, "banner_pic_url is not from cdn"),
-
- /**
- * giftcard_wrap_pic_url_list is empty
- */
- CODE_81006(81006, "giftcard_wrap_pic_url_list is empty"),
-
- /**
- * giftcard_wrap_pic_url_list is not from cdn
- */
- CODE_81007(81007, "giftcard_wrap_pic_url_list is not from cdn"),
-
- /**
- * address is empty
- */
- CODE_81008(81008, "address is empty"),
-
- /**
- * service_phone is invalid
- */
- CODE_81009(81009, "service_phone is invalid"),
-
- /**
- * biz_description is empty
- */
- CODE_81010(81010, "biz_description is empty"),
-
- /**
- * invalid page_id
- */
- CODE_81011(81011, "invalid page_id"),
-
- /**
- * invalid order_id
- */
- CODE_81012(81012, "invalid order_id"),
-
- /**
- * invalid TIME_RANGE, begin_time + 31day must less than end_time
- */
- CODE_81013(81013, "invalid TIME_RANGE, begin_time + 31day must less than end_time"),
-
- /**
- * invalid count! count must equal or less than 100
- */
- CODE_81014(81014, "invalid count! count must equal or less than 100"),
-
- /**
- * invalid category_index OR category.title is empty OR is_banner but has_category_index
- */
- CODE_81015(81015, "invalid category_index OR category.title is empty OR is_banner but has_category_index"),
-
- /**
- * is_banner is more than 1
- */
- CODE_81016(81016, "is_banner is more than 1"),
-
- /**
- * order status error, please check pay status or gifting_status
- */
- CODE_81017(81017, "order status error, please check pay status or gifting_status"),
-
- /**
- * refund reduplicate, the order is already refunded
- */
- CODE_81018(81018, "refund reduplicate, the order is already refunded"),
-
- /**
- * lock order fail! the order is refunding by another request
- */
- CODE_81019(81019, "lock order fail! the order is refunding by another request"),
-
- /**
- * Invalid Args! page_id.size!=0 but all==true, or page_id.size==0 but all==false.
- */
- CODE_81020(81020, "Invalid Args! page_id.size!=0 but all==true, or page_id.size==0 but all==false."),
-
- /**
- * Empty theme_pic_url.
- */
- CODE_81021(81021, "Empty theme_pic_url."),
-
- /**
- * Empty theme.title.
- */
- CODE_81022(81022, "Empty theme.title."),
-
- /**
- * Empty theme.title_title.
- */
- CODE_81023(81023, "Empty theme.title_title."),
-
- /**
- * Empty theme.item_list.
- */
- CODE_81024(81024, "Empty theme.item_list."),
-
- /**
- * Empty theme.pic_item_list.
- */
- CODE_81025(81025, "Empty theme.pic_item_list."),
-
- /**
- * Invalid theme.title.length .
- */
- CODE_81026(81026, "Invalid theme.title.length ."),
-
- /**
- * Empty background_pic_url.
- */
- CODE_81027(81027, "Empty background_pic_url."),
-
- /**
- * Empty default_gifting_msg.
- */
- CODE_81028(81028, "Empty default_gifting_msg."),
-
- /**
- * Duplicate order_id
- */
- CODE_81029(81029, "Duplicate order_id"),
-
- /**
- * PreAlloc code fail
- */
- CODE_81030(81030, "PreAlloc code fail"),
-
- /**
- * Too many theme participate_activity
- */
- CODE_81031(81031, "Too many theme participate_activity"),
-
- /**
- * biz_template_id not exist
- */
- CODE_82000(82000, "biz_template_id not exist"),
-
- /**
- * result_page_style_id not exist
- */
- CODE_82001(82001, "result_page_style_id not exist"),
-
- /**
- * deal_msg_style_id not exist
- */
- CODE_82002(82002, "deal_msg_style_id not exist"),
-
- /**
- * card_style_id not exist
- */
- CODE_82003(82003, "card_style_id not exist"),
-
- /**
- * biz template not audit OK
- */
- CODE_82010(82010, "biz template not audit OK"),
-
- /**
- * biz template banned
- */
- CODE_82011(82011, "biz template banned"),
-
- /**
- * user not use service first
- */
- CODE_82020(82020, "user not use service first"),
-
- /**
- * exceed long period
- */
- CODE_82021(82021, "exceed long period"),
-
- /**
- * exceed long period max send cnt
- */
- CODE_82022(82022, "exceed long period max send cnt"),
-
- /**
- * exceed short period max send cnt
- */
- CODE_82023(82023, "exceed short period max send cnt"),
-
- /**
- * exceed data size limit
- */
- CODE_82024(82024, "exceed data size limit"),
-
- /**
- * invalid url
- */
- CODE_82025(82025, "invalid url"),
-
- /**
- * service disabled
- */
- CODE_82026(82026, "service disabled"),
-
- /**
- * invalid miniprogram appid
- */
- CODE_82027(82027, "invalid miniprogram appid"),
-
- /**
- * wx_cs_code should not be empty.
- */
- CODE_82100(82100, "wx_cs_code should not be empty."),
-
- /**
- * wx_cs_code is invalid.
- */
- CODE_82101(82101, "wx_cs_code is invalid."),
-
- /**
- * wx_cs_code is expire.
- */
- CODE_82102(82102, "wx_cs_code is expire."),
-
- /**
- * user_ip should not be empty.
- */
- CODE_82103(82103, "user_ip should not be empty."),
-
- /**
- * 公众平台账号与服务id不匹配
- */
- CODE_82200(82200, "公众平台账号与服务id不匹配"),
-
- /**
- * 该停车场已存在,请勿重复添加
- */
- CODE_82201(82201, "该停车场已存在,请勿重复添加"),
-
- /**
- * 该停车场信息不存在,请先导入
- */
- CODE_82202(82202, "该停车场信息不存在,请先导入"),
-
- /**
- * 停车场价格格式不正确
- */
- CODE_82203(82203, "停车场价格格式不正确"),
-
- /**
- * appid与code不匹配
- */
- CODE_82204(82204, "appid与code不匹配"),
-
- /**
- * wx_park_code字段为空
- */
- CODE_82205(82205, "wx_park_code字段为空"),
-
- /**
- * wx_park_code无效或已过期
- */
- CODE_82206(82206, "wx_park_code无效或已过期"),
-
- /**
- * 电话字段为空
- */
- CODE_82207(82207, "电话字段为空"),
-
- /**
- * 关闭时间格式不正确
- */
- CODE_82208(82208, "关闭时间格式不正确"),
-
- /**
- * 该appid不支持开通城市服务插件
- */
- CODE_82300(82300, "该appid不支持开通城市服务插件"),
-
- /**
- * 添加插件失败
- */
- CODE_82301(82301, "添加插件失败"),
-
- /**
- * 未添加城市服务插件
- */
- CODE_82302(82302, "未添加城市服务插件"),
-
- /**
- * fileid无效
- */
- CODE_82303(82303, "fileid无效"),
-
- /**
- * 临时文件过期
- */
- CODE_82304(82304, "临时文件过期"),
-
- /**
- * there is some param not exist
- */
- CODE_83000(83000, "there is some param not exist"),
-
- /**
- * system error
- */
- CODE_83001(83001, "system error"),
-
- /**
- * create_url_sence_failed
- */
- CODE_83002(83002, "create_url_sence_failed"),
-
- /**
- * appid maybe error or retry
- */
- CODE_83003(83003, "appid maybe error or retry"),
-
- /**
- * create appid auth failed or retry
- */
- CODE_83004(83004, "create appid auth failed or retry"),
-
- /**
- * wxwebencrytoken errro
- */
- CODE_83005(83005, "wxwebencrytoken errro"),
-
- /**
- * wxwebencrytoken expired or no exist
- */
- CODE_83006(83006, "wxwebencrytoken expired or no exist"),
-
- /**
- * wxwebencrytoken expired
- */
- CODE_83007(83007, "wxwebencrytoken expired"),
-
- /**
- * wxwebencrytoken no auth
- */
- CODE_83008(83008, "wxwebencrytoken no auth"),
-
- /**
- * wxwebencrytoken not the mate with openid
- */
- CODE_83009(83009, "wxwebencrytoken not the mate with openid"),
-
- /**
- * no exist service
- */
- CODE_83200(83200, "no exist service"),
-
- /**
- * uin has not the service
- */
- CODE_83201(83201, "uin has not the service"),
-
- /**
- * params is not json or not json array
- */
- CODE_83202(83202, "params is not json or not json array"),
-
- /**
- * params num exceed 10
- */
- CODE_83203(83203, "params num exceed 10"),
-
- /**
- * object has not key
- */
- CODE_83204(83204, "object has not key"),
-
- /**
- * key is not string
- */
- CODE_83205(83205, "key is not string"),
-
- /**
- * object has not value
- */
- CODE_83206(83206, "object has not value"),
-
- /**
- * value is not string
- */
- CODE_83207(83207, "value is not string"),
-
- /**
- * key or value is empty
- */
- CODE_83208(83208, "key or value is empty"),
-
- /**
- * key exist repeated
- */
- CODE_83209(83209, "key exist repeated"),
-
- /**
- * invalid identify id
- */
- CODE_84001(84001, "invalid identify id"),
-
- /**
- * user data expired
- */
- CODE_84002(84002, "user data expired"),
-
- /**
- * user data not exist
- */
- CODE_84003(84003, "user data not exist"),
-
- /**
- * video upload fail!
- */
- CODE_84004(84004, "video upload fail!"),
-
- /**
- * video download fail! please try again
- */
- CODE_84005(84005, "video download fail! please try again"),
-
- /**
- * name or id_card_number empty
- */
- CODE_84006(84006, "name or id_card_number empty"),
-
- /**
- * 微信号不存在或微信号设置为不可搜索 user not exist or user cannot be searched
- */
- CODE_85001(85001, "微信号不存在或微信号设置为不可搜索"),
-
- /**
- * 小程序绑定的体验者数量达到上限 number of tester reach bind limit
- */
- CODE_85002(85002, "小程序绑定的体验者数量达到上限"),
-
- /**
- * 微信号绑定的小程序体验者达到上限 user already bind too many weapps
- */
- CODE_85003(85003, "微信号绑定的小程序体验者达到上限"),
-
- /**
- * 微信号已经绑定 user already bind
- */
- CODE_85004(85004, "微信号已经绑定"),
-
- /**
- * appid not bind weapp
- */
- CODE_85005(85005, "appid not bind weapp"),
-
- /**
- * 标签格式错误 tag is in invalid format
- */
- CODE_85006(85006, "标签格式错误"),
-
- /**
- * 页面路径错误 page is in invalid format
- */
- CODE_85007(85007, "页面路径错误"),
-
- /**
- * 当前小程序没有已经审核通过的类目,请添加类目成功后重试 category is in invalid format
- */
- CODE_85008(85008, "当前小程序没有已经审核通过的类目,请添加类目成功后重试"),
-
- /**
- * 已经有正在审核的版本 already submit a version under auditing
- */
- CODE_85009(85009, "已经有正在审核的版本"),
-
- /**
- * item_list 有项目为空 missing required data
- */
- CODE_85010(85010, "item_list 有项目为空"),
-
- /**
- * 标题填写错误 title is in invalid format
- */
- CODE_85011(85011, "标题填写错误"),
-
- /**
- * 无效的审核 id invalid audit id
- */
- CODE_85012(85012, "无效的审核 id"),
-
- /**
- * 无效的自定义配置 invalid ext_json, parse fail or containing invalid path
- */
- CODE_85013(85013, "无效的自定义配置"),
-
- /**
- * 无效的模板编号 template not exist
- */
- CODE_85014(85014, "无效的模板编号"),
-
- /**
- * 该账号不是小程序账号/版本输入错误
- */
- CODE_85015(85015, "该账号不是小程序账号/版本输入错误"),
-
- /**
- * 版本输入错误
- */
+ /**
+ * 系统繁忙,此时请开发者稍候再试 system error
+ */
+ CODE_1(-1, "系统繁忙,此时请开发者稍候再试"),
+
+ /**
+ * 请求成功 ok
+ */
+ CODE_0(0, "请求成功"),
+
+ /**
+ * POST参数非法
+ */
+ CODE_1003(1003, "POST参数非法"),
+
+ /**
+ * 商品id不存在
+ */
+ CODE_20002(20002, "商品id不存在"),
+
+ /**
+ * 获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口 invalid credential, access_token is invalid or not latest
+ */
+ CODE_40001(40001, "获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口"),
+
+ /**
+ * 不合法的凭证类型 invalid grant_type
+ */
+ CODE_40002(40002, "不合法的凭证类型"),
+
+ /**
+ * 不合法的 OpenID ,请开发者确认 OpenID (该用户)是否已关注公众号,或是否是其他公众号的 OpenID invalid openid
+ */
+ CODE_40003(40003, "不合法的 OpenID ,请开发者确认 OpenID (该用户)是否已关注公众号,或是否是其他公众号的 OpenID"),
+
+ /**
+ * 不合法的媒体文件类型 invalid media type
+ */
+ CODE_40004(40004, "不合法的媒体文件类型"),
+
+ /**
+ * 上传素材文件格式不对 invalid file type
+ */
+ CODE_40005(40005, "上传素材文件格式不对"),
+
+ /**
+ * 上传素材文件大小超出限制 invalid meida size
+ */
+ CODE_40006(40006, "上传素材文件大小超出限制"),
+
+ /**
+ * 不合法的媒体文件 id invalid media_id
+ */
+ CODE_40007(40007, "不合法的媒体文件 id"),
+
+ /**
+ * 不合法的消息类型 invalid message type
+ */
+ CODE_40008(40008, "不合法的消息类型"),
+
+ /**
+ * 图片尺寸太大 invalid image size
+ */
+ CODE_40009(40009, "图片尺寸太大"),
+
+ /**
+ * 不合法的语音文件大小 invalid voice size
+ */
+ CODE_40010(40010, "不合法的语音文件大小"),
+
+ /**
+ * 不合法的视频文件大小 invalid video size
+ */
+ CODE_40011(40011, "不合法的视频文件大小"),
+
+ /**
+ * 不合法的缩略图文件大小 invalid thumb size
+ */
+ CODE_40012(40012, "不合法的缩略图文件大小"),
+
+ /**
+ * 不合法的appid invalid appid
+ */
+ CODE_40013(40013, "不合法的appid"),
+
+ /**
+ * 不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口 invalid access_token
+ */
+ CODE_40014(40014, "不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口"),
+
+ /**
+ * 不合法的菜单类型 invalid menu type
+ */
+ CODE_40015(40015, "不合法的菜单类型"),
+
+ /**
+ * 不合法的按钮个数 invalid button size
+ */
+ CODE_40016(40016, "不合法的按钮个数"),
+
+ /**
+ * 不合法的按钮类型 invalid button type
+ */
+ CODE_40017(40017, "不合法的按钮类型"),
+
+ /**
+ * 不合法的按钮名字长度 invalid button name size
+ */
+ CODE_40018(40018, "不合法的按钮名字长度"),
+
+ /**
+ * 不合法的按钮 KEY 长度 invalid button key size
+ */
+ CODE_40019(40019, "不合法的按钮 KEY 长度"),
+
+ /**
+ * 不合法的按钮 URL 长度 invalid button url size
+ */
+ CODE_40020(40020, "不合法的按钮 URL 长度"),
+
+ /**
+ * 不合法的菜单版本号 invalid menu version
+ */
+ CODE_40021(40021, "不合法的菜单版本号"),
+
+ /**
+ * 不合法的子菜单级数 invalid sub_menu level
+ */
+ CODE_40022(40022, "不合法的子菜单级数"),
+
+ /**
+ * 不合法的子菜单按钮个数 invalid sub button size
+ */
+ CODE_40023(40023, "不合法的子菜单按钮个数"),
+
+ /**
+ * 不合法的子菜单按钮类型 invalid sub button type
+ */
+ CODE_40024(40024, "不合法的子菜单按钮类型"),
+
+ /**
+ * 不合法的子菜单按钮名字长度 invalid sub button name size
+ */
+ CODE_40025(40025, "不合法的子菜单按钮名字长度"),
+
+ /**
+ * 不合法的子菜单按钮 KEY 长度 invalid sub button key size
+ */
+ CODE_40026(40026, "不合法的子菜单按钮 KEY 长度"),
+
+ /**
+ * 不合法的子菜单按钮 URL 长度 invalid sub button url size
+ */
+ CODE_40027(40027, "不合法的子菜单按钮 URL 长度"),
+
+ /**
+ * 不合法的自定义菜单使用用户 invalid menu api user
+ */
+ CODE_40028(40028, "不合法的自定义菜单使用用户"),
+
+ /**
+ * 无效的 oauth_code invalid code
+ */
+ CODE_40029(40029, "无效的 oauth_code"),
+
+ /**
+ * 不合法的 refresh_token invalid refresh_token
+ */
+ CODE_40030(40030, "不合法的 refresh_token"),
+
+ /**
+ * 不合法的 openid 列表 invalid openid list
+ */
+ CODE_40031(40031, "不合法的 openid 列表"),
+
+ /**
+ * 不合法的 openid 列表长度 invalid openid list size
+ */
+ CODE_40032(40032, "不合法的 openid 列表长度"),
+
+ /**
+ * 不合法的请求字符,不能包含 \\uxxxx 格式的字符 invalid charset. please check your request, if include \\uxxxx will create fail!
+ */
+ CODE_40033(40033, "不合法的请求字符,不能包含 \\uxxxx 格式的字符"),
+
+ /**
+ * invalid template size
+ */
+ CODE_40034(40034, "invalid template size"),
+
+ /**
+ * 不合法的参数 invalid args size
+ */
+ CODE_40035(40035, "不合法的参数"),
+
+ /**
+ * 不合法的 template_id 长度 invalid template_id size
+ */
+ CODE_40036(40036, "不合法的 template_id 长度"),
+
+ /**
+ * 不合法的 template_id invalid template_id
+ */
+ CODE_40037(40037, "不合法的 template_id"),
+
+ /**
+ * 不合法的请求格式 invalid packaging type
+ */
+ CODE_40038(40038, "不合法的请求格式"),
+
+ /**
+ * 不合法的 URL 长度 invalid url size
+ */
+ CODE_40039(40039, "不合法的 URL 长度"),
+
+ /**
+ * invalid plugin token
+ */
+ CODE_40040(40040, "invalid plugin token"),
+
+ /**
+ * invalid plugin id
+ */
+ CODE_40041(40041, "invalid plugin id"),
+
+ /**
+ * invalid plugin session
+ */
+ CODE_40042(40042, "invalid plugin session"),
+
+ /**
+ * invalid fav type
+ */
+ CODE_40043(40043, "invalid fav type"),
+
+ /**
+ * invalid size in link.title
+ */
+ CODE_40044(40044, "invalid size in link.title"),
+
+ /**
+ * invalid size in link.description
+ */
+ CODE_40045(40045, "invalid size in link.description"),
+
+ /**
+ * invalid size in link.iconurl
+ */
+ CODE_40046(40046, "invalid size in link.iconurl"),
+
+ /**
+ * invalid size in link.url
+ */
+ CODE_40047(40047, "invalid size in link.url"),
+
+ /**
+ * 无效的url invalid url domain
+ */
+ CODE_40048(40048, "无效的url"),
+
+ /**
+ * invalid score report type
+ */
+ CODE_40049(40049, "invalid score report type"),
+
+ /**
+ * 不合法的分组 id invalid timeline type
+ */
+ CODE_40050(40050, "不合法的分组 id"),
+
+ /**
+ * 分组名字不合法 invalid group name
+ */
+ CODE_40051(40051, "分组名字不合法"),
+
+ /**
+ * invalid action name
+ */
+ CODE_40052(40052, "invalid action name"),
+
+ /**
+ * invalid action info, please check document
+ */
+ CODE_40053(40053, "invalid action info, please check document"),
+
+ /**
+ * 不合法的子菜单按钮 url 域名 invalid sub button url domain
+ */
+ CODE_40054(40054, "不合法的子菜单按钮 url 域名"),
+
+ /**
+ * 不合法的菜单按钮 url 域名 invalid button url domain
+ */
+ CODE_40055(40055, "不合法的菜单按钮 url 域名"),
+
+ /**
+ * invalid serial code
+ */
+ CODE_40056(40056, "invalid serial code"),
+
+ /**
+ * invalid tabbar size
+ */
+ CODE_40057(40057, "invalid tabbar size"),
+
+ /**
+ * invalid tabbar name size
+ */
+ CODE_40058(40058, "invalid tabbar name size"),
+
+ /**
+ * invalid msg id
+ */
+ CODE_40059(40059, "invalid msg id"),
+
+ /**
+ * 删除单篇图文时,指定的 article_idx 不合法 invalid article idx
+ */
+ CODE_40060(40060, "删除单篇图文时,指定的 article_idx 不合法"),
+
+ /**
+ * invalid title size
+ */
+ CODE_40062(40062, "invalid title size"),
+
+ /**
+ * invalid message_ext size
+ */
+ CODE_40063(40063, "invalid message_ext size"),
+
+ /**
+ * invalid app type
+ */
+ CODE_40064(40064, "invalid app type"),
+
+ /**
+ * invalid msg status
+ */
+ CODE_40065(40065, "invalid msg status"),
+
+ /**
+ * 不合法的 url ,递交的页面被sitemap标记为拦截 invalid url
+ */
+ CODE_40066(40066, "不合法的 url ,递交的页面被sitemap标记为拦截"),
+
+ /**
+ * invalid tvid
+ */
+ CODE_40067(40067, "invalid tvid"),
+
+ /**
+ * contain mailcious url
+ */
+ CODE_40068(40068, "contain mailcious url"),
+
+ /**
+ * invalid hardware type
+ */
+ CODE_40069(40069, "invalid hardware type"),
+
+ /**
+ * invalid sku info
+ */
+ CODE_40070(40070, "invalid sku info"),
+
+ /**
+ * invalid card type
+ */
+ CODE_40071(40071, "invalid card type"),
+
+ /**
+ * invalid location id
+ */
+ CODE_40072(40072, "invalid location id"),
+
+ /**
+ * invalid card id
+ */
+ CODE_40073(40073, "invalid card id"),
+
+ /**
+ * invalid pay template id
+ */
+ CODE_40074(40074, "invalid pay template id"),
+
+ /**
+ * invalid encrypt code
+ */
+ CODE_40075(40075, "invalid encrypt code"),
+
+ /**
+ * invalid color id
+ */
+ CODE_40076(40076, "invalid color id"),
+
+ /**
+ * invalid score type
+ */
+ CODE_40077(40077, "invalid score type"),
+
+ /**
+ * invalid card status
+ */
+ CODE_40078(40078, "invalid card status"),
+
+ /**
+ * invalid time
+ */
+ CODE_40079(40079, "invalid time"),
+
+ /**
+ * invalid card ext
+ */
+ CODE_40080(40080, "invalid card ext"),
+
+ /**
+ * invalid template_id
+ */
+ CODE_40081(40081, "invalid template_id"),
+
+ /**
+ * invalid banner picture size
+ */
+ CODE_40082(40082, "invalid banner picture size"),
+
+ /**
+ * invalid banner url size
+ */
+ CODE_40083(40083, "invalid banner url size"),
+
+ /**
+ * invalid button desc size
+ */
+ CODE_40084(40084, "invalid button desc size"),
+
+ /**
+ * invalid button url size
+ */
+ CODE_40085(40085, "invalid button url size"),
+
+ /**
+ * invalid sharelink logo size
+ */
+ CODE_40086(40086, "invalid sharelink logo size"),
+
+ /**
+ * invalid sharelink desc size
+ */
+ CODE_40087(40087, "invalid sharelink desc size"),
+
+ /**
+ * invalid sharelink title size
+ */
+ CODE_40088(40088, "invalid sharelink title size"),
+
+ /**
+ * invalid platform id
+ */
+ CODE_40089(40089, "invalid platform id"),
+
+ /**
+ * invalid request source (bad client ip)
+ */
+ CODE_40090(40090, "invalid request source (bad client ip)"),
+
+ /**
+ * invalid component ticket
+ */
+ CODE_40091(40091, "invalid component ticket"),
+
+ /**
+ * invalid remark name
+ */
+ CODE_40092(40092, "invalid remark name"),
+
+ /**
+ * not completely ok, err_item will return location_id=-1,check your required_fields in json.
+ */
+ CODE_40093(40093, "not completely ok, err_item will return location_id=-1,check your required_fields in json."),
+
+ /**
+ * invalid component credential
+ */
+ CODE_40094(40094, "invalid component credential"),
+
+ /**
+ * bad source of caller
+ */
+ CODE_40095(40095, "bad source of caller"),
+
+ /**
+ * invalid biztype
+ */
+ CODE_40096(40096, "invalid biztype"),
+
+ /**
+ * 参数错误 invalid args
+ */
+ CODE_40097(40097, "参数错误"),
+
+ /**
+ * invalid poiid
+ */
+ CODE_40098(40098, "invalid poiid"),
+
+ /**
+ * invalid code, this code has consumed.
+ */
+ CODE_40099(40099, "invalid code, this code has consumed."),
+
+ /**
+ * invalid DateInfo, Make Sure OldDateInfoType==NewDateInfoType && NewBeginTime<=OldBeginTime && OldEndTime<= NewEndTime
+ */
+ CODE_40100(40100, "invalid DateInfo, Make Sure OldDateInfoType==NewDateInfoType && NewBeginTime<=OldBeginTime && OldEndTime<= NewEndTime"),
+
+ /**
+ * missing parameter
+ */
+ CODE_40101(40101, "missing parameter"),
+
+ /**
+ * invalid industry id
+ */
+ CODE_40102(40102, "invalid industry id"),
+
+ /**
+ * invalid industry index
+ */
+ CODE_40103(40103, "invalid industry index"),
+
+ /**
+ * invalid category id
+ */
+ CODE_40104(40104, "invalid category id"),
+
+ /**
+ * invalid view type
+ */
+ CODE_40105(40105, "invalid view type"),
+
+ /**
+ * invalid user name
+ */
+ CODE_40106(40106, "invalid user name"),
+
+ /**
+ * invalid card id! 1,card status must verify ok; 2,this card must have location_id
+ */
+ CODE_40107(40107, "invalid card id! 1,card status must verify ok; 2,this card must have location_id"),
+
+ /**
+ * invalid client version
+ */
+ CODE_40108(40108, "invalid client version"),
+
+ /**
+ * too many code size, must <= 100
+ */
+ CODE_40109(40109, "too many code size, must <= 100"),
+
+ /**
+ * have empty code
+ */
+ CODE_40110(40110, "have empty code"),
+
+ /**
+ * have same code
+ */
+ CODE_40111(40111, "have same code"),
+
+ /**
+ * can not set bind openid
+ */
+ CODE_40112(40112, "can not set bind openid"),
+
+ /**
+ * unsupported file type
+ */
+ CODE_40113(40113, "unsupported file type"),
+
+ /**
+ * invalid index value
+ */
+ CODE_40114(40114, "invalid index value"),
+
+ /**
+ * invalid session from
+ */
+ CODE_40115(40115, "invalid session from"),
+
+ /**
+ * invalid code
+ */
+ CODE_40116(40116, "invalid code"),
+
+ /**
+ * 分组名字不合法 invalid button media_id size
+ */
+ CODE_40117(40117, "分组名字不合法"),
+
+ /**
+ * media_id 大小不合法 invalid sub button media_id size
+ */
+ CODE_40118(40118, "media_id 大小不合法"),
+
+ /**
+ * button 类型错误 invalid use button type
+ */
+ CODE_40119(40119, "button 类型错误"),
+
+ /**
+ * 子 button 类型错误 invalid use sub button type
+ */
+ CODE_40120(40120, "子 button 类型错误"),
+
+ /**
+ * 不合法的 media_id 类型 invalid media type in view_limited
+ */
+ CODE_40121(40121, "不合法的 media_id 类型"),
+
+ /**
+ * invalid card quantity
+ */
+ CODE_40122(40122, "invalid card quantity"),
+
+ /**
+ * invalid task_id
+ */
+ CODE_40123(40123, "invalid task_id"),
+
+ /**
+ * too many custom field!
+ */
+ CODE_40124(40124, "too many custom field!"),
+
+ /**
+ * 不合法的 AppID ,请开发者检查 AppID 的正确性,避免异常字符,注意大小写 invalid appsecret
+ */
+ CODE_40125(40125, "不合法的 AppID ,请开发者检查 AppID 的正确性,避免异常字符,注意大小写"),
+
+ /**
+ * invalid text size
+ */
+ CODE_40126(40126, "invalid text size"),
+
+ /**
+ * invalid user-card status! Hint: the card was given to user, but may be deleted or expired or set unavailable !
+ */
+ CODE_40127(40127, "invalid user-card status! Hint: the card was given to user, but may be deleted or expired or set unavailable !"),
+
+ /**
+ * invalid media id! must be uploaded by api(cgi-bin/material/add_material)
+ */
+ CODE_40128(40128, "invalid media id! must be uploaded by api(cgi-bin/material/add_material)"),
+
+ /**
+ * invalid scene
+ */
+ CODE_40129(40129, "invalid scene"),
+
+ /**
+ * invalid openid list size, at least two openid
+ */
+ CODE_40130(40130, "invalid openid list size, at least two openid"),
+
+ /**
+ * out of limit of ticket
+ */
+ CODE_40131(40131, "out of limit of ticket"),
+
+ /**
+ * 微信号不合法 invalid username
+ */
+ CODE_40132(40132, "微信号不合法"),
+
+ /**
+ * invalid encryt data
+ */
+ CODE_40133(40133, "invalid encryt data"),
+
+ /**
+ * invalid not supply bonus, can not change card_id which supply bonus to be not supply
+ */
+ CODE_40135(40135, "invalid not supply bonus, can not change card_id which supply bonus to be not supply"),
+
+ /**
+ * invalid use DepositCodeMode, make sure sku.quantity>DepositCode.quantity
+ */
+ CODE_40136(40136, "invalid use DepositCodeMode, make sure sku.quantity>DepositCode.quantity"),
+
+ /**
+ * 不支持的图片格式 invalid image format
+ */
+ CODE_40137(40137, "不支持的图片格式"),
+
+ /**
+ * emphasis word can not be first neither remark
+ */
+ CODE_40138(40138, "emphasis word can not be first neither remark"),
+
+ /**
+ * invalid sub merchant id
+ */
+ CODE_40139(40139, "invalid sub merchant id"),
+
+ /**
+ * invalid sub merchant status
+ */
+ CODE_40140(40140, "invalid sub merchant status"),
+
+ /**
+ * invalid image url
+ */
+ CODE_40141(40141, "invalid image url"),
+
+ /**
+ * invalid sharecard parameters
+ */
+ CODE_40142(40142, "invalid sharecard parameters"),
+
+ /**
+ * invalid least cost info, should be 0
+ */
+ CODE_40143(40143, "invalid least cost info, should be 0"),
+
+ /**
+ * 1)maybe share_card_list.num or consume_share_self_num too big; 2)maybe card_id_list also has self-card_id;3)maybe card_id_list has many different card_id;4)maybe both consume_share_self_num and share_card_list.num bigger than 0
+ */
+ CODE_40144(40144, "1)maybe share_card_list.num or consume_share_self_num too big; 2)maybe card_id_list also has self-card_id;3)maybe card_id_list has many different card_id;4)maybe both consume_share_self_num and share_card_list.num bigger than 0"),
+
+ /**
+ * invalid update! Can not both set PayCell and CenterCellInfo(include: center_title, center_sub_title, center_url).
+ */
+ CODE_40145(40145, "invalid update! Can not both set PayCell and CenterCellInfo(include: center_title, center_sub_title, center_url)."),
+
+ /**
+ * invalid openid! card may be marked by other user!
+ */
+ CODE_40146(40146, "invalid openid! card may be marked by other user!"),
+
+ /**
+ * invalid consume! Consume time overranging restricts.
+ */
+ CODE_40147(40147, "invalid consume! Consume time overranging restricts."),
+
+ /**
+ * invalid friends card type
+ */
+ CODE_40148(40148, "invalid friends card type"),
+
+ /**
+ * invalid use time limit
+ */
+ CODE_40149(40149, "invalid use time limit"),
+
+ /**
+ * invalid card parameters
+ */
+ CODE_40150(40150, "invalid card parameters"),
+
+ /**
+ * invalid card info, text/pic hit antispam
+ */
+ CODE_40151(40151, "invalid card info, text/pic hit antispam"),
+
+ /**
+ * invalid group id
+ */
+ CODE_40152(40152, "invalid group id"),
+
+ /**
+ * self consume cell for friends card must need verify code
+ */
+ CODE_40153(40153, "self consume cell for friends card must need verify code"),
+
+ /**
+ * invalid voip parameters
+ */
+ CODE_40154(40154, "invalid voip parameters"),
+
+ /**
+ * 请勿添加其他公众号的主页链接 please don't contain other home page url
+ */
+ CODE_40155(40155, "请勿添加其他公众号的主页链接"),
+
+ /**
+ * invalid face recognize parameters
+ */
+ CODE_40156(40156, "invalid face recognize parameters"),
+
+ /**
+ * invalid picture, has no face
+ */
+ CODE_40157(40157, "invalid picture, has no face"),
+
+ /**
+ * invalid use_custom_code, need be false
+ */
+ CODE_40158(40158, "invalid use_custom_code, need be false"),
+
+ /**
+ * invalid length for path, or the data is not json string
+ */
+ CODE_40159(40159, "invalid length for path, or the data is not json string"),
+
+ /**
+ * invalid image file
+ */
+ CODE_40160(40160, "invalid image file"),
+
+ /**
+ * image file not match
+ */
+ CODE_40161(40161, "image file not match"),
+
+ /**
+ * invalid lifespan
+ */
+ CODE_40162(40162, "invalid lifespan"),
+
+ /**
+ * oauth_code已使用 code been used
+ */
+ CODE_40163(40163, "oauth_code已使用"),
+
+ /**
+ * invalid ip, not in whitelist
+ */
+ CODE_40164(40164, "invalid ip, not in whitelist"),
+
+ /**
+ * invalid weapp pagepath
+ */
+ CODE_40165(40165, "invalid weapp pagepath"),
+
+ /**
+ * invalid weapp appid
+ */
+ CODE_40166(40166, "invalid weapp appid"),
+
+ /**
+ * there is no relation with plugin appid
+ */
+ CODE_40167(40167, "there is no relation with plugin appid"),
+
+ /**
+ * unlinked weapp card
+ */
+ CODE_40168(40168, "unlinked weapp card"),
+
+ /**
+ * invalid length for scene, or the data is not json string
+ */
+ CODE_40169(40169, "invalid length for scene, or the data is not json string"),
+
+ /**
+ * args count exceed count limit
+ */
+ CODE_40170(40170, "args count exceed count limit"),
+
+ /**
+ * product id can not empty and the length cannot exceed 32
+ */
+ CODE_40171(40171, "product id can not empty and the length cannot exceed 32"),
+
+ /**
+ * can not have same product id
+ */
+ CODE_40172(40172, "can not have same product id"),
+
+ /**
+ * there is no bind relation
+ */
+ CODE_40173(40173, "there is no bind relation"),
+
+ /**
+ * not card user
+ */
+ CODE_40174(40174, "not card user"),
+
+ /**
+ * invalid material id
+ */
+ CODE_40175(40175, "invalid material id"),
+
+ /**
+ * invalid template id
+ */
+ CODE_40176(40176, "invalid template id"),
+
+ /**
+ * invalid product id
+ */
+ CODE_40177(40177, "invalid product id"),
+
+ /**
+ * invalid sign
+ */
+ CODE_40178(40178, "invalid sign"),
+
+ /**
+ * Function is adjusted, rules are not allowed to add or update
+ */
+ CODE_40179(40179, "Function is adjusted, rules are not allowed to add or update"),
+
+ /**
+ * invalid client tmp token
+ */
+ CODE_40180(40180, "invalid client tmp token"),
+
+ /**
+ * invalid opengid
+ */
+ CODE_40181(40181, "invalid opengid"),
+
+ /**
+ * invalid pack_id
+ */
+ CODE_40182(40182, "invalid pack_id"),
+
+ /**
+ * invalid product_appid, product_appid should bind with wxa_appid
+ */
+ CODE_40183(40183, "invalid product_appid, product_appid should bind with wxa_appid"),
+
+ /**
+ * invalid url path
+ */
+ CODE_40184(40184, "invalid url path"),
+
+ /**
+ * invalid auth_token, or auth_token is expired
+ */
+ CODE_40185(40185, "invalid auth_token, or auth_token is expired"),
+
+ /**
+ * invalid delegate
+ */
+ CODE_40186(40186, "invalid delegate"),
+
+ /**
+ * invalid ip
+ */
+ CODE_40187(40187, "invalid ip"),
+
+ /**
+ * invalid scope
+ */
+ CODE_40188(40188, "invalid scope"),
+
+ /**
+ * invalid width
+ */
+ CODE_40189(40189, "invalid width"),
+
+ /**
+ * invalid delegate time
+ */
+ CODE_40190(40190, "invalid delegate time"),
+
+ /**
+ * invalid pic_url
+ */
+ CODE_40191(40191, "invalid pic_url"),
+
+ /**
+ * invalid author in news
+ */
+ CODE_40192(40192, "invalid author in news"),
+
+ /**
+ * invalid recommend length
+ */
+ CODE_40193(40193, "invalid recommend length"),
+
+ /**
+ * illegal recommend
+ */
+ CODE_40194(40194, "illegal recommend"),
+
+ /**
+ * invalid show_num
+ */
+ CODE_40195(40195, "invalid show_num"),
+
+ /**
+ * invalid smartmsg media_id
+ */
+ CODE_40196(40196, "invalid smartmsg media_id"),
+
+ /**
+ * invalid smartmsg media num
+ */
+ CODE_40197(40197, "invalid smartmsg media num"),
+
+ /**
+ * invalid default msg article size, must be same as show_num
+ */
+ CODE_40198(40198, "invalid default msg article size, must be same as show_num"),
+
+ /**
+ * 运单 ID 不存在,未查到运单 waybill_id not found
+ */
+ CODE_40199(40199, "运单 ID 不存在,未查到运单"),
+
+ /**
+ * invalid account type
+ */
+ CODE_40200(40200, "invalid account type"),
+
+ /**
+ * invalid check url
+ */
+ CODE_40201(40201, "invalid check url"),
+
+ /**
+ * invalid check action
+ */
+ CODE_40202(40202, "invalid check action"),
+
+ /**
+ * invalid check operator
+ */
+ CODE_40203(40203, "invalid check operator"),
+
+ /**
+ * can not delete wash or rumor article
+ */
+ CODE_40204(40204, "can not delete wash or rumor article"),
+
+ /**
+ * invalid check keywords string
+ */
+ CODE_40205(40205, "invalid check keywords string"),
+
+ /**
+ * invalid check begin stamp
+ */
+ CODE_40206(40206, "invalid check begin stamp"),
+
+ /**
+ * invalid check alive seconds
+ */
+ CODE_40207(40207, "invalid check alive seconds"),
+
+ /**
+ * invalid check notify id
+ */
+ CODE_40208(40208, "invalid check notify id"),
+
+ /**
+ * invalid check notify msg
+ */
+ CODE_40209(40209, "invalid check notify msg"),
+
+ /**
+ * pages 中的path参数不存在或为空 invalid check wxa path
+ */
+ CODE_40210(40210, "pages 中的path参数不存在或为空"),
+
+ /**
+ * invalid scope_data
+ */
+ CODE_40211(40211, "invalid scope_data"),
+
+ /**
+ * paegs 当中存在不合法的query,query格式遵循URL标准,即k1=v1&k2=v2 invalid query
+ */
+ CODE_40212(40212, "paegs 当中存在不合法的query,query格式遵循URL标准,即k1=v1&k2=v2"),
+
+ /**
+ * invalid href tag
+ */
+ CODE_40213(40213, "invalid href tag"),
+
+ /**
+ * invalid href text
+ */
+ CODE_40214(40214, "invalid href text"),
+
+ /**
+ * invalid image count
+ */
+ CODE_40215(40215, "invalid image count"),
+
+ /**
+ * invalid desc
+ */
+ CODE_40216(40216, "invalid desc"),
+
+ /**
+ * invalid video count
+ */
+ CODE_40217(40217, "invalid video count"),
+
+ /**
+ * invalid video id
+ */
+ CODE_40218(40218, "invalid video id"),
+
+ /**
+ * pages不存在或者参数为空 pages is empty
+ */
+ CODE_40219(40219, "pages不存在或者参数为空"),
+
+ /**
+ * data_list is empty
+ */
+ CODE_40220(40220, "data_list is empty"),
+
+ /**
+ * invalid Content-Encoding
+ */
+ CODE_40221(40221, "invalid Content-Encoding"),
+
+ /**
+ * invalid request idc domain
+ */
+ CODE_40222(40222, "invalid request idc domain"),
+
+ /**
+ * 缺少 access_token 参数 access_token missing
+ */
+ CODE_41001(41001, "缺少 access_token 参数"),
+
+ /**
+ * 缺少 appid 参数 appid missing
+ */
+ CODE_41002(41002, "缺少 appid 参数"),
+
+ /**
+ * 缺少 refresh_token 参数 refresh_token missing
+ */
+ CODE_41003(41003, "缺少 refresh_token 参数"),
+
+ /**
+ * 缺少 secret 参数 appsecret missing
+ */
+ CODE_41004(41004, "缺少 secret 参数"),
+
+ /**
+ * 缺少多媒体文件数据,传输素材无视频或图片内容 media data missing
+ */
+ CODE_41005(41005, "缺少多媒体文件数据,传输素材无视频或图片内容"),
+
+ /**
+ * 缺少 media_id 参数 media_id missing
+ */
+ CODE_41006(41006, "缺少 media_id 参数"),
+
+ /**
+ * 缺少子菜单数据 sub_menu data missing
+ */
+ CODE_41007(41007, "缺少子菜单数据"),
+
+ /**
+ * 缺少 oauth code missing code
+ */
+ CODE_41008(41008, "缺少 oauth code"),
+
+ /**
+ * 缺少 openid missing openid
+ */
+ CODE_41009(41009, "缺少 openid"),
+
+ /**
+ * 缺失 url 参数 missing url
+ */
+ CODE_41010(41010, "缺失 url 参数"),
+
+ /**
+ * missing required fields! please check document and request json!
+ */
+ CODE_41011(41011, "missing required fields! please check document and request json!"),
+
+ /**
+ * missing card id
+ */
+ CODE_41012(41012, "missing card id"),
+
+ /**
+ * missing code
+ */
+ CODE_41013(41013, "missing code"),
+
+ /**
+ * missing ticket_class
+ */
+ CODE_41014(41014, "missing ticket_class"),
+
+ /**
+ * missing show_time
+ */
+ CODE_41015(41015, "missing show_time"),
+
+ /**
+ * missing screening_room
+ */
+ CODE_41016(41016, "missing screening_room"),
+
+ /**
+ * missing seat_number
+ */
+ CODE_41017(41017, "missing seat_number"),
+
+ /**
+ * missing component_appid
+ */
+ CODE_41018(41018, "missing component_appid"),
+
+ /**
+ * missing platform_secret
+ */
+ CODE_41019(41019, "missing platform_secret"),
+
+ /**
+ * missing platform_ticket
+ */
+ CODE_41020(41020, "missing platform_ticket"),
+
+ /**
+ * missing component_access_token
+ */
+ CODE_41021(41021, "missing component_access_token"),
+
+ /**
+ * missing "display" field
+ */
+ CODE_41024(41024, "missing \"display\" field"),
+
+ /**
+ * poi_list empty
+ */
+ CODE_41025(41025, "poi_list empty"),
+
+ /**
+ * missing image list info, text maybe empty
+ */
+ CODE_41026(41026, "missing image list info, text maybe empty"),
+
+ /**
+ * missing voip call key
+ */
+ CODE_41027(41027, "missing voip call key"),
+
+ /**
+ * invalid form id
+ */
+ CODE_41028(41028, "invalid form id"),
+
+ /**
+ * form id used count reach limit
+ */
+ CODE_41029(41029, "form id used count reach limit"),
+
+ /**
+ * page路径不正确,需要保证在现网版本小程序中存在,与app.json保持一致 invalid page
+ */
+ CODE_41030(41030, "page路径不正确,需要保证在现网版本小程序中存在,与app.json保持一致"),
+
+ /**
+ * the form id have been blocked!
+ */
+ CODE_41031(41031, "the form id have been blocked!"),
+
+ /**
+ * not allow to send message with submitted form id, for punishment
+ */
+ CODE_41032(41032, "not allow to send message with submitted form id, for punishment"),
+
+ /**
+ * 只允许通过api创建的小程序使用 invaid register type
+ */
+ CODE_41033(41033, "只允许通过api创建的小程序使用"),
+
+ /**
+ * not allow to send message with submitted form id, for punishment
+ */
+ CODE_41034(41034, "not allow to send message with submitted form id, for punishment"),
+
+ /**
+ * not allow to send message with prepay id, for punishment
+ */
+ CODE_41035(41035, "not allow to send message with prepay id, for punishment"),
+
+ /**
+ * appid ad cid
+ */
+ CODE_41036(41036, "appid ad cid"),
+
+ /**
+ * appid ad_mch_appid
+ */
+ CODE_41037(41037, "appid ad_mch_appid"),
+
+ /**
+ * appid pos_type
+ */
+ CODE_41038(41038, "appid pos_type"),
+
+ /**
+ * access_token 超时,请检查 access_token 的有效期,请参考基础支持 - 获取 access_token 中,对 access_token 的详细机制说明 access_token expired
+ */
+ CODE_42001(42001, "access_token 超时,请检查 access_token 的有效期,请参考基础支持 - 获取 access_token 中,对 access_token 的详细机制说明"),
+
+ /**
+ * refresh_token 超时 refresh_token expired
+ */
+ CODE_42002(42002, "refresh_token 超时"),
+
+ /**
+ * oauth_code 超时 code expired
+ */
+ CODE_42003(42003, "oauth_code 超时"),
+
+ /**
+ * plugin token expired
+ */
+ CODE_42004(42004, "plugin token expired"),
+
+ /**
+ * api usage expired
+ */
+ CODE_42005(42005, "api usage expired"),
+
+ /**
+ * component_access_token expired
+ */
+ CODE_42006(42006, "component_access_token expired"),
+
+ /**
+ * 用户修改微信密码, accesstoken 和 refreshtoken 失效,需要重新授权 access_token and refresh_token exception
+ */
+ CODE_42007(42007, "用户修改微信密码, accesstoken 和 refreshtoken 失效,需要重新授权"),
+
+ /**
+ * voip call key expired
+ */
+ CODE_42008(42008, "voip call key expired"),
+
+ /**
+ * client tmp token expired
+ */
+ CODE_42009(42009, "client tmp token expired"),
+
+ /**
+ * 需要 GET 请求 require GET method
+ */
+ CODE_43001(43001, "需要 GET 请求"),
+
+ /**
+ * 需要 POST 请求 require POST method
+ */
+ CODE_43002(43002, "需要 POST 请求"),
+
+ /**
+ * 需要 HTTPS 请求 require https
+ */
+ CODE_43003(43003, "需要 HTTPS 请求"),
+
+ /**
+ * 需要接收者关注 require subscribe
+ */
+ CODE_43004(43004, "需要接收者关注"),
+
+ /**
+ * 需要好友关系 require friend relations
+ */
+ CODE_43005(43005, "需要好友关系"),
+
+ /**
+ * require not block
+ */
+ CODE_43006(43006, "require not block"),
+
+ /**
+ * require bizuser authorize
+ */
+ CODE_43007(43007, "require bizuser authorize"),
+
+ /**
+ * require biz pay auth
+ */
+ CODE_43008(43008, "require biz pay auth"),
+
+ /**
+ * can not use custom code, need authorize
+ */
+ CODE_43009(43009, "can not use custom code, need authorize"),
+
+ /**
+ * can not use balance, need authorize
+ */
+ CODE_43010(43010, "can not use balance, need authorize"),
+
+ /**
+ * can not use bonus, need authorize
+ */
+ CODE_43011(43011, "can not use bonus, need authorize"),
+
+ /**
+ * can not use custom url, need authorize
+ */
+ CODE_43012(43012, "can not use custom url, need authorize"),
+
+ /**
+ * can not use shake card, need authorize
+ */
+ CODE_43013(43013, "can not use shake card, need authorize"),
+
+ /**
+ * require check agent
+ */
+ CODE_43014(43014, "require check agent"),
+
+ /**
+ * require authorize by wechat team to use this function!
+ */
+ CODE_43015(43015, "require authorize by wechat team to use this function!"),
+
+ /**
+ * 小程序未认证 require verify
+ */
+ CODE_43016(43016, "小程序未认证"),
+
+ /**
+ * require location id!
+ */
+ CODE_43017(43017, "require location id!"),
+
+ /**
+ * code has no been mark!
+ */
+ CODE_43018(43018, "code has no been mark!"),
+
+ /**
+ * 需要将接收者从黑名单中移除 require remove blacklist
+ */
+ CODE_43019(43019, "需要将接收者从黑名单中移除"),
+
+ /**
+ * change template too frequently
+ */
+ CODE_43100(43100, "change template too frequently"),
+
+ /**
+ * 用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系 user refuse to accept the msg
+ */
+ CODE_43101(43101, "用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系"),
+
+ /**
+ * the tempalte is not subscriptiontype
+ */
+ CODE_43102(43102, "the tempalte is not subscriptiontype"),
+
+ /**
+ * the api only can cancel the subscription
+ */
+ CODE_43103(43103, "the api only can cancel the subscription"),
+
+ /**
+ * this appid does not have permission
+ */
+ CODE_43104(43104, "this appid does not have permission"),
+
+ /**
+ * news has no binding relation with template_id
+ */
+ CODE_43105(43105, "news has no binding relation with template_id"),
+
+ /**
+ * not allow to add template, for punishment
+ */
+ CODE_43106(43106, "not allow to add template, for punishment"),
+
+ /**
+ * 多媒体文件为空 empty media data
+ */
+ CODE_44001(44001, "多媒体文件为空"),
+
+ /**
+ * POST 的数据包为空 empty post data
+ */
+ CODE_44002(44002, "POST 的数据包为空"),
+
+ /**
+ * 图文消息内容为空 empty news data
+ */
+ CODE_44003(44003, "图文消息内容为空"),
+
+ /**
+ * 文本消息内容为空 empty content
+ */
+ CODE_44004(44004, "文本消息内容为空"),
+
+ /**
+ * 空白的列表 empty list size
+ */
+ CODE_44005(44005, "空白的列表"),
+
+ /**
+ * empty file data
+ */
+ CODE_44006(44006, "empty file data"),
+
+ /**
+ * repeated msg id
+ */
+ CODE_44007(44007, "repeated msg id"),
+
+ /**
+ * image url size out of limit
+ */
+ CODE_44997(44997, "image url size out of limit"),
+
+ /**
+ * keyword string media size out of limit
+ */
+ CODE_44998(44998, "keyword string media size out of limit"),
+
+ /**
+ * keywords list size out of limit
+ */
+ CODE_44999(44999, "keywords list size out of limit"),
+
+ /**
+ * msg_id size out of limit
+ */
+ CODE_45000(45000, "msg_id size out of limit"),
+
+ /**
+ * 多媒体文件大小超过限制 media size out of limit
+ */
+ CODE_45001(45001, "多媒体文件大小超过限制"),
+
+ /**
+ * 消息内容超过限制 content size out of limit
+ */
+ CODE_45002(45002, "消息内容超过限制"),
+
+ /**
+ * 标题字段超过限制 title size out of limit
+ */
+ CODE_45003(45003, "标题字段超过限制"),
+
+ /**
+ * 描述字段超过限制 description size out of limit
+ */
+ CODE_45004(45004, "描述字段超过限制"),
+
+ /**
+ * 链接字段超过限制 url size out of limit
+ */
+ CODE_45005(45005, "链接字段超过限制"),
+
+ /**
+ * 图片链接字段超过限制 picurl size out of limit
+ */
+ CODE_45006(45006, "图片链接字段超过限制"),
+
+ /**
+ * 语音播放时间超过限制 playtime out of limit
+ */
+ CODE_45007(45007, "语音播放时间超过限制"),
+
+ /**
+ * 图文消息超过限制 article size out of limit
+ */
+ CODE_45008(45008, "图文消息超过限制"),
+
+ /**
+ * 接口调用超过限制 reach max api daily quota limit
+ */
+ CODE_45009(45009, "接口调用超过限制"),
+
+ /**
+ * 创建菜单个数超过限制 create menu limit
+ */
+ CODE_45010(45010, "创建菜单个数超过限制"),
+
+ /**
+ * API 调用太频繁,请稍候再试 api minute-quota reach limit, must slower, retry next minute
+ */
+ CODE_45011(45011, "API 调用太频繁,请稍候再试"),
+
+ /**
+ * 模板大小超过限制 template size out of limit
+ */
+ CODE_45012(45012, "模板大小超过限制"),
+
+ /**
+ * too many template args
+ */
+ CODE_45013(45013, "too many template args"),
+
+ /**
+ * template message size out of limit
+ */
+ CODE_45014(45014, "template message size out of limit"),
+
+ /**
+ * 回复时间超过限制 response out of time limit or subscription is canceled
+ */
+ CODE_45015(45015, "回复时间超过限制"),
+
+ /**
+ * 系统分组,不允许修改 can't modify sys group
+ */
+ CODE_45016(45016, "系统分组,不允许修改"),
+
+ /**
+ * 分组名字过长 can't set group name too long sys group
+ */
+ CODE_45017(45017, "分组名字过长"),
+
+ /**
+ * 分组数量超过上限 too many group now, no need to add new
+ */
+ CODE_45018(45018, "分组数量超过上限"),
+
+ /**
+ * too many openid, please input less
+ */
+ CODE_45019(45019, "too many openid, please input less"),
+
+ /**
+ * too many image, please input less
+ */
+ CODE_45020(45020, "too many image, please input less"),
+
+ /**
+ * some argument may be out of length limit! please check document and request json!
+ */
+ CODE_45021(45021, "some argument may be out of length limit! please check document and request json!"),
+
+ /**
+ * bonus is out of limit
+ */
+ CODE_45022(45022, "bonus is out of limit"),
+
+ /**
+ * balance is out of limit
+ */
+ CODE_45023(45023, "balance is out of limit"),
+
+ /**
+ * rank template number is out of limit
+ */
+ CODE_45024(45024, "rank template number is out of limit"),
+
+ /**
+ * poiid count is out of limit
+ */
+ CODE_45025(45025, "poiid count is out of limit"),
+
+ /**
+ * template num exceeds limit
+ */
+ CODE_45026(45026, "template num exceeds limit"),
+
+ /**
+ * template conflict with industry
+ */
+ CODE_45027(45027, "template conflict with industry"),
+
+ /**
+ * has no masssend quota
+ */
+ CODE_45028(45028, "has no masssend quota"),
+
+ /**
+ * qrcode count out of limit
+ */
+ CODE_45029(45029, "qrcode count out of limit"),
+
+ /**
+ * limit cardid, not support this function
+ */
+ CODE_45030(45030, "limit cardid, not support this function"),
+
+ /**
+ * stock is out of limit
+ */
+ CODE_45031(45031, "stock is out of limit"),
+
+ /**
+ * not inner ip for special acct in white-list
+ */
+ CODE_45032(45032, "not inner ip for special acct in white-list"),
+
+ /**
+ * user get card num is out of get_limit
+ */
+ CODE_45033(45033, "user get card num is out of get_limit"),
+
+ /**
+ * media file count is out of limit
+ */
+ CODE_45034(45034, "media file count is out of limit"),
+
+ /**
+ * access clientip is not registered, not in ip-white-list
+ */
+ CODE_45035(45035, "access clientip is not registered, not in ip-white-list"),
+
+ /**
+ * User receive announcement limit
+ */
+ CODE_45036(45036, "User receive announcement limit"),
+
+ /**
+ * user out of time limit or never talked in tempsession
+ */
+ CODE_45037(45037, "user out of time limit or never talked in tempsession"),
+
+ /**
+ * user subscribed, cannot use tempsession api
+ */
+ CODE_45038(45038, "user subscribed, cannot use tempsession api"),
+
+ /**
+ * card_list_size out of limit
+ */
+ CODE_45039(45039, "card_list_size out of limit"),
+
+ /**
+ * reach max monthly quota limit
+ */
+ CODE_45040(45040, "reach max monthly quota limit"),
+
+ /**
+ * this card reach total sku quantity limit!
+ */
+ CODE_45041(45041, "this card reach total sku quantity limit!"),
+
+ /**
+ * limit card type, this card type can NOT create by sub merchant
+ */
+ CODE_45042(45042, "limit card type, this card type can NOT create by sub merchant"),
+
+ /**
+ * can not set share_friends=true because has no Abstract Or Text_Img_List has no img Or image url not valid
+ */
+ CODE_45043(45043, "can not set share_friends=true because has no Abstract Or Text_Img_List has no img Or image url not valid"),
+
+ /**
+ * icon url size in abstract is out of limit
+ */
+ CODE_45044(45044, "icon url size in abstract is out of limit"),
+
+ /**
+ * unauthorized friends card, please contact administrator
+ */
+ CODE_45045(45045, "unauthorized friends card, please contact administrator"),
+
+ /**
+ * operate field conflict, CenterCell, PayCell, SelfConsumeCell conflict
+ */
+ CODE_45046(45046, "operate field conflict, CenterCell, PayCell, SelfConsumeCell conflict"),
+
+ /**
+ * 客服接口下行条数超过上限 out of response count limit
+ */
+ CODE_45047(45047, "客服接口下行条数超过上限"),
+
+ /**
+ * menu use invalid type
+ */
+ CODE_45048(45048, "menu use invalid type"),
+
+ /**
+ * ivr use invalid type
+ */
+ CODE_45049(45049, "ivr use invalid type"),
+
+ /**
+ * custom msg use invalid type
+ */
+ CODE_45050(45050, "custom msg use invalid type"),
+
+ /**
+ * template msg use invalid link
+ */
+ CODE_45051(45051, "template msg use invalid link"),
+
+ /**
+ * masssend msg use invalid type
+ */
+ CODE_45052(45052, "masssend msg use invalid type"),
+
+ /**
+ * exceed consume verify code size
+ */
+ CODE_45053(45053, "exceed consume verify code size"),
+
+ /**
+ * below consume verify code size
+ */
+ CODE_45054(45054, "below consume verify code size"),
+
+ /**
+ * the code is not in consume verify code charset
+ */
+ CODE_45055(45055, "the code is not in consume verify code charset"),
+
+ /**
+ * too many tag now, no need to add new
+ */
+ CODE_45056(45056, "too many tag now, no need to add new"),
+
+ /**
+ * can't delete the tag that has too many fans
+ */
+ CODE_45057(45057, "can't delete the tag that has too many fans"),
+
+ /**
+ * can't modify sys tag
+ */
+ CODE_45058(45058, "can't modify sys tag"),
+
+ /**
+ * can not tagging one user too much
+ */
+ CODE_45059(45059, "can not tagging one user too much"),
+
+ /**
+ * media is applied in ivr or menu, can not be deleted
+ */
+ CODE_45060(45060, "media is applied in ivr or menu, can not be deleted"),
+
+ /**
+ * maybe the update frequency is too often, please try again
+ */
+ CODE_45061(45061, "maybe the update frequency is too often, please try again"),
+
+ /**
+ * has agreement ad. please use mp.weixin.qq.com
+ */
+ CODE_45062(45062, "has agreement ad. please use mp.weixin.qq.com"),
+
+ /**
+ * accesstoken is not xiaochengxu
+ */
+ CODE_45063(45063, "accesstoken is not xiaochengxu"),
+
+ /**
+ * 创建菜单包含未关联的小程序 no permission to use weapp in menu
+ */
+ CODE_45064(45064, "创建菜单包含未关联的小程序"),
+
+ /**
+ * 相同 clientmsgid 已存在群发记录,返回数据中带有已存在的群发任务的 msgid clientmsgid exist
+ */
+ CODE_45065(45065, "相同 clientmsgid 已存在群发记录,返回数据中带有已存在的群发任务的 msgid"),
+
+ /**
+ * 相同 clientmsgid 重试速度过快,请间隔1分钟重试 same clientmsgid retry too fast
+ */
+ CODE_45066(45066, "相同 clientmsgid 重试速度过快,请间隔1分钟重试"),
+
+ /**
+ * clientmsgid 长度超过限制 clientmsgid size out of limit
+ */
+ CODE_45067(45067, "clientmsgid 长度超过限制"),
+
+ /**
+ * file size out of limit
+ */
+ CODE_45068(45068, "file size out of limit"),
+
+ /**
+ * product list size out of limit
+ */
+ CODE_45069(45069, "product list size out of limit"),
+
+ /**
+ * the business account have been created
+ */
+ CODE_45070(45070, "the business account have been created"),
+
+ /**
+ * business account not found
+ */
+ CODE_45071(45071, "business account not found"),
+
+ /**
+ * command字段取值不对 invalid command
+ */
+ CODE_45072(45072, "command字段取值不对"),
+
+ /**
+ * not inner vip for sns in white list
+ */
+ CODE_45073(45073, "not inner vip for sns in white list"),
+
+ /**
+ * material list size out of limit, you should delete the useless material
+ */
+ CODE_45074(45074, "material list size out of limit, you should delete the useless material"),
+
+ /**
+ * invalid keyword id
+ */
+ CODE_45075(45075, "invalid keyword id"),
+
+ /**
+ * invalid count
+ */
+ CODE_45076(45076, "invalid count"),
+
+ /**
+ * number of business account reach limit
+ */
+ CODE_45077(45077, "number of business account reach limit"),
+
+ /**
+ * nickname is illegal!
+ */
+ CODE_45078(45078, "nickname is illegal!"),
+
+ /**
+ * nickname is forbidden!(matched forbidden keyword)
+ */
+ CODE_45079(45079, "nickname is forbidden!(matched forbidden keyword)"),
+
+ /**
+ * 下发输入状态,需要之前30秒内跟用户有过消息交互 need sending message to user, or recving message from user in the last 30 seconds before typing
+ */
+ CODE_45080(45080, "下发输入状态,需要之前30秒内跟用户有过消息交互"),
+
+ /**
+ * 已经在输入状态,不可重复下发 you are already typing
+ */
+ CODE_45081(45081, "已经在输入状态,不可重复下发"),
+
+ /**
+ * need icp license for the url domain
+ */
+ CODE_45082(45082, "need icp license for the url domain"),
+
+ /**
+ * the speed out of range
+ */
+ CODE_45083(45083, "the speed out of range"),
+
+ /**
+ * No speed message
+ */
+ CODE_45084(45084, "No speed message"),
+
+ /**
+ * speed server err
+ */
+ CODE_45085(45085, "speed server err"),
+
+ /**
+ * invalid attrbute 'data-miniprogram-appid'
+ */
+ CODE_45086(45086, "invalid attrbute 'data-miniprogram-appid'"),
+
+ /**
+ * customer service message from this account have been blocked!
+ */
+ CODE_45087(45087, "customer service message from this account have been blocked!"),
+
+ /**
+ * action size out of limit
+ */
+ CODE_45088(45088, "action size out of limit"),
+
+ /**
+ * expired
+ */
+ CODE_45089(45089, "expired"),
+
+ /**
+ * invalid group msg ticket
+ */
+ CODE_45090(45090, "invalid group msg ticket"),
+
+ /**
+ * account_name is illegal!
+ */
+ CODE_45091(45091, "account_name is illegal!"),
+
+ /**
+ * no voice data
+ */
+ CODE_45092(45092, "no voice data"),
+
+ /**
+ * no quota to send msg
+ */
+ CODE_45093(45093, "no quota to send msg"),
+
+ /**
+ * not allow to send custom message when user enter session, for punishment
+ */
+ CODE_45094(45094, "not allow to send custom message when user enter session, for punishment"),
+
+ /**
+ * not allow to modify stock for the advertisement batch
+ */
+ CODE_45095(45095, "not allow to modify stock for the advertisement batch"),
+
+ /**
+ * invalid qrcode
+ */
+ CODE_45096(45096, "invalid qrcode"),
+
+ /**
+ * invalid qrcode prefix
+ */
+ CODE_45097(45097, "invalid qrcode prefix"),
+
+ /**
+ * msgmenu list size is out of limit
+ */
+ CODE_45098(45098, "msgmenu list size is out of limit"),
+
+ /**
+ * msgmenu item content size is out of limit
+ */
+ CODE_45099(45099, "msgmenu item content size is out of limit"),
+
+ /**
+ * invalid size of keyword_id_list
+ */
+ CODE_45100(45100, "invalid size of keyword_id_list"),
+
+ /**
+ * hit upload limit
+ */
+ CODE_45101(45101, "hit upload limit"),
+
+ /**
+ * this api have been blocked temporarily.
+ */
+ CODE_45102(45102, "this api have been blocked temporarily."),
+
+ /**
+ * This API has been unsupported
+ */
+ CODE_45103(45103, "This API has been unsupported"),
+
+ /**
+ * reach max domain quota limit
+ */
+ CODE_45104(45104, "reach max domain quota limit"),
+
+ /**
+ * the consume verify code not found
+ */
+ CODE_45154(45154, "the consume verify code not found"),
+
+ /**
+ * the consume verify code is existed
+ */
+ CODE_45155(45155, "the consume verify code is existed"),
+
+ /**
+ * the consume verify code's length not invalid
+ */
+ CODE_45156(45156, "the consume verify code's length not invalid"),
+
+ /**
+ * invalid tag name
+ */
+ CODE_45157(45157, "invalid tag name"),
+
+ /**
+ * tag name too long
+ */
+ CODE_45158(45158, "tag name too long"),
+
+ /**
+ * invalid tag id
+ */
+ CODE_45159(45159, "invalid tag id"),
+
+ /**
+ * invalid category to create card
+ */
+ CODE_45160(45160, "invalid category to create card"),
+
+ /**
+ * this video id must be generated by calling upload api
+ */
+ CODE_45161(45161, "this video id must be generated by calling upload api"),
+
+ /**
+ * invalid type
+ */
+ CODE_45162(45162, "invalid type"),
+
+ /**
+ * invalid sort_method
+ */
+ CODE_45163(45163, "invalid sort_method"),
+
+ /**
+ * invalid offset
+ */
+ CODE_45164(45164, "invalid offset"),
+
+ /**
+ * invalid limit
+ */
+ CODE_45165(45165, "invalid limit"),
+
+ /**
+ * invalid content
+ */
+ CODE_45166(45166, "invalid content"),
+
+ /**
+ * invalid voip call key
+ */
+ CODE_45167(45167, "invalid voip call key"),
+
+ /**
+ * keyword in blacklist
+ */
+ CODE_45168(45168, "keyword in blacklist"),
+
+ /**
+ * part or whole of the requests from the very app is temporary blocked by supervisor
+ */
+ CODE_45501(45501, "part or whole of the requests from the very app is temporary blocked by supervisor"),
+
+ /**
+ * 不存在媒体数据,media_id 不存在 media data no exist
+ */
+ CODE_46001(46001, "不存在媒体数据,media_id 不存在"),
+
+ /**
+ * 不存在的菜单版本 menu version no exist
+ */
+ CODE_46002(46002, "不存在的菜单版本"),
+
+ /**
+ * 不存在的菜单数据 menu no exist
+ */
+ CODE_46003(46003, "不存在的菜单数据"),
+
+ /**
+ * 不存在的用户 user no exist
+ */
+ CODE_46004(46004, "不存在的用户"),
+
+ /**
+ * poi no exist
+ */
+ CODE_46005(46005, "poi no exist"),
+
+ /**
+ * voip file not exist
+ */
+ CODE_46006(46006, "voip file not exist"),
+
+ /**
+ * file being transcoded, please try later
+ */
+ CODE_46007(46007, "file being transcoded, please try later"),
+
+ /**
+ * result id not exist
+ */
+ CODE_46008(46008, "result id not exist"),
+
+ /**
+ * there is no user data
+ */
+ CODE_46009(46009, "there is no user data"),
+
+ /**
+ * this api have been not supported since 2020-01-11 00:00:00, please use new api(subscribeMessage)!
+ */
+ CODE_46101(46101, "this api have been not supported since 2020-01-11 00:00:00, please use new api(subscribeMessage)!"),
+
+ /**
+ * 解析 JSON/XML 内容错误 data format error
+ */
+ CODE_47001(47001, "解析 JSON/XML 内容错误"),
+
+ /**
+ * data format error, do NOT use json unicode encode (\\uxxxx\\uxxxx), please use utf8 encoded text!
+ */
+ CODE_47002(47002, "data format error, do NOT use json unicode encode (\\uxxxx\\uxxxx), please use utf8 encoded text!"),
+
+ /**
+ * 模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错 argument invalid!
+ */
+ CODE_47003(47003, "模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错"),
+
+ /**
+ * 每次提交的页面数超过1000(备注:每次提交页面数应小于或等于1000) submit pages count more than each quota
+ */
+ CODE_47004(47004, "每次提交的页面数超过1000(备注:每次提交页面数应小于或等于1000)"),
+
+ /**
+ * tabbar no exist
+ */
+ CODE_47005(47005, "tabbar no exist"),
+
+ /**
+ * 当天提交页面数达到了配额上限,请明天再试 submit pages count reach daily limit, please try tomorrow
+ */
+ CODE_47006(47006, "当天提交页面数达到了配额上限,请明天再试"),
+
+ /**
+ * 搜索结果总数超过了1000条 search results count more than limit
+ */
+ CODE_47101(47101, "搜索结果总数超过了1000条"),
+
+ /**
+ * next_page_info参数错误 next_page_info error
+ */
+ CODE_47102(47102, "next_page_info参数错误"),
+
+ /**
+ * 参数 activity_id 错误 activity_id error
+ */
+ CODE_47501(47501, "参数 activity_id 错误"),
+
+ /**
+ * 参数 target_state 错误 target_state error
+ */
+ CODE_47502(47502, "参数 target_state 错误"),
+
+ /**
+ * 参数 version_type 错误 version_type error
+ */
+ CODE_47503(47503, "参数 version_type 错误"),
+
+ /**
+ * activity_id activity_id expired time
+ */
+ CODE_47504(47504, "activity_id"),
+
+ /**
+ * api 功能未授权,请确认公众号已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限 api unauthorized
+ */
+ CODE_48001(48001, "api 功能未授权,请确认公众号已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限"),
+
+ /**
+ * 粉丝拒收消息(粉丝在公众号选项中,关闭了 “ 接收消息 ” ) user block receive message
+ */
+ CODE_48002(48002, "粉丝拒收消息(粉丝在公众号选项中,关闭了 “ 接收消息 ” )"),
+
+ /**
+ * user not agree mass-send protocol
+ */
+ CODE_48003(48003, "user not agree mass-send protocol"),
+
+ /**
+ * api 接口被封禁,请登录 mp.weixin.qq.com 查看详情 api forbidden for irregularities, view detail on mp.weixin.qq.com
+ */
+ CODE_48004(48004, "api 接口被封禁,请登录 mp.weixin.qq.com 查看详情"),
+
+ /**
+ * api 禁止删除被自动回复和自定义菜单引用的素材 forbid to delete material used by auto-reply or menu
+ */
+ CODE_48005(48005, "api 禁止删除被自动回复和自定义菜单引用的素材"),
+
+ /**
+ * api 禁止清零调用次数,因为清零次数达到上限 forbid to clear quota because of reaching the limit
+ */
+ CODE_48006(48006, "api 禁止清零调用次数,因为清零次数达到上限"),
+
+ /**
+ * forbid to use other's voip call key
+ */
+ CODE_48007(48007, "forbid to use other's voip call key"),
+
+ /**
+ * 没有该类型消息的发送权限 no permission for this msgtype
+ */
+ CODE_48008(48008, "没有该类型消息的发送权限"),
+
+ /**
+ * this api is expired
+ */
+ CODE_48009(48009, "this api is expired"),
+
+ /**
+ * forbid to modify the material, please see more information on mp.weixin.qq.com
+ */
+ CODE_48010(48010, "forbid to modify the material, please see more information on mp.weixin.qq.com"),
+
+ /**
+ * disabled template id
+ */
+ CODE_48011(48011, "disabled template id"),
+
+ /**
+ * invalid token
+ */
+ CODE_48012(48012, "invalid token"),
+
+ /**
+ * 该视频非新接口上传,不能用于视频消息群发
+ */
+ CODE_48013(48013, "该视频非新接口上传,不能用于视频消息群发"),
+
+ /**
+ * 该视频审核状态异常,请检查后重试
+ */
+ CODE_48014(48014, "该视频审核状态异常,请检查后重试"),
+
+ /**
+ * 该账号无留言功能权限
+ */
+ CODE_48015(48015, "该账号无留言功能权限"),
+
+ /**
+ * 该账号不满足智能配置"观看更多"视频条件
+ */
+ CODE_48016(48016, "该账号不满足智能配置\"观看更多\"视频条件"),
+
+ /**
+ * not same appid with appid of access_token
+ */
+ CODE_49001(49001, "not same appid with appid of access_token"),
+
+ /**
+ * empty openid or transid
+ */
+ CODE_49002(49002, "empty openid or transid"),
+
+ /**
+ * not match openid with appid
+ */
+ CODE_49003(49003, "not match openid with appid"),
+
+ /**
+ * not match signature
+ */
+ CODE_49004(49004, "not match signature"),
+
+ /**
+ * not existed transid
+ */
+ CODE_49005(49005, "not existed transid"),
+
+ /**
+ * missing arg two_dim_code
+ */
+ CODE_49006(49006, "missing arg two_dim_code"),
+
+ /**
+ * invalid two_dim_code
+ */
+ CODE_49007(49007, "invalid two_dim_code"),
+
+ /**
+ * invalid qrcode
+ */
+ CODE_49008(49008, "invalid qrcode"),
+
+ /**
+ * missing arg qrcode
+ */
+ CODE_49009(49009, "missing arg qrcode"),
+
+ /**
+ * invalid partner id
+ */
+ CODE_49010(49010, "invalid partner id"),
+
+ /**
+ * not existed feedbackid
+ */
+ CODE_49300(49300, "not existed feedbackid"),
+
+ /**
+ * feedback exist
+ */
+ CODE_49301(49301, "feedback exist"),
+
+ /**
+ * feedback status already changed
+ */
+ CODE_49302(49302, "feedback status already changed"),
+
+ /**
+ * 用户未授权该 api api unauthorized or user unauthorized
+ */
+ CODE_50001(50001, "用户未授权该 api"),
+
+ /**
+ * 用户受限,可能是用户帐号被冻结或注销 user limited
+ */
+ CODE_50002(50002, "用户受限,可能是用户帐号被冻结或注销"),
+
+ /**
+ * user unexpected, maybe not in white list
+ */
+ CODE_50003(50003, "user unexpected, maybe not in white list"),
+
+ /**
+ * user not allow to use accesstoken, maybe for punishment
+ */
+ CODE_50004(50004, "user not allow to use accesstoken, maybe for punishment"),
+
+ /**
+ * 用户未关注公众号 user is unsubscribed
+ */
+ CODE_50005(50005, "用户未关注公众号"),
+
+ /**
+ * user has switched off friends authorization
+ */
+ CODE_50006(50006, "user has switched off friends authorization"),
+
+ /**
+ * enterprise father account not exist
+ */
+ CODE_51000(51000, "enterprise father account not exist"),
+
+ /**
+ * enterprise child account not belong to the father
+ */
+ CODE_51001(51001, "enterprise child account not belong to the father"),
+
+ /**
+ * enterprise verify message not correct
+ */
+ CODE_51002(51002, "enterprise verify message not correct"),
+
+ /**
+ * invalid enterprise child list size
+ */
+ CODE_51003(51003, "invalid enterprise child list size"),
+
+ /**
+ * not a enterprise father account
+ */
+ CODE_51004(51004, "not a enterprise father account"),
+
+ /**
+ * not a enterprise child account
+ */
+ CODE_51005(51005, "not a enterprise child account"),
+
+ /**
+ * invalid nick name
+ */
+ CODE_51006(51006, "invalid nick name"),
+
+ /**
+ * not a enterprise account
+ */
+ CODE_51007(51007, "not a enterprise account"),
+
+ /**
+ * invalid email
+ */
+ CODE_51008(51008, "invalid email"),
+
+ /**
+ * invalid pwd
+ */
+ CODE_51009(51009, "invalid pwd"),
+
+ /**
+ * repeated email
+ */
+ CODE_51010(51010, "repeated email"),
+
+ /**
+ * access deny
+ */
+ CODE_51011(51011, "access deny"),
+
+ /**
+ * need verify code
+ */
+ CODE_51012(51012, "need verify code"),
+
+ /**
+ * wrong verify code
+ */
+ CODE_51013(51013, "wrong verify code"),
+
+ /**
+ * need modify pwd
+ */
+ CODE_51014(51014, "need modify pwd"),
+
+ /**
+ * user not exist
+ */
+ CODE_51015(51015, "user not exist"),
+
+ /**
+ * tv info not exist
+ */
+ CODE_51020(51020, "tv info not exist"),
+
+ /**
+ * stamp crossed
+ */
+ CODE_51021(51021, "stamp crossed"),
+
+ /**
+ * invalid stamp range
+ */
+ CODE_51022(51022, "invalid stamp range"),
+
+ /**
+ * stamp not match date
+ */
+ CODE_51023(51023, "stamp not match date"),
+
+ /**
+ * empty program name
+ */
+ CODE_51024(51024, "empty program name"),
+
+ /**
+ * empty action url
+ */
+ CODE_51025(51025, "empty action url"),
+
+ /**
+ * program name size out of limit
+ */
+ CODE_51026(51026, "program name size out of limit"),
+
+ /**
+ * action url size out of limit
+ */
+ CODE_51027(51027, "action url size out of limit"),
+
+ /**
+ * invalid program name
+ */
+ CODE_51028(51028, "invalid program name"),
+
+ /**
+ * invalid action url
+ */
+ CODE_51029(51029, "invalid action url"),
+
+ /**
+ * invalid action id
+ */
+ CODE_51030(51030, "invalid action id"),
+
+ /**
+ * invalid action offset
+ */
+ CODE_51031(51031, "invalid action offset"),
+
+ /**
+ * empty action title
+ */
+ CODE_51032(51032, "empty action title"),
+
+ /**
+ * action title size out of limit
+ */
+ CODE_51033(51033, "action title size out of limit"),
+
+ /**
+ * empty action icon url
+ */
+ CODE_51034(51034, "empty action icon url"),
+
+ /**
+ * action icon url out of limit
+ */
+ CODE_51035(51035, "action icon url out of limit"),
+
+ /**
+ * pic is not from cdn
+ */
+ CODE_52000(52000, "pic is not from cdn"),
+
+ /**
+ * wechat price is not less than origin price
+ */
+ CODE_52001(52001, "wechat price is not less than origin price"),
+
+ /**
+ * category/sku is wrong
+ */
+ CODE_52002(52002, "category/sku is wrong"),
+
+ /**
+ * product id not existed
+ */
+ CODE_52003(52003, "product id not existed"),
+
+ /**
+ * category id is not exist, or doesn't has sub category
+ */
+ CODE_52004(52004, "category id is not exist, or doesn't has sub category"),
+
+ /**
+ * quantity is zero
+ */
+ CODE_52005(52005, "quantity is zero"),
+
+ /**
+ * area code is invalid
+ */
+ CODE_52006(52006, "area code is invalid"),
+
+ /**
+ * express template param is error
+ */
+ CODE_52007(52007, "express template param is error"),
+
+ /**
+ * express template id is not existed
+ */
+ CODE_52008(52008, "express template id is not existed"),
+
+ /**
+ * group name is empty
+ */
+ CODE_52009(52009, "group name is empty"),
+
+ /**
+ * group id is not existed
+ */
+ CODE_52010(52010, "group id is not existed"),
+
+ /**
+ * mod_action is invalid
+ */
+ CODE_52011(52011, "mod_action is invalid"),
+
+ /**
+ * shelf components count is greater than 20
+ */
+ CODE_52012(52012, "shelf components count is greater than 20"),
+
+ /**
+ * shelf component is empty
+ */
+ CODE_52013(52013, "shelf component is empty"),
+
+ /**
+ * shelf id is not existed
+ */
+ CODE_52014(52014, "shelf id is not existed"),
+
+ /**
+ * order id is not existed
+ */
+ CODE_52015(52015, "order id is not existed"),
+
+ /**
+ * order filter param is invalid
+ */
+ CODE_52016(52016, "order filter param is invalid"),
+
+ /**
+ * order express param is invalid
+ */
+ CODE_52017(52017, "order express param is invalid"),
+
+ /**
+ * order delivery param is invalid
+ */
+ CODE_52018(52018, "order delivery param is invalid"),
+
+ /**
+ * brand name empty
+ */
+ CODE_52019(52019, "brand name empty"),
+
+ /**
+ * principal limit exceed
+ */
+ CODE_53000(53000, "principal limit exceed"),
+
+ /**
+ * principal in black list
+ */
+ CODE_53001(53001, "principal in black list"),
+
+ /**
+ * mobile limit exceed
+ */
+ CODE_53002(53002, "mobile limit exceed"),
+
+ /**
+ * idcard limit exceed
+ */
+ CODE_53003(53003, "idcard limit exceed"),
+
+ /**
+ * 名称格式不合法 nickname invalid
+ */
+ CODE_53010(53010, "名称格式不合法"),
+
+ /**
+ * 名称检测命中频率限制 check nickname too frequently
+ */
+ CODE_53011(53011, "名称检测命中频率限制"),
+
+ /**
+ * 禁止使用该名称 nickname ban
+ */
+ CODE_53012(53012, "禁止使用该名称"),
+
+ /**
+ * 公众号:名称与已有公众号名称重复;小程序:该名称与已有小程序名称重复 nickname has been occupied
+ */
+ CODE_53013(53013, "公众号:名称与已有公众号名称重复;小程序:该名称与已有小程序名称重复"),
+
+ /**
+ * 公众号:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}
+ */
+ CODE_53014(53014, "公众号:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}"),
+
+ /**
+ * 公众号:该名称与已有小程序名称重复,需与该小程序帐号相同主体才可申请;小程序:该名称与已有公众号名称重复,需与该公众号帐号相同主体才可申请
+ */
+ CODE_53015(53015, "公众号:该名称与已有小程序名称重复,需与该小程序帐号相同主体才可申请;小程序:该名称与已有公众号名称重复,需与该公众号帐号相同主体才可申请"),
+
+ /**
+ * 公众号:该名称与已有多个小程序名称重复,暂不支持申请;小程序:该名称与已有多个公众号名称重复,暂不支持申请
+ */
+ CODE_53016(53016, "公众号:该名称与已有多个小程序名称重复,暂不支持申请;小程序:该名称与已有多个公众号名称重复,暂不支持申请"),
+
+ /**
+ * 公众号:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}
+ */
+ CODE_53017(53017, "公众号:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}"),
+
+ /**
+ * 名称命中微信号 nickname hit alias
+ */
+ CODE_53018(53018, "名称命中微信号"),
+
+ /**
+ * 名称在保护期内 nickname protected by infringement
+ */
+ CODE_53019(53019, "名称在保护期内"),
+
+ /**
+ * order not found
+ */
+ CODE_53100(53100, "订单不存在"),
+
+ /**
+ * order already paid
+ */
+ CODE_53101(53101, "已经支付的订单"),
+
+ /**
+ * already has checking order, can not apply
+ */
+ CODE_53102(53102, "已有检查单,不能申请"),
+
+ /**
+ * order can not do refill
+ */
+ CODE_53103(53103, "order can not do refill"),
+
+ /**
+ * 本月功能介绍修改次数已用完 modify signature quota limit exceed
+ */
+ CODE_53200(53200, "本月功能介绍修改次数已用完"),
+
+ /**
+ * 功能介绍内容命中黑名单关键字 signature in black list, can not use
+ */
+ CODE_53201(53201, "功能介绍内容命中黑名单关键字"),
+
+ /**
+ * 本月头像修改次数已用完 modify avatar quota limit exceed
+ */
+ CODE_53202(53202, "本月头像修改次数已用完"),
+
+ /**
+ * can't be modified for the time being
+ */
+ CODE_53203(53203, "暂时还不能修改"),
+
+ /**
+ * signature invalid
+ */
+ CODE_53204(53204, "无效签名"),
+
+ /**
+ * 超出每月次数限制
+ */
+ CODE_53300(53300, "超出每月次数限制"),
+
+ /**
+ * 超出可配置类目总数限制
+ */
+ CODE_53301(53301, "超出可配置类目总数限制"),
+
+ /**
+ * 当前账号主体类型不允许设置此种类目
+ */
+ CODE_53302(53302, "当前账号主体类型不允许设置此种类目"),
+
+ /**
+ * 提交的参数不合法
+ */
+ CODE_53303(53303, "提交的参数不合法"),
+
+ /**
+ * 与已有类目重复
+ */
+ CODE_53304(53304, "与已有类目重复"),
+
+ /**
+ * 包含未通过IPC校验的类目
+ */
+ CODE_53305(53305, "包含未通过IPC校验的类目"),
+
+ /**
+ * 修改类目只允许修改类目资质,不允许修改类目ID
+ */
+ CODE_53306(53306, "修改类目只允许修改类目资质,不允许修改类目ID"),
+
+ /**
+ * 只有审核失败的类目允许修改
+ */
+ CODE_53307(53307, "只有审核失败的类目允许修改"),
+
+ /**
+ * 审核中的类目不允许删除
+ */
+ CODE_53308(53308, "审核中的类目不允许删除"),
+
+ /**
+ * 社交红包不允许删除
+ */
+ CODE_53309(53309, "社交红包不允许删除"),
+
+ /**
+ * 类目超过上限,但是可以添加apply_reason参数申请更多类目
+ */
+ CODE_53310(53310, "类目超过上限,但是可以添加apply_reason参数申请更多类目"),
+
+ /**
+ * 需要提交资料信息
+ */
+ CODE_53311(53311, "需要提交资料信息"),
+
+ /**
+ * empty jsapi name
+ */
+ CODE_60005(60005, "空的jsapi名称"),
+
+ /**
+ * user cancel the auth
+ */
+ CODE_60006(60006, "用户取消该授权"),
+
+ /**
+ * invalid component type
+ */
+ CODE_61000(61000, "无效的第三方类型"),
+
+ /**
+ * component type and component appid is not match
+ */
+ CODE_61001(61001, "第三方类型与第三方APPID不匹配"),
+
+ /**
+ * the third appid is not open KF
+ */
+ CODE_61002(61002, "第三方APPID没有开放客服"),
+
+ /**
+ * component is not authorized by this account
+ */
+ CODE_61003(61003, "帐号未授权"),
+
+ /**
+ * api 功能未授权,请确认公众号/小程序已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限 access clientip is not registered
+ */
+ CODE_61004(61004, "api 功能未授权,请确认公众号/小程序已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限"),
+
+ /**
+ * component ticket is expired
+ */
+ CODE_61005(61005, "ticket 已过期"),
+
+ /**
+ * component ticket is invalid
+ */
+ CODE_61006(61006, "无效 ticket"),
+
+ /**
+ * api is unauthorized to component
+ */
+ CODE_61007(61007, "接口未授权给第三方平台"),
+
+ /**
+ * component req key is duplicated
+ */
+ CODE_61008(61008, "第三方请求的key存在重复"),
+
+ /**
+ * code is invalid
+ */
+ CODE_61009(61009, "无效code"),
+
+ /**
+ * code is expired
+ */
+ CODE_61010(61010, "code已过期"),
+
+ /**
+ * invalid component
+ */
+ CODE_61011(61011, "无效的第三方平台"),
+
+ /**
+ * invalid option name
+ */
+ CODE_61012(61012, "无效的选项名称"),
+
+ /**
+ * invalid option value
+ */
+ CODE_61013(61013, "无效的选项值"),
+
+ /**
+ * must use component token for component api
+ */
+ CODE_61014(61014, "必须使用component接口的token"),
+
+ /**
+ * must use biz account token for not component api
+ */
+ CODE_61015(61015, "必须使用商业帐号token,而不是component api"),
+
+ /**
+ * function category of API need be confirmed by component
+ */
+ CODE_61016(61016, "function category of API need be confirmed by component"),
+
+ /**
+ * function category is not authorized
+ */
+ CODE_61017(61017, "function category is not authorized"),
+
+ /**
+ * already confirm
+ */
+ CODE_61018(61018, "已确认"),
+
+ /**
+ * not need confirm
+ */
+ CODE_61019(61019, "不需要确认"),
+
+ /**
+ * err parameter
+ */
+ CODE_61020(61020, "err parameter"),
+
+ /**
+ * can't confirm
+ */
+ CODE_61021(61021, "can't confirm"),
+
+ /**
+ * can't resubmit
+ */
+ CODE_61022(61022, "can't resubmit"),
+
+ /**
+ * refresh_token is invalid
+ */
+ CODE_61023(61023, "refresh_token is invalid"),
+
+ /**
+ * must use api(api_component_token) to get token for component acct
+ */
+ CODE_61024(61024, "must use api(api_component_token) to get token for component acct"),
+
+ /**
+ * read-only option
+ */
+ CODE_61025(61025, "read-only option"),
+
+ /**
+ * register access deny
+ */
+ CODE_61026(61026, "register access deny"),
+
+ /**
+ * register limit exceed
+ */
+ CODE_61027(61027, "register limit exceed"),
+
+ /**
+ * component is unpublished
+ */
+ CODE_61028(61028, "component is unpublished"),
+
+ /**
+ * component need republish with base category
+ */
+ CODE_61029(61029, "component need republish with base category"),
+
+ /**
+ * component cancel authorization not allowed
+ */
+ CODE_61030(61030, "component cancel authorization not allowed"),
+
+ /**
+ * invalid realname type
+ */
+ CODE_61051(61051, "invalid realname type"),
+
+ /**
+ * need to be certified
+ */
+ CODE_61052(61052, "need to be certified"),
+
+ /**
+ * realname exceed limits
+ */
+ CODE_61053(61053, "realname exceed limits"),
+
+ /**
+ * realname in black list
+ */
+ CODE_61054(61054, "realname in black list"),
+
+ /**
+ * exceed quota per month
+ */
+ CODE_61055(61055, "exceed quota per month"),
+
+ /**
+ * copy_wx_verify is required option
+ */
+ CODE_61056(61056, "copy_wx_verify is required option"),
+
+ /**
+ * invalid ticket
+ */
+ CODE_61058(61058, "invalid ticket"),
+
+ /**
+ * overseas access deny
+ */
+ CODE_61061(61061, "overseas access deny"),
+
+ /**
+ * admin exceed limits
+ */
+ CODE_61063(61063, "admin exceed limits"),
+
+ /**
+ * admin in black list
+ */
+ CODE_61064(61064, "admin in black list"),
+
+ /**
+ * idcard exceed limits
+ */
+ CODE_61065(61065, "idcard exceed limits"),
+
+ /**
+ * idcard in black list
+ */
+ CODE_61066(61066, "idcard in black list"),
+
+ /**
+ * mobile exceed limits
+ */
+ CODE_61067(61067, "mobile exceed limits"),
+
+ /**
+ * mobile in black list
+ */
+ CODE_61068(61068, "mobile in black list"),
+
+ /**
+ * invalid admin
+ */
+ CODE_61069(61069, "invalid admin"),
+
+ /**
+ * name, idcard, wechat name not in accordance
+ */
+ CODE_61070(61070, "name, idcard, wechat name not in accordance"),
+
+ /**
+ * invalid url
+ */
+ CODE_61100(61100, "invalid url"),
+
+ /**
+ * invalid openid
+ */
+ CODE_61101(61101, "invalid openid"),
+
+ /**
+ * share relation not existed
+ */
+ CODE_61102(61102, "share relation not existed"),
+
+ /**
+ * product wording not set
+ */
+ CODE_61200(61200, "product wording not set"),
+
+ /**
+ * invalid base info
+ */
+ CODE_61300(61300, "invalid base info"),
+
+ /**
+ * invalid detail info
+ */
+ CODE_61301(61301, "invalid detail info"),
+
+ /**
+ * invalid action info
+ */
+ CODE_61302(61302, "invalid action info"),
+
+ /**
+ * brand info not exist
+ */
+ CODE_61303(61303, "brand info not exist"),
+
+ /**
+ * invalid product id
+ */
+ CODE_61304(61304, "invalid product id"),
+
+ /**
+ * invalid key info
+ */
+ CODE_61305(61305, "invalid key info"),
+
+ /**
+ * invalid appid
+ */
+ CODE_61306(61306, "invalid appid"),
+
+ /**
+ * invalid card id
+ */
+ CODE_61307(61307, "invalid card id"),
+
+ /**
+ * base info not exist
+ */
+ CODE_61308(61308, "base info not exist"),
+
+ /**
+ * detail info not exist
+ */
+ CODE_61309(61309, "detail info not exist"),
+
+ /**
+ * action info not exist
+ */
+ CODE_61310(61310, "action info not exist"),
+
+ /**
+ * invalid media info
+ */
+ CODE_61311(61311, "invalid media info"),
+
+ /**
+ * invalid buffer size
+ */
+ CODE_61312(61312, "invalid buffer size"),
+
+ /**
+ * invalid buffer
+ */
+ CODE_61313(61313, "invalid buffer"),
+
+ /**
+ * invalid qrcode extinfo
+ */
+ CODE_61314(61314, "invalid qrcode extinfo"),
+
+ /**
+ * invalid local ext info
+ */
+ CODE_61315(61315, "invalid local ext info"),
+
+ /**
+ * key conflict
+ */
+ CODE_61316(61316, "key conflict"),
+
+ /**
+ * ticket invalid
+ */
+ CODE_61317(61317, "ticket invalid"),
+
+ /**
+ * verify not pass
+ */
+ CODE_61318(61318, "verify not pass"),
+
+ /**
+ * category invalid
+ */
+ CODE_61319(61319, "category invalid"),
+
+ /**
+ * merchant info not exist
+ */
+ CODE_61320(61320, "merchant info not exist"),
+
+ /**
+ * cate id is a leaf node
+ */
+ CODE_61321(61321, "cate id is a leaf node"),
+
+ /**
+ * category id no permision
+ */
+ CODE_61322(61322, "category id no permision"),
+
+ /**
+ * barcode no permision
+ */
+ CODE_61323(61323, "barcode no permision"),
+
+ /**
+ * exceed max action num
+ */
+ CODE_61324(61324, "exceed max action num"),
+
+ /**
+ * brandinfo invalid store mgr type
+ */
+ CODE_61325(61325, "brandinfo invalid store mgr type"),
+
+ /**
+ * anti-spam blocked
+ */
+ CODE_61326(61326, "anti-spam blocked"),
+
+ /**
+ * comment reach limit
+ */
+ CODE_61327(61327, "comment reach limit"),
+
+ /**
+ * comment data is not the newest
+ */
+ CODE_61328(61328, "comment data is not the newest"),
+
+ /**
+ * comment hit ban word
+ */
+ CODE_61329(61329, "comment hit ban word"),
+
+ /**
+ * image already add
+ */
+ CODE_61330(61330, "image already add"),
+
+ /**
+ * image never add
+ */
+ CODE_61331(61331, "image never add"),
+
+ /**
+ * warning, image quanlity too low
+ */
+ CODE_61332(61332, "warning, image quanlity too low"),
+
+ /**
+ * warning, image simility too high
+ */
+ CODE_61333(61333, "warning, image simility too high"),
+
+ /**
+ * product not exists
+ */
+ CODE_61334(61334, "product not exists"),
+
+ /**
+ * key apply fail
+ */
+ CODE_61335(61335, "key apply fail"),
+
+ /**
+ * check status fail
+ */
+ CODE_61336(61336, "check status fail"),
+
+ /**
+ * product already exists
+ */
+ CODE_61337(61337, "product already exists"),
+
+ /**
+ * forbid delete
+ */
+ CODE_61338(61338, "forbid delete"),
+
+ /**
+ * firmcode claimed
+ */
+ CODE_61339(61339, "firmcode claimed"),
+
+ /**
+ * check firm info fail
+ */
+ CODE_61340(61340, "check firm info fail"),
+
+ /**
+ * too many white list uin
+ */
+ CODE_61341(61341, "too many white list uin"),
+
+ /**
+ * keystandard not match
+ */
+ CODE_61342(61342, "keystandard not match"),
+
+ /**
+ * keystandard error
+ */
+ CODE_61343(61343, "keystandard error"),
+
+ /**
+ * id map not exists
+ */
+ CODE_61344(61344, "id map not exists"),
+
+ /**
+ * invalid action code
+ */
+ CODE_61345(61345, "invalid action code"),
+
+ /**
+ * invalid actioninfo store
+ */
+ CODE_61346(61346, "invalid actioninfo store"),
+
+ /**
+ * invalid actioninfo media
+ */
+ CODE_61347(61347, "invalid actioninfo media"),
+
+ /**
+ * invalid actioninfo text
+ */
+ CODE_61348(61348, "invalid actioninfo text"),
+
+ /**
+ * invalid input data
+ */
+ CODE_61350(61350, "invalid input data"),
+
+ /**
+ * input data exceed max size
+ */
+ CODE_61351(61351, "input data exceed max size"),
+
+ /**
+ * kf_account error
+ */
+ CODE_61400(61400, "kf_account error"),
+
+ /**
+ * kf system alredy transfer
+ */
+ CODE_61401(61401, "kf system alredy transfer"),
+
+ /**
+ * 系统错误 (system error)
+ */
+ CODE_61450(61450, "系统错误 (system error)"),
+
+ /**
+ * 参数错误 (invalid parameter)
+ */
+ CODE_61451(61451, "参数错误 (invalid parameter)"),
+
+ /**
+ * 无效客服账号 (invalid kf_account)
+ */
+ CODE_61452(61452, "无效客服账号 (invalid kf_account)"),
+
+ /**
+ * 客服帐号已存在 (kf_account exsited)
+ */
+ CODE_61453(61453, "客服帐号已存在 (kf_account exsited)"),
+
+ /**
+ * 客服帐号名长度超过限制 ( 仅允许 10 个英文字符,不包括 @ 及 @ 后的公众号的微信号 )(invalid kf_acount length)
+ */
+ CODE_61454(61454, "客服帐号名长度超过限制 ( 仅允许 10 个英文字符,不包括 @ 及 @ 后的公众号的微信号 )(invalid kf_acount length)"),
+
+ /**
+ * 客服帐号名包含非法字符 ( 仅允许英文 + 数字 )(illegal character in kf_account)
+ */
+ CODE_61455(61455, "客服帐号名包含非法字符 ( 仅允许英文 + 数字 )(illegal character in kf_account)"),
+
+ /**
+ * 客服帐号个数超过限制 (10 个客服账号 )(kf_account count exceeded)
+ */
+ CODE_61456(61456, "客服帐号个数超过限制 (10 个客服账号 )(kf_account count exceeded)"),
+
+ /**
+ * 无效头像文件类型 (invalid file type)
+ */
+ CODE_61457(61457, "无效头像文件类型 (invalid file type)"),
+
+ /**
+ * 日期格式错误 date format error
+ */
+ CODE_61500(61500, "日期格式错误"),
+
+ /**
+ * date range error
+ */
+ CODE_61501(61501, "date range error"),
+
+ /**
+ * this is game miniprogram, data api is not supported
+ */
+ CODE_61502(61502, "this is game miniprogram, data api is not supported"),
+
+ /**
+ * data not ready, please try later
+ */
+ CODE_61503(61503, "data not ready, please try later"),
+
+ /**
+ * trying to access other's app
+ */
+ CODE_62001(62001, "trying to access other's app"),
+
+ /**
+ * app name already exists
+ */
+ CODE_62002(62002, "app name already exists"),
+
+ /**
+ * please provide at least one platform
+ */
+ CODE_62003(62003, "please provide at least one platform"),
+
+ /**
+ * invalid app name
+ */
+ CODE_62004(62004, "invalid app name"),
+
+ /**
+ * invalid app id
+ */
+ CODE_62005(62005, "invalid app id"),
+
+ /**
+ * 部分参数为空 some arguments is empty
+ */
+ CODE_63001(63001, "部分参数为空"),
+
+ /**
+ * 无效的签名 invalid signature
+ */
+ CODE_63002(63002, "无效的签名"),
+
+ /**
+ * invalid signature method
+ */
+ CODE_63003(63003, "invalid signature method"),
+
+ /**
+ * no authroize
+ */
+ CODE_63004(63004, "no authroize"),
+
+ /**
+ * gen ticket fail
+ */
+ CODE_63149(63149, "gen ticket fail"),
+
+ /**
+ * set ticket fail
+ */
+ CODE_63152(63152, "set ticket fail"),
+
+ /**
+ * shortid decode fail
+ */
+ CODE_63153(63153, "shortid decode fail"),
+
+ /**
+ * invalid status
+ */
+ CODE_63154(63154, "invalid status"),
+
+ /**
+ * invalid color
+ */
+ CODE_63155(63155, "invalid color"),
+
+ /**
+ * invalid tag
+ */
+ CODE_63156(63156, "invalid tag"),
+
+ /**
+ * invalid recommend
+ */
+ CODE_63157(63157, "invalid recommend"),
+
+ /**
+ * branditem out of limits
+ */
+ CODE_63158(63158, "branditem out of limits"),
+
+ /**
+ * retail_price empty
+ */
+ CODE_63159(63159, "retail_price empty"),
+
+ /**
+ * priceinfo invalid
+ */
+ CODE_63160(63160, "priceinfo invalid"),
+
+ /**
+ * antifake module num limit
+ */
+ CODE_63161(63161, "antifake module num limit"),
+
+ /**
+ * antifake native_type err
+ */
+ CODE_63162(63162, "antifake native_type err"),
+
+ /**
+ * antifake link not exists
+ */
+ CODE_63163(63163, "antifake link not exists"),
+
+ /**
+ * module type not exist
+ */
+ CODE_63164(63164, "module type not exist"),
+
+ /**
+ * module info not exist
+ */
+ CODE_63165(63165, "module info not exist"),
+
+ /**
+ * item is beding verified
+ */
+ CODE_63166(63166, "item is beding verified"),
+
+ /**
+ * item not published
+ */
+ CODE_63167(63167, "item not published"),
+
+ /**
+ * verify not pass
+ */
+ CODE_63168(63168, "verify not pass"),
+
+ /**
+ * already published
+ */
+ CODE_63169(63169, "already published"),
+
+ /**
+ * only banner or media
+ */
+ CODE_63170(63170, "only banner or media"),
+
+ /**
+ * card num limit
+ */
+ CODE_63171(63171, "card num limit"),
+
+ /**
+ * user num limit
+ */
+ CODE_63172(63172, "user num limit"),
+
+ /**
+ * text num limit
+ */
+ CODE_63173(63173, "text num limit"),
+
+ /**
+ * link card user sum limit
+ */
+ CODE_63174(63174, "link card user sum limit"),
+
+ /**
+ * detail info error
+ */
+ CODE_63175(63175, "detail info error"),
+
+ /**
+ * not this type
+ */
+ CODE_63176(63176, "not this type"),
+
+ /**
+ * src or secretkey or version or expired_time is wrong
+ */
+ CODE_63177(63177, "src or secretkey or version or expired_time is wrong"),
+
+ /**
+ * appid wrong
+ */
+ CODE_63178(63178, "appid wrong"),
+
+ /**
+ * openid num limit
+ */
+ CODE_63179(63179, "openid num limit"),
+
+ /**
+ * this app msg not found
+ */
+ CODE_63180(63180, "this app msg not found"),
+
+ /**
+ * get history app msg end
+ */
+ CODE_63181(63181, "get history app msg end"),
+
+ /**
+ * openid_list empty
+ */
+ CODE_63182(63182, "openid_list empty"),
+
+ /**
+ * unknown deeplink type
+ */
+ CODE_65001(65001, "unknown deeplink type"),
+
+ /**
+ * deeplink unauthorized
+ */
+ CODE_65002(65002, "deeplink unauthorized"),
+
+ /**
+ * bad deeplink
+ */
+ CODE_65003(65003, "bad deeplink"),
+
+ /**
+ * deeplinks of the very type are supposed to have short-life
+ */
+ CODE_65004(65004, "deeplinks of the very type are supposed to have short-life"),
+
+ /**
+ * invalid categories
+ */
+ CODE_65104(65104, "invalid categories"),
+
+ /**
+ * invalid photo url
+ */
+ CODE_65105(65105, "invalid photo url"),
+
+ /**
+ * poi audit state must be approved
+ */
+ CODE_65106(65106, "poi audit state must be approved"),
+
+ /**
+ * poi not allowed modify now
+ */
+ CODE_65107(65107, "poi not allowed modify now"),
+
+ /**
+ * invalid business name
+ */
+ CODE_65109(65109, "invalid business name"),
+
+ /**
+ * invalid address
+ */
+ CODE_65110(65110, "invalid address"),
+
+ /**
+ * invalid telephone
+ */
+ CODE_65111(65111, "invalid telephone"),
+
+ /**
+ * invalid city
+ */
+ CODE_65112(65112, "invalid city"),
+
+ /**
+ * invalid province
+ */
+ CODE_65113(65113, "invalid province"),
+
+ /**
+ * photo list empty
+ */
+ CODE_65114(65114, "photo list empty"),
+
+ /**
+ * poi_id is not exist
+ */
+ CODE_65115(65115, "poi_id is not exist"),
+
+ /**
+ * poi has been deleted
+ */
+ CODE_65116(65116, "poi has been deleted"),
+
+ /**
+ * cannot delete poi
+ */
+ CODE_65117(65117, "cannot delete poi"),
+
+ /**
+ * store status is invalid
+ */
+ CODE_65118(65118, "store status is invalid"),
+
+ /**
+ * lack of qualification for relevant principals
+ */
+ CODE_65119(65119, "lack of qualification for relevant principals"),
+
+ /**
+ * category info is not found
+ */
+ CODE_65120(65120, "category info is not found"),
+
+ /**
+ * room_name is empty, please check your input
+ */
+ CODE_65201(65201, "room_name is empty, please check your input"),
+
+ /**
+ * user_id is empty, please check your input
+ */
+ CODE_65202(65202, "user_id is empty, please check your input"),
+
+ /**
+ * invalid check ticket
+ */
+ CODE_65203(65203, "invalid check ticket"),
+
+ /**
+ * invalid check ticket opt code
+ */
+ CODE_65204(65204, "invalid check ticket opt code"),
+
+ /**
+ * check ticket out of time
+ */
+ CODE_65205(65205, "check ticket out of time"),
+
+ /**
+ * 不存在此 menuid 对应的个性化菜单 this menu is not conditionalmenu
+ */
+ CODE_65301(65301, "不存在此 menuid 对应的个性化菜单"),
+
+ /**
+ * 没有相应的用户 no such user
+ */
+ CODE_65302(65302, "没有相应的用户"),
+
+ /**
+ * 没有默认菜单,不能创建个性化菜单 there is no selfmenu, please create selfmenu first
+ */
+ CODE_65303(65303, "没有默认菜单,不能创建个性化菜单"),
+
+ /**
+ * MatchRule 信息为空 match rule empty
+ */
+ CODE_65304(65304, "MatchRule 信息为空"),
+
+ /**
+ * 个性化菜单数量受限 menu count limit
+ */
+ CODE_65305(65305, "个性化菜单数量受限"),
+
+ /**
+ * 不支持个性化菜单的帐号 conditional menu not support
+ */
+ CODE_65306(65306, "不支持个性化菜单的帐号"),
+
+ /**
+ * 个性化菜单信息为空 conditional menu is empty
+ */
+ CODE_65307(65307, "个性化菜单信息为空"),
+
+ /**
+ * 包含没有响应类型的 button exist empty button act
+ */
+ CODE_65308(65308, "包含没有响应类型的 button"),
+
+ /**
+ * 个性化菜单开关处于关闭状态 conditional menu switch is closed
+ */
+ CODE_65309(65309, "个性化菜单开关处于关闭状态"),
+
+ /**
+ * 填写了省份或城市信息,国家信息不能为空 region info: country is empty
+ */
+ CODE_65310(65310, "填写了省份或城市信息,国家信息不能为空"),
+
+ /**
+ * 填写了城市信息,省份信息不能为空 region info: province is empty
+ */
+ CODE_65311(65311, "填写了城市信息,省份信息不能为空"),
+
+ /**
+ * 不合法的国家信息 invalid country info
+ */
+ CODE_65312(65312, "不合法的国家信息"),
+
+ /**
+ * 不合法的省份信息 invalid province info
+ */
+ CODE_65313(65313, "不合法的省份信息"),
+
+ /**
+ * 不合法的城市信息 invalid city info
+ */
+ CODE_65314(65314, "不合法的城市信息"),
+
+ /**
+ * not fans
+ */
+ CODE_65315(65315, "not fans"),
+
+ /**
+ * 该公众号的菜单设置了过多的域名外跳(最多跳转到 3 个域名的链接) domain count reach limit
+ */
+ CODE_65316(65316, "该公众号的菜单设置了过多的域名外跳(最多跳转到 3 个域名的链接)"),
+
+ /**
+ * 不合法的 URL contain invalid url
+ */
+ CODE_65317(65317, "不合法的 URL"),
+
+ /**
+ * must use utf-8 charset
+ */
+ CODE_65318(65318, "must use utf-8 charset"),
+
+ /**
+ * not allow to create menu
+ */
+ CODE_65319(65319, "not allow to create menu"),
+
+ /**
+ * please enable new custom service, or wait for a while if you have enabled
+ */
+ CODE_65400(65400, "please enable new custom service, or wait for a while if you have enabled"),
+
+ /**
+ * invalid custom service account
+ */
+ CODE_65401(65401, "invalid custom service account"),
+
+ /**
+ * the custom service account need to bind a wechat user
+ */
+ CODE_65402(65402, "the custom service account need to bind a wechat user"),
+
+ /**
+ * illegal nickname
+ */
+ CODE_65403(65403, "illegal nickname"),
+
+ /**
+ * illegal custom service account
+ */
+ CODE_65404(65404, "illegal custom service account"),
+
+ /**
+ * custom service account number reach limit
+ */
+ CODE_65405(65405, "custom service account number reach limit"),
+
+ /**
+ * custom service account exists
+ */
+ CODE_65406(65406, "custom service account exists"),
+
+ /**
+ * the wechat user have been one of your workers
+ */
+ CODE_65407(65407, "the wechat user have been one of your workers"),
+
+ /**
+ * you have already invited the wechat user
+ */
+ CODE_65408(65408, "you have already invited the wechat user"),
+
+ /**
+ * wechat account invalid
+ */
+ CODE_65409(65409, "wechat account invalid"),
+
+ /**
+ * too many custom service accounts bound by the worker
+ */
+ CODE_65410(65410, "too many custom service accounts bound by the worker"),
+
+ /**
+ * a effective invitation to bind the custom service account exists
+ */
+ CODE_65411(65411, "a effective invitation to bind the custom service account exists"),
+
+ /**
+ * the custom service account have been bound by a wechat user
+ */
+ CODE_65412(65412, "the custom service account have been bound by a wechat user"),
+
+ /**
+ * no effective session for the customer
+ */
+ CODE_65413(65413, "no effective session for the customer"),
+
+ /**
+ * another worker is serving the customer
+ */
+ CODE_65414(65414, "another worker is serving the customer"),
+
+ /**
+ * the worker is not online
+ */
+ CODE_65415(65415, "the worker is not online"),
+
+ /**
+ * param invalid, please check
+ */
+ CODE_65416(65416, "param invalid, please check"),
+
+ /**
+ * it is too long from the starttime to endtime
+ */
+ CODE_65417(65417, "it is too long from the starttime to endtime"),
+
+ /**
+ * homepage not exists
+ */
+ CODE_65450(65450, "homepage not exists"),
+
+ /**
+ * invalid store type
+ */
+ CODE_68002(68002, "invalid store type"),
+
+ /**
+ * invalid store name
+ */
+ CODE_68003(68003, "invalid store name"),
+
+ /**
+ * invalid store wxa path
+ */
+ CODE_68004(68004, "invalid store wxa path"),
+
+ /**
+ * miss store wxa path
+ */
+ CODE_68005(68005, "miss store wxa path"),
+
+ /**
+ * invalid kefu type
+ */
+ CODE_68006(68006, "invalid kefu type"),
+
+ /**
+ * invalid kefu wxa path
+ */
+ CODE_68007(68007, "invalid kefu wxa path"),
+
+ /**
+ * invalid kefu phone number
+ */
+ CODE_68008(68008, "invalid kefu phone number"),
+
+ /**
+ * invalid sub mch id
+ */
+ CODE_68009(68009, "invalid sub mch id"),
+
+ /**
+ * store id has exist
+ */
+ CODE_68010(68010, "store id has exist"),
+
+ /**
+ * miss store name
+ */
+ CODE_68011(68011, "miss store name"),
+
+ /**
+ * miss create time
+ */
+ CODE_68012(68012, "miss create time"),
+
+ /**
+ * invalid status
+ */
+ CODE_68013(68013, "invalid status"),
+
+ /**
+ * invalid receiver info
+ */
+ CODE_68014(68014, "invalid receiver info"),
+
+ /**
+ * invalid product
+ */
+ CODE_68015(68015, "invalid product"),
+
+ /**
+ * invalid pay type
+ */
+ CODE_68016(68016, "invalid pay type"),
+
+ /**
+ * invalid fast mail no
+ */
+ CODE_68017(68017, "invalid fast mail no"),
+
+ /**
+ * invalid busi id
+ */
+ CODE_68018(68018, "invalid busi id"),
+
+ /**
+ * miss product sku
+ */
+ CODE_68019(68019, "miss product sku"),
+
+ /**
+ * invalid service type
+ */
+ CODE_68020(68020, "invalid service type"),
+
+ /**
+ * invalid service status
+ */
+ CODE_68021(68021, "invalid service status"),
+
+ /**
+ * invalid service_id
+ */
+ CODE_68022(68022, "invalid service_id"),
+
+ /**
+ * service_id has exist
+ */
+ CODE_68023(68023, "service_id has exist"),
+
+ /**
+ * miss service wxa path
+ */
+ CODE_68024(68024, "miss service wxa path"),
+
+ /**
+ * invalid product sku
+ */
+ CODE_68025(68025, "invalid product sku"),
+
+ /**
+ * invalid product spu
+ */
+ CODE_68026(68026, "invalid product spu"),
+
+ /**
+ * miss product spu
+ */
+ CODE_68027(68027, "miss product spu"),
+
+ /**
+ * can not find product spu and spu in order list
+ */
+ CODE_68028(68028, "can not find product spu and spu in order list"),
+
+ /**
+ * sku and spu duplicated
+ */
+ CODE_68029(68029, "sku and spu duplicated"),
+
+ /**
+ * busi_id has exist
+ */
+ CODE_68030(68030, "busi_id has exist"),
+
+ /**
+ * update fail
+ */
+ CODE_68031(68031, "update fail"),
+
+ /**
+ * busi_id not exist
+ */
+ CODE_68032(68032, "busi_id not exist"),
+
+ /**
+ * store no exist
+ */
+ CODE_68033(68033, "store no exist"),
+
+ /**
+ * miss product number
+ */
+ CODE_68034(68034, "miss product number"),
+
+ /**
+ * miss wxa order detail path
+ */
+ CODE_68035(68035, "miss wxa order detail path"),
+
+ /**
+ * there is no enough products to refund
+ */
+ CODE_68036(68036, "there is no enough products to refund"),
+
+ /**
+ * invalid refund info
+ */
+ CODE_68037(68037, "invalid refund info"),
+
+ /**
+ * shipped but no fast mail info
+ */
+ CODE_68038(68038, "shipped but no fast mail info"),
+
+ /**
+ * invalid wechat pay no
+ */
+ CODE_68039(68039, "invalid wechat pay no"),
+
+ /**
+ * all product has been refunded, the order can not be finished
+ */
+ CODE_68040(68040, "all product has been refunded, the order can not be finished"),
+
+ /**
+ * invalid service create time, it must bigger than the time of order
+ */
+ CODE_68041(68041, "invalid service create time, it must bigger than the time of order"),
+
+ /**
+ * invalid total cost, it must be smaller than the sum of product and shipping cost
+ */
+ CODE_68042(68042, "invalid total cost, it must be smaller than the sum of product and shipping cost"),
+
+ /**
+ * invalid role
+ */
+ CODE_68043(68043, "invalid role"),
+
+ /**
+ * invalid service_available args
+ */
+ CODE_68044(68044, "invalid service_available args"),
+
+ /**
+ * invalid order type
+ */
+ CODE_68045(68045, "invalid order type"),
+
+ /**
+ * invalid order deliver type
+ */
+ CODE_68046(68046, "invalid order deliver type"),
+
+ /**
+ * require store_id
+ */
+ CODE_68500(68500, "require store_id"),
+
+ /**
+ * invalid store_id
+ */
+ CODE_68501(68501, "invalid store_id"),
+
+ /**
+ * invalid parameter, parameter is zero or missing
+ */
+ CODE_71001(71001, "invalid parameter, parameter is zero or missing"),
+
+ /**
+ * invalid orderid, may be the other parameter not fit with orderid
+ */
+ CODE_71002(71002, "invalid orderid, may be the other parameter not fit with orderid"),
+
+ /**
+ * coin not enough
+ */
+ CODE_71003(71003, "coin not enough"),
+
+ /**
+ * card is expired
+ */
+ CODE_71004(71004, "card is expired"),
+
+ /**
+ * limit exe count
+ */
+ CODE_71005(71005, "limit exe count"),
+
+ /**
+ * limit coin count, 1 <= coin_count <= 100000
+ */
+ CODE_71006(71006, "limit coin count, 1 <= coin_count <= 100000"),
+
+ /**
+ * order finish
+ */
+ CODE_71007(71007, "order finish"),
+
+ /**
+ * order time out
+ */
+ CODE_71008(71008, "order time out"),
+
+ /**
+ * no match card
+ */
+ CODE_72001(72001, "no match card"),
+
+ /**
+ * mchid is not bind appid
+ */
+ CODE_72002(72002, "mchid is not bind appid"),
+
+ /**
+ * invalid card type, need member card
+ */
+ CODE_72003(72003, "invalid card type, need member card"),
+
+ /**
+ * mchid is occupied by the other appid
+ */
+ CODE_72004(72004, "mchid is occupied by the other appid"),
+
+ /**
+ * out of mchid size limit
+ */
+ CODE_72005(72005, "out of mchid size limit"),
+
+ /**
+ * invald title
+ */
+ CODE_72006(72006, "invald title"),
+
+ /**
+ * invalid reduce cost, can not less than 100
+ */
+ CODE_72007(72007, "invalid reduce cost, can not less than 100"),
+
+ /**
+ * invalid least cost, most larger than reduce cost
+ */
+ CODE_72008(72008, "invalid least cost, most larger than reduce cost"),
+
+ /**
+ * invalid get limit, can not over 50
+ */
+ CODE_72009(72009, "invalid get limit, can not over 50"),
+
+ /**
+ * invalid mchid
+ */
+ CODE_72010(72010, "invalid mchid"),
+
+ /**
+ * invalid activate_ticket.Maybe this ticket is not belong this AppId
+ */
+ CODE_72011(72011, "invalid activate_ticket.Maybe this ticket is not belong this AppId"),
+
+ /**
+ * activate_ticket has been expired
+ */
+ CODE_72012(72012, "activate_ticket has been expired"),
+
+ /**
+ * unauthorized order_id or authorization is expired
+ */
+ CODE_72013(72013, "unauthorized order_id or authorization is expired"),
+
+ /**
+ * task card share stock can not modify stock
+ */
+ CODE_72014(72014, "task card share stock can not modify stock"),
+
+ /**
+ * unauthorized create invoice
+ */
+ CODE_72015(72015, "unauthorized create invoice"),
+
+ /**
+ * unauthorized create member card
+ */
+ CODE_72016(72016, "unauthorized create member card"),
+
+ /**
+ * invalid invoice title
+ */
+ CODE_72017(72017, "invalid invoice title"),
+
+ /**
+ * duplicate order id, invoice had inserted to user
+ */
+ CODE_72018(72018, "duplicate order id, invoice had inserted to user"),
+
+ /**
+ * limit msg operation card list size, must <= 5
+ */
+ CODE_72019(72019, "limit msg operation card list size, must <= 5"),
+
+ /**
+ * limit consume in use limit
+ */
+ CODE_72020(72020, "limit consume in use limit"),
+
+ /**
+ * unauthorized create general card
+ */
+ CODE_72021(72021, "unauthorized create general card"),
+
+ /**
+ * user unexpected, please add user to white list
+ */
+ CODE_72022(72022, "user unexpected, please add user to white list"),
+
+ /**
+ * invoice has been lock by others
+ */
+ CODE_72023(72023, "invoice has been lock by others"),
+
+ /**
+ * invoice status error
+ */
+ CODE_72024(72024, "invoice status error"),
+
+ /**
+ * invoice token error
+ */
+ CODE_72025(72025, "invoice token error"),
+
+ /**
+ * need set wx_activate true
+ */
+ CODE_72026(72026, "need set wx_activate true"),
+
+ /**
+ * invoice action error
+ */
+ CODE_72027(72027, "invoice action error"),
+
+ /**
+ * invoice never set pay mch info
+ */
+ CODE_72028(72028, "invoice never set pay mch info"),
+
+ /**
+ * invoice never set auth field
+ */
+ CODE_72029(72029, "invoice never set auth field"),
+
+ /**
+ * invalid mchid
+ */
+ CODE_72030(72030, "invalid mchid"),
+
+ /**
+ * invalid params
+ */
+ CODE_72031(72031, "invalid params"),
+
+ /**
+ * pay gift card rule expired
+ */
+ CODE_72032(72032, "pay gift card rule expired"),
+
+ /**
+ * pay gift card rule status err
+ */
+ CODE_72033(72033, "pay gift card rule status err"),
+
+ /**
+ * invlid rule id
+ */
+ CODE_72034(72034, "invlid rule id"),
+
+ /**
+ * biz reject insert
+ */
+ CODE_72035(72035, "biz reject insert"),
+
+ /**
+ * invoice is busy, try again please
+ */
+ CODE_72036(72036, "invoice is busy, try again please"),
+
+ /**
+ * invoice owner error
+ */
+ CODE_72037(72037, "invoice owner error"),
+
+ /**
+ * invoice order never auth
+ */
+ CODE_72038(72038, "invoice order never auth"),
+
+ /**
+ * invoice must be lock first
+ */
+ CODE_72039(72039, "invoice must be lock first"),
+
+ /**
+ * invoice pdf error
+ */
+ CODE_72040(72040, "invoice pdf error"),
+
+ /**
+ * billing_code and billing_no invalid
+ */
+ CODE_72041(72041, "billing_code and billing_no invalid"),
+
+ /**
+ * billing_code and billing_no repeated
+ */
+ CODE_72042(72042, "billing_code and billing_no repeated"),
+
+ /**
+ * billing_code or billing_no size error
+ */
+ CODE_72043(72043, "billing_code or billing_no size error"),
+
+ /**
+ * scan text out of time
+ */
+ CODE_72044(72044, "scan text out of time"),
+
+ /**
+ * check_code is empty
+ */
+ CODE_72045(72045, "check_code is empty"),
+
+ /**
+ * pdf_url is invalid
+ */
+ CODE_72046(72046, "pdf_url is invalid"),
+
+ /**
+ * pdf billing_code or pdf billing_no is error
+ */
+ CODE_72047(72047, "pdf billing_code or pdf billing_no is error"),
+
+ /**
+ * insert too many invoice, need auth again
+ */
+ CODE_72048(72048, "insert too many invoice, need auth again"),
+
+ /**
+ * never auth
+ */
+ CODE_72049(72049, "never auth"),
+
+ /**
+ * auth expired, need auth again
+ */
+ CODE_72050(72050, "auth expired, need auth again"),
+
+ /**
+ * app type error
+ */
+ CODE_72051(72051, "app type error"),
+
+ /**
+ * get too many invoice
+ */
+ CODE_72052(72052, "get too many invoice"),
+
+ /**
+ * user never auth
+ */
+ CODE_72053(72053, "user never auth"),
+
+ /**
+ * invoices is inserting, wait a moment please
+ */
+ CODE_72054(72054, "invoices is inserting, wait a moment please"),
+
+ /**
+ * too many invoices
+ */
+ CODE_72055(72055, "too many invoices"),
+
+ /**
+ * order_id repeated, please check order_id
+ */
+ CODE_72056(72056, "order_id repeated, please check order_id"),
+
+ /**
+ * today insert limit
+ */
+ CODE_72057(72057, "today insert limit"),
+
+ /**
+ * callback biz error
+ */
+ CODE_72058(72058, "callback biz error"),
+
+ /**
+ * this invoice is giving to others, wait a moment please
+ */
+ CODE_72059(72059, "this invoice is giving to others, wait a moment please"),
+
+ /**
+ * this invoice has been cancelled, check the reimburse_status please
+ */
+ CODE_72060(72060, "this invoice has been cancelled, check the reimburse_status please"),
+
+ /**
+ * this invoice has been closed, check the reimburse_status please
+ */
+ CODE_72061(72061, "this invoice has been closed, check the reimburse_status please"),
+
+ /**
+ * this code_auth_key is limited, try other code_auth_key please
+ */
+ CODE_72062(72062, "this code_auth_key is limited, try other code_auth_key please"),
+
+ /**
+ * biz contact is empty, set contact first please
+ */
+ CODE_72063(72063, "biz contact is empty, set contact first please"),
+
+ /**
+ * tbc error
+ */
+ CODE_72064(72064, "tbc error"),
+
+ /**
+ * tbc logic error
+ */
+ CODE_72065(72065, "tbc logic error"),
+
+ /**
+ * the card is send for advertisement, not allow modify time and budget
+ */
+ CODE_72066(72066, "the card is send for advertisement, not allow modify time and budget"),
+
+ /**
+ * BatchInsertAuthKey_Expired
+ */
+ CODE_72067(72067, "BatchInsertAuthKey_Expired"),
+
+ /**
+ * BatchInsertAuthKey_Owner
+ */
+ CODE_72068(72068, "BatchInsertAuthKey_Owner"),
+
+ /**
+ * BATCHTASKRUN_ERROR
+ */
+ CODE_72069(72069, "BATCHTASKRUN_ERROR"),
+
+ /**
+ * BIZ_TITLE_KEY_OUT_TIME
+ */
+ CODE_72070(72070, "BIZ_TITLE_KEY_OUT_TIME"),
+
+ /**
+ * Discern_GaoPeng_Error
+ */
+ CODE_72071(72071, "Discern_GaoPeng_Error"),
+
+ /**
+ * Discern_Type_Error
+ */
+ CODE_72072(72072, "Discern_Type_Error"),
+
+ /**
+ * Fee_Error
+ */
+ CODE_72073(72073, "Fee_Error"),
+
+ /**
+ * HAS_Auth
+ */
+ CODE_72074(72074, "HAS_Auth"),
+
+ /**
+ * HAS_SEND
+ */
+ CODE_72075(72075, "HAS_SEND"),
+
+ /**
+ * INVOICESIGN
+ */
+ CODE_72076(72076, "INVOICESIGN"),
+
+ /**
+ * KEY_DELETED
+ */
+ CODE_72077(72077, "KEY_DELETED"),
+
+ /**
+ * KEY_EXPIRED
+ */
+ CODE_72078(72078, "KEY_EXPIRED"),
+
+ /**
+ * MOUNT_ERROR
+ */
+ CODE_72079(72079, "MOUNT_ERROR"),
+
+ /**
+ * NO_FOUND
+ */
+ CODE_72080(72080, "NO_FOUND"),
+
+ /**
+ * No_Pull_Pdf
+ */
+ CODE_72081(72081, "No_Pull_Pdf"),
+
+ /**
+ * PDF_CHECK_ERROR
+ */
+ CODE_72082(72082, "PDF_CHECK_ERROR"),
+
+ /**
+ * PULL_PDF_FAIL
+ */
+ CODE_72083(72083, "PULL_PDF_FAIL"),
+
+ /**
+ * PUSH_BIZ_EMPTY
+ */
+ CODE_72084(72084, "PUSH_BIZ_EMPTY"),
+
+ /**
+ * SDK_APPID_ERROR
+ */
+ CODE_72085(72085, "SDK_APPID_ERROR"),
+
+ /**
+ * SDK_BIZ_ERROR
+ */
+ CODE_72086(72086, "SDK_BIZ_ERROR"),
+
+ /**
+ * SDK_URL_ERROR
+ */
+ CODE_72087(72087, "SDK_URL_ERROR"),
+
+ /**
+ * Search_Title_Fail
+ */
+ CODE_72088(72088, "Search_Title_Fail"),
+
+ /**
+ * TITLE_BUSY
+ */
+ CODE_72089(72089, "TITLE_BUSY"),
+
+ /**
+ * TITLE_NO_FOUND
+ */
+ CODE_72090(72090, "TITLE_NO_FOUND"),
+
+ /**
+ * TOKEN_ERR
+ */
+ CODE_72091(72091, "TOKEN_ERR"),
+
+ /**
+ * USER_TITLE_NOT_FOUND
+ */
+ CODE_72092(72092, "USER_TITLE_NOT_FOUND"),
+
+ /**
+ * Verify_3rd_Fail
+ */
+ CODE_72093(72093, "Verify_3rd_Fail"),
+
+ /**
+ * sys error make out invoice failed
+ */
+ CODE_73000(73000, "sys error make out invoice failed"),
+
+ /**
+ * wxopenid error
+ */
+ CODE_73001(73001, "wxopenid error"),
+
+ /**
+ * ddh orderid empty
+ */
+ CODE_73002(73002, "ddh orderid empty"),
+
+ /**
+ * wxopenid empty
+ */
+ CODE_73003(73003, "wxopenid empty"),
+
+ /**
+ * fpqqlsh empty
+ */
+ CODE_73004(73004, "fpqqlsh empty"),
+
+ /**
+ * not a commercial
+ */
+ CODE_73005(73005, "not a commercial"),
+
+ /**
+ * kplx empty
+ */
+ CODE_73006(73006, "kplx empty"),
+
+ /**
+ * nsrmc empty
+ */
+ CODE_73007(73007, "nsrmc empty"),
+
+ /**
+ * nsrdz empty
+ */
+ CODE_73008(73008, "nsrdz empty"),
+
+ /**
+ * nsrdh empty
+ */
+ CODE_73009(73009, "nsrdh empty"),
+
+ /**
+ * ghfmc empty
+ */
+ CODE_73010(73010, "ghfmc empty"),
+
+ /**
+ * kpr empty
+ */
+ CODE_73011(73011, "kpr empty"),
+
+ /**
+ * jshj empty
+ */
+ CODE_73012(73012, "jshj empty"),
+
+ /**
+ * hjje empty
+ */
+ CODE_73013(73013, "hjje empty"),
+
+ /**
+ * hjse empty
+ */
+ CODE_73014(73014, "hjse empty"),
+
+ /**
+ * hylx empty
+ */
+ CODE_73015(73015, "hylx empty"),
+
+ /**
+ * nsrsbh empty
+ */
+ CODE_73016(73016, "nsrsbh empty"),
+
+ /**
+ * kaipiao plat error
+ */
+ CODE_73100(73100, "kaipiao plat error"),
+
+ /**
+ * nsrsbh not cmp
+ */
+ CODE_73101(73101, "nsrsbh not cmp"),
+
+ /**
+ * invalid wxa appid in url_cell, wxa appid is need to bind biz appid
+ */
+ CODE_73103(73103, "invalid wxa appid in url_cell, wxa appid is need to bind biz appid"),
+
+ /**
+ * reach frequency limit
+ */
+ CODE_73104(73104, "reach frequency limit"),
+
+ /**
+ * Kp plat make invoice timeout, please try again with the same fpqqlsh
+ */
+ CODE_73105(73105, "Kp plat make invoice timeout, please try again with the same fpqqlsh"),
+
+ /**
+ * Fpqqlsh exist with different ddh
+ */
+ CODE_73106(73106, "Fpqqlsh exist with different ddh"),
+
+ /**
+ * Fpqqlsh is processing, please wait and query later
+ */
+ CODE_73107(73107, "Fpqqlsh is processing, please wait and query later"),
+
+ /**
+ * This ddh with other fpqqlsh already exist
+ */
+ CODE_73108(73108, "This ddh with other fpqqlsh already exist"),
+
+ /**
+ * This Fpqqlsh not exist in kpplat
+ */
+ CODE_73109(73109, "This Fpqqlsh not exist in kpplat"),
+
+ /**
+ * get card detail by card id and code fail
+ */
+ CODE_73200(73200, "get card detail by card id and code fail"),
+
+ /**
+ * get cloud invoice record fail
+ */
+ CODE_73201(73201, "get cloud invoice record fail"),
+
+ /**
+ * get appinfo fail
+ */
+ CODE_73202(73202, "get appinfo fail"),
+
+ /**
+ * get invoice category or rule kv error
+ */
+ CODE_73203(73203, "get invoice category or rule kv error"),
+
+ /**
+ * request card not exist
+ */
+ CODE_73204(73204, "request card not exist"),
+
+ /**
+ * 朋友的券玩法升级中,当前暂停创建,请创建其他类型卡券
+ */
+ CODE_73205(73205, "朋友的券玩法升级中,当前暂停创建,请创建其他类型卡券"),
+
+ /**
+ * 朋友的券玩法升级中,当前暂停券点充值,请创建其他类型卡券
+ */
+ CODE_73206(73206, "朋友的券玩法升级中,当前暂停券点充值,请创建其他类型卡券"),
+
+ /**
+ * 朋友的券玩法升级中,当前暂停开通券点账户
+ */
+ CODE_73207(73207, "朋友的券玩法升级中,当前暂停开通券点账户"),
+
+ /**
+ * 朋友的券玩法升级中,当前不支持修改库存
+ */
+ CODE_73208(73208, "朋友的券玩法升级中,当前不支持修改库存"),
+
+ /**
+ * 朋友的券玩法升级中,当前不支持修改有效期
+ */
+ CODE_73209(73209, "朋友的券玩法升级中,当前不支持修改有效期"),
+
+ /**
+ * 当前批次不支持修改卡券批次库存
+ */
+ CODE_73210(73210, "当前批次不支持修改卡券批次库存"),
+
+ /**
+ * 不再支持配置网页链接跳转,请选择小程序替代
+ */
+ CODE_73211(73211, "不再支持配置网页链接跳转,请选择小程序替代"),
+
+ /**
+ * unauthorized backup member
+ */
+ CODE_73212(73212, "unauthorized backup member"),
+
+ /**
+ * invalid code type
+ */
+ CODE_73213(73213, "invalid code type"),
+
+ /**
+ * the user is already a member
+ */
+ CODE_73214(73214, "the user is already a member"),
+
+ /**
+ * 支付打通券能力已下线,请直接使用微信支付代金券API:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/convention/chapter1_1.shtml
+ */
+ CODE_73215(73215, "支付打通券能力已下线,请直接使用微信支付代金券API:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/convention/chapter1_1.shtml"),
+
+ /**
+ * 不合法的按钮名字,请从中选择一个:使用礼品卡/立即使用/去点外卖
+ */
+ CODE_73216(73216, "不合法的按钮名字,请从中选择一个:使用礼品卡/立即使用/去点外卖"),
+
+ /**
+ * 礼品卡本身没有设置appname和path,不允许在修改接口设置
+ */
+ CODE_73217(73217, "礼品卡本身没有设置appname和path,不允许在修改接口设置"),
+
+ /**
+ * 未授权使用礼品卡落地页跳转小程序功能
+ */
+ CODE_73218(73218, "未授权使用礼品卡落地页跳转小程序功能"),
+
+ /**
+ * not find this wx_hotel_id info
+ */
+ CODE_74000(74000, "not find this wx_hotel_id info"),
+
+ /**
+ * request some param empty
+ */
+ CODE_74001(74001, "request some param empty"),
+
+ /**
+ * request some param error
+ */
+ CODE_74002(74002, "request some param error"),
+
+ /**
+ * request some param error
+ */
+ CODE_74003(74003, "request some param error"),
+
+ /**
+ * datetime error
+ */
+ CODE_74004(74004, "datetime error"),
+
+ /**
+ * checkin mode error
+ */
+ CODE_74005(74005, "checkin mode error"),
+
+ /**
+ * carid from error
+ */
+ CODE_74007(74007, "carid from error"),
+
+ /**
+ * this hotel routecode not exist
+ */
+ CODE_74008(74008, "this hotel routecode not exist"),
+
+ /**
+ * this hotel routecode info error contract developer
+ */
+ CODE_74009(74009, "this hotel routecode info error contract developer"),
+
+ /**
+ * maybe not support report mode
+ */
+ CODE_74010(74010, "maybe not support report mode"),
+
+ /**
+ * pic deocde not ok maybe its not good picdata
+ */
+ CODE_74011(74011, "pic deocde not ok maybe its not good picdata"),
+
+ /**
+ * verify sys erro
+ */
+ CODE_74021(74021, "verify sys erro"),
+
+ /**
+ * inner police erro
+ */
+ CODE_74022(74022, "inner police erro"),
+
+ /**
+ * unable to detect the face
+ */
+ CODE_74023(74023, "unable to detect the face"),
+
+ /**
+ * report checkin 2 lvye sys erro
+ */
+ CODE_74040(74040, "report checkin 2 lvye sys erro"),
+
+ /**
+ * report checkou 2 lvye sys erro
+ */
+ CODE_74041(74041, "report checkou 2 lvye sys erro"),
+
+ /**
+ * some param emtpy please check
+ */
+ CODE_75001(75001, "some param emtpy please check"),
+
+ /**
+ * param illegal please check
+ */
+ CODE_75002(75002, "param illegal please check"),
+
+ /**
+ * sys error kv store error
+ */
+ CODE_75003(75003, "sys error kv store error"),
+
+ /**
+ * sys error kvstring store error
+ */
+ CODE_75004(75004, "sys error kvstring store error"),
+
+ /**
+ * product not exist please check your product_id
+ */
+ CODE_75005(75005, "product not exist please check your product_id"),
+
+ /**
+ * order not exist please check order_id and buyer_appid
+ */
+ CODE_75006(75006, "order not exist please check order_id and buyer_appid"),
+
+ /**
+ * do not allow this status to change please check this order_id status now
+ */
+ CODE_75007(75007, "do not allow this status to change please check this order_id status now"),
+
+ /**
+ * product has exist please use new id
+ */
+ CODE_75008(75008, "product has exist please use new id"),
+
+ /**
+ * notify order status failed
+ */
+ CODE_75009(75009, "notify order status failed"),
+
+ /**
+ * buyer bussiness info not exist
+ */
+ CODE_75010(75010, "buyer bussiness info not exist"),
+
+ /**
+ * you had registered
+ */
+ CODE_75011(75011, "you had registered"),
+
+ /**
+ * store image key to kv error, please try again
+ */
+ CODE_75012(75012, "store image key to kv error, please try again"),
+
+ /**
+ * get image fail, please check you image key
+ */
+ CODE_75013(75013, "get image fail, please check you image key"),
+
+ /**
+ * this key is not belong to you
+ */
+ CODE_75014(75014, "this key is not belong to you"),
+
+ /**
+ * this key is expired
+ */
+ CODE_75015(75015, "this key is expired"),
+
+ /**
+ * encrypt decode key fail
+ */
+ CODE_75016(75016, "encrypt decode key fail"),
+
+ /**
+ * encrypt encode key fail
+ */
+ CODE_75017(75017, "encrypt encode key fail"),
+
+ /**
+ * bind buyer business info fail please contact us
+ */
+ CODE_75018(75018, "bind buyer business info fail please contact us"),
+
+ /**
+ * this key is empty, user may not upload file
+ */
+ CODE_75019(75019, "this key is empty, user may not upload file"),
+
+ /**
+ * 系统错误,请稍后再试
+ */
+ CODE_80000(80000, "系统错误,请稍后再试"),
+
+ /**
+ * 参数格式校验错误
+ */
+ CODE_80001(80001, "参数格式校验错误"),
+
+ /**
+ * 签名失败
+ */
+ CODE_80002(80002, "签名失败"),
+
+ /**
+ * 该日期订单未生成
+ */
+ CODE_80003(80003, "该日期订单未生成"),
+
+ /**
+ * 用户未绑卡
+ */
+ CODE_80004(80004, "用户未绑卡"),
+
+ /**
+ * 姓名不符
+ */
+ CODE_80005(80005, "姓名不符"),
+
+ /**
+ * 身份证不符
+ */
+ CODE_80006(80006, "身份证不符"),
+
+ /**
+ * 获取城市信息失败
+ */
+ CODE_80007(80007, "获取城市信息失败"),
+
+ /**
+ * 未找到指定少儿信息
+ */
+ CODE_80008(80008, "未找到指定少儿信息"),
+
+ /**
+ * 少儿身份证不符
+ */
+ CODE_80009(80009, "少儿身份证不符"),
+
+ /**
+ * 少儿未绑定
+ */
+ CODE_80010(80010, "少儿未绑定"),
+
+ /**
+ * 签约号不符
+ */
+ CODE_80011(80011, "签约号不符"),
+
+ /**
+ * 该地区局方配置不存在
+ */
+ CODE_80012(80012, "该地区局方配置不存在"),
+
+ /**
+ * 调用方appid与局方配置不匹配
+ */
+ CODE_80013(80013, "调用方appid与局方配置不匹配"),
+
+ /**
+ * 获取消息账号失败
+ */
+ CODE_80014(80014, "获取消息账号失败"),
+
+ /**
+ * 非法的插件版本
+ */
+ CODE_80066(80066, "非法的插件版本"),
+
+ /**
+ * 找不到使用的插件
+ */
+ CODE_80067(80067, "找不到使用的插件"),
+
+ /**
+ * 没有权限使用该插件
+ */
+ CODE_80082(80082, "没有权限使用该插件"),
+
+ /**
+ * 商家未接入
+ */
+ CODE_80101(80101, "商家未接入"),
+
+ /**
+ * 实名校验code不存在
+ */
+ CODE_80111(80111, "实名校验code不存在"),
+
+ /**
+ * code并发冲突
+ */
+ CODE_80112(80112, "code并发冲突"),
+
+ /**
+ * 无效code
+ */
+ CODE_80113(80113, "无效code"),
+
+ /**
+ * report_type无效
+ */
+ CODE_80201(80201, "report_type无效"),
+
+ /**
+ * service_type无效
+ */
+ CODE_80202(80202, "service_type无效"),
+
+ /**
+ * 申请单不存在
+ */
+ CODE_80300(80300, "申请单不存在"),
+
+ /**
+ * 申请单不属于该账号
+ */
+ CODE_80301(80301, "申请单不属于该账号"),
+
+ /**
+ * 激活号段有重叠
+ */
+ CODE_80302(80302, "激活号段有重叠"),
+
+ /**
+ * 码格式错误
+ */
+ CODE_80303(80303, "码格式错误"),
+
+ /**
+ * 该码未激活
+ */
+ CODE_80304(80304, "该码未激活"),
+
+ /**
+ * 激活失败
+ */
+ CODE_80305(80305, "激活失败"),
+
+ /**
+ * 码索引超出申请范围
+ */
+ CODE_80306(80306, "码索引超出申请范围"),
+
+ /**
+ * 申请已存在
+ */
+ CODE_80307(80307, "申请已存在"),
+
+ /**
+ * 子任务未完成
+ */
+ CODE_80308(80308, "子任务未完成"),
+
+ /**
+ * 子任务文件过期
+ */
+ CODE_80309(80309, "子任务文件过期"),
+
+ /**
+ * 子任务不存在
+ */
+ CODE_80310(80310, "子任务不存在"),
+
+ /**
+ * 获取文件失败
+ */
+ CODE_80311(80311, "获取文件失败"),
+
+ /**
+ * 加密数据失败
+ */
+ CODE_80312(80312, "加密数据失败"),
+
+ /**
+ * 加密数据密钥不存在,请联系接口人申请
+ */
+ CODE_80313(80313, "加密数据密钥不存在,请联系接口人申请"),
+
+ /**
+ * can not set page_id in AddGiftCardPage
+ */
+ CODE_81000(81000, "can not set page_id in AddGiftCardPage"),
+
+ /**
+ * card_list is empty
+ */
+ CODE_81001(81001, "card_list is empty"),
+
+ /**
+ * card_id is not giftcard
+ */
+ CODE_81002(81002, "card_id is not giftcard"),
+
+ /**
+ * banner_pic_url is empty
+ */
+ CODE_81004(81004, "banner_pic_url is empty"),
+
+ /**
+ * banner_pic_url is not from cdn
+ */
+ CODE_81005(81005, "banner_pic_url is not from cdn"),
+
+ /**
+ * giftcard_wrap_pic_url_list is empty
+ */
+ CODE_81006(81006, "giftcard_wrap_pic_url_list is empty"),
+
+ /**
+ * giftcard_wrap_pic_url_list is not from cdn
+ */
+ CODE_81007(81007, "giftcard_wrap_pic_url_list is not from cdn"),
+
+ /**
+ * address is empty
+ */
+ CODE_81008(81008, "address is empty"),
+
+ /**
+ * service_phone is invalid
+ */
+ CODE_81009(81009, "service_phone is invalid"),
+
+ /**
+ * biz_description is empty
+ */
+ CODE_81010(81010, "biz_description is empty"),
+
+ /**
+ * invalid page_id
+ */
+ CODE_81011(81011, "invalid page_id"),
+
+ /**
+ * invalid order_id
+ */
+ CODE_81012(81012, "invalid order_id"),
+
+ /**
+ * invalid TIME_RANGE, begin_time + 31day must less than end_time
+ */
+ CODE_81013(81013, "invalid TIME_RANGE, begin_time + 31day must less than end_time"),
+
+ /**
+ * invalid count! count must equal or less than 100
+ */
+ CODE_81014(81014, "invalid count! count must equal or less than 100"),
+
+ /**
+ * invalid category_index OR category.title is empty OR is_banner but has_category_index
+ */
+ CODE_81015(81015, "invalid category_index OR category.title is empty OR is_banner but has_category_index"),
+
+ /**
+ * is_banner is more than 1
+ */
+ CODE_81016(81016, "is_banner is more than 1"),
+
+ /**
+ * order status error, please check pay status or gifting_status
+ */
+ CODE_81017(81017, "order status error, please check pay status or gifting_status"),
+
+ /**
+ * refund reduplicate, the order is already refunded
+ */
+ CODE_81018(81018, "refund reduplicate, the order is already refunded"),
+
+ /**
+ * lock order fail! the order is refunding by another request
+ */
+ CODE_81019(81019, "lock order fail! the order is refunding by another request"),
+
+ /**
+ * Invalid Args! page_id.size!=0 but all==true, or page_id.size==0 but all==false.
+ */
+ CODE_81020(81020, "Invalid Args! page_id.size!=0 but all==true, or page_id.size==0 but all==false."),
+
+ /**
+ * Empty theme_pic_url.
+ */
+ CODE_81021(81021, "Empty theme_pic_url."),
+
+ /**
+ * Empty theme.title.
+ */
+ CODE_81022(81022, "Empty theme.title."),
+
+ /**
+ * Empty theme.title_title.
+ */
+ CODE_81023(81023, "Empty theme.title_title."),
+
+ /**
+ * Empty theme.item_list.
+ */
+ CODE_81024(81024, "Empty theme.item_list."),
+
+ /**
+ * Empty theme.pic_item_list.
+ */
+ CODE_81025(81025, "Empty theme.pic_item_list."),
+
+ /**
+ * Invalid theme.title.length .
+ */
+ CODE_81026(81026, "Invalid theme.title.length ."),
+
+ /**
+ * Empty background_pic_url.
+ */
+ CODE_81027(81027, "Empty background_pic_url."),
+
+ /**
+ * Empty default_gifting_msg.
+ */
+ CODE_81028(81028, "Empty default_gifting_msg."),
+
+ /**
+ * Duplicate order_id
+ */
+ CODE_81029(81029, "Duplicate order_id"),
+
+ /**
+ * PreAlloc code fail
+ */
+ CODE_81030(81030, "PreAlloc code fail"),
+
+ /**
+ * Too many theme participate_activity
+ */
+ CODE_81031(81031, "Too many theme participate_activity"),
+
+ /**
+ * biz_template_id not exist
+ */
+ CODE_82000(82000, "biz_template_id not exist"),
+
+ /**
+ * result_page_style_id not exist
+ */
+ CODE_82001(82001, "result_page_style_id not exist"),
+
+ /**
+ * deal_msg_style_id not exist
+ */
+ CODE_82002(82002, "deal_msg_style_id not exist"),
+
+ /**
+ * card_style_id not exist
+ */
+ CODE_82003(82003, "card_style_id not exist"),
+
+ /**
+ * biz template not audit OK
+ */
+ CODE_82010(82010, "biz template not audit OK"),
+
+ /**
+ * biz template banned
+ */
+ CODE_82011(82011, "biz template banned"),
+
+ /**
+ * user not use service first
+ */
+ CODE_82020(82020, "user not use service first"),
+
+ /**
+ * exceed long period
+ */
+ CODE_82021(82021, "exceed long period"),
+
+ /**
+ * exceed long period max send cnt
+ */
+ CODE_82022(82022, "exceed long period max send cnt"),
+
+ /**
+ * exceed short period max send cnt
+ */
+ CODE_82023(82023, "exceed short period max send cnt"),
+
+ /**
+ * exceed data size limit
+ */
+ CODE_82024(82024, "exceed data size limit"),
+
+ /**
+ * invalid url
+ */
+ CODE_82025(82025, "invalid url"),
+
+ /**
+ * service disabled
+ */
+ CODE_82026(82026, "service disabled"),
+
+ /**
+ * invalid miniprogram appid
+ */
+ CODE_82027(82027, "invalid miniprogram appid"),
+
+ /**
+ * wx_cs_code should not be empty.
+ */
+ CODE_82100(82100, "wx_cs_code should not be empty."),
+
+ /**
+ * wx_cs_code is invalid.
+ */
+ CODE_82101(82101, "wx_cs_code is invalid."),
+
+ /**
+ * wx_cs_code is expire.
+ */
+ CODE_82102(82102, "wx_cs_code is expire."),
+
+ /**
+ * user_ip should not be empty.
+ */
+ CODE_82103(82103, "user_ip should not be empty."),
+
+ /**
+ * 公众平台账号与服务id不匹配
+ */
+ CODE_82200(82200, "公众平台账号与服务id不匹配"),
+
+ /**
+ * 该停车场已存在,请勿重复添加
+ */
+ CODE_82201(82201, "该停车场已存在,请勿重复添加"),
+
+ /**
+ * 该停车场信息不存在,请先导入
+ */
+ CODE_82202(82202, "该停车场信息不存在,请先导入"),
+
+ /**
+ * 停车场价格格式不正确
+ */
+ CODE_82203(82203, "停车场价格格式不正确"),
+
+ /**
+ * appid与code不匹配
+ */
+ CODE_82204(82204, "appid与code不匹配"),
+
+ /**
+ * wx_park_code字段为空
+ */
+ CODE_82205(82205, "wx_park_code字段为空"),
+
+ /**
+ * wx_park_code无效或已过期
+ */
+ CODE_82206(82206, "wx_park_code无效或已过期"),
+
+ /**
+ * 电话字段为空
+ */
+ CODE_82207(82207, "电话字段为空"),
+
+ /**
+ * 关闭时间格式不正确
+ */
+ CODE_82208(82208, "关闭时间格式不正确"),
+
+ /**
+ * 该appid不支持开通城市服务插件
+ */
+ CODE_82300(82300, "该appid不支持开通城市服务插件"),
+
+ /**
+ * 添加插件失败
+ */
+ CODE_82301(82301, "添加插件失败"),
+
+ /**
+ * 未添加城市服务插件
+ */
+ CODE_82302(82302, "未添加城市服务插件"),
+
+ /**
+ * fileid无效
+ */
+ CODE_82303(82303, "fileid无效"),
+
+ /**
+ * 临时文件过期
+ */
+ CODE_82304(82304, "临时文件过期"),
+
+ /**
+ * there is some param not exist
+ */
+ CODE_83000(83000, "there is some param not exist"),
+
+ /**
+ * system error
+ */
+ CODE_83001(83001, "system error"),
+
+ /**
+ * create_url_sence_failed
+ */
+ CODE_83002(83002, "create_url_sence_failed"),
+
+ /**
+ * appid maybe error or retry
+ */
+ CODE_83003(83003, "appid maybe error or retry"),
+
+ /**
+ * create appid auth failed or retry
+ */
+ CODE_83004(83004, "create appid auth failed or retry"),
+
+ /**
+ * wxwebencrytoken errro
+ */
+ CODE_83005(83005, "wxwebencrytoken errro"),
+
+ /**
+ * wxwebencrytoken expired or no exist
+ */
+ CODE_83006(83006, "wxwebencrytoken expired or no exist"),
+
+ /**
+ * wxwebencrytoken expired
+ */
+ CODE_83007(83007, "wxwebencrytoken expired"),
+
+ /**
+ * wxwebencrytoken no auth
+ */
+ CODE_83008(83008, "wxwebencrytoken no auth"),
+
+ /**
+ * wxwebencrytoken not the mate with openid
+ */
+ CODE_83009(83009, "wxwebencrytoken not the mate with openid"),
+
+ /**
+ * no exist service
+ */
+ CODE_83200(83200, "no exist service"),
+
+ /**
+ * uin has not the service
+ */
+ CODE_83201(83201, "uin has not the service"),
+
+ /**
+ * params is not json or not json array
+ */
+ CODE_83202(83202, "params is not json or not json array"),
+
+ /**
+ * params num exceed 10
+ */
+ CODE_83203(83203, "params num exceed 10"),
+
+ /**
+ * object has not key
+ */
+ CODE_83204(83204, "object has not key"),
+
+ /**
+ * key is not string
+ */
+ CODE_83205(83205, "key is not string"),
+
+ /**
+ * object has not value
+ */
+ CODE_83206(83206, "object has not value"),
+
+ /**
+ * value is not string
+ */
+ CODE_83207(83207, "value is not string"),
+
+ /**
+ * key or value is empty
+ */
+ CODE_83208(83208, "key or value is empty"),
+
+ /**
+ * key exist repeated
+ */
+ CODE_83209(83209, "key exist repeated"),
+
+ /**
+ * invalid identify id
+ */
+ CODE_84001(84001, "invalid identify id"),
+
+ /**
+ * user data expired
+ */
+ CODE_84002(84002, "user data expired"),
+
+ /**
+ * user data not exist
+ */
+ CODE_84003(84003, "user data not exist"),
+
+ /**
+ * video upload fail!
+ */
+ CODE_84004(84004, "video upload fail!"),
+
+ /**
+ * video download fail! please try again
+ */
+ CODE_84005(84005, "video download fail! please try again"),
+
+ /**
+ * name or id_card_number empty
+ */
+ CODE_84006(84006, "name or id_card_number empty"),
+
+ /**
+ * 微信号不存在或微信号设置为不可搜索 user not exist or user cannot be searched
+ */
+ CODE_85001(85001, "微信号不存在或微信号设置为不可搜索"),
+
+ /**
+ * 小程序绑定的体验者数量达到上限 number of tester reach bind limit
+ */
+ CODE_85002(85002, "小程序绑定的体验者数量达到上限"),
+
+ /**
+ * 微信号绑定的小程序体验者达到上限 user already bind too many weapps
+ */
+ CODE_85003(85003, "微信号绑定的小程序体验者达到上限"),
+
+ /**
+ * 微信号已经绑定 user already bind
+ */
+ CODE_85004(85004, "微信号已经绑定"),
+
+ /**
+ * appid not bind weapp
+ */
+ CODE_85005(85005, "appid not bind weapp"),
+
+ /**
+ * 标签格式错误 tag is in invalid format
+ */
+ CODE_85006(85006, "标签格式错误"),
+
+ /**
+ * 页面路径错误 page is in invalid format
+ */
+ CODE_85007(85007, "页面路径错误"),
+
+ /**
+ * 当前小程序没有已经审核通过的类目,请添加类目成功后重试 category is in invalid format
+ */
+ CODE_85008(85008, "当前小程序没有已经审核通过的类目,请添加类目成功后重试"),
+
+ /**
+ * 已经有正在审核的版本 already submit a version under auditing
+ */
+ CODE_85009(85009, "已经有正在审核的版本"),
+
+ /**
+ * item_list 有项目为空 missing required data
+ */
+ CODE_85010(85010, "item_list 有项目为空"),
+
+ /**
+ * 标题填写错误 title is in invalid format
+ */
+ CODE_85011(85011, "标题填写错误"),
+
+ /**
+ * 无效的审核 id invalid audit id
+ */
+ CODE_85012(85012, "无效的审核 id"),
+
+ /**
+ * 无效的自定义配置 invalid ext_json, parse fail or containing invalid path
+ */
+ CODE_85013(85013, "无效的自定义配置"),
+
+ /**
+ * 无效的模板编号 template not exist
+ */
+ CODE_85014(85014, "无效的模板编号"),
+
+ /**
+ * 该账号不是小程序账号/版本输入错误
+ */
+ CODE_85015(85015, "该账号不是小程序账号/版本输入错误"),
+
+ /**
+ * 版本输入错误
+ */
// CODE_85015(85015, "版本输入错误"),
- /**
- * 域名数量超过限制 ,总数不能超过1000 exceed valid domain count
- */
- CODE_85016(85016, "域名数量超过限制 ,总数不能超过1000"),
-
- /**
- * 没有新增域名,请确认小程序已经添加了域名或该域名是否没有在第三方平台添加 no domain to modify after filtered, please confirm the domain has been set in miniprogram or open
- */
- CODE_85017(85017, "没有新增域名,请确认小程序已经添加了域名或该域名是否没有在第三方平台添加"),
-
- /**
- * 域名没有在第三方平台设置
- */
- CODE_85018(85018, "域名没有在第三方平台设置"),
-
- /**
- * 没有审核版本 no version is under auditing
- */
- CODE_85019(85019, "没有审核版本"),
-
- /**
- * 审核状态未满足发布 status not allowed
- */
- CODE_85020(85020, "审核状态未满足发布"),
-
- /**
- * status not allowed
- */
- CODE_85021(85021, "status not allowed"),
-
- /**
- * invalid action
- */
- CODE_85022(85022, "invalid action"),
-
- /**
- * 审核列表填写的项目数不在 1-5 以内 item size is not in valid range
- */
- CODE_85023(85023, "审核列表填写的项目数不在 1-5 以内"),
-
- /**
- * need complete material
- */
- CODE_85024(85024, "need complete material"),
-
- /**
- * this phone reach bind limit
- */
- CODE_85025(85025, "this phone reach bind limit"),
-
- /**
- * this wechat account reach bind limit
- */
- CODE_85026(85026, "this wechat account reach bind limit"),
-
- /**
- * this idcard reach bind limit
- */
- CODE_85027(85027, "this idcard reach bind limit"),
-
- /**
- * this contractor reach bind limit
- */
- CODE_85028(85028, "this contractor reach bind limit"),
-
- /**
- * nickname has used
- */
- CODE_85029(85029, "nickname has used"),
-
- /**
- * invalid nickname size(4-30)
- */
- CODE_85030(85030, "invalid nickname size(4-30)"),
-
- /**
- * nickname is forbidden
- */
- CODE_85031(85031, "nickname is forbidden"),
-
- /**
- * nickname is complained
- */
- CODE_85032(85032, "nickname is complained"),
-
- /**
- * nickname is illegal
- */
- CODE_85033(85033, "nickname is illegal"),
-
- /**
- * nickname is protected
- */
- CODE_85034(85034, "nickname is protected"),
-
- /**
- * nickname is forbidden for different contractor
- */
- CODE_85035(85035, "nickname is forbidden for different contractor"),
-
- /**
- * introduction is illegal
- */
- CODE_85036(85036, "introduction is illegal"),
-
- /**
- * store has added
- */
- CODE_85038(85038, "store has added"),
-
- /**
- * store has added by others
- */
- CODE_85039(85039, "store has added by others"),
-
- /**
- * store has added by yourseld
- */
- CODE_85040(85040, "store has added by yourseld"),
-
- /**
- * credential has used
- */
- CODE_85041(85041, "credential has used"),
-
- /**
- * nearby reach limit
- */
- CODE_85042(85042, "nearby reach limit"),
-
- /**
- * 模板错误 invalid template, something wrong?
- */
- CODE_85043(85043, "模板错误"),
-
- /**
- * 代码包超过大小限制 package exceed max limit
- */
- CODE_85044(85044, "代码包超过大小限制"),
-
- /**
- * ext_json 有不存在的路径 some path in ext_json not exist
- */
- CODE_85045(85045, "ext_json 有不存在的路径"),
-
- /**
- * tabBar 中缺少 path pagepath missing in tabbar list
- */
- CODE_85046(85046, "tabBar 中缺少 path"),
-
- /**
- * pages 字段为空 pages are empty
- */
- CODE_85047(85047, "pages 字段为空"),
-
- /**
- * ext_json 解析失败 parse ext_json fail
- */
- CODE_85048(85048, "ext_json 解析失败"),
-
- /**
- * reach headimg or introduction quota limit
- */
- CODE_85049(85049, "reach headimg or introduction quota limit"),
-
- /**
- * verifying, don't apply again
- */
- CODE_85050(85050, "verifying, don't apply again"),
-
- /**
- * version_desc或者preview_info超限 data too large
- */
- CODE_85051(85051, "version_desc或者preview_info超限"),
-
- /**
- * app is already released
- */
- CODE_85052(85052, "app is already released"),
-
- /**
- * please apply merchant first
- */
- CODE_85053(85053, "please apply merchant first"),
-
- /**
- * poi_id is null, please upgrade first
- */
- CODE_85054(85054, "poi_id is null, please upgrade first"),
-
- /**
- * map_poi_id is invalid
- */
- CODE_85055(85055, "map_poi_id is invalid"),
-
- /**
- * mediaid is invalid
- */
- CODE_85056(85056, "mediaid is invalid"),
-
- /**
- * invalid widget data format
- */
- CODE_85057(85057, "invalid widget data format"),
-
- /**
- * no valid audit_id exist
- */
- CODE_85058(85058, "no valid audit_id exist"),
-
- /**
- * overseas access deny
- */
- CODE_85059(85059, "overseas access deny"),
-
- /**
- * invalid taskid
- */
- CODE_85060(85060, "invalid taskid"),
-
- /**
- * this phone reach bind limit
- */
- CODE_85061(85061, "this phone reach bind limit"),
-
- /**
- * this phone in black list
- */
- CODE_85062(85062, "this phone in black list"),
-
- /**
- * idcard in black list
- */
- CODE_85063(85063, "idcard in black list"),
-
- /**
- * 找不到模板 template not found
- */
- CODE_85064(85064, "找不到模板"),
-
- /**
- * 模板库已满 template list is full
- */
- CODE_85065(85065, "模板库已满"),
-
- /**
- * 链接错误 illegal prefix
- */
- CODE_85066(85066, "链接错误"),
-
- /**
- * input data error
- */
- CODE_85067(85067, "input data error"),
-
- /**
- * 测试链接不是子链接 test url is not the sub prefix
- */
- CODE_85068(85068, "测试链接不是子链接"),
-
- /**
- * 校验文件失败 check confirm file fail
- */
- CODE_85069(85069, "校验文件失败"),
-
- /**
- * 个人类型小程序无法设置二维码规则 prefix in black list
- */
- CODE_85070(85070, "个人类型小程序无法设置二维码规则"),
-
- /**
- * 已添加该链接,请勿重复添加 prefix added repeated
- */
- CODE_85071(85071, "已添加该链接,请勿重复添加"),
-
- /**
- * 该链接已被占用 prefix owned by other
- */
- CODE_85072(85072, "该链接已被占用"),
-
- /**
- * 二维码规则已满 prefix beyond limit
- */
- CODE_85073(85073, "二维码规则已满"),
-
- /**
- * 小程序未发布, 小程序必须先发布代码才可以发布二维码跳转规则 not published
- */
- CODE_85074(85074, "小程序未发布, 小程序必须先发布代码才可以发布二维码跳转规则"),
-
- /**
- * 个人类型小程序无法设置二维码规则 can not access
- */
- CODE_85075(85075, "个人类型小程序无法设置二维码规则"),
-
- /**
- * 小程序类目信息失效(类目中含有官方下架的类目,请重新选择类目) some category you choose is no longger supported, please choose other category
- */
- CODE_85077(85077, "小程序类目信息失效(类目中含有官方下架的类目,请重新选择类目)"),
-
- /**
- * operator info error
- */
- CODE_85078(85078, "operator info error"),
-
- /**
- * 小程序没有线上版本,不能进行灰度 miniprogram has no online release
- */
- CODE_85079(85079, "小程序没有线上版本,不能进行灰度"),
-
- /**
- * 小程序提交的审核未审核通过 miniprogram commit not approved
- */
- CODE_85080(85080, "小程序提交的审核未审核通过"),
-
- /**
- * 无效的发布比例 invalid gray percentage
- */
- CODE_85081(85081, "无效的发布比例"),
-
- /**
- * 当前的发布比例需要比之前设置的高 gray percentage too low
- */
- CODE_85082(85082, "当前的发布比例需要比之前设置的高"),
-
- /**
- * 搜索标记位被封禁,无法修改 search status is banned
- */
- CODE_85083(85083, "搜索标记位被封禁,无法修改"),
-
- /**
- * 非法的 status 值,只能填 0 或者 1 search status invalid
- */
- CODE_85084(85084, "非法的 status 值,只能填 0 或者 1"),
-
- /**
- * 小程序提审数量已达本月上限,请点击查看 submit audit reach limit pleasetry later
- */
- CODE_85085(85085, "小程序提审数量已达本月上限,请点击查看"),
-
- /**
- * 提交代码审核之前需提前上传代码 must commit before submit audit
- */
- CODE_85086(85086, "提交代码审核之前需提前上传代码"),
-
- /**
- * 小程序已使用 api navigateToMiniProgram,请声明跳转 appid 列表后再次提交 navigatetominiprogram appid list empty
- */
- CODE_85087(85087, "小程序已使用 api navigateToMiniProgram,请声明跳转 appid 列表后再次提交"),
-
- /**
- * no qbase privilege
- */
- CODE_85088(85088, "no qbase privilege"),
-
- /**
- * config not found
- */
- CODE_85089(85089, "config not found"),
-
- /**
- * wait and commit for this exappid later
- */
- CODE_85090(85090, "wait and commit for this exappid later"),
-
- /**
- * 小程序的搜索开关被关闭。请访问设置页面打开开关再重试 search status was turned off
- */
- CODE_85091(85091, "小程序的搜索开关被关闭。请访问设置页面打开开关再重试"),
-
- /**
- * preview_info格式错误 invalid preview_info format
- */
- CODE_85092(85092, "preview_info格式错误"),
-
- /**
- * preview_info 视频或者图片个数超限 invalid preview_info size
- */
- CODE_85093(85093, "preview_info 视频或者图片个数超限"),
-
- /**
- * 需提供审核机制说明信息 need add ugc declare
- */
- CODE_85094(85094, "需提供审核机制说明信息"),
-
- /**
- * 小程序不能发送该运动类型或运动类型不存在
- */
- CODE_85101(85101, "小程序不能发送该运动类型或运动类型不存在"),
-
- /**
- * 数值异常
- */
- CODE_85102(85102, "数值异常"),
-
- /**
- * 不是由第三方代小程序进行调用 should be called only from third party
- */
- CODE_86000(86000, "不是由第三方代小程序进行调用"),
-
- /**
- * 不存在第三方的已经提交的代码 component experience version not exists
- */
- CODE_86001(86001, "不存在第三方的已经提交的代码"),
-
- /**
- * 小程序还未设置昵称、头像、简介。请先设置完后再重新提交 miniprogram have not completed init procedure
- */
- CODE_86002(86002, "小程序还未设置昵称、头像、简介。请先设置完后再重新提交"),
-
- /**
- * component do not has category mall
- */
- CODE_86003(86003, "component do not has category mall"),
-
- /**
- * invalid wechat
- */
- CODE_86004(86004, "invalid wechat"),
-
- /**
- * wechat limit frequency
- */
- CODE_86005(86005, "wechat limit frequency"),
-
- /**
- * has no quota to send group msg
- */
- CODE_86006(86006, "has no quota to send group msg"),
-
- /**
- * 小程序禁止提交
- */
- CODE_86007(86007, "小程序禁止提交"),
-
- /**
- * 服务商被处罚,限制全部代码提审能力
- */
- CODE_86008(86008, "服务商被处罚,限制全部代码提审能力"),
-
- /**
- * 服务商新增小程序代码提审能力被限制
- */
- CODE_86009(86009, "服务商新增小程序代码提审能力被限制"),
-
- /**
- * 服务商迭代小程序代码提审能力被限制
- */
- CODE_86010(86010, "服务商迭代小程序代码提审能力被限制"),
-
- /**
- * 小游戏不能提交 this is game miniprogram, submit audit is forbidden
- */
- CODE_87006(87006, "小游戏不能提交"),
-
- /**
- * session_key is not existd or expired
- */
- CODE_87007(87007, "session_key is not existd or expired"),
-
- /**
- * invalid sig_method
- */
- CODE_87008(87008, "invalid sig_method"),
-
- /**
- * 无效的签名 invalid signature
- */
- CODE_87009(87009, "无效的签名"),
-
- /**
- * invalid buffer size
- */
- CODE_87010(87010, "invalid buffer size"),
-
- /**
- * 现网已经在灰度发布,不能进行版本回退 wxa has a gray release plan, forbid revert release
- */
- CODE_87011(87011, "现网已经在灰度发布,不能进行版本回退"),
-
- /**
- * 该版本不能回退,可能的原因:1:无上一个线上版用于回退 2:此版本为已回退版本,不能回退 3:此版本为回退功能上线之前的版本,不能回退 forbid revert this version release
- */
- CODE_87012(87012, "该版本不能回退,可能的原因:1:无上一个线上版用于回退 2:此版本为已回退版本,不能回退 3:此版本为回退功能上线之前的版本,不能回退"),
-
- /**
- * 撤回次数达到上限(每天5次,每个月 10 次) no quota to undo code
- */
- CODE_87013(87013, "撤回次数达到上限(每天5次,每个月 10 次)"),
-
- /**
- * risky content
- */
- CODE_87014(87014, "risky content"),
-
- /**
- * query timeout, try a content with less size
- */
- CODE_87015(87015, "query timeout, try a content with less size"),
-
- /**
- * some key-value in list meet length exceed
- */
- CODE_87016(87016, "some key-value in list meet length exceed"),
-
- /**
- * user storage size exceed, delete some keys and try again
- */
- CODE_87017(87017, "user storage size exceed, delete some keys and try again"),
-
- /**
- * user has stored too much keys. delete some keys and try again
- */
- CODE_87018(87018, "user has stored too much keys. delete some keys and try again"),
-
- /**
- * some keys in list meet length exceed
- */
- CODE_87019(87019, "some keys in list meet length exceed"),
-
- /**
- * need friend
- */
- CODE_87080(87080, "need friend"),
-
- /**
- * invalid openid
- */
- CODE_87081(87081, "invalid openid"),
-
- /**
- * invalid key
- */
- CODE_87082(87082, "invalid key"),
-
- /**
- * invalid operation
- */
- CODE_87083(87083, "invalid operation"),
-
- /**
- * invalid opnum
- */
- CODE_87084(87084, "invalid opnum"),
-
- /**
- * check fail
- */
- CODE_87085(87085, "check fail"),
-
- /**
- * without comment privilege
- */
- CODE_88000(88000, "without comment privilege"),
-
- /**
- * msg_data is not exists
- */
- CODE_88001(88001, "msg_data is not exists"),
-
- /**
- * the article is limit for safety
- */
- CODE_88002(88002, "the article is limit for safety"),
-
- /**
- * elected comment upper limit
- */
- CODE_88003(88003, "elected comment upper limit"),
-
- /**
- * comment was deleted by user
- */
- CODE_88004(88004, "comment was deleted by user"),
-
- /**
- * already reply
- */
- CODE_88005(88005, "already reply"),
-
- /**
- * reply content beyond max len or content len is zero
- */
- CODE_88007(88007, "reply content beyond max len or content len is zero"),
-
- /**
- * comment is not exists
- */
- CODE_88008(88008, "comment is not exists"),
-
- /**
- * reply is not exists
- */
- CODE_88009(88009, "reply is not exists"),
-
- /**
- * count range error. cout <= 0 or count > 50
- */
- CODE_88010(88010, "count range error. cout <= 0 or count > 50"),
-
- /**
- * the article is limit for safety
- */
- CODE_88011(88011, "the article is limit for safety"),
-
- /**
- * account has bound open,该公众号/小程序已经绑定了开放平台帐号 account has bound open
- */
- CODE_89000(89000, "account has bound open,该公众号/小程序已经绑定了开放平台帐号"),
-
- /**
- * not same contractor,Authorizer 与开放平台帐号主体不相同 not same contractor
- */
- CODE_89001(89001, "not same contractor,Authorizer 与开放平台帐号主体不相同"),
-
- /**
- * open not exists,该公众号/小程序未绑定微信开放平台帐号。 open not exists
- */
- CODE_89002(89002, "open not exists,该公众号/小程序未绑定微信开放平台帐号。"),
-
- /**
- * 该开放平台帐号并非通过 api 创建,不允许操作 open is not created by api
- */
- CODE_89003(89003, "该开放平台帐号并非通过 api 创建,不允许操作"),
-
- /**
- * 该开放平台帐号所绑定的公众号/小程序已达上限(100 个)
- */
- CODE_89004(89004, "该开放平台帐号所绑定的公众号/小程序已达上限(100 个)"),
-
- /**
- * without add video ability, the ability was banned
- */
- CODE_89005(89005, "without add video ability, the ability was banned"),
-
- /**
- * without upload video ability, the ability was banned
- */
- CODE_89006(89006, "without upload video ability, the ability was banned"),
-
- /**
- * wxa quota limit
- */
- CODE_89007(89007, "wxa quota limit"),
-
- /**
- * overseas account can not link
- */
- CODE_89008(89008, "overseas account can not link"),
-
- /**
- * wxa reach link limit
- */
- CODE_89009(89009, "wxa reach link limit"),
-
- /**
- * link message has sent
- */
- CODE_89010(89010, "link message has sent"),
-
- /**
- * can not unlink nearby wxa
- */
- CODE_89011(89011, "can not unlink nearby wxa"),
-
- /**
- * can not unlink store or mall
- */
- CODE_89012(89012, "can not unlink store or mall"),
-
- /**
- * wxa is banned
- */
- CODE_89013(89013, "wxa is banned"),
-
- /**
- * support version error
- */
- CODE_89014(89014, "support version error"),
-
- /**
- * has linked wxa
- */
- CODE_89015(89015, "has linked wxa"),
-
- /**
- * reach same realname quota
- */
- CODE_89016(89016, "reach same realname quota"),
-
- /**
- * reach different realname quota
- */
- CODE_89017(89017, "reach different realname quota"),
-
- /**
- * unlink message has sent
- */
- CODE_89018(89018, "unlink message has sent"),
-
- /**
- * 业务域名无更改,无需重复设置 webview domain not change
- */
- CODE_89019(89019, "业务域名无更改,无需重复设置"),
-
- /**
- * 尚未设置小程序业务域名,请先在第三方平台中设置小程序业务域名后在调用本接口 open's webview domain is null! Need to set open's webview domain first!
- */
- CODE_89020(89020, "尚未设置小程序业务域名,请先在第三方平台中设置小程序业务域名后在调用本接口"),
-
- /**
- * 请求保存的域名不是第三方平台中已设置的小程序业务域名或子域名 request domain is not open's webview domain!
- */
- CODE_89021(89021, "请求保存的域名不是第三方平台中已设置的小程序业务域名或子域名"),
-
- /**
- * delete domain is not exist!
- */
- CODE_89022(89022, "delete domain is not exist!"),
-
- /**
- * 业务域名数量超过限制,最多可以添加100个业务域名 webview domain exceed limit
- */
- CODE_89029(89029, "业务域名数量超过限制,最多可以添加100个业务域名"),
-
- /**
- * operation reach month limit
- */
- CODE_89030(89030, "operation reach month limit"),
-
- /**
- * user bind reach limit
- */
- CODE_89031(89031, "user bind reach limit"),
-
- /**
- * weapp bind members reach limit
- */
- CODE_89032(89032, "weapp bind members reach limit"),
-
- /**
- * empty wx or openid
- */
- CODE_89033(89033, "empty wx or openid"),
-
- /**
- * userstr is invalid
- */
- CODE_89034(89034, "userstr is invalid"),
-
- /**
- * linking from mp
- */
- CODE_89035(89035, "linking from mp"),
-
- /**
- * 个人小程序不支持调用 setwebviewdomain 接口 not support single
- */
- CODE_89231(89231, "个人小程序不支持调用 setwebviewdomain 接口"),
-
- /**
- * hit black contractor
- */
- CODE_89235(89235, "hit black contractor"),
-
- /**
- * 该插件不能申请 this plugin can not apply
- */
- CODE_89236(89236, "该插件不能申请"),
-
- /**
- * 已经添加该插件 plugin has send apply message or already bind
- */
- CODE_89237(89237, "已经添加该插件"),
-
- /**
- * 申请或使用的插件已经达到上限 plugin count reach limit
- */
- CODE_89238(89238, "申请或使用的插件已经达到上限"),
-
- /**
- * 该插件不存在 plugin no exist
- */
- CODE_89239(89239, "该插件不存在"),
-
- /**
- * only applying status can be agreed or refused
- */
- CODE_89240(89240, "only applying status can be agreed or refused"),
-
- /**
- * only refused status can be deleted, please refused first
- */
- CODE_89241(89241, "only refused status can be deleted, please refused first"),
-
- /**
- * appid is no in the apply list, make sure appid is right
- */
- CODE_89242(89242, "appid is no in the apply list, make sure appid is right"),
-
- /**
- * 该申请为“待确认”状态,不可删除 can not delete apply request in 24 hours
- */
- CODE_89243(89243, "该申请为“待确认”状态,不可删除"),
-
- /**
- * 不存在该插件 appid plugin appid is no in the plugin list, make sure plugin appid is right
- */
- CODE_89244(89244, "不存在该插件 appid"),
-
- /**
- * mini program forbidden to link
- */
- CODE_89245(89245, "mini program forbidden to link"),
-
- /**
- * plugins with special category are used only by specific apps
- */
- CODE_89246(89246, "plugins with special category are used only by specific apps"),
-
- /**
- * 系统内部错误 inner error, retry after some while
- */
- CODE_89247(89247, "系统内部错误"),
-
- /**
- * invalid code type
- */
- CODE_89248(89248, "invalid code type"),
-
- /**
- * task running
- */
- CODE_89249(89249, "task running"),
-
- /**
- * 内部错误 inner error, retry after some while
- */
- CODE_89250(89250, "内部错误"),
-
- /**
- * 模板消息已下发,待法人人脸核身校验 legal person checking
- */
- CODE_89251(89251, "模板消息已下发,待法人人脸核身校验"),
-
- /**
- * 法人&企业信息一致性校验中 front checking
- */
- CODE_89253(89253, "法人&企业信息一致性校验中"),
-
- /**
- * lack of some component rights
- */
- CODE_89254(89254, "lack of some component rights"),
-
- /**
- * code参数无效,请检查code长度以及内容是否正确;注意code_type的值不同需要传的code长度不一样 enterprise code invalid
- */
- CODE_89255(89255, "code参数无效,请检查code长度以及内容是否正确;注意code_type的值不同需要传的code长度不一样"),
-
- /**
- * token 信息有误 no component info
- */
- CODE_89256(89256, "token 信息有误"),
-
- /**
- * 该插件版本不支持快速更新 no such version
- */
- CODE_89257(89257, "该插件版本不支持快速更新"),
-
- /**
- * 当前小程序帐号存在灰度发布中的版本,不可操作快速更新 code is gray online
- */
- CODE_89258(89258, "当前小程序帐号存在灰度发布中的版本,不可操作快速更新"),
-
- /**
- * zhibo plugin is not allow to delete
- */
- CODE_89259(89259, "zhibo plugin is not allow to delete"),
-
- /**
- * 订单无效 invalid trade
- */
- CODE_89300(89300, "订单无效"),
-
- /**
- * 系统不稳定,请稍后再试,如多次失败请通过社区反馈
- */
- CODE_89401(89401, "系统不稳定,请稍后再试,如多次失败请通过社区反馈"),
-
- /**
- * 该小程序不在待审核队列,请检查是否已提交审核或已审完
- */
- CODE_89402(89402, "该小程序不在待审核队列,请检查是否已提交审核或已审完"),
-
- /**
- * 本单属于平台不支持加急种类,请等待正常审核流程
- */
- CODE_89403(89403, "本单属于平台不支持加急种类,请等待正常审核流程"),
-
- /**
- * 本单已加速成功,请勿重复提交
- */
- CODE_89404(89404, "本单已加速成功,请勿重复提交"),
-
- /**
- * 本月加急额度已用完,请提高提审质量以获取更多额度
- */
- CODE_89405(89405, "本月加急额度已用完,请提高提审质量以获取更多额度"),
-
- /**
- * 公众号有未处理的确认请求,请稍候重试
- */
- CODE_89501(89501, "公众号有未处理的确认请求,请稍候重试"),
-
- /**
- * 请耐心等待管理员确认
- */
- CODE_89502(89502, "请耐心等待管理员确认"),
-
- /**
- * 此次调用需要管理员确认,请耐心等候
- */
- CODE_89503(89503, "此次调用需要管理员确认,请耐心等候"),
-
- /**
- * 正在等管理员确认,请耐心等待
- */
- CODE_89504(89504, "正在等管理员确认,请耐心等待"),
-
- /**
- * 正在等管理员确认,请稍候重试
- */
- CODE_89505(89505, "正在等管理员确认,请稍候重试"),
-
- /**
- * 该IP调用求请求已被公众号管理员拒绝,请24小时后再试,建议调用前与管理员沟通确认
- */
- CODE_89506(89506, "该IP调用求请求已被公众号管理员拒绝,请24小时后再试,建议调用前与管理员沟通确认"),
-
- /**
- * 该IP调用求请求已被公众号管理员拒绝,请1小时后再试,建议调用前与管理员沟通确认
- */
- CODE_89507(89507, "该IP调用求请求已被公众号管理员拒绝,请1小时后再试,建议调用前与管理员沟通确认"),
-
- /**
- * invalid order id
- */
- CODE_90001(90001, "invalid order id"),
-
- /**
- * invalid busi id
- */
- CODE_90002(90002, "invalid busi id"),
-
- /**
- * invalid bill date
- */
- CODE_90003(90003, "invalid bill date"),
-
- /**
- * invalid bill type
- */
- CODE_90004(90004, "invalid bill type"),
-
- /**
- * invalid platform
- */
- CODE_90005(90005, "invalid platform"),
-
- /**
- * bill not exists
- */
- CODE_90006(90006, "bill not exists"),
-
- /**
- * invalid openid
- */
- CODE_90007(90007, "invalid openid"),
-
- /**
- * mp_sig error
- */
- CODE_90009(90009, "mp_sig error"),
-
- /**
- * no session
- */
- CODE_90010(90010, "no session"),
-
- /**
- * sig error
- */
- CODE_90011(90011, "sig error"),
-
- /**
- * order exist
- */
- CODE_90012(90012, "order exist"),
-
- /**
- * balance not enough
- */
- CODE_90013(90013, "balance not enough"),
-
- /**
- * order has been confirmed
- */
- CODE_90014(90014, "order has been confirmed"),
-
- /**
- * order has been canceled
- */
- CODE_90015(90015, "order has been canceled"),
-
- /**
- * order is being processed
- */
- CODE_90016(90016, "order is being processed"),
-
- /**
- * no privilege
- */
- CODE_90017(90017, "no privilege"),
-
- /**
- * invalid parameter
- */
- CODE_90018(90018, "invalid parameter"),
-
- /**
- * 不是公众号快速创建的小程序 not fast register
- */
- CODE_91001(91001, "不是公众号快速创建的小程序"),
-
- /**
- * 小程序发布后不可改名 has published
- */
- CODE_91002(91002, "小程序发布后不可改名"),
-
- /**
- * 改名状态不合法 invalid change stat
- */
- CODE_91003(91003, "改名状态不合法"),
-
- /**
- * 昵称不合法 invalid nickname
- */
- CODE_91004(91004, "昵称不合法"),
-
- /**
- * 昵称 15 天主体保护 nickname protected
- */
- CODE_91005(91005, "昵称 15 天主体保护"),
-
- /**
- * 昵称命中微信号 nickname used by username
- */
- CODE_91006(91006, "昵称命中微信号"),
-
- /**
- * 昵称已被占用 nickname used
- */
- CODE_91007(91007, "昵称已被占用"),
-
- /**
- * 昵称命中 7 天侵权保护期 nickname protected
- */
- CODE_91008(91008, "昵称命中 7 天侵权保护期"),
-
- /**
- * 需要提交材料 nickname need proof
- */
- CODE_91009(91009, "需要提交材料"),
-
- /**
- * 其他错误
- */
- CODE_91010(91010, "其他错误"),
-
- /**
- * 查不到昵称修改审核单信息
- */
- CODE_91011(91011, "查不到昵称修改审核单信息"),
-
- /**
- * 其它错误
- */
- CODE_91012(91012, "其它错误"),
-
- /**
- * 占用名字过多 lock name too more
- */
- CODE_91013(91013, "占用名字过多"),
-
- /**
- * +号规则 同一类型关联名主体不一致 diff master plus
- */
- CODE_91014(91014, "+号规则 同一类型关联名主体不一致"),
-
- /**
- * 原始名不同类型主体不一致 diff master
- */
- CODE_91015(91015, "原始名不同类型主体不一致"),
-
- /**
- * 名称占用者 ≥2 name more owner
- */
- CODE_91016(91016, "名称占用者 ≥2"),
-
- /**
- * +号规则 不同类型关联名主体不一致 other diff master plus
- */
- CODE_91017(91017, "+号规则 不同类型关联名主体不一致"),
-
- /**
- * 组织类型小程序发布后,侵权被清空昵称,需走认证改名
- */
- CODE_91018(91018, "组织类型小程序发布后,侵权被清空昵称,需走认证改名"),
-
- /**
- * 小程序正在审核中
- */
- CODE_91019(91019, "小程序正在审核中"),
-
- /**
- * 该经营资质已添加,请勿重复添加
- */
- CODE_92000(92000, "该经营资质已添加,请勿重复添加"),
-
- /**
- * 附近地点添加数量达到上线,无法继续添加
- */
- CODE_92002(92002, "附近地点添加数量达到上线,无法继续添加"),
-
- /**
- * 地点已被其它小程序占用
- */
- CODE_92003(92003, "地点已被其它小程序占用"),
-
- /**
- * 附近功能被封禁
- */
- CODE_92004(92004, "附近功能被封禁"),
-
- /**
- * 地点正在审核中
- */
- CODE_92005(92005, "地点正在审核中"),
-
- /**
- * 地点正在展示小程序
- */
- CODE_92006(92006, "地点正在展示小程序"),
-
- /**
- * 地点审核失败
- */
- CODE_92007(92007, "地点审核失败"),
-
- /**
- * 小程序未展示在该地点
- */
- CODE_92008(92008, "小程序未展示在该地点"),
-
- /**
- * 小程序未上架或不可见
- */
- CODE_93009(93009, "小程序未上架或不可见"),
-
- /**
- * 地点不存在
- */
- CODE_93010(93010, "地点不存在"),
-
- /**
- * 个人类型小程序不可用
- */
- CODE_93011(93011, "个人类型小程序不可用"),
-
- /**
- * 非普通类型小程序(门店小程序、小店小程序等)不可用
- */
- CODE_93012(93012, "非普通类型小程序(门店小程序、小店小程序等)不可用"),
-
- /**
- * 从腾讯地图获取地址详细信息失败
- */
- CODE_93013(93013, "从腾讯地图获取地址详细信息失败"),
-
- /**
- * 同一资质证件号重复添加
- */
- CODE_93014(93014, "同一资质证件号重复添加"),
-
- /**
- * 附近类目审核中
- */
- CODE_93015(93015, "附近类目审核中"),
-
- /**
- * 服务标签个数超限制(官方最多5个,自定义最多4个)
- */
- CODE_93016(93016, "服务标签个数超限制(官方最多5个,自定义最多4个)"),
-
- /**
- * 服务标签或者客服的名字不符合要求
- */
- CODE_93017(93017, "服务标签或者客服的名字不符合要求"),
-
- /**
- * 服务能力中填写的小程序appid不是同主体小程序
- */
- CODE_93018(93018, "服务能力中填写的小程序appid不是同主体小程序"),
-
- /**
- * 申请类目之后才能添加附近地点
- */
- CODE_93019(93019, "申请类目之后才能添加附近地点"),
-
- /**
- * qualification_list无效
- */
- CODE_93020(93020, "qualification_list无效"),
-
- /**
- * company_name字段为空
- */
- CODE_93021(93021, "company_name字段为空"),
-
- /**
- * credential字段为空
- */
- CODE_93022(93022, "credential字段为空"),
-
- /**
- * address字段为空
- */
- CODE_93023(93023, "address字段为空"),
-
- /**
- * qualification_list字段为空
- */
- CODE_93024(93024, "qualification_list字段为空"),
-
- /**
- * 服务appid对应的path不存在
- */
- CODE_93025(93025, "服务appid对应的path不存在"),
-
- /**
- * missing cert_serialno
- */
- CODE_94001(94001, "missing cert_serialno"),
-
- /**
- * use not register wechat pay
- */
- CODE_94002(94002, "use not register wechat pay"),
-
- /**
- * invalid sign
- */
- CODE_94003(94003, "invalid sign"),
-
- /**
- * user do not has real name info
- */
- CODE_94004(94004, "user do not has real name info"),
-
- /**
- * invalid user token
- */
- CODE_94005(94005, "invalid user token"),
-
- /**
- * appid unauthorized
- */
- CODE_94006(94006, "appid unauthorized"),
-
- /**
- * appid unbind mchid
- */
- CODE_94007(94007, "appid unbind mchid"),
-
- /**
- * invalid timestamp
- */
- CODE_94008(94008, "invalid timestamp"),
-
- /**
- * invalid cert_serialno, cert_serialno's size should be 40
- */
- CODE_94009(94009, "invalid cert_serialno, cert_serialno's size should be 40"),
-
- /**
- * invalid mch_id
- */
- CODE_94010(94010, "invalid mch_id"),
-
- /**
- * timestamp expired
- */
- CODE_94011(94011, "timestamp expired"),
-
- /**
- * appid和商户号的绑定关系不存在
- */
- CODE_94012(94012, "appid和商户号的绑定关系不存在"),
-
- /**
- * wxcode decode fail
- */
- CODE_95001(95001, "wxcode decode fail"),
-
- /**
- * wxcode recognize unautuorized
- */
- CODE_95002(95002, "wxcode recognize unautuorized"),
-
- /**
- * get product by page args invalid
- */
- CODE_95101(95101, "get product by page args invalid"),
-
- /**
- * get product materials by cond args invalid
- */
- CODE_95102(95102, "get product materials by cond args invalid"),
-
- /**
- * material id list size out of limit
- */
- CODE_95103(95103, "material id list size out of limit"),
-
- /**
- * import product frequence out of limit
- */
- CODE_95104(95104, "import product frequence out of limit"),
-
- /**
- * mp is importing products, api is rejected to import
- */
- CODE_95105(95105, "mp is importing products, api is rejected to import"),
-
- /**
- * api is rejected to import, need to set commission ratio on mp first
- */
- CODE_95106(95106, "api is rejected to import, need to set commission ratio on mp first"),
-
- /**
- * invalid image url
- */
- CODE_101000(101000, "无效图片链接"),
-
- /**
- * certificate not found
- */
- CODE_101001(101001, "未找到证书"),
-
- /**
- * not enough market quota
- */
- CODE_101002(101002, "not enough market quota"),
-
- /**
- * 入参错误
- */
- CODE_200002(200002, "入参错误"),
-
- /**
- * 此账号已被封禁,无法操作
- */
- CODE_200011(200011, "此账号已被封禁,无法操作"),
-
- /**
- * 个人模板数已达上限,上限25个
- */
- CODE_200012(200012, "个人模板数已达上限,上限25个"),
-
- /**
- * 此模板已被封禁,无法选用
- */
- CODE_200013(200013, "此模板已被封禁,无法选用"),
-
- /**
- * 模板 tid 参数错误
- */
- CODE_200014(200014, "模板 tid 参数错误"),
-
- /**
- * start 参数错误
- */
- CODE_200016(200016, "start 参数错误"),
-
- /**
- * limit 参数错误
- */
- CODE_200017(200017, "limit 参数错误"),
-
- /**
- * 类目 ids 缺失
- */
- CODE_200018(200018, "类目 ids 缺失"),
-
- /**
- * 类目 ids 不合法
- */
- CODE_200019(200019, "类目 ids 不合法"),
-
- /**
- * 关键词列表 kidList 参数错误
- */
- CODE_200020(200020, "关键词列表 kidList 参数错误"),
-
- /**
- * 场景描述 sceneDesc 参数错误
- */
- CODE_200021(200021, "场景描述 sceneDesc 参数错误"),
-
- /**
- * 禁止创建/更新商品(如商品创建功能被封禁) 或 禁止编辑&更新房间
- */
- CODE_300001(300001, "禁止创建/更新商品(如商品创建功能被封禁) 或 禁止编辑&更新房间"),
-
- /**
- * 名称长度不符合规则
- */
- CODE_300002(300002, "名称长度不符合规则"),
-
- /**
- * 价格输入不合规(如现价比原价大、传入价格非数字等)
- */
- CODE_300003(300003, "价格输入不合规(如现价比原价大、传入价格非数字等)"),
-
- /**
- * 商品名称存在违规违法内容
- */
- CODE_300004(300004, "商品名称存在违规违法内容"),
-
- /**
- * 商品图片存在违规违法内容
- */
- CODE_300005(300005, "商品图片存在违规违法内容"),
-
- /**
- * 图片上传失败(如mediaID过期)
- */
- CODE_300006(300006, "图片上传失败(如mediaID过期)"),
-
- /**
- * 线上小程序版本不存在该链接
- */
- CODE_300007(300007, "线上小程序版本不存在该链接"),
-
- /**
- * 添加商品失败
- */
- CODE_300008(300008, "添加商品失败"),
-
- /**
- * 商品审核撤回失败
- */
- CODE_300009(300009, "商品审核撤回失败"),
-
- /**
- * 商品审核状态不对(如商品审核中)
- */
- CODE_300010(300010, "商品审核状态不对(如商品审核中)"),
-
- /**
- * 操作非法(API不允许操作非API创建的商品)
- */
- CODE_300011(300011, "操作非法(API不允许操作非API创建的商品)"),
-
- /**
- * 没有提审额度(每天500次提审额度)
- */
- CODE_300012(300012, "没有提审额度(每天500次提审额度)"),
-
- /**
- * 提审失败
- */
- CODE_300013(300013, "提审失败"),
-
- /**
- * 审核中,无法删除(非零代表失败)
- */
- CODE_300014(300014, "审核中,无法删除(非零代表失败)"),
-
- /**
- * 商品未提审
- */
- CODE_300017(300017, "商品未提审"),
-
- /**
- * 商品添加成功,审核失败
- */
- CODE_300021(300021, "商品添加成功,审核失败"),
-
- /**
- * 此房间号不存在
- */
- CODE_300022(300022, "此房间号不存在"),
-
- /**
- * 房间状态 拦截(当前房间状态不允许此操作)
- */
- CODE_300023(300023, "房间状态 拦截(当前房间状态不允许此操作)"),
-
- /**
- * 商品不存在
- */
- CODE_300024(300024, "商品不存在"),
-
- /**
- * 商品审核未通过
- */
- CODE_300025(300025, "商品审核未通过"),
-
- /**
- * 房间商品数量已经满额
- */
- CODE_300026(300026, "房间商品数量已经满额"),
-
- /**
- * 导入商品失败
- */
- CODE_300027(300027, "导入商品失败"),
-
- /**
- * 房间名称违规
- */
- CODE_300028(300028, "房间名称违规"),
-
- /**
- * 主播昵称违规
- */
- CODE_300029(300029, "主播昵称违规"),
-
- /**
- * 主播微信号不合法
- */
- CODE_300030(300030, "主播微信号不合法"),
-
- /**
- * 直播间封面图不合规
- */
- CODE_300031(300031, "直播间封面图不合规"),
-
- /**
- * 直播间分享图违规
- */
- CODE_300032(300032, "直播间分享图违规"),
-
- /**
- * 添加商品超过直播间上限
- */
- CODE_300033(300033, "添加商品超过直播间上限"),
-
- /**
- * 主播微信昵称长度不符合要求
- */
- CODE_300034(300034, "主播微信昵称长度不符合要求"),
-
- /**
- * 主播微信号不存在
- */
- CODE_300035(300035, "主播微信号不存在"),
-
- /**
- * 主播微信号未实名认证
- */
- CODE_300036(300036, "主播微信号未实名认证"),
-
- /**
- * invalid file name
- */
- CODE_600001(600001, "invalid file name"),
-
- /**
- * no permission to upload file
- */
- CODE_600002(600002, "no permission to upload file"),
-
- /**
- * invalid size of source
- */
- CODE_600003(600003, "invalid size of source"),
-
- /**
- * 票据已存在
- */
- CODE_928000(928000, "票据已存在"),
-
- /**
- * 票据不存在
- */
- CODE_928001(928001, "票据不存在"),
-
- /**
- * sysem error
- */
- CODE_930555(930555, "sysem error"),
-
- /**
- * delivery timeout
- */
- CODE_930556(930556, "delivery timeout"),
-
- /**
- * delivery system error
- */
- CODE_930557(930557, "delivery system error"),
-
- /**
- * delivery logic error
- */
- CODE_930558(930558, "delivery logic error"),
-
- /**
- * 沙盒环境openid无效 invaild openid
- */
- CODE_930559(930559, "沙盒环境openid无效"),
-
- /**
- * shopid need bind first
- */
- CODE_930560(930560, "shopid need bind first"),
-
- /**
- * 参数错误 args error
- */
- CODE_930561(930561, "参数错误"),
-
- /**
- * order already exists
- */
- CODE_930562(930562, "order already exists"),
-
- /**
- * 订单不存在 order not exists
- */
- CODE_930563(930563, "订单不存在"),
-
- /**
- * 沙盒环境调用无配额 quota run out, try next day
- */
- CODE_930564(930564, "沙盒环境调用无配额"),
-
- /**
- * order finished
- */
- CODE_930565(930565, "order finished"),
-
- /**
- * not support, plz auth at mp.weixin.qq.com
- */
- CODE_930566(930566, "not support, plz auth at mp.weixin.qq.com"),
-
- /**
- * shop arg error
- */
- CODE_930567(930567, "shop arg error"),
-
- /**
- * 不支持个人类型小程序 not personal account
- */
- CODE_930568(930568, "不支持个人类型小程序"),
-
- /**
- * 已经开通不需要再开通 already open
- */
- CODE_930569(930569, "已经开通不需要再开通"),
-
- /**
- * cargo_first_class or cargo_second_class invalid
- */
- CODE_930570(930570, "cargo_first_class or cargo_second_class invalid"),
-
- /**
- * 该商户没有内测权限,请先申请权限: https://wj.qq.com/s2/7243532/fcfb/
- */
- CODE_930571(930571, "该商户没有内测权限,请先申请权限: https://wj.qq.com/s2/7243532/fcfb/"),
-
- /**
- * fee already set
- */
- CODE_931010(931010, "fee already set"),
-
- /**
- * unbind download url
- */
- CODE_6000100(6000100, "unbind download url"),
-
- /**
- * no response data
- */
- CODE_6000101(6000101, "no response data"),
-
- /**
- * response data too big
- */
- CODE_6000102(6000102, "response data too big"),
-
- /**
- * POST 数据参数不合法
- */
- CODE_9001001(9001001, "POST 数据参数不合法"),
-
- /**
- * 远端服务不可用
- */
- CODE_9001002(9001002, "远端服务不可用"),
-
- /**
- * Ticket 不合法
- */
- CODE_9001003(9001003, "Ticket 不合法"),
-
- /**
- * 获取摇周边用户信息失败
- */
- CODE_9001004(9001004, "获取摇周边用户信息失败"),
-
- /**
- * 获取商户信息失败
- */
- CODE_9001005(9001005, "获取商户信息失败"),
-
- /**
- * 获取 OpenID 失败
- */
- CODE_9001006(9001006, "获取 OpenID 失败"),
-
- /**
- * 上传文件缺失
- */
- CODE_9001007(9001007, "上传文件缺失"),
-
- /**
- * 上传素材的文件类型不合法
- */
- CODE_9001008(9001008, "上传素材的文件类型不合法"),
-
- /**
- * 上传素材的文件尺寸不合法
- */
- CODE_9001009(9001009, "上传素材的文件尺寸不合法"),
-
- /**
- * 上传失败
- */
- CODE_9001010(9001010, "上传失败"),
-
- /**
- * 帐号不合法
- */
- CODE_9001020(9001020, "帐号不合法"),
-
- /**
- * 已有设备激活率低于 50% ,不能新增设备
- */
- CODE_9001021(9001021, "已有设备激活率低于 50% ,不能新增设备"),
-
- /**
- * 设备申请数不合法,必须为大于 0 的数字
- */
- CODE_9001022(9001022, "设备申请数不合法,必须为大于 0 的数字"),
-
- /**
- * 已存在审核中的设备 ID 申请
- */
- CODE_9001023(9001023, "已存在审核中的设备 ID 申请"),
-
- /**
- * 一次查询设备 ID 数量不能超过 50
- */
- CODE_9001024(9001024, "一次查询设备 ID 数量不能超过 50"),
-
- /**
- * 设备 ID 不合法
- */
- CODE_9001025(9001025, "设备 ID 不合法"),
-
- /**
- * 页面 ID 不合法
- */
- CODE_9001026(9001026, "页面 ID 不合法"),
-
- /**
- * 页面参数不合法
- */
- CODE_9001027(9001027, "页面参数不合法"),
-
- /**
- * 一次删除页面 ID 数量不能超过 10
- */
- CODE_9001028(9001028, "一次删除页面 ID 数量不能超过 10"),
-
- /**
- * 页面已应用在设备中,请先解除应用关系再删除
- */
- CODE_9001029(9001029, "页面已应用在设备中,请先解除应用关系再删除"),
-
- /**
- * 一次查询页面 ID 数量不能超过 50
- */
- CODE_9001030(9001030, "一次查询页面 ID 数量不能超过 50"),
-
- /**
- * 时间区间不合法
- */
- CODE_9001031(9001031, "时间区间不合法"),
-
- /**
- * 保存设备与页面的绑定关系参数错误
- */
- CODE_9001032(9001032, "保存设备与页面的绑定关系参数错误"),
-
- /**
- * 门店 ID 不合法
- */
- CODE_9001033(9001033, "门店 ID 不合法"),
-
- /**
- * 设备备注信息过长
- */
- CODE_9001034(9001034, "设备备注信息过长"),
-
- /**
- * 设备申请参数不合法
- */
- CODE_9001035(9001035, "设备申请参数不合法"),
-
- /**
- * 查询起始值 begin 不合法
- */
- CODE_9001036(9001036, "查询起始值 begin 不合法"),
-
- /**
- * params invalid
- */
- CODE_9002008(9002008, "params invalid"),
-
- /**
- * shop id not exist
- */
- CODE_9002009(9002009, "shop id not exist"),
-
- /**
- * ssid or password should start with "WX"
- */
- CODE_9002010(9002010, "ssid or password should start with \"WX\""),
-
- /**
- * ssid can not include chinese
- */
- CODE_9002011(9002011, "ssid can not include chinese"),
-
- /**
- * passsword can not include chinese
- */
- CODE_9002012(9002012, "passsword can not include chinese"),
-
- /**
- * password must be between 8 and 24 characters
- */
- CODE_9002013(9002013, "password must be between 8 and 24 characters"),
-
- /**
- * device exist
- */
- CODE_9002016(9002016, "device exist"),
-
- /**
- * device not exist
- */
- CODE_9002017(9002017, "device not exist"),
-
- /**
- * the size of query list reach limit
- */
- CODE_9002026(9002026, "the size of query list reach limit"),
-
- /**
- * not allowed to modify, ensure you are an certified or component account
- */
- CODE_9002041(9002041, "not allowed to modify, ensure you are an certified or component account"),
-
- /**
- * invalid ssid, can not include none utf8 characters, and should be between 1 and 32 bytes
- */
- CODE_9002044(9002044, "invalid ssid, can not include none utf8 characters, and should be between 1 and 32 bytes"),
-
- /**
- * shop id has not be audited, this bar type is not enable
- */
- CODE_9002052(9002052, "shop id has not be audited, this bar type is not enable"),
-
- /**
- * protocol type is not same with the exist device
- */
- CODE_9007003(9007003, "protocol type is not same with the exist device"),
-
- /**
- * ssid not exist
- */
- CODE_9007004(9007004, "ssid not exist"),
-
- /**
- * device count limit
- */
- CODE_9007005(9007005, "device count limit"),
-
- /**
- * card info not exist
- */
- CODE_9008001(9008001, "card info not exist"),
-
- /**
- * card expiration time is invalid
- */
- CODE_9008002(9008002, "card expiration time is invalid"),
-
- /**
- * url size invalid, keep less than 255
- */
- CODE_9008003(9008003, "url size invalid, keep less than 255"),
-
- /**
- * url can not include chinese
- */
- CODE_9008004(9008004, "url can not include chinese"),
-
- /**
- * order_id not exist
- */
- CODE_9200001(9200001, "order_id not exist"),
-
- /**
- * order of other biz
- */
- CODE_9200002(9200002, "order of other biz"),
-
- /**
- * blocked
- */
- CODE_9200003(9200003, "blocked"),
-
- /**
- * payment notice disabled
- */
- CODE_9200211(9200211, "payment notice disabled"),
-
- /**
- * payment notice not exist
- */
- CODE_9200231(9200231, "payment notice not exist"),
-
- /**
- * payment notice paid
- */
- CODE_9200232(9200232, "payment notice paid"),
-
- /**
- * payment notice canceled
- */
- CODE_9200233(9200233, "payment notice canceled"),
-
- /**
- * payment notice expired
- */
- CODE_9200235(9200235, "payment notice expired"),
-
- /**
- * bank not allow
- */
- CODE_9200236(9200236, "bank not allow"),
-
- /**
- * freq limit
- */
- CODE_9200295(9200295, "freq limit"),
-
- /**
- * suspend payment at current time
- */
- CODE_9200297(9200297, "suspend payment at current time"),
-
- /**
- * 3rd resp decrypt error
- */
- CODE_9200298(9200298, "3rd resp decrypt error"),
-
- /**
- * 3rd resp system error
- */
- CODE_9200299(9200299, "3rd resp system error"),
-
- /**
- * 3rd resp sign error
- */
- CODE_9200300(9200300, "3rd resp sign error"),
-
- /**
- * desc empty
- */
- CODE_9201000(9201000, "desc empty"),
-
- /**
- * fee not equal items'
- */
- CODE_9201001(9201001, "fee not equal items'"),
-
- /**
- * payment info incorrect
- */
- CODE_9201002(9201002, "payment info incorrect"),
-
- /**
- * fee is 0
- */
- CODE_9201003(9201003, "fee is 0"),
-
- /**
- * payment expire date format error
- */
- CODE_9201004(9201004, "payment expire date format error"),
-
- /**
- * appid error
- */
- CODE_9201005(9201005, "appid error"),
-
- /**
- * payment order id error
- */
- CODE_9201006(9201006, "payment order id error"),
-
- /**
- * openid error
- */
- CODE_9201007(9201007, "openid error"),
-
- /**
- * return_url error
- */
- CODE_9201008(9201008, "return_url error"),
-
- /**
- * ip error
- */
- CODE_9201009(9201009, "ip error"),
-
- /**
- * order_id error
- */
- CODE_9201010(9201010, "order_id error"),
-
- /**
- * reason error
- */
- CODE_9201011(9201011, "reason error"),
-
- /**
- * mch_id error
- */
- CODE_9201012(9201012, "mch_id error"),
-
- /**
- * bill_date error
- */
- CODE_9201013(9201013, "bill_date error"),
-
- /**
- * bill_type error
- */
- CODE_9201014(9201014, "bill_type error"),
-
- /**
- * trade_type error
- */
- CODE_9201015(9201015, "trade_type error"),
-
- /**
- * bank_id error
- */
- CODE_9201016(9201016, "bank_id error"),
-
- /**
- * bank_account error
- */
- CODE_9201017(9201017, "bank_account error"),
-
- /**
- * payment_notice_no error
- */
- CODE_9201018(9201018, "payment_notice_no error"),
-
- /**
- * department_code error
- */
- CODE_9201019(9201019, "department_code error"),
-
- /**
- * payment_notice_type error
- */
- CODE_9201020(9201020, "payment_notice_type error"),
-
- /**
- * region_code error
- */
- CODE_9201021(9201021, "region_code error"),
-
- /**
- * department_name error
- */
- CODE_9201022(9201022, "department_name error"),
-
- /**
- * fee not equal finance's
- */
- CODE_9201023(9201023, "fee not equal finance's"),
-
- /**
- * refund_out_id error
- */
- CODE_9201024(9201024, "refund_out_id error"),
-
- /**
- * not combined order_id
- */
- CODE_9201026(9201026, "not combined order_id"),
-
- /**
- * partial sub order is test
- */
- CODE_9201027(9201027, "partial sub order is test"),
-
- /**
- * desc too long
- */
- CODE_9201029(9201029, "desc too long"),
-
- /**
- * sub order list size error
- */
- CODE_9201031(9201031, "sub order list size error"),
-
- /**
- * sub order repeated
- */
- CODE_9201032(9201032, "sub order repeated"),
-
- /**
- * auth_code empty
- */
- CODE_9201033(9201033, "auth_code empty"),
-
- /**
- * bank_id empty but mch_id not empty
- */
- CODE_9201034(9201034, "bank_id empty but mch_id not empty"),
-
- /**
- * sum of other fees exceed total fee
- */
- CODE_9201035(9201035, "sum of other fees exceed total fee"),
-
- /**
- * other user paying
- */
- CODE_9202000(9202000, "other user paying"),
-
- /**
- * pay process not finish
- */
- CODE_9202001(9202001, "pay process not finish"),
-
- /**
- * no refund permission
- */
- CODE_9202002(9202002, "no refund permission"),
-
- /**
- * ip limit
- */
- CODE_9202003(9202003, "ip limit"),
-
- /**
- * freq limit
- */
- CODE_9202004(9202004, "freq limit"),
-
- /**
- * user weixin account abnormal
- */
- CODE_9202005(9202005, "user weixin account abnormal"),
-
- /**
- * account balance not enough
- */
- CODE_9202006(9202006, "account balance not enough"),
-
- /**
- * refund request repeated
- */
- CODE_9202010(9202010, "refund request repeated"),
-
- /**
- * has refunded
- */
- CODE_9202011(9202011, "has refunded"),
-
- /**
- * refund exceed total fee
- */
- CODE_9202012(9202012, "refund exceed total fee"),
-
- /**
- * busi_id dup
- */
- CODE_9202013(9202013, "busi_id dup"),
-
- /**
- * not check sign
- */
- CODE_9202016(9202016, "not check sign"),
-
- /**
- * check sign failed
- */
- CODE_9202017(9202017, "check sign failed"),
-
- /**
- * sub order error
- */
- CODE_9202018(9202018, "sub order error"),
-
- /**
- * order status error
- */
- CODE_9202020(9202020, "order status error"),
-
- /**
- * unified order repeatedly
- */
- CODE_9202021(9202021, "unified order repeatedly"),
-
- /**
- * request to notification url fail
- */
- CODE_9203000(9203000, "request to notification url fail"),
-
- /**
- * http request fail
- */
- CODE_9203001(9203001, "http request fail"),
-
- /**
- * http response data error
- */
- CODE_9203002(9203002, "http response data error"),
-
- /**
- * http response data RSA decrypt fail
- */
- CODE_9203003(9203003, "http response data RSA decrypt fail"),
-
- /**
- * http response data AES decrypt fail
- */
- CODE_9203004(9203004, "http response data AES decrypt fail"),
-
- /**
- * system busy, please try again later
- */
- CODE_9203999(9203999, "system busy, please try again later"),
-
- /**
- * getrealname token error
- */
- CODE_9204000(9204000, "getrealname token error"),
-
- /**
- * getrealname user or token error
- */
- CODE_9204001(9204001, "getrealname user or token error"),
-
- /**
- * getrealname appid or token error
- */
- CODE_9204002(9204002, "getrealname appid or token error"),
-
- /**
- * finance conf not exist
- */
- CODE_9205000(9205000, "finance conf not exist"),
-
- /**
- * bank conf not exist
- */
- CODE_9205001(9205001, "bank conf not exist"),
-
- /**
- * wei ban ju conf not exist
- */
- CODE_9205002(9205002, "wei ban ju conf not exist"),
-
- /**
- * symmetric key conf not exist
- */
- CODE_9205010(9205010, "symmetric key conf not exist"),
-
- /**
- * out order id not exist
- */
- CODE_9205101(9205101, "out order id not exist"),
-
- /**
- * bill not exist
- */
- CODE_9205201(9205201, "bill not exist"),
-
- /**
- * 3rd resp pay_channel empty
- */
- CODE_9206000(9206000, "3rd resp pay_channel empty"),
-
- /**
- * 3rd resp order_id empty
- */
- CODE_9206001(9206001, "3rd resp order_id empty"),
-
- /**
- * 3rd resp bill_type_code empty
- */
- CODE_9206002(9206002, "3rd resp bill_type_code empty"),
-
- /**
- * 3rd resp bill_no empty
- */
- CODE_9206003(9206003, "3rd resp bill_no empty"),
-
- /**
- * 3rd resp empty
- */
- CODE_9206200(9206200, "3rd resp empty"),
-
- /**
- * 3rd resp not json
- */
- CODE_9206201(9206201, "3rd resp not json"),
-
- /**
- * connect 3rd error
- */
- CODE_9206900(9206900, "connect 3rd error"),
-
- /**
- * connect 3rd timeout
- */
- CODE_9206901(9206901, "connect 3rd timeout"),
-
- /**
- * read 3rd resp error
- */
- CODE_9206910(9206910, "read 3rd resp error"),
-
- /**
- * read 3rd resp timeout
- */
- CODE_9206911(9206911, "read 3rd resp timeout"),
-
- /**
- * boss error
- */
- CODE_9207000(9207000, "boss error"),
-
- /**
- * wechat pay error
- */
- CODE_9207001(9207001, "wechat pay error"),
-
- /**
- * boss param error
- */
- CODE_9207002(9207002, "boss param error"),
-
- /**
- * pay error
- */
- CODE_9207003(9207003, "pay error"),
-
- /**
- * auth_code expired
- */
- CODE_9207004(9207004, "auth_code expired"),
-
- /**
- * user balance not enough
- */
- CODE_9207005(9207005, "user balance not enough"),
-
- /**
- * card not support
- */
- CODE_9207006(9207006, "card not support"),
-
- /**
- * order reversed
- */
- CODE_9207007(9207007, "order reversed"),
-
- /**
- * user paying, need input password
- */
- CODE_9207008(9207008, "user paying, need input password"),
-
- /**
- * auth_code error
- */
- CODE_9207009(9207009, "auth_code error"),
-
- /**
- * auth_code invalid
- */
- CODE_9207010(9207010, "auth_code invalid"),
-
- /**
- * not allow to reverse when user paying
- */
- CODE_9207011(9207011, "not allow to reverse when user paying"),
-
- /**
- * order paid
- */
- CODE_9207012(9207012, "order paid"),
-
- /**
- * order closed
- */
- CODE_9207013(9207013, "order closed"),
-
- /**
- * vehicle not exists
- */
- CODE_9207028(9207028, "vehicle not exists"),
-
- /**
- * vehicle request blocked
- */
- CODE_9207029(9207029, "vehicle request blocked"),
-
- /**
- * vehicle auth error
- */
- CODE_9207030(9207030, "vehicle auth error"),
-
- /**
- * contract over limit
- */
- CODE_9207031(9207031, "contract over limit"),
-
- /**
- * trade error
- */
- CODE_9207032(9207032, "trade error"),
-
- /**
- * trade time invalid
- */
- CODE_9207033(9207033, "trade time invalid"),
-
- /**
- * channel type invalid
- */
- CODE_9207034(9207034, "channel type invalid"),
-
- /**
- * expire_time range error
- */
- CODE_9207050(9207050, "expire_time range error"),
-
- /**
- * query finance error
- */
- CODE_9210000(9210000, "query finance error"),
-
- /**
- * openid error
- */
- CODE_9291000(9291000, "openid error"),
-
- /**
- * openid appid not match
- */
- CODE_9291001(9291001, "openid appid not match"),
-
- /**
- * app_appid not exist
- */
- CODE_9291002(9291002, "app_appid not exist"),
-
- /**
- * app_appid not app
- */
- CODE_9291003(9291003, "app_appid not app"),
-
- /**
- * appid empty
- */
- CODE_9291004(9291004, "appid empty"),
-
- /**
- * appid not match access_token
- */
- CODE_9291005(9291005, "appid not match access_token"),
-
- /**
- * invalid sign
- */
- CODE_9291006(9291006, "invalid sign"),
-
- /**
- * backend logic error
- */
- CODE_9299999(9299999, "backend logic error"),
-
- /**
- * begin_time can not before now
- */
- CODE_9300001(9300001, "begin_time can not before now"),
-
- /**
- * end_time can not before now
- */
- CODE_9300002(9300002, "end_time can not before now"),
-
- /**
- * begin_time must less than end_time
- */
- CODE_9300003(9300003, "begin_time must less than end_time"),
-
- /**
- * end_time - begin_time > 1year
- */
- CODE_9300004(9300004, "end_time - begin_time > 1year"),
-
- /**
- * invalid max_partic_times
- */
- CODE_9300005(9300005, "invalid max_partic_times"),
-
- /**
- * invalid activity status
- */
- CODE_9300006(9300006, "invalid activity status"),
-
- /**
- * gift_num must >0 and <=15
- */
- CODE_9300007(9300007, "gift_num must >0 and <=15"),
-
- /**
- * invalid tiny appid
- */
- CODE_9300008(9300008, "invalid tiny appid"),
-
- /**
- * activity can not finish
- */
- CODE_9300009(9300009, "activity can not finish"),
-
- /**
- * card_info_list must >= 2
- */
- CODE_9300010(9300010, "card_info_list must >= 2"),
-
- /**
- * invalid card_id
- */
- CODE_9300011(9300011, "invalid card_id"),
-
- /**
- * card_id must belong this appid
- */
- CODE_9300012(9300012, "card_id must belong this appid"),
-
- /**
- * card_id is not swipe_card or pay.cash
- */
- CODE_9300013(9300013, "card_id is not swipe_card or pay.cash"),
-
- /**
- * some card_id is out of stock
- */
- CODE_9300014(9300014, "some card_id is out of stock"),
-
- /**
- * some card_id is invalid status
- */
- CODE_9300015(9300015, "some card_id is invalid status"),
-
- /**
- * membership or new/old tinyapp user only support one
- */
- CODE_9300016(9300016, "membership or new/old tinyapp user only support one"),
-
- /**
- * invalid logic for membership
- */
- CODE_9300017(9300017, "invalid logic for membership"),
-
- /**
- * invalid logic for tinyapp new/old user
- */
- CODE_9300018(9300018, "invalid logic for tinyapp new/old user"),
-
- /**
- * invalid activity type
- */
- CODE_9300019(9300019, "invalid activity type"),
-
- /**
- * invalid activity_id
- */
- CODE_9300020(9300020, "invalid activity_id"),
-
- /**
- * invalid help_max_times
- */
- CODE_9300021(9300021, "invalid help_max_times"),
-
- /**
- * invalid cover_url
- */
- CODE_9300022(9300022, "invalid cover_url"),
-
- /**
- * invalid gen_limit
- */
- CODE_9300023(9300023, "invalid gen_limit"),
-
- /**
- * card's end_time cannot early than act's end_time
- */
- CODE_9300024(9300024, "card's end_time cannot early than act's end_time"),
-
- /**
- * 快递侧逻辑错误,详细原因需要看 delivery_resultcode, 请先确认一下编码方式,python建议 json.dumps(b, ensure_ascii=False),php建议 json_encode($arr, JSON_UNESCAPED_UNICODE) Delivery side error
- */
- CODE_9300501(9300501, "快递侧逻辑错误,详细原因需要看 delivery_resultcode, 请先确认一下编码方式,python建议 json.dumps(b, ensure_ascii=False),php建议 json_encode($arr, JSON_UNESCAPED_UNICODE)"),
-
- /**
- * 快递公司系统错误 Delivery side sys error
- */
- CODE_9300502(9300502, "快递公司系统错误"),
-
- /**
- * delivery_id 不存在 Specified delivery id is not registerred
- */
- CODE_9300503(9300503, "delivery_id 不存在"),
-
- /**
- * service_type 不存在 Specified delivery id has beed banned
- */
- CODE_9300504(9300504, "service_type 不存在"),
-
- /**
- * Shop banned
- */
- CODE_9300505(9300505, "Shop banned"),
-
- /**
- * 运单 ID 已经存在轨迹,不可取消 Order can't cancel
- */
- CODE_9300506(9300506, "运单 ID 已经存在轨迹,不可取消"),
-
- /**
- * Token 不正确 invalid token, can't decryption or decryption result is different from the plaintext
- */
- CODE_9300507(9300507, "Token 不正确"),
-
- /**
- * order id has been used
- */
- CODE_9300508(9300508, "order id has been used"),
-
- /**
- * speed limit, retry too fast
- */
- CODE_9300509(9300509, "speed limit, retry too fast"),
-
- /**
- * invalid service type
- */
- CODE_9300510(9300510, "invalid service type"),
-
- /**
- * invalid branch id
- */
- CODE_9300511(9300511, "invalid branch id"),
-
- /**
- * 模板格式错误,渲染失败 invalid waybill template format
- */
- CODE_9300512(9300512, "模板格式错误,渲染失败"),
-
- /**
- * out of quota
- */
- CODE_9300513(9300513, "out of quota"),
-
- /**
- * add net branch fail, try update branch api
- */
- CODE_9300514(9300514, "add net branch fail, try update branch api"),
-
- /**
- * wxa appid not exist
- */
- CODE_9300515(9300515, "wxa appid not exist"),
-
- /**
- * wxa appid and current bizuin is not linked or not the same owner
- */
- CODE_9300516(9300516, "wxa appid and current bizuin is not linked or not the same owner"),
-
- /**
- * update_type 不正确,请使用"bind" 或者“unbind” invalid update_type, please use [bind] or [unbind]
- */
- CODE_9300517(9300517, "update_type 不正确,请使用\"bind\" 或者“unbind”"),
-
- /**
- * invalid delivery id
- */
- CODE_9300520(9300520, "invalid delivery id"),
-
- /**
- * the orderid is in our system, and waybill is generating
- */
- CODE_9300521(9300521, "the orderid is in our system, and waybill is generating"),
-
- /**
- * this orderid is repeated
- */
- CODE_9300522(9300522, "this orderid is repeated"),
-
- /**
- * quota is not enough; go to charge please
- */
- CODE_9300523(9300523, "quota is not enough; go to charge please"),
-
- /**
- * 订单已取消(一般为重复取消订单) order already canceled
- */
- CODE_9300524(9300524, "订单已取消(一般为重复取消订单)"),
-
- /**
- * bizid未绑定 biz id not bind
- */
- CODE_9300525(9300525, "bizid未绑定"),
-
- /**
- * 参数字段长度不正确 arg size exceed limit
- */
- CODE_9300526(9300526, "参数字段长度不正确"),
-
- /**
- * delivery does not support quota
- */
- CODE_9300527(9300527, "delivery does not support quota"),
-
- /**
- * invalid waybill_id
- */
- CODE_9300528(9300528, "invalid waybill_id"),
-
- /**
- * 账号已绑定过 biz_id already binded
- */
- CODE_9300529(9300529, "账号已绑定过"),
-
- /**
- * 解绑的biz_id不存在 biz_id is not exist
- */
- CODE_9300530(9300530, "解绑的biz_id不存在"),
-
- /**
- * bizid无效 或者密码错误 invalid biz_id or password
- */
- CODE_9300531(9300531, "bizid无效 或者密码错误"),
-
- /**
- * 绑定已提交,审核中 bind submit, and is checking
- */
- CODE_9300532(9300532, "绑定已提交,审核中"),
-
- /**
- * invalid tagid_list
- */
- CODE_9300533(9300533, "invalid tagid_list"),
-
- /**
- * add_source=2时,wx_appid和当前小程序不同主体 invalid appid, not same body
- */
- CODE_9300534(9300534, "add_source=2时,wx_appid和当前小程序不同主体"),
-
- /**
- * shop字段商品缩略图 url、商品名称为空或者非法,或者商品数量为0 invalid shop arg
- */
- CODE_9300535(9300535, "shop字段商品缩略图 url、商品名称为空或者非法,或者商品数量为0"),
-
- /**
- * add_source=2时,wx_appid无效 invalid wxa_appid
- */
- CODE_9300536(9300536, "add_source=2时,wx_appid无效"),
-
- /**
- * freq limit
- */
- CODE_9300537(9300537, "freq limit"),
-
- /**
- * input task empty
- */
- CODE_9300538(9300538, "input task empty"),
-
- /**
- * too many task
- */
- CODE_9300539(9300539, "too many task"),
-
- /**
- * task not exist
- */
- CODE_9300540(9300540, "task not exist"),
-
- /**
- * delivery callback error
- */
- CODE_9300541(9300541, "delivery callback error"),
-
- /**
- * id_card_no is invalid
- */
- CODE_9300601(9300601, "id_card_no is invalid"),
-
- /**
- * name is invalid
- */
- CODE_9300602(9300602, "name is invalid"),
-
- /**
- * plate_no is invalid
- */
- CODE_9300603(9300603, "plate_no is invalid"),
-
- /**
- * auth_key decode error
- */
- CODE_9300604(9300604, "auth_key decode error"),
-
- /**
- * auth_key is expired
- */
- CODE_9300605(9300605, "auth_key is expired"),
-
- /**
- * auth_key and appinfo not match
- */
- CODE_9300606(9300606, "auth_key and appinfo not match"),
-
- /**
- * user not confirm
- */
- CODE_9300607(9300607, "user not confirm"),
-
- /**
- * user confirm is expired
- */
- CODE_9300608(9300608, "user confirm is expired"),
-
- /**
- * api exceed limit
- */
- CODE_9300609(9300609, "api exceed limit"),
-
- /**
- * car license info is invalid
- */
- CODE_9300610(9300610, "car license info is invalid"),
-
- /**
- * varification type not support
- */
- CODE_9300611(9300611, "varification type not support"),
-
- /**
- * input param error
- */
- CODE_9300701(9300701, "input param error"),
-
- /**
- * this code has been used
- */
- CODE_9300702(9300702, "this code has been used"),
-
- /**
- * invalid date
- */
- CODE_9300703(9300703, "invalid date"),
-
- /**
- * not currently available
- */
- CODE_9300704(9300704, "not currently available"),
-
- /**
- * code not exist or expired
- */
- CODE_9300705(9300705, "code not exist or expired"),
-
- /**
- * code not exist or expired
- */
- CODE_9300706(9300706, "code not exist or expired"),
-
- /**
- * wxpay error
- */
- CODE_9300707(9300707, "wxpay error"),
-
- /**
- * wxpay overlimit
- */
- CODE_9300708(9300708, "wxpay overlimit"),
-
- /**
- * 无效的微信号
- */
- CODE_9300801(9300801, "无效的微信号"),
-
- /**
- * 服务号未开通导购功能
- */
- CODE_9300802(9300802, "服务号未开通导购功能"),
-
- /**
- * 微信号已经绑定为导购
- */
- CODE_9300803(9300803, "微信号已经绑定为导购"),
-
- /**
- * 该微信号不是导购
- */
- CODE_9300804(9300804, "该微信号不是导购"),
-
- /**
- * 微信号已经被其他账号绑定为导购
- */
- CODE_9300805(9300805, "微信号已经被其他账号绑定为导购"),
-
- /**
- * 粉丝和导购不存在绑定关系
- */
- CODE_9300806(9300806, "粉丝和导购不存在绑定关系"),
-
- /**
- * 标签值无效,不是可选标签值
- */
- CODE_9300807(9300807, "标签值无效,不是可选标签值"),
-
- /**
- * 标签值不存在
- */
- CODE_9300808(9300808, "标签值不存在"),
-
- /**
- * 展示标签值不存在
- */
- CODE_9300809(9300809, "展示标签值不存在"),
-
- /**
- * 导购昵称太长,最多16个字符
- */
- CODE_9300810(9300810, "导购昵称太长,最多16个字符"),
-
- /**
- * 只支持mmbiz.qpic.cn域名的图片
- */
- CODE_9300811(9300811, "只支持mmbiz.qpic.cn域名的图片"),
-
- /**
- * 达到导购绑定个数限制
- */
- CODE_9300812(9300812, "达到导购绑定个数限制"),
-
- /**
- * 达到导购粉丝绑定个数限制
- */
- CODE_9300813(9300813, "达到导购粉丝绑定个数限制"),
-
- /**
- * 敏感词个数超过上限
- */
- CODE_9300814(9300814, "敏感词个数超过上限"),
-
- /**
- * 快捷回复个数超过上限
- */
- CODE_9300815(9300815, "快捷回复个数超过上限"),
-
- /**
- * 文字素材个数超过上限
- */
- CODE_9300816(9300816, "文字素材个数超过上限"),
-
- /**
- * 小程序卡片素材个数超过上限
- */
- CODE_9300817(9300817, "小程序卡片素材个数超过上限"),
-
- /**
- * 图片素材个数超过上限
- */
- CODE_9300818(9300818, "图片素材个数超过上限"),
-
- /**
- * mediaid 有误
- */
- CODE_9300819(9300819, "mediaid 有误"),
-
- /**
- * 可查询标签类别超过上限
- */
- CODE_9300820(9300820, "可查询标签类别超过上限"),
-
- /**
- * 小程序卡片内appid不符合要求
- */
- CODE_9300821(9300821, "小程序卡片内appid不符合要求"),
-
- /**
- * 标签类别的名字无效
- */
- CODE_9300822(9300822, "标签类别的名字无效"),
-
- /**
- * 查询聊天记录时间参数有误
- */
- CODE_9300823(9300823, "查询聊天记录时间参数有误"),
-
- /**
- * 自动回复字数太长
- */
- CODE_9300824(9300824, "自动回复字数太长"),
-
- /**
- * 导购群组id错误
- */
- CODE_9300825(9300825, "导购群组id错误"),
-
- /**
- * 维护中
- */
- CODE_9300826(9300826, "维护中"),
-
- /**
- * invalid parameter
- */
- CODE_9301001(9301001, "invalid parameter"),
-
- /**
- * call api service failed
- */
- CODE_9301002(9301002, "call api service failed"),
-
- /**
- * internal exception
- */
- CODE_9301003(9301003, "internal exception"),
-
- /**
- * save data error
- */
- CODE_9301004(9301004, "save data error"),
-
- /**
- * invalid appid
- */
- CODE_9301006(9301006, "invalid appid"),
-
- /**
- * invalid api config
- */
- CODE_9301007(9301007, "invalid api config"),
-
- /**
- * invalid api info
- */
- CODE_9301008(9301008, "invalid api info"),
-
- /**
- * add result check failed
- */
- CODE_9301009(9301009, "add result check failed"),
-
- /**
- * consumption failure
- */
- CODE_9301010(9301010, "consumption failure"),
-
- /**
- * frequency limit reached
- */
- CODE_9301011(9301011, "frequency limit reached"),
-
- /**
- * service timeout
- */
- CODE_9301012(9301012, "service timeout"),
-
- /**
- * 该开发小程序已开通小程序直播权限,不支持发布版本。如需发版,请解绑开发小程序后再操作。
- */
- CODE_9400001(9400001, "该开发小程序已开通小程序直播权限,不支持发布版本。如需发版,请解绑开发小程序后再操作。"),
-
- /**
- * 商品已存在
- */
- CODE_9401001(9401001, "商品已存在"),
-
- /**
- * 商品不存在
- */
- CODE_9401002(9401002, "商品不存在"),
-
- /**
- * 类目已存在
- */
- CODE_9401003(9401003, "类目已存在"),
-
- /**
- * 类目不存在
- */
- CODE_9401004(9401004, "类目不存在"),
-
- /**
- * SKU已存在
- */
- CODE_9401005(9401005, "SKU已存在"),
-
- /**
- * SKU不存在
- */
- CODE_9401006(9401006, "SKU不存在"),
-
- /**
- * 属性已存在
- */
- CODE_9401007(9401007, "属性已存在"),
-
- /**
- * 属性不存在
- */
- CODE_9401008(9401008, "属性不存在"),
-
- /**
- * 非法参数
- */
- CODE_9401020(9401020, "非法参数"),
-
- /**
- * 没有商品权限
- */
- CODE_9401021(9401021, "没有商品权限"),
-
- /**
- * SPU NOT ALLOW
- */
- CODE_9401022(9401022, "SPU NOT ALLOW"),
-
- /**
- * SPU_NOT_ALLOW_EDIT
- */
- CODE_9401023(9401023, "SPU_NOT_ALLOW_EDIT"),
-
- /**
- * SKU NOT ALLOW
- */
- CODE_9401024(9401024, "SKU NOT ALLOW"),
-
- /**
- * SKU_NOT_ALLOW_EDIT
- */
- CODE_9401025(9401025, "SKU_NOT_ALLOW_EDIT"),
-
- /**
- * limit too large
- */
- CODE_9402001(9402001, "limit too large"),
-
- /**
- * single send been blocked
- */
- CODE_9402002(9402002, "single send been blocked"),
-
- /**
- * all send been blocked
- */
- CODE_9402003(9402003, "all send been blocked"),
-
- /**
- * invalid msg id
- */
- CODE_9402004(9402004, "invalid msg id"),
-
- /**
- * send msg too quick
- */
- CODE_9402005(9402005, "send msg too quick"),
-
- /**
- * send to single user too quick
- */
- CODE_9402006(9402006, "send to single user too quick"),
-
- /**
- * send to all user too quick
- */
- CODE_9402007(9402007, "send to all user too quick"),
-
- /**
- * send type error
- */
- CODE_9402008(9402008, "send type error"),
-
- /**
- * can not send this msg
- */
- CODE_9402009(9402009, "can not send this msg"),
-
- /**
- * content too long or no content
- */
- CODE_9402010(9402010, "content too long or no content"),
-
- /**
- * path not exist
- */
- CODE_9402011(9402011, "path not exist"),
-
- /**
- * contain evil word
- */
- CODE_9402012(9402012, "contain evil word"),
-
- /**
- * path need html suffix
- */
- CODE_9402013(9402013, "path need html suffix"),
-
- /**
- * not open to personal body type
- */
- CODE_9402014(9402014, "not open to personal body type"),
-
- /**
- * not open to violation body type
- */
- CODE_9402015(9402015, "not open to violation body type"),
-
- /**
- * not open to low quality provider
- */
- CODE_9402016(9402016, "not open to low quality provider"),
-
- /**
- * invalid product_id
- */
- CODE_9402101(9402101, "invalid product_id"),
-
- /**
- * device_id count more than limit
- */
- CODE_9402102(9402102, "device_id count more than limit"),
-
- /**
- * 请勿频繁提交,待上一次操作完成后再提交 concurrent limit
- */
- CODE_9402202(9402202, "请勿频繁提交,待上一次操作完成后再提交"),
-
- /**
- * user not book this ad id
- */
- CODE_9402301(9402301, "user not book this ad id"),
-
- /**
- * 消息类型错误!
- */
- CODE_9403000(9403000, "消息类型错误!"),
-
- /**
- * 消息字段的内容过长!
- */
- CODE_9403001(9403001, "消息字段的内容过长!"),
-
- /**
- * 消息字段的内容违规!
- */
- CODE_9403002(9403002, "消息字段的内容违规!"),
-
- /**
- * 发送的微信号太多!
- */
- CODE_9403003(9403003, "发送的微信号太多!"),
-
- /**
- * 存在错误的微信号!
- */
- CODE_9403004(9403004, "存在错误的微信号!"),
-
- /**
- * 直播间列表为空 live room not exsits
- */
- CODE_9410000(9410000, "直播间列表为空"),
-
- /**
- * 获取房间失败 inner error: get room fail
- */
- CODE_9410001(9410001, "获取房间失败"),
-
- /**
- * 获取商品失败 inner error: get goods fail
- */
- CODE_9410002(9410002, "获取商品失败"),
-
- /**
- * 获取回放失败 inner error: get replay url fail
- */
- CODE_9410003(9410003, "获取回放失败");
-
-
-
- private final int code;
- private final String msg;
-
- WxOpenErrorMsgEnum(int code, String msg) {
- this.code = code;
- this.msg = msg;
- }
-
- static final Map valueMap = Maps.newHashMap();
-
- static {
- for (com.pxys.wechatgroup.common.error.WxOpenErrorMsgEnum value : com.pxys.wechatgroup.common.error.WxOpenErrorMsgEnum.values()) {
- valueMap.put(value.code, value.msg);
- }
- }
-
- /**
- * 通过错误代码查找其中文含义.
- */
- public static String findMsgByCode(int code) {
- return valueMap.getOrDefault(code, null);
+ /**
+ * 域名数量超过限制 ,总数不能超过1000 exceed valid domain count
+ */
+ CODE_85016(85016, "域名数量超过限制 ,总数不能超过1000"),
+
+ /**
+ * 没有新增域名,请确认小程序已经添加了域名或该域名是否没有在第三方平台添加 no domain to modify after filtered, please confirm the domain has been set in miniprogram or open
+ */
+ CODE_85017(85017, "没有新增域名,请确认小程序已经添加了域名或该域名是否没有在第三方平台添加"),
+
+ /**
+ * 域名没有在第三方平台设置
+ */
+ CODE_85018(85018, "域名没有在第三方平台设置"),
+
+ /**
+ * 没有审核版本 no version is under auditing
+ */
+ CODE_85019(85019, "没有审核版本"),
+
+ /**
+ * 审核状态未满足发布 status not allowed
+ */
+ CODE_85020(85020, "审核状态未满足发布"),
+
+ /**
+ * status not allowed
+ */
+ CODE_85021(85021, "status not allowed"),
+
+ /**
+ * invalid action
+ */
+ CODE_85022(85022, "invalid action"),
+
+ /**
+ * 审核列表填写的项目数不在 1-5 以内 item size is not in valid range
+ */
+ CODE_85023(85023, "审核列表填写的项目数不在 1-5 以内"),
+
+ /**
+ * need complete material
+ */
+ CODE_85024(85024, "need complete material"),
+
+ /**
+ * this phone reach bind limit
+ */
+ CODE_85025(85025, "this phone reach bind limit"),
+
+ /**
+ * this wechat account reach bind limit
+ */
+ CODE_85026(85026, "this wechat account reach bind limit"),
+
+ /**
+ * this idcard reach bind limit
+ */
+ CODE_85027(85027, "this idcard reach bind limit"),
+
+ /**
+ * this contractor reach bind limit
+ */
+ CODE_85028(85028, "this contractor reach bind limit"),
+
+ /**
+ * nickname has used
+ */
+ CODE_85029(85029, "nickname has used"),
+
+ /**
+ * invalid nickname size(4-30)
+ */
+ CODE_85030(85030, "invalid nickname size(4-30)"),
+
+ /**
+ * nickname is forbidden
+ */
+ CODE_85031(85031, "nickname is forbidden"),
+
+ /**
+ * nickname is complained
+ */
+ CODE_85032(85032, "nickname is complained"),
+
+ /**
+ * nickname is illegal
+ */
+ CODE_85033(85033, "nickname is illegal"),
+
+ /**
+ * nickname is protected
+ */
+ CODE_85034(85034, "nickname is protected"),
+
+ /**
+ * nickname is forbidden for different contractor
+ */
+ CODE_85035(85035, "nickname is forbidden for different contractor"),
+
+ /**
+ * introduction is illegal
+ */
+ CODE_85036(85036, "introduction is illegal"),
+
+ /**
+ * store has added
+ */
+ CODE_85038(85038, "store has added"),
+
+ /**
+ * store has added by others
+ */
+ CODE_85039(85039, "store has added by others"),
+
+ /**
+ * store has added by yourseld
+ */
+ CODE_85040(85040, "store has added by yourseld"),
+
+ /**
+ * credential has used
+ */
+ CODE_85041(85041, "credential has used"),
+
+ /**
+ * nearby reach limit
+ */
+ CODE_85042(85042, "nearby reach limit"),
+
+ /**
+ * 模板错误 invalid template, something wrong?
+ */
+ CODE_85043(85043, "模板错误"),
+
+ /**
+ * 代码包超过大小限制 package exceed max limit
+ */
+ CODE_85044(85044, "代码包超过大小限制"),
+
+ /**
+ * ext_json 有不存在的路径 some path in ext_json not exist
+ */
+ CODE_85045(85045, "ext_json 有不存在的路径"),
+
+ /**
+ * tabBar 中缺少 path pagepath missing in tabbar list
+ */
+ CODE_85046(85046, "tabBar 中缺少 path"),
+
+ /**
+ * pages 字段为空 pages are empty
+ */
+ CODE_85047(85047, "pages 字段为空"),
+
+ /**
+ * ext_json 解析失败 parse ext_json fail
+ */
+ CODE_85048(85048, "ext_json 解析失败"),
+
+ /**
+ * reach headimg or introduction quota limit
+ */
+ CODE_85049(85049, "reach headimg or introduction quota limit"),
+
+ /**
+ * verifying, don't apply again
+ */
+ CODE_85050(85050, "verifying, don't apply again"),
+
+ /**
+ * version_desc或者preview_info超限 data too large
+ */
+ CODE_85051(85051, "version_desc或者preview_info超限"),
+
+ /**
+ * app is already released
+ */
+ CODE_85052(85052, "app is already released"),
+
+ /**
+ * please apply merchant first
+ */
+ CODE_85053(85053, "please apply merchant first"),
+
+ /**
+ * poi_id is null, please upgrade first
+ */
+ CODE_85054(85054, "poi_id is null, please upgrade first"),
+
+ /**
+ * map_poi_id is invalid
+ */
+ CODE_85055(85055, "map_poi_id is invalid"),
+
+ /**
+ * mediaid is invalid
+ */
+ CODE_85056(85056, "mediaid is invalid"),
+
+ /**
+ * invalid widget data format
+ */
+ CODE_85057(85057, "invalid widget data format"),
+
+ /**
+ * no valid audit_id exist
+ */
+ CODE_85058(85058, "no valid audit_id exist"),
+
+ /**
+ * overseas access deny
+ */
+ CODE_85059(85059, "overseas access deny"),
+
+ /**
+ * invalid taskid
+ */
+ CODE_85060(85060, "invalid taskid"),
+
+ /**
+ * this phone reach bind limit
+ */
+ CODE_85061(85061, "this phone reach bind limit"),
+
+ /**
+ * this phone in black list
+ */
+ CODE_85062(85062, "this phone in black list"),
+
+ /**
+ * idcard in black list
+ */
+ CODE_85063(85063, "idcard in black list"),
+
+ /**
+ * 找不到模板 template not found
+ */
+ CODE_85064(85064, "找不到模板"),
+
+ /**
+ * 模板库已满 template list is full
+ */
+ CODE_85065(85065, "模板库已满"),
+
+ /**
+ * 链接错误 illegal prefix
+ */
+ CODE_85066(85066, "链接错误"),
+
+ /**
+ * input data error
+ */
+ CODE_85067(85067, "input data error"),
+
+ /**
+ * 测试链接不是子链接 test url is not the sub prefix
+ */
+ CODE_85068(85068, "测试链接不是子链接"),
+
+ /**
+ * 校验文件失败 check confirm file fail
+ */
+ CODE_85069(85069, "校验文件失败"),
+
+ /**
+ * 个人类型小程序无法设置二维码规则 prefix in black list
+ */
+ CODE_85070(85070, "个人类型小程序无法设置二维码规则"),
+
+ /**
+ * 已添加该链接,请勿重复添加 prefix added repeated
+ */
+ CODE_85071(85071, "已添加该链接,请勿重复添加"),
+
+ /**
+ * 该链接已被占用 prefix owned by other
+ */
+ CODE_85072(85072, "该链接已被占用"),
+
+ /**
+ * 二维码规则已满 prefix beyond limit
+ */
+ CODE_85073(85073, "二维码规则已满"),
+
+ /**
+ * 小程序未发布, 小程序必须先发布代码才可以发布二维码跳转规则 not published
+ */
+ CODE_85074(85074, "小程序未发布, 小程序必须先发布代码才可以发布二维码跳转规则"),
+
+ /**
+ * 个人类型小程序无法设置二维码规则 can not access
+ */
+ CODE_85075(85075, "个人类型小程序无法设置二维码规则"),
+
+ /**
+ * 小程序类目信息失效(类目中含有官方下架的类目,请重新选择类目) some category you choose is no longger supported, please choose other category
+ */
+ CODE_85077(85077, "小程序类目信息失效(类目中含有官方下架的类目,请重新选择类目)"),
+
+ /**
+ * operator info error
+ */
+ CODE_85078(85078, "operator info error"),
+
+ /**
+ * 小程序没有线上版本,不能进行灰度 miniprogram has no online release
+ */
+ CODE_85079(85079, "小程序没有线上版本,不能进行灰度"),
+
+ /**
+ * 小程序提交的审核未审核通过 miniprogram commit not approved
+ */
+ CODE_85080(85080, "小程序提交的审核未审核通过"),
+
+ /**
+ * 无效的发布比例 invalid gray percentage
+ */
+ CODE_85081(85081, "无效的发布比例"),
+
+ /**
+ * 当前的发布比例需要比之前设置的高 gray percentage too low
+ */
+ CODE_85082(85082, "当前的发布比例需要比之前设置的高"),
+
+ /**
+ * 搜索标记位被封禁,无法修改 search status is banned
+ */
+ CODE_85083(85083, "搜索标记位被封禁,无法修改"),
+
+ /**
+ * 非法的 status 值,只能填 0 或者 1 search status invalid
+ */
+ CODE_85084(85084, "非法的 status 值,只能填 0 或者 1"),
+
+ /**
+ * 小程序提审数量已达本月上限,请点击查看 submit audit reach limit pleasetry later
+ */
+ CODE_85085(85085, "小程序提审数量已达本月上限,请点击查看"),
+
+ /**
+ * 提交代码审核之前需提前上传代码 must commit before submit audit
+ */
+ CODE_85086(85086, "提交代码审核之前需提前上传代码"),
+
+ /**
+ * 小程序已使用 api navigateToMiniProgram,请声明跳转 appid 列表后再次提交 navigatetominiprogram appid list empty
+ */
+ CODE_85087(85087, "小程序已使用 api navigateToMiniProgram,请声明跳转 appid 列表后再次提交"),
+
+ /**
+ * no qbase privilege
+ */
+ CODE_85088(85088, "no qbase privilege"),
+
+ /**
+ * config not found
+ */
+ CODE_85089(85089, "config not found"),
+
+ /**
+ * wait and commit for this exappid later
+ */
+ CODE_85090(85090, "wait and commit for this exappid later"),
+
+ /**
+ * 小程序的搜索开关被关闭。请访问设置页面打开开关再重试 search status was turned off
+ */
+ CODE_85091(85091, "小程序的搜索开关被关闭。请访问设置页面打开开关再重试"),
+
+ /**
+ * preview_info格式错误 invalid preview_info format
+ */
+ CODE_85092(85092, "preview_info格式错误"),
+
+ /**
+ * preview_info 视频或者图片个数超限 invalid preview_info size
+ */
+ CODE_85093(85093, "preview_info 视频或者图片个数超限"),
+
+ /**
+ * 需提供审核机制说明信息 need add ugc declare
+ */
+ CODE_85094(85094, "需提供审核机制说明信息"),
+
+ /**
+ * 小程序不能发送该运动类型或运动类型不存在
+ */
+ CODE_85101(85101, "小程序不能发送该运动类型或运动类型不存在"),
+
+ /**
+ * 数值异常
+ */
+ CODE_85102(85102, "数值异常"),
+
+ /**
+ * 不是由第三方代小程序进行调用 should be called only from third party
+ */
+ CODE_86000(86000, "不是由第三方代小程序进行调用"),
+
+ /**
+ * 不存在第三方的已经提交的代码 component experience version not exists
+ */
+ CODE_86001(86001, "不存在第三方的已经提交的代码"),
+
+ /**
+ * 小程序还未设置昵称、头像、简介。请先设置完后再重新提交 miniprogram have not completed init procedure
+ */
+ CODE_86002(86002, "小程序还未设置昵称、头像、简介。请先设置完后再重新提交"),
+
+ /**
+ * component do not has category mall
+ */
+ CODE_86003(86003, "component do not has category mall"),
+
+ /**
+ * invalid wechat
+ */
+ CODE_86004(86004, "invalid wechat"),
+
+ /**
+ * wechat limit frequency
+ */
+ CODE_86005(86005, "wechat limit frequency"),
+
+ /**
+ * has no quota to send group msg
+ */
+ CODE_86006(86006, "has no quota to send group msg"),
+
+ /**
+ * 小程序禁止提交
+ */
+ CODE_86007(86007, "小程序禁止提交"),
+
+ /**
+ * 服务商被处罚,限制全部代码提审能力
+ */
+ CODE_86008(86008, "服务商被处罚,限制全部代码提审能力"),
+
+ /**
+ * 服务商新增小程序代码提审能力被限制
+ */
+ CODE_86009(86009, "服务商新增小程序代码提审能力被限制"),
+
+ /**
+ * 服务商迭代小程序代码提审能力被限制
+ */
+ CODE_86010(86010, "服务商迭代小程序代码提审能力被限制"),
+
+ /**
+ * 小游戏不能提交 this is game miniprogram, submit audit is forbidden
+ */
+ CODE_87006(87006, "小游戏不能提交"),
+
+ /**
+ * session_key is not existd or expired
+ */
+ CODE_87007(87007, "session_key is not existd or expired"),
+
+ /**
+ * invalid sig_method
+ */
+ CODE_87008(87008, "invalid sig_method"),
+
+ /**
+ * 无效的签名 invalid signature
+ */
+ CODE_87009(87009, "无效的签名"),
+
+ /**
+ * invalid buffer size
+ */
+ CODE_87010(87010, "invalid buffer size"),
+
+ /**
+ * 现网已经在灰度发布,不能进行版本回退 wxa has a gray release plan, forbid revert release
+ */
+ CODE_87011(87011, "现网已经在灰度发布,不能进行版本回退"),
+
+ /**
+ * 该版本不能回退,可能的原因:1:无上一个线上版用于回退 2:此版本为已回退版本,不能回退 3:此版本为回退功能上线之前的版本,不能回退 forbid revert this version release
+ */
+ CODE_87012(87012, "该版本不能回退,可能的原因:1:无上一个线上版用于回退 2:此版本为已回退版本,不能回退 3:此版本为回退功能上线之前的版本,不能回退"),
+
+ /**
+ * 撤回次数达到上限(每天5次,每个月 10 次) no quota to undo code
+ */
+ CODE_87013(87013, "撤回次数达到上限(每天5次,每个月 10 次)"),
+
+ /**
+ * risky content
+ */
+ CODE_87014(87014, "risky content"),
+
+ /**
+ * query timeout, try a content with less size
+ */
+ CODE_87015(87015, "query timeout, try a content with less size"),
+
+ /**
+ * some key-value in list meet length exceed
+ */
+ CODE_87016(87016, "some key-value in list meet length exceed"),
+
+ /**
+ * user storage size exceed, delete some keys and try again
+ */
+ CODE_87017(87017, "user storage size exceed, delete some keys and try again"),
+
+ /**
+ * user has stored too much keys. delete some keys and try again
+ */
+ CODE_87018(87018, "user has stored too much keys. delete some keys and try again"),
+
+ /**
+ * some keys in list meet length exceed
+ */
+ CODE_87019(87019, "some keys in list meet length exceed"),
+
+ /**
+ * need friend
+ */
+ CODE_87080(87080, "need friend"),
+
+ /**
+ * invalid openid
+ */
+ CODE_87081(87081, "invalid openid"),
+
+ /**
+ * invalid key
+ */
+ CODE_87082(87082, "invalid key"),
+
+ /**
+ * invalid operation
+ */
+ CODE_87083(87083, "invalid operation"),
+
+ /**
+ * invalid opnum
+ */
+ CODE_87084(87084, "invalid opnum"),
+
+ /**
+ * check fail
+ */
+ CODE_87085(87085, "check fail"),
+
+ /**
+ * without comment privilege
+ */
+ CODE_88000(88000, "without comment privilege"),
+
+ /**
+ * msg_data is not exists
+ */
+ CODE_88001(88001, "msg_data is not exists"),
+
+ /**
+ * the article is limit for safety
+ */
+ CODE_88002(88002, "the article is limit for safety"),
+
+ /**
+ * elected comment upper limit
+ */
+ CODE_88003(88003, "elected comment upper limit"),
+
+ /**
+ * comment was deleted by user
+ */
+ CODE_88004(88004, "comment was deleted by user"),
+
+ /**
+ * already reply
+ */
+ CODE_88005(88005, "already reply"),
+
+ /**
+ * reply content beyond max len or content len is zero
+ */
+ CODE_88007(88007, "reply content beyond max len or content len is zero"),
+
+ /**
+ * comment is not exists
+ */
+ CODE_88008(88008, "comment is not exists"),
+
+ /**
+ * reply is not exists
+ */
+ CODE_88009(88009, "reply is not exists"),
+
+ /**
+ * count range error. cout <= 0 or count > 50
+ */
+ CODE_88010(88010, "count range error. cout <= 0 or count > 50"),
+
+ /**
+ * the article is limit for safety
+ */
+ CODE_88011(88011, "the article is limit for safety"),
+
+ /**
+ * account has bound open,该公众号/小程序已经绑定了开放平台帐号 account has bound open
+ */
+ CODE_89000(89000, "account has bound open,该公众号/小程序已经绑定了开放平台帐号"),
+
+ /**
+ * not same contractor,Authorizer 与开放平台帐号主体不相同 not same contractor
+ */
+ CODE_89001(89001, "not same contractor,Authorizer 与开放平台帐号主体不相同"),
+
+ /**
+ * open not exists,该公众号/小程序未绑定微信开放平台帐号。 open not exists
+ */
+ CODE_89002(89002, "open not exists,该公众号/小程序未绑定微信开放平台帐号。"),
+
+ /**
+ * 该开放平台帐号并非通过 api 创建,不允许操作 open is not created by api
+ */
+ CODE_89003(89003, "该开放平台帐号并非通过 api 创建,不允许操作"),
+
+ /**
+ * 该开放平台帐号所绑定的公众号/小程序已达上限(100 个)
+ */
+ CODE_89004(89004, "该开放平台帐号所绑定的公众号/小程序已达上限(100 个)"),
+
+ /**
+ * without add video ability, the ability was banned
+ */
+ CODE_89005(89005, "without add video ability, the ability was banned"),
+
+ /**
+ * without upload video ability, the ability was banned
+ */
+ CODE_89006(89006, "without upload video ability, the ability was banned"),
+
+ /**
+ * wxa quota limit
+ */
+ CODE_89007(89007, "wxa quota limit"),
+
+ /**
+ * overseas account can not link
+ */
+ CODE_89008(89008, "overseas account can not link"),
+
+ /**
+ * wxa reach link limit
+ */
+ CODE_89009(89009, "wxa reach link limit"),
+
+ /**
+ * link message has sent
+ */
+ CODE_89010(89010, "link message has sent"),
+
+ /**
+ * can not unlink nearby wxa
+ */
+ CODE_89011(89011, "can not unlink nearby wxa"),
+
+ /**
+ * can not unlink store or mall
+ */
+ CODE_89012(89012, "can not unlink store or mall"),
+
+ /**
+ * wxa is banned
+ */
+ CODE_89013(89013, "wxa is banned"),
+
+ /**
+ * support version error
+ */
+ CODE_89014(89014, "support version error"),
+
+ /**
+ * has linked wxa
+ */
+ CODE_89015(89015, "has linked wxa"),
+
+ /**
+ * reach same realname quota
+ */
+ CODE_89016(89016, "reach same realname quota"),
+
+ /**
+ * reach different realname quota
+ */
+ CODE_89017(89017, "reach different realname quota"),
+
+ /**
+ * unlink message has sent
+ */
+ CODE_89018(89018, "unlink message has sent"),
+
+ /**
+ * 业务域名无更改,无需重复设置 webview domain not change
+ */
+ CODE_89019(89019, "业务域名无更改,无需重复设置"),
+
+ /**
+ * 尚未设置小程序业务域名,请先在第三方平台中设置小程序业务域名后在调用本接口 open's webview domain is null! Need to set open's webview domain first!
+ */
+ CODE_89020(89020, "尚未设置小程序业务域名,请先在第三方平台中设置小程序业务域名后在调用本接口"),
+
+ /**
+ * 请求保存的域名不是第三方平台中已设置的小程序业务域名或子域名 request domain is not open's webview domain!
+ */
+ CODE_89021(89021, "请求保存的域名不是第三方平台中已设置的小程序业务域名或子域名"),
+
+ /**
+ * delete domain is not exist!
+ */
+ CODE_89022(89022, "delete domain is not exist!"),
+
+ /**
+ * 业务域名数量超过限制,最多可以添加100个业务域名 webview domain exceed limit
+ */
+ CODE_89029(89029, "业务域名数量超过限制,最多可以添加100个业务域名"),
+
+ /**
+ * operation reach month limit
+ */
+ CODE_89030(89030, "operation reach month limit"),
+
+ /**
+ * user bind reach limit
+ */
+ CODE_89031(89031, "user bind reach limit"),
+
+ /**
+ * weapp bind members reach limit
+ */
+ CODE_89032(89032, "weapp bind members reach limit"),
+
+ /**
+ * empty wx or openid
+ */
+ CODE_89033(89033, "empty wx or openid"),
+
+ /**
+ * userstr is invalid
+ */
+ CODE_89034(89034, "userstr is invalid"),
+
+ /**
+ * linking from mp
+ */
+ CODE_89035(89035, "linking from mp"),
+
+ /**
+ * 个人小程序不支持调用 setwebviewdomain 接口 not support single
+ */
+ CODE_89231(89231, "个人小程序不支持调用 setwebviewdomain 接口"),
+
+ /**
+ * hit black contractor
+ */
+ CODE_89235(89235, "hit black contractor"),
+
+ /**
+ * 该插件不能申请 this plugin can not apply
+ */
+ CODE_89236(89236, "该插件不能申请"),
+
+ /**
+ * 已经添加该插件 plugin has send apply message or already bind
+ */
+ CODE_89237(89237, "已经添加该插件"),
+
+ /**
+ * 申请或使用的插件已经达到上限 plugin count reach limit
+ */
+ CODE_89238(89238, "申请或使用的插件已经达到上限"),
+
+ /**
+ * 该插件不存在 plugin no exist
+ */
+ CODE_89239(89239, "该插件不存在"),
+
+ /**
+ * only applying status can be agreed or refused
+ */
+ CODE_89240(89240, "only applying status can be agreed or refused"),
+
+ /**
+ * only refused status can be deleted, please refused first
+ */
+ CODE_89241(89241, "only refused status can be deleted, please refused first"),
+
+ /**
+ * appid is no in the apply list, make sure appid is right
+ */
+ CODE_89242(89242, "appid is no in the apply list, make sure appid is right"),
+
+ /**
+ * 该申请为“待确认”状态,不可删除 can not delete apply request in 24 hours
+ */
+ CODE_89243(89243, "该申请为“待确认”状态,不可删除"),
+
+ /**
+ * 不存在该插件 appid plugin appid is no in the plugin list, make sure plugin appid is right
+ */
+ CODE_89244(89244, "不存在该插件 appid"),
+
+ /**
+ * mini program forbidden to link
+ */
+ CODE_89245(89245, "mini program forbidden to link"),
+
+ /**
+ * plugins with special category are used only by specific apps
+ */
+ CODE_89246(89246, "plugins with special category are used only by specific apps"),
+
+ /**
+ * 系统内部错误 inner error, retry after some while
+ */
+ CODE_89247(89247, "系统内部错误"),
+
+ /**
+ * invalid code type
+ */
+ CODE_89248(89248, "invalid code type"),
+
+ /**
+ * task running
+ */
+ CODE_89249(89249, "task running"),
+
+ /**
+ * 内部错误 inner error, retry after some while
+ */
+ CODE_89250(89250, "内部错误"),
+
+ /**
+ * 模板消息已下发,待法人人脸核身校验 legal person checking
+ */
+ CODE_89251(89251, "模板消息已下发,待法人人脸核身校验"),
+
+ /**
+ * 法人&企业信息一致性校验中 front checking
+ */
+ CODE_89253(89253, "法人&企业信息一致性校验中"),
+
+ /**
+ * lack of some component rights
+ */
+ CODE_89254(89254, "lack of some component rights"),
+
+ /**
+ * code参数无效,请检查code长度以及内容是否正确;注意code_type的值不同需要传的code长度不一样 enterprise code invalid
+ */
+ CODE_89255(89255, "code参数无效,请检查code长度以及内容是否正确;注意code_type的值不同需要传的code长度不一样"),
+
+ /**
+ * token 信息有误 no component info
+ */
+ CODE_89256(89256, "token 信息有误"),
+
+ /**
+ * 该插件版本不支持快速更新 no such version
+ */
+ CODE_89257(89257, "该插件版本不支持快速更新"),
+
+ /**
+ * 当前小程序帐号存在灰度发布中的版本,不可操作快速更新 code is gray online
+ */
+ CODE_89258(89258, "当前小程序帐号存在灰度发布中的版本,不可操作快速更新"),
+
+ /**
+ * zhibo plugin is not allow to delete
+ */
+ CODE_89259(89259, "zhibo plugin is not allow to delete"),
+
+ /**
+ * 订单无效 invalid trade
+ */
+ CODE_89300(89300, "订单无效"),
+
+ /**
+ * 系统不稳定,请稍后再试,如多次失败请通过社区反馈
+ */
+ CODE_89401(89401, "系统不稳定,请稍后再试,如多次失败请通过社区反馈"),
+
+ /**
+ * 该小程序不在待审核队列,请检查是否已提交审核或已审完
+ */
+ CODE_89402(89402, "该小程序不在待审核队列,请检查是否已提交审核或已审完"),
+
+ /**
+ * 本单属于平台不支持加急种类,请等待正常审核流程
+ */
+ CODE_89403(89403, "本单属于平台不支持加急种类,请等待正常审核流程"),
+
+ /**
+ * 本单已加速成功,请勿重复提交
+ */
+ CODE_89404(89404, "本单已加速成功,请勿重复提交"),
+
+ /**
+ * 本月加急额度已用完,请提高提审质量以获取更多额度
+ */
+ CODE_89405(89405, "本月加急额度已用完,请提高提审质量以获取更多额度"),
+
+ /**
+ * 公众号有未处理的确认请求,请稍候重试
+ */
+ CODE_89501(89501, "公众号有未处理的确认请求,请稍候重试"),
+
+ /**
+ * 请耐心等待管理员确认
+ */
+ CODE_89502(89502, "请耐心等待管理员确认"),
+
+ /**
+ * 此次调用需要管理员确认,请耐心等候
+ */
+ CODE_89503(89503, "此次调用需要管理员确认,请耐心等候"),
+
+ /**
+ * 正在等管理员确认,请耐心等待
+ */
+ CODE_89504(89504, "正在等管理员确认,请耐心等待"),
+
+ /**
+ * 正在等管理员确认,请稍候重试
+ */
+ CODE_89505(89505, "正在等管理员确认,请稍候重试"),
+
+ /**
+ * 该IP调用求请求已被公众号管理员拒绝,请24小时后再试,建议调用前与管理员沟通确认
+ */
+ CODE_89506(89506, "该IP调用求请求已被公众号管理员拒绝,请24小时后再试,建议调用前与管理员沟通确认"),
+
+ /**
+ * 该IP调用求请求已被公众号管理员拒绝,请1小时后再试,建议调用前与管理员沟通确认
+ */
+ CODE_89507(89507, "该IP调用求请求已被公众号管理员拒绝,请1小时后再试,建议调用前与管理员沟通确认"),
+
+ /**
+ * invalid order id
+ */
+ CODE_90001(90001, "invalid order id"),
+
+ /**
+ * invalid busi id
+ */
+ CODE_90002(90002, "invalid busi id"),
+
+ /**
+ * invalid bill date
+ */
+ CODE_90003(90003, "invalid bill date"),
+
+ /**
+ * invalid bill type
+ */
+ CODE_90004(90004, "invalid bill type"),
+
+ /**
+ * invalid platform
+ */
+ CODE_90005(90005, "invalid platform"),
+
+ /**
+ * bill not exists
+ */
+ CODE_90006(90006, "bill not exists"),
+
+ /**
+ * invalid openid
+ */
+ CODE_90007(90007, "invalid openid"),
+
+ /**
+ * mp_sig error
+ */
+ CODE_90009(90009, "mp_sig error"),
+
+ /**
+ * no session
+ */
+ CODE_90010(90010, "no session"),
+
+ /**
+ * sig error
+ */
+ CODE_90011(90011, "sig error"),
+
+ /**
+ * order exist
+ */
+ CODE_90012(90012, "order exist"),
+
+ /**
+ * balance not enough
+ */
+ CODE_90013(90013, "balance not enough"),
+
+ /**
+ * order has been confirmed
+ */
+ CODE_90014(90014, "order has been confirmed"),
+
+ /**
+ * order has been canceled
+ */
+ CODE_90015(90015, "order has been canceled"),
+
+ /**
+ * order is being processed
+ */
+ CODE_90016(90016, "order is being processed"),
+
+ /**
+ * no privilege
+ */
+ CODE_90017(90017, "no privilege"),
+
+ /**
+ * invalid parameter
+ */
+ CODE_90018(90018, "invalid parameter"),
+
+ /**
+ * 不是公众号快速创建的小程序 not fast register
+ */
+ CODE_91001(91001, "不是公众号快速创建的小程序"),
+
+ /**
+ * 小程序发布后不可改名 has published
+ */
+ CODE_91002(91002, "小程序发布后不可改名"),
+
+ /**
+ * 改名状态不合法 invalid change stat
+ */
+ CODE_91003(91003, "改名状态不合法"),
+
+ /**
+ * 昵称不合法 invalid nickname
+ */
+ CODE_91004(91004, "昵称不合法"),
+
+ /**
+ * 昵称 15 天主体保护 nickname protected
+ */
+ CODE_91005(91005, "昵称 15 天主体保护"),
+
+ /**
+ * 昵称命中微信号 nickname used by username
+ */
+ CODE_91006(91006, "昵称命中微信号"),
+
+ /**
+ * 昵称已被占用 nickname used
+ */
+ CODE_91007(91007, "昵称已被占用"),
+
+ /**
+ * 昵称命中 7 天侵权保护期 nickname protected
+ */
+ CODE_91008(91008, "昵称命中 7 天侵权保护期"),
+
+ /**
+ * 需要提交材料 nickname need proof
+ */
+ CODE_91009(91009, "需要提交材料"),
+
+ /**
+ * 其他错误
+ */
+ CODE_91010(91010, "其他错误"),
+
+ /**
+ * 查不到昵称修改审核单信息
+ */
+ CODE_91011(91011, "查不到昵称修改审核单信息"),
+
+ /**
+ * 其它错误
+ */
+ CODE_91012(91012, "其它错误"),
+
+ /**
+ * 占用名字过多 lock name too more
+ */
+ CODE_91013(91013, "占用名字过多"),
+
+ /**
+ * +号规则 同一类型关联名主体不一致 diff master plus
+ */
+ CODE_91014(91014, "+号规则 同一类型关联名主体不一致"),
+
+ /**
+ * 原始名不同类型主体不一致 diff master
+ */
+ CODE_91015(91015, "原始名不同类型主体不一致"),
+
+ /**
+ * 名称占用者 ≥2 name more owner
+ */
+ CODE_91016(91016, "名称占用者 ≥2"),
+
+ /**
+ * +号规则 不同类型关联名主体不一致 other diff master plus
+ */
+ CODE_91017(91017, "+号规则 不同类型关联名主体不一致"),
+
+ /**
+ * 组织类型小程序发布后,侵权被清空昵称,需走认证改名
+ */
+ CODE_91018(91018, "组织类型小程序发布后,侵权被清空昵称,需走认证改名"),
+
+ /**
+ * 小程序正在审核中
+ */
+ CODE_91019(91019, "小程序正在审核中"),
+
+ /**
+ * 该经营资质已添加,请勿重复添加
+ */
+ CODE_92000(92000, "该经营资质已添加,请勿重复添加"),
+
+ /**
+ * 附近地点添加数量达到上线,无法继续添加
+ */
+ CODE_92002(92002, "附近地点添加数量达到上线,无法继续添加"),
+
+ /**
+ * 地点已被其它小程序占用
+ */
+ CODE_92003(92003, "地点已被其它小程序占用"),
+
+ /**
+ * 附近功能被封禁
+ */
+ CODE_92004(92004, "附近功能被封禁"),
+
+ /**
+ * 地点正在审核中
+ */
+ CODE_92005(92005, "地点正在审核中"),
+
+ /**
+ * 地点正在展示小程序
+ */
+ CODE_92006(92006, "地点正在展示小程序"),
+
+ /**
+ * 地点审核失败
+ */
+ CODE_92007(92007, "地点审核失败"),
+
+ /**
+ * 小程序未展示在该地点
+ */
+ CODE_92008(92008, "小程序未展示在该地点"),
+
+ /**
+ * 小程序未上架或不可见
+ */
+ CODE_93009(93009, "小程序未上架或不可见"),
+
+ /**
+ * 地点不存在
+ */
+ CODE_93010(93010, "地点不存在"),
+
+ /**
+ * 个人类型小程序不可用
+ */
+ CODE_93011(93011, "个人类型小程序不可用"),
+
+ /**
+ * 非普通类型小程序(门店小程序、小店小程序等)不可用
+ */
+ CODE_93012(93012, "非普通类型小程序(门店小程序、小店小程序等)不可用"),
+
+ /**
+ * 从腾讯地图获取地址详细信息失败
+ */
+ CODE_93013(93013, "从腾讯地图获取地址详细信息失败"),
+
+ /**
+ * 同一资质证件号重复添加
+ */
+ CODE_93014(93014, "同一资质证件号重复添加"),
+
+ /**
+ * 附近类目审核中
+ */
+ CODE_93015(93015, "附近类目审核中"),
+
+ /**
+ * 服务标签个数超限制(官方最多5个,自定义最多4个)
+ */
+ CODE_93016(93016, "服务标签个数超限制(官方最多5个,自定义最多4个)"),
+
+ /**
+ * 服务标签或者客服的名字不符合要求
+ */
+ CODE_93017(93017, "服务标签或者客服的名字不符合要求"),
+
+ /**
+ * 服务能力中填写的小程序appid不是同主体小程序
+ */
+ CODE_93018(93018, "服务能力中填写的小程序appid不是同主体小程序"),
+
+ /**
+ * 申请类目之后才能添加附近地点
+ */
+ CODE_93019(93019, "申请类目之后才能添加附近地点"),
+
+ /**
+ * qualification_list无效
+ */
+ CODE_93020(93020, "qualification_list无效"),
+
+ /**
+ * company_name字段为空
+ */
+ CODE_93021(93021, "company_name字段为空"),
+
+ /**
+ * credential字段为空
+ */
+ CODE_93022(93022, "credential字段为空"),
+
+ /**
+ * address字段为空
+ */
+ CODE_93023(93023, "address字段为空"),
+
+ /**
+ * qualification_list字段为空
+ */
+ CODE_93024(93024, "qualification_list字段为空"),
+
+ /**
+ * 服务appid对应的path不存在
+ */
+ CODE_93025(93025, "服务appid对应的path不存在"),
+
+ /**
+ * missing cert_serialno
+ */
+ CODE_94001(94001, "missing cert_serialno"),
+
+ /**
+ * use not register wechat pay
+ */
+ CODE_94002(94002, "use not register wechat pay"),
+
+ /**
+ * invalid sign
+ */
+ CODE_94003(94003, "invalid sign"),
+
+ /**
+ * user do not has real name info
+ */
+ CODE_94004(94004, "user do not has real name info"),
+
+ /**
+ * invalid user token
+ */
+ CODE_94005(94005, "invalid user token"),
+
+ /**
+ * appid unauthorized
+ */
+ CODE_94006(94006, "appid unauthorized"),
+
+ /**
+ * appid unbind mchid
+ */
+ CODE_94007(94007, "appid unbind mchid"),
+
+ /**
+ * invalid timestamp
+ */
+ CODE_94008(94008, "invalid timestamp"),
+
+ /**
+ * invalid cert_serialno, cert_serialno's size should be 40
+ */
+ CODE_94009(94009, "invalid cert_serialno, cert_serialno's size should be 40"),
+
+ /**
+ * invalid mch_id
+ */
+ CODE_94010(94010, "invalid mch_id"),
+
+ /**
+ * timestamp expired
+ */
+ CODE_94011(94011, "timestamp expired"),
+
+ /**
+ * appid和商户号的绑定关系不存在
+ */
+ CODE_94012(94012, "appid和商户号的绑定关系不存在"),
+
+ /**
+ * wxcode decode fail
+ */
+ CODE_95001(95001, "wxcode decode fail"),
+
+ /**
+ * wxcode recognize unautuorized
+ */
+ CODE_95002(95002, "wxcode recognize unautuorized"),
+
+ /**
+ * get product by page args invalid
+ */
+ CODE_95101(95101, "get product by page args invalid"),
+
+ /**
+ * get product materials by cond args invalid
+ */
+ CODE_95102(95102, "get product materials by cond args invalid"),
+
+ /**
+ * material id list size out of limit
+ */
+ CODE_95103(95103, "material id list size out of limit"),
+
+ /**
+ * import product frequence out of limit
+ */
+ CODE_95104(95104, "import product frequence out of limit"),
+
+ /**
+ * mp is importing products, api is rejected to import
+ */
+ CODE_95105(95105, "mp is importing products, api is rejected to import"),
+
+ /**
+ * api is rejected to import, need to set commission ratio on mp first
+ */
+ CODE_95106(95106, "api is rejected to import, need to set commission ratio on mp first"),
+
+ /**
+ * invalid image url
+ */
+ CODE_101000(101000, "无效图片链接"),
+
+ /**
+ * certificate not found
+ */
+ CODE_101001(101001, "未找到证书"),
+
+ /**
+ * not enough market quota
+ */
+ CODE_101002(101002, "not enough market quota"),
+
+ /**
+ * 入参错误
+ */
+ CODE_200002(200002, "入参错误"),
+
+ /**
+ * 此账号已被封禁,无法操作
+ */
+ CODE_200011(200011, "此账号已被封禁,无法操作"),
+
+ /**
+ * 个人模板数已达上限,上限25个
+ */
+ CODE_200012(200012, "个人模板数已达上限,上限25个"),
+
+ /**
+ * 此模板已被封禁,无法选用
+ */
+ CODE_200013(200013, "此模板已被封禁,无法选用"),
+
+ /**
+ * 模板 tid 参数错误
+ */
+ CODE_200014(200014, "模板 tid 参数错误"),
+
+ /**
+ * start 参数错误
+ */
+ CODE_200016(200016, "start 参数错误"),
+
+ /**
+ * limit 参数错误
+ */
+ CODE_200017(200017, "limit 参数错误"),
+
+ /**
+ * 类目 ids 缺失
+ */
+ CODE_200018(200018, "类目 ids 缺失"),
+
+ /**
+ * 类目 ids 不合法
+ */
+ CODE_200019(200019, "类目 ids 不合法"),
+
+ /**
+ * 关键词列表 kidList 参数错误
+ */
+ CODE_200020(200020, "关键词列表 kidList 参数错误"),
+
+ /**
+ * 场景描述 sceneDesc 参数错误
+ */
+ CODE_200021(200021, "场景描述 sceneDesc 参数错误"),
+
+ /**
+ * 禁止创建/更新商品(如商品创建功能被封禁) 或 禁止编辑&更新房间
+ */
+ CODE_300001(300001, "禁止创建/更新商品(如商品创建功能被封禁) 或 禁止编辑&更新房间"),
+
+ /**
+ * 名称长度不符合规则
+ */
+ CODE_300002(300002, "名称长度不符合规则"),
+
+ /**
+ * 价格输入不合规(如现价比原价大、传入价格非数字等)
+ */
+ CODE_300003(300003, "价格输入不合规(如现价比原价大、传入价格非数字等)"),
+
+ /**
+ * 商品名称存在违规违法内容
+ */
+ CODE_300004(300004, "商品名称存在违规违法内容"),
+
+ /**
+ * 商品图片存在违规违法内容
+ */
+ CODE_300005(300005, "商品图片存在违规违法内容"),
+
+ /**
+ * 图片上传失败(如mediaID过期)
+ */
+ CODE_300006(300006, "图片上传失败(如mediaID过期)"),
+
+ /**
+ * 线上小程序版本不存在该链接
+ */
+ CODE_300007(300007, "线上小程序版本不存在该链接"),
+
+ /**
+ * 添加商品失败
+ */
+ CODE_300008(300008, "添加商品失败"),
+
+ /**
+ * 商品审核撤回失败
+ */
+ CODE_300009(300009, "商品审核撤回失败"),
+
+ /**
+ * 商品审核状态不对(如商品审核中)
+ */
+ CODE_300010(300010, "商品审核状态不对(如商品审核中)"),
+
+ /**
+ * 操作非法(API不允许操作非API创建的商品)
+ */
+ CODE_300011(300011, "操作非法(API不允许操作非API创建的商品)"),
+
+ /**
+ * 没有提审额度(每天500次提审额度)
+ */
+ CODE_300012(300012, "没有提审额度(每天500次提审额度)"),
+
+ /**
+ * 提审失败
+ */
+ CODE_300013(300013, "提审失败"),
+
+ /**
+ * 审核中,无法删除(非零代表失败)
+ */
+ CODE_300014(300014, "审核中,无法删除(非零代表失败)"),
+
+ /**
+ * 商品未提审
+ */
+ CODE_300017(300017, "商品未提审"),
+
+ /**
+ * 商品添加成功,审核失败
+ */
+ CODE_300021(300021, "商品添加成功,审核失败"),
+
+ /**
+ * 此房间号不存在
+ */
+ CODE_300022(300022, "此房间号不存在"),
+
+ /**
+ * 房间状态 拦截(当前房间状态不允许此操作)
+ */
+ CODE_300023(300023, "房间状态 拦截(当前房间状态不允许此操作)"),
+
+ /**
+ * 商品不存在
+ */
+ CODE_300024(300024, "商品不存在"),
+
+ /**
+ * 商品审核未通过
+ */
+ CODE_300025(300025, "商品审核未通过"),
+
+ /**
+ * 房间商品数量已经满额
+ */
+ CODE_300026(300026, "房间商品数量已经满额"),
+
+ /**
+ * 导入商品失败
+ */
+ CODE_300027(300027, "导入商品失败"),
+
+ /**
+ * 房间名称违规
+ */
+ CODE_300028(300028, "房间名称违规"),
+
+ /**
+ * 主播昵称违规
+ */
+ CODE_300029(300029, "主播昵称违规"),
+
+ /**
+ * 主播微信号不合法
+ */
+ CODE_300030(300030, "主播微信号不合法"),
+
+ /**
+ * 直播间封面图不合规
+ */
+ CODE_300031(300031, "直播间封面图不合规"),
+
+ /**
+ * 直播间分享图违规
+ */
+ CODE_300032(300032, "直播间分享图违规"),
+
+ /**
+ * 添加商品超过直播间上限
+ */
+ CODE_300033(300033, "添加商品超过直播间上限"),
+
+ /**
+ * 主播微信昵称长度不符合要求
+ */
+ CODE_300034(300034, "主播微信昵称长度不符合要求"),
+
+ /**
+ * 主播微信号不存在
+ */
+ CODE_300035(300035, "主播微信号不存在"),
+
+ /**
+ * 主播微信号未实名认证
+ */
+ CODE_300036(300036, "主播微信号未实名认证"),
+
+ /**
+ * invalid file name
+ */
+ CODE_600001(600001, "invalid file name"),
+
+ /**
+ * no permission to upload file
+ */
+ CODE_600002(600002, "no permission to upload file"),
+
+ /**
+ * invalid size of source
+ */
+ CODE_600003(600003, "invalid size of source"),
+
+ /**
+ * 票据已存在
+ */
+ CODE_928000(928000, "票据已存在"),
+
+ /**
+ * 票据不存在
+ */
+ CODE_928001(928001, "票据不存在"),
+
+ /**
+ * sysem error
+ */
+ CODE_930555(930555, "sysem error"),
+
+ /**
+ * delivery timeout
+ */
+ CODE_930556(930556, "delivery timeout"),
+
+ /**
+ * delivery system error
+ */
+ CODE_930557(930557, "delivery system error"),
+
+ /**
+ * delivery logic error
+ */
+ CODE_930558(930558, "delivery logic error"),
+
+ /**
+ * 沙盒环境openid无效 invaild openid
+ */
+ CODE_930559(930559, "沙盒环境openid无效"),
+
+ /**
+ * shopid need bind first
+ */
+ CODE_930560(930560, "shopid need bind first"),
+
+ /**
+ * 参数错误 args error
+ */
+ CODE_930561(930561, "参数错误"),
+
+ /**
+ * order already exists
+ */
+ CODE_930562(930562, "order already exists"),
+
+ /**
+ * 订单不存在 order not exists
+ */
+ CODE_930563(930563, "订单不存在"),
+
+ /**
+ * 沙盒环境调用无配额 quota run out, try next day
+ */
+ CODE_930564(930564, "沙盒环境调用无配额"),
+
+ /**
+ * order finished
+ */
+ CODE_930565(930565, "order finished"),
+
+ /**
+ * not support, plz auth at mp.weixin.qq.com
+ */
+ CODE_930566(930566, "not support, plz auth at mp.weixin.qq.com"),
+
+ /**
+ * shop arg error
+ */
+ CODE_930567(930567, "shop arg error"),
+
+ /**
+ * 不支持个人类型小程序 not personal account
+ */
+ CODE_930568(930568, "不支持个人类型小程序"),
+
+ /**
+ * 已经开通不需要再开通 already open
+ */
+ CODE_930569(930569, "已经开通不需要再开通"),
+
+ /**
+ * cargo_first_class or cargo_second_class invalid
+ */
+ CODE_930570(930570, "cargo_first_class or cargo_second_class invalid"),
+
+ /**
+ * 该商户没有内测权限,请先申请权限: https://wj.qq.com/s2/7243532/fcfb/
+ */
+ CODE_930571(930571, "该商户没有内测权限,请先申请权限: https://wj.qq.com/s2/7243532/fcfb/"),
+
+ /**
+ * fee already set
+ */
+ CODE_931010(931010, "fee already set"),
+
+ /**
+ * unbind download url
+ */
+ CODE_6000100(6000100, "unbind download url"),
+
+ /**
+ * no response data
+ */
+ CODE_6000101(6000101, "no response data"),
+
+ /**
+ * response data too big
+ */
+ CODE_6000102(6000102, "response data too big"),
+
+ /**
+ * POST 数据参数不合法
+ */
+ CODE_9001001(9001001, "POST 数据参数不合法"),
+
+ /**
+ * 远端服务不可用
+ */
+ CODE_9001002(9001002, "远端服务不可用"),
+
+ /**
+ * Ticket 不合法
+ */
+ CODE_9001003(9001003, "Ticket 不合法"),
+
+ /**
+ * 获取摇周边用户信息失败
+ */
+ CODE_9001004(9001004, "获取摇周边用户信息失败"),
+
+ /**
+ * 获取商户信息失败
+ */
+ CODE_9001005(9001005, "获取商户信息失败"),
+
+ /**
+ * 获取 OpenID 失败
+ */
+ CODE_9001006(9001006, "获取 OpenID 失败"),
+
+ /**
+ * 上传文件缺失
+ */
+ CODE_9001007(9001007, "上传文件缺失"),
+
+ /**
+ * 上传素材的文件类型不合法
+ */
+ CODE_9001008(9001008, "上传素材的文件类型不合法"),
+
+ /**
+ * 上传素材的文件尺寸不合法
+ */
+ CODE_9001009(9001009, "上传素材的文件尺寸不合法"),
+
+ /**
+ * 上传失败
+ */
+ CODE_9001010(9001010, "上传失败"),
+
+ /**
+ * 帐号不合法
+ */
+ CODE_9001020(9001020, "帐号不合法"),
+
+ /**
+ * 已有设备激活率低于 50% ,不能新增设备
+ */
+ CODE_9001021(9001021, "已有设备激活率低于 50% ,不能新增设备"),
+
+ /**
+ * 设备申请数不合法,必须为大于 0 的数字
+ */
+ CODE_9001022(9001022, "设备申请数不合法,必须为大于 0 的数字"),
+
+ /**
+ * 已存在审核中的设备 ID 申请
+ */
+ CODE_9001023(9001023, "已存在审核中的设备 ID 申请"),
+
+ /**
+ * 一次查询设备 ID 数量不能超过 50
+ */
+ CODE_9001024(9001024, "一次查询设备 ID 数量不能超过 50"),
+
+ /**
+ * 设备 ID 不合法
+ */
+ CODE_9001025(9001025, "设备 ID 不合法"),
+
+ /**
+ * 页面 ID 不合法
+ */
+ CODE_9001026(9001026, "页面 ID 不合法"),
+
+ /**
+ * 页面参数不合法
+ */
+ CODE_9001027(9001027, "页面参数不合法"),
+
+ /**
+ * 一次删除页面 ID 数量不能超过 10
+ */
+ CODE_9001028(9001028, "一次删除页面 ID 数量不能超过 10"),
+
+ /**
+ * 页面已应用在设备中,请先解除应用关系再删除
+ */
+ CODE_9001029(9001029, "页面已应用在设备中,请先解除应用关系再删除"),
+
+ /**
+ * 一次查询页面 ID 数量不能超过 50
+ */
+ CODE_9001030(9001030, "一次查询页面 ID 数量不能超过 50"),
+
+ /**
+ * 时间区间不合法
+ */
+ CODE_9001031(9001031, "时间区间不合法"),
+
+ /**
+ * 保存设备与页面的绑定关系参数错误
+ */
+ CODE_9001032(9001032, "保存设备与页面的绑定关系参数错误"),
+
+ /**
+ * 门店 ID 不合法
+ */
+ CODE_9001033(9001033, "门店 ID 不合法"),
+
+ /**
+ * 设备备注信息过长
+ */
+ CODE_9001034(9001034, "设备备注信息过长"),
+
+ /**
+ * 设备申请参数不合法
+ */
+ CODE_9001035(9001035, "设备申请参数不合法"),
+
+ /**
+ * 查询起始值 begin 不合法
+ */
+ CODE_9001036(9001036, "查询起始值 begin 不合法"),
+
+ /**
+ * params invalid
+ */
+ CODE_9002008(9002008, "params invalid"),
+
+ /**
+ * shop id not exist
+ */
+ CODE_9002009(9002009, "shop id not exist"),
+
+ /**
+ * ssid or password should start with "WX"
+ */
+ CODE_9002010(9002010, "ssid or password should start with \"WX\""),
+
+ /**
+ * ssid can not include chinese
+ */
+ CODE_9002011(9002011, "ssid can not include chinese"),
+
+ /**
+ * passsword can not include chinese
+ */
+ CODE_9002012(9002012, "passsword can not include chinese"),
+
+ /**
+ * password must be between 8 and 24 characters
+ */
+ CODE_9002013(9002013, "password must be between 8 and 24 characters"),
+
+ /**
+ * device exist
+ */
+ CODE_9002016(9002016, "device exist"),
+
+ /**
+ * device not exist
+ */
+ CODE_9002017(9002017, "device not exist"),
+
+ /**
+ * the size of query list reach limit
+ */
+ CODE_9002026(9002026, "the size of query list reach limit"),
+
+ /**
+ * not allowed to modify, ensure you are an certified or component account
+ */
+ CODE_9002041(9002041, "not allowed to modify, ensure you are an certified or component account"),
+
+ /**
+ * invalid ssid, can not include none utf8 characters, and should be between 1 and 32 bytes
+ */
+ CODE_9002044(9002044, "invalid ssid, can not include none utf8 characters, and should be between 1 and 32 bytes"),
+
+ /**
+ * shop id has not be audited, this bar type is not enable
+ */
+ CODE_9002052(9002052, "shop id has not be audited, this bar type is not enable"),
+
+ /**
+ * protocol type is not same with the exist device
+ */
+ CODE_9007003(9007003, "protocol type is not same with the exist device"),
+
+ /**
+ * ssid not exist
+ */
+ CODE_9007004(9007004, "ssid not exist"),
+
+ /**
+ * device count limit
+ */
+ CODE_9007005(9007005, "device count limit"),
+
+ /**
+ * card info not exist
+ */
+ CODE_9008001(9008001, "card info not exist"),
+
+ /**
+ * card expiration time is invalid
+ */
+ CODE_9008002(9008002, "card expiration time is invalid"),
+
+ /**
+ * url size invalid, keep less than 255
+ */
+ CODE_9008003(9008003, "url size invalid, keep less than 255"),
+
+ /**
+ * url can not include chinese
+ */
+ CODE_9008004(9008004, "url can not include chinese"),
+
+ /**
+ * order_id not exist
+ */
+ CODE_9200001(9200001, "order_id not exist"),
+
+ /**
+ * order of other biz
+ */
+ CODE_9200002(9200002, "order of other biz"),
+
+ /**
+ * blocked
+ */
+ CODE_9200003(9200003, "blocked"),
+
+ /**
+ * payment notice disabled
+ */
+ CODE_9200211(9200211, "payment notice disabled"),
+
+ /**
+ * payment notice not exist
+ */
+ CODE_9200231(9200231, "payment notice not exist"),
+
+ /**
+ * payment notice paid
+ */
+ CODE_9200232(9200232, "payment notice paid"),
+
+ /**
+ * payment notice canceled
+ */
+ CODE_9200233(9200233, "payment notice canceled"),
+
+ /**
+ * payment notice expired
+ */
+ CODE_9200235(9200235, "payment notice expired"),
+
+ /**
+ * bank not allow
+ */
+ CODE_9200236(9200236, "bank not allow"),
+
+ /**
+ * freq limit
+ */
+ CODE_9200295(9200295, "freq limit"),
+
+ /**
+ * suspend payment at current time
+ */
+ CODE_9200297(9200297, "suspend payment at current time"),
+
+ /**
+ * 3rd resp decrypt error
+ */
+ CODE_9200298(9200298, "3rd resp decrypt error"),
+
+ /**
+ * 3rd resp system error
+ */
+ CODE_9200299(9200299, "3rd resp system error"),
+
+ /**
+ * 3rd resp sign error
+ */
+ CODE_9200300(9200300, "3rd resp sign error"),
+
+ /**
+ * desc empty
+ */
+ CODE_9201000(9201000, "desc empty"),
+
+ /**
+ * fee not equal items'
+ */
+ CODE_9201001(9201001, "fee not equal items'"),
+
+ /**
+ * payment info incorrect
+ */
+ CODE_9201002(9201002, "payment info incorrect"),
+
+ /**
+ * fee is 0
+ */
+ CODE_9201003(9201003, "fee is 0"),
+
+ /**
+ * payment expire date format error
+ */
+ CODE_9201004(9201004, "payment expire date format error"),
+
+ /**
+ * appid error
+ */
+ CODE_9201005(9201005, "appid error"),
+
+ /**
+ * payment order id error
+ */
+ CODE_9201006(9201006, "payment order id error"),
+
+ /**
+ * openid error
+ */
+ CODE_9201007(9201007, "openid error"),
+
+ /**
+ * return_url error
+ */
+ CODE_9201008(9201008, "return_url error"),
+
+ /**
+ * ip error
+ */
+ CODE_9201009(9201009, "ip error"),
+
+ /**
+ * order_id error
+ */
+ CODE_9201010(9201010, "order_id error"),
+
+ /**
+ * reason error
+ */
+ CODE_9201011(9201011, "reason error"),
+
+ /**
+ * mch_id error
+ */
+ CODE_9201012(9201012, "mch_id error"),
+
+ /**
+ * bill_date error
+ */
+ CODE_9201013(9201013, "bill_date error"),
+
+ /**
+ * bill_type error
+ */
+ CODE_9201014(9201014, "bill_type error"),
+
+ /**
+ * trade_type error
+ */
+ CODE_9201015(9201015, "trade_type error"),
+
+ /**
+ * bank_id error
+ */
+ CODE_9201016(9201016, "bank_id error"),
+
+ /**
+ * bank_account error
+ */
+ CODE_9201017(9201017, "bank_account error"),
+
+ /**
+ * payment_notice_no error
+ */
+ CODE_9201018(9201018, "payment_notice_no error"),
+
+ /**
+ * department_code error
+ */
+ CODE_9201019(9201019, "department_code error"),
+
+ /**
+ * payment_notice_type error
+ */
+ CODE_9201020(9201020, "payment_notice_type error"),
+
+ /**
+ * region_code error
+ */
+ CODE_9201021(9201021, "region_code error"),
+
+ /**
+ * department_name error
+ */
+ CODE_9201022(9201022, "department_name error"),
+
+ /**
+ * fee not equal finance's
+ */
+ CODE_9201023(9201023, "fee not equal finance's"),
+
+ /**
+ * refund_out_id error
+ */
+ CODE_9201024(9201024, "refund_out_id error"),
+
+ /**
+ * not combined order_id
+ */
+ CODE_9201026(9201026, "not combined order_id"),
+
+ /**
+ * partial sub order is test
+ */
+ CODE_9201027(9201027, "partial sub order is test"),
+
+ /**
+ * desc too long
+ */
+ CODE_9201029(9201029, "desc too long"),
+
+ /**
+ * sub order list size error
+ */
+ CODE_9201031(9201031, "sub order list size error"),
+
+ /**
+ * sub order repeated
+ */
+ CODE_9201032(9201032, "sub order repeated"),
+
+ /**
+ * auth_code empty
+ */
+ CODE_9201033(9201033, "auth_code empty"),
+
+ /**
+ * bank_id empty but mch_id not empty
+ */
+ CODE_9201034(9201034, "bank_id empty but mch_id not empty"),
+
+ /**
+ * sum of other fees exceed total fee
+ */
+ CODE_9201035(9201035, "sum of other fees exceed total fee"),
+
+ /**
+ * other user paying
+ */
+ CODE_9202000(9202000, "other user paying"),
+
+ /**
+ * pay process not finish
+ */
+ CODE_9202001(9202001, "pay process not finish"),
+
+ /**
+ * no refund permission
+ */
+ CODE_9202002(9202002, "no refund permission"),
+
+ /**
+ * ip limit
+ */
+ CODE_9202003(9202003, "ip limit"),
+
+ /**
+ * freq limit
+ */
+ CODE_9202004(9202004, "freq limit"),
+
+ /**
+ * user weixin account abnormal
+ */
+ CODE_9202005(9202005, "user weixin account abnormal"),
+
+ /**
+ * account balance not enough
+ */
+ CODE_9202006(9202006, "account balance not enough"),
+
+ /**
+ * refund request repeated
+ */
+ CODE_9202010(9202010, "refund request repeated"),
+
+ /**
+ * has refunded
+ */
+ CODE_9202011(9202011, "has refunded"),
+
+ /**
+ * refund exceed total fee
+ */
+ CODE_9202012(9202012, "refund exceed total fee"),
+
+ /**
+ * busi_id dup
+ */
+ CODE_9202013(9202013, "busi_id dup"),
+
+ /**
+ * not check sign
+ */
+ CODE_9202016(9202016, "not check sign"),
+
+ /**
+ * check sign failed
+ */
+ CODE_9202017(9202017, "check sign failed"),
+
+ /**
+ * sub order error
+ */
+ CODE_9202018(9202018, "sub order error"),
+
+ /**
+ * order status error
+ */
+ CODE_9202020(9202020, "order status error"),
+
+ /**
+ * unified order repeatedly
+ */
+ CODE_9202021(9202021, "unified order repeatedly"),
+
+ /**
+ * request to notification url fail
+ */
+ CODE_9203000(9203000, "request to notification url fail"),
+
+ /**
+ * http request fail
+ */
+ CODE_9203001(9203001, "http request fail"),
+
+ /**
+ * http response data error
+ */
+ CODE_9203002(9203002, "http response data error"),
+
+ /**
+ * http response data RSA decrypt fail
+ */
+ CODE_9203003(9203003, "http response data RSA decrypt fail"),
+
+ /**
+ * http response data AES decrypt fail
+ */
+ CODE_9203004(9203004, "http response data AES decrypt fail"),
+
+ /**
+ * system busy, please try again later
+ */
+ CODE_9203999(9203999, "system busy, please try again later"),
+
+ /**
+ * getrealname token error
+ */
+ CODE_9204000(9204000, "getrealname token error"),
+
+ /**
+ * getrealname user or token error
+ */
+ CODE_9204001(9204001, "getrealname user or token error"),
+
+ /**
+ * getrealname appid or token error
+ */
+ CODE_9204002(9204002, "getrealname appid or token error"),
+
+ /**
+ * finance conf not exist
+ */
+ CODE_9205000(9205000, "finance conf not exist"),
+
+ /**
+ * bank conf not exist
+ */
+ CODE_9205001(9205001, "bank conf not exist"),
+
+ /**
+ * wei ban ju conf not exist
+ */
+ CODE_9205002(9205002, "wei ban ju conf not exist"),
+
+ /**
+ * symmetric key conf not exist
+ */
+ CODE_9205010(9205010, "symmetric key conf not exist"),
+
+ /**
+ * out order id not exist
+ */
+ CODE_9205101(9205101, "out order id not exist"),
+
+ /**
+ * bill not exist
+ */
+ CODE_9205201(9205201, "bill not exist"),
+
+ /**
+ * 3rd resp pay_channel empty
+ */
+ CODE_9206000(9206000, "3rd resp pay_channel empty"),
+
+ /**
+ * 3rd resp order_id empty
+ */
+ CODE_9206001(9206001, "3rd resp order_id empty"),
+
+ /**
+ * 3rd resp bill_type_code empty
+ */
+ CODE_9206002(9206002, "3rd resp bill_type_code empty"),
+
+ /**
+ * 3rd resp bill_no empty
+ */
+ CODE_9206003(9206003, "3rd resp bill_no empty"),
+
+ /**
+ * 3rd resp empty
+ */
+ CODE_9206200(9206200, "3rd resp empty"),
+
+ /**
+ * 3rd resp not json
+ */
+ CODE_9206201(9206201, "3rd resp not json"),
+
+ /**
+ * connect 3rd error
+ */
+ CODE_9206900(9206900, "connect 3rd error"),
+
+ /**
+ * connect 3rd timeout
+ */
+ CODE_9206901(9206901, "connect 3rd timeout"),
+
+ /**
+ * read 3rd resp error
+ */
+ CODE_9206910(9206910, "read 3rd resp error"),
+
+ /**
+ * read 3rd resp timeout
+ */
+ CODE_9206911(9206911, "read 3rd resp timeout"),
+
+ /**
+ * boss error
+ */
+ CODE_9207000(9207000, "boss error"),
+
+ /**
+ * wechat pay error
+ */
+ CODE_9207001(9207001, "wechat pay error"),
+
+ /**
+ * boss param error
+ */
+ CODE_9207002(9207002, "boss param error"),
+
+ /**
+ * pay error
+ */
+ CODE_9207003(9207003, "pay error"),
+
+ /**
+ * auth_code expired
+ */
+ CODE_9207004(9207004, "auth_code expired"),
+
+ /**
+ * user balance not enough
+ */
+ CODE_9207005(9207005, "user balance not enough"),
+
+ /**
+ * card not support
+ */
+ CODE_9207006(9207006, "card not support"),
+
+ /**
+ * order reversed
+ */
+ CODE_9207007(9207007, "order reversed"),
+
+ /**
+ * user paying, need input password
+ */
+ CODE_9207008(9207008, "user paying, need input password"),
+
+ /**
+ * auth_code error
+ */
+ CODE_9207009(9207009, "auth_code error"),
+
+ /**
+ * auth_code invalid
+ */
+ CODE_9207010(9207010, "auth_code invalid"),
+
+ /**
+ * not allow to reverse when user paying
+ */
+ CODE_9207011(9207011, "not allow to reverse when user paying"),
+
+ /**
+ * order paid
+ */
+ CODE_9207012(9207012, "order paid"),
+
+ /**
+ * order closed
+ */
+ CODE_9207013(9207013, "order closed"),
+
+ /**
+ * vehicle not exists
+ */
+ CODE_9207028(9207028, "vehicle not exists"),
+
+ /**
+ * vehicle request blocked
+ */
+ CODE_9207029(9207029, "vehicle request blocked"),
+
+ /**
+ * vehicle auth error
+ */
+ CODE_9207030(9207030, "vehicle auth error"),
+
+ /**
+ * contract over limit
+ */
+ CODE_9207031(9207031, "contract over limit"),
+
+ /**
+ * trade error
+ */
+ CODE_9207032(9207032, "trade error"),
+
+ /**
+ * trade time invalid
+ */
+ CODE_9207033(9207033, "trade time invalid"),
+
+ /**
+ * channel type invalid
+ */
+ CODE_9207034(9207034, "channel type invalid"),
+
+ /**
+ * expire_time range error
+ */
+ CODE_9207050(9207050, "expire_time range error"),
+
+ /**
+ * query finance error
+ */
+ CODE_9210000(9210000, "query finance error"),
+
+ /**
+ * openid error
+ */
+ CODE_9291000(9291000, "openid error"),
+
+ /**
+ * openid appid not match
+ */
+ CODE_9291001(9291001, "openid appid not match"),
+
+ /**
+ * app_appid not exist
+ */
+ CODE_9291002(9291002, "app_appid not exist"),
+
+ /**
+ * app_appid not app
+ */
+ CODE_9291003(9291003, "app_appid not app"),
+
+ /**
+ * appid empty
+ */
+ CODE_9291004(9291004, "appid empty"),
+
+ /**
+ * appid not match access_token
+ */
+ CODE_9291005(9291005, "appid not match access_token"),
+
+ /**
+ * invalid sign
+ */
+ CODE_9291006(9291006, "invalid sign"),
+
+ /**
+ * backend logic error
+ */
+ CODE_9299999(9299999, "backend logic error"),
+
+ /**
+ * begin_time can not before now
+ */
+ CODE_9300001(9300001, "begin_time can not before now"),
+
+ /**
+ * end_time can not before now
+ */
+ CODE_9300002(9300002, "end_time can not before now"),
+
+ /**
+ * begin_time must less than end_time
+ */
+ CODE_9300003(9300003, "begin_time must less than end_time"),
+
+ /**
+ * end_time - begin_time > 1year
+ */
+ CODE_9300004(9300004, "end_time - begin_time > 1year"),
+
+ /**
+ * invalid max_partic_times
+ */
+ CODE_9300005(9300005, "invalid max_partic_times"),
+
+ /**
+ * invalid activity status
+ */
+ CODE_9300006(9300006, "invalid activity status"),
+
+ /**
+ * gift_num must >0 and <=15
+ */
+ CODE_9300007(9300007, "gift_num must >0 and <=15"),
+
+ /**
+ * invalid tiny appid
+ */
+ CODE_9300008(9300008, "invalid tiny appid"),
+
+ /**
+ * activity can not finish
+ */
+ CODE_9300009(9300009, "activity can not finish"),
+
+ /**
+ * card_info_list must >= 2
+ */
+ CODE_9300010(9300010, "card_info_list must >= 2"),
+
+ /**
+ * invalid card_id
+ */
+ CODE_9300011(9300011, "invalid card_id"),
+
+ /**
+ * card_id must belong this appid
+ */
+ CODE_9300012(9300012, "card_id must belong this appid"),
+
+ /**
+ * card_id is not swipe_card or pay.cash
+ */
+ CODE_9300013(9300013, "card_id is not swipe_card or pay.cash"),
+
+ /**
+ * some card_id is out of stock
+ */
+ CODE_9300014(9300014, "some card_id is out of stock"),
+
+ /**
+ * some card_id is invalid status
+ */
+ CODE_9300015(9300015, "some card_id is invalid status"),
+
+ /**
+ * membership or new/old tinyapp user only support one
+ */
+ CODE_9300016(9300016, "membership or new/old tinyapp user only support one"),
+
+ /**
+ * invalid logic for membership
+ */
+ CODE_9300017(9300017, "invalid logic for membership"),
+
+ /**
+ * invalid logic for tinyapp new/old user
+ */
+ CODE_9300018(9300018, "invalid logic for tinyapp new/old user"),
+
+ /**
+ * invalid activity type
+ */
+ CODE_9300019(9300019, "invalid activity type"),
+
+ /**
+ * invalid activity_id
+ */
+ CODE_9300020(9300020, "invalid activity_id"),
+
+ /**
+ * invalid help_max_times
+ */
+ CODE_9300021(9300021, "invalid help_max_times"),
+
+ /**
+ * invalid cover_url
+ */
+ CODE_9300022(9300022, "invalid cover_url"),
+
+ /**
+ * invalid gen_limit
+ */
+ CODE_9300023(9300023, "invalid gen_limit"),
+
+ /**
+ * card's end_time cannot early than act's end_time
+ */
+ CODE_9300024(9300024, "card's end_time cannot early than act's end_time"),
+
+ /**
+ * 快递侧逻辑错误,详细原因需要看 delivery_resultcode, 请先确认一下编码方式,python建议 json.dumps(b, ensure_ascii=False),php建议 json_encode($arr, JSON_UNESCAPED_UNICODE) Delivery side error
+ */
+ CODE_9300501(9300501, "快递侧逻辑错误,详细原因需要看 delivery_resultcode, 请先确认一下编码方式,python建议 json.dumps(b, ensure_ascii=False),php建议 json_encode($arr, JSON_UNESCAPED_UNICODE)"),
+
+ /**
+ * 快递公司系统错误 Delivery side sys error
+ */
+ CODE_9300502(9300502, "快递公司系统错误"),
+
+ /**
+ * delivery_id 不存在 Specified delivery id is not registerred
+ */
+ CODE_9300503(9300503, "delivery_id 不存在"),
+
+ /**
+ * service_type 不存在 Specified delivery id has beed banned
+ */
+ CODE_9300504(9300504, "service_type 不存在"),
+
+ /**
+ * Shop banned
+ */
+ CODE_9300505(9300505, "Shop banned"),
+
+ /**
+ * 运单 ID 已经存在轨迹,不可取消 Order can't cancel
+ */
+ CODE_9300506(9300506, "运单 ID 已经存在轨迹,不可取消"),
+
+ /**
+ * Token 不正确 invalid token, can't decryption or decryption result is different from the plaintext
+ */
+ CODE_9300507(9300507, "Token 不正确"),
+
+ /**
+ * order id has been used
+ */
+ CODE_9300508(9300508, "order id has been used"),
+
+ /**
+ * speed limit, retry too fast
+ */
+ CODE_9300509(9300509, "speed limit, retry too fast"),
+
+ /**
+ * invalid service type
+ */
+ CODE_9300510(9300510, "invalid service type"),
+
+ /**
+ * invalid branch id
+ */
+ CODE_9300511(9300511, "invalid branch id"),
+
+ /**
+ * 模板格式错误,渲染失败 invalid waybill template format
+ */
+ CODE_9300512(9300512, "模板格式错误,渲染失败"),
+
+ /**
+ * out of quota
+ */
+ CODE_9300513(9300513, "out of quota"),
+
+ /**
+ * add net branch fail, try update branch api
+ */
+ CODE_9300514(9300514, "add net branch fail, try update branch api"),
+
+ /**
+ * wxa appid not exist
+ */
+ CODE_9300515(9300515, "wxa appid not exist"),
+
+ /**
+ * wxa appid and current bizuin is not linked or not the same owner
+ */
+ CODE_9300516(9300516, "wxa appid and current bizuin is not linked or not the same owner"),
+
+ /**
+ * update_type 不正确,请使用"bind" 或者“unbind” invalid update_type, please use [bind] or [unbind]
+ */
+ CODE_9300517(9300517, "update_type 不正确,请使用\"bind\" 或者“unbind”"),
+
+ /**
+ * invalid delivery id
+ */
+ CODE_9300520(9300520, "invalid delivery id"),
+
+ /**
+ * the orderid is in our system, and waybill is generating
+ */
+ CODE_9300521(9300521, "the orderid is in our system, and waybill is generating"),
+
+ /**
+ * this orderid is repeated
+ */
+ CODE_9300522(9300522, "this orderid is repeated"),
+
+ /**
+ * quota is not enough; go to charge please
+ */
+ CODE_9300523(9300523, "quota is not enough; go to charge please"),
+
+ /**
+ * 订单已取消(一般为重复取消订单) order already canceled
+ */
+ CODE_9300524(9300524, "订单已取消(一般为重复取消订单)"),
+
+ /**
+ * bizid未绑定 biz id not bind
+ */
+ CODE_9300525(9300525, "bizid未绑定"),
+
+ /**
+ * 参数字段长度不正确 arg size exceed limit
+ */
+ CODE_9300526(9300526, "参数字段长度不正确"),
+
+ /**
+ * delivery does not support quota
+ */
+ CODE_9300527(9300527, "delivery does not support quota"),
+
+ /**
+ * invalid waybill_id
+ */
+ CODE_9300528(9300528, "invalid waybill_id"),
+
+ /**
+ * 账号已绑定过 biz_id already binded
+ */
+ CODE_9300529(9300529, "账号已绑定过"),
+
+ /**
+ * 解绑的biz_id不存在 biz_id is not exist
+ */
+ CODE_9300530(9300530, "解绑的biz_id不存在"),
+
+ /**
+ * bizid无效 或者密码错误 invalid biz_id or password
+ */
+ CODE_9300531(9300531, "bizid无效 或者密码错误"),
+
+ /**
+ * 绑定已提交,审核中 bind submit, and is checking
+ */
+ CODE_9300532(9300532, "绑定已提交,审核中"),
+
+ /**
+ * invalid tagid_list
+ */
+ CODE_9300533(9300533, "invalid tagid_list"),
+
+ /**
+ * add_source=2时,wx_appid和当前小程序不同主体 invalid appid, not same body
+ */
+ CODE_9300534(9300534, "add_source=2时,wx_appid和当前小程序不同主体"),
+
+ /**
+ * shop字段商品缩略图 url、商品名称为空或者非法,或者商品数量为0 invalid shop arg
+ */
+ CODE_9300535(9300535, "shop字段商品缩略图 url、商品名称为空或者非法,或者商品数量为0"),
+
+ /**
+ * add_source=2时,wx_appid无效 invalid wxa_appid
+ */
+ CODE_9300536(9300536, "add_source=2时,wx_appid无效"),
+
+ /**
+ * freq limit
+ */
+ CODE_9300537(9300537, "freq limit"),
+
+ /**
+ * input task empty
+ */
+ CODE_9300538(9300538, "input task empty"),
+
+ /**
+ * too many task
+ */
+ CODE_9300539(9300539, "too many task"),
+
+ /**
+ * task not exist
+ */
+ CODE_9300540(9300540, "task not exist"),
+
+ /**
+ * delivery callback error
+ */
+ CODE_9300541(9300541, "delivery callback error"),
+
+ /**
+ * id_card_no is invalid
+ */
+ CODE_9300601(9300601, "id_card_no is invalid"),
+
+ /**
+ * name is invalid
+ */
+ CODE_9300602(9300602, "name is invalid"),
+
+ /**
+ * plate_no is invalid
+ */
+ CODE_9300603(9300603, "plate_no is invalid"),
+
+ /**
+ * auth_key decode error
+ */
+ CODE_9300604(9300604, "auth_key decode error"),
+
+ /**
+ * auth_key is expired
+ */
+ CODE_9300605(9300605, "auth_key is expired"),
+
+ /**
+ * auth_key and appinfo not match
+ */
+ CODE_9300606(9300606, "auth_key and appinfo not match"),
+
+ /**
+ * user not confirm
+ */
+ CODE_9300607(9300607, "user not confirm"),
+
+ /**
+ * user confirm is expired
+ */
+ CODE_9300608(9300608, "user confirm is expired"),
+
+ /**
+ * api exceed limit
+ */
+ CODE_9300609(9300609, "api exceed limit"),
+
+ /**
+ * car license info is invalid
+ */
+ CODE_9300610(9300610, "car license info is invalid"),
+
+ /**
+ * varification type not support
+ */
+ CODE_9300611(9300611, "varification type not support"),
+
+ /**
+ * input param error
+ */
+ CODE_9300701(9300701, "input param error"),
+
+ /**
+ * this code has been used
+ */
+ CODE_9300702(9300702, "this code has been used"),
+
+ /**
+ * invalid date
+ */
+ CODE_9300703(9300703, "invalid date"),
+
+ /**
+ * not currently available
+ */
+ CODE_9300704(9300704, "not currently available"),
+
+ /**
+ * code not exist or expired
+ */
+ CODE_9300705(9300705, "code not exist or expired"),
+
+ /**
+ * code not exist or expired
+ */
+ CODE_9300706(9300706, "code not exist or expired"),
+
+ /**
+ * wxpay error
+ */
+ CODE_9300707(9300707, "wxpay error"),
+
+ /**
+ * wxpay overlimit
+ */
+ CODE_9300708(9300708, "wxpay overlimit"),
+
+ /**
+ * 无效的微信号
+ */
+ CODE_9300801(9300801, "无效的微信号"),
+
+ /**
+ * 服务号未开通导购功能
+ */
+ CODE_9300802(9300802, "服务号未开通导购功能"),
+
+ /**
+ * 微信号已经绑定为导购
+ */
+ CODE_9300803(9300803, "微信号已经绑定为导购"),
+
+ /**
+ * 该微信号不是导购
+ */
+ CODE_9300804(9300804, "该微信号不是导购"),
+
+ /**
+ * 微信号已经被其他账号绑定为导购
+ */
+ CODE_9300805(9300805, "微信号已经被其他账号绑定为导购"),
+
+ /**
+ * 粉丝和导购不存在绑定关系
+ */
+ CODE_9300806(9300806, "粉丝和导购不存在绑定关系"),
+
+ /**
+ * 标签值无效,不是可选标签值
+ */
+ CODE_9300807(9300807, "标签值无效,不是可选标签值"),
+
+ /**
+ * 标签值不存在
+ */
+ CODE_9300808(9300808, "标签值不存在"),
+
+ /**
+ * 展示标签值不存在
+ */
+ CODE_9300809(9300809, "展示标签值不存在"),
+
+ /**
+ * 导购昵称太长,最多16个字符
+ */
+ CODE_9300810(9300810, "导购昵称太长,最多16个字符"),
+
+ /**
+ * 只支持mmbiz.qpic.cn域名的图片
+ */
+ CODE_9300811(9300811, "只支持mmbiz.qpic.cn域名的图片"),
+
+ /**
+ * 达到导购绑定个数限制
+ */
+ CODE_9300812(9300812, "达到导购绑定个数限制"),
+
+ /**
+ * 达到导购粉丝绑定个数限制
+ */
+ CODE_9300813(9300813, "达到导购粉丝绑定个数限制"),
+
+ /**
+ * 敏感词个数超过上限
+ */
+ CODE_9300814(9300814, "敏感词个数超过上限"),
+
+ /**
+ * 快捷回复个数超过上限
+ */
+ CODE_9300815(9300815, "快捷回复个数超过上限"),
+
+ /**
+ * 文字素材个数超过上限
+ */
+ CODE_9300816(9300816, "文字素材个数超过上限"),
+
+ /**
+ * 小程序卡片素材个数超过上限
+ */
+ CODE_9300817(9300817, "小程序卡片素材个数超过上限"),
+
+ /**
+ * 图片素材个数超过上限
+ */
+ CODE_9300818(9300818, "图片素材个数超过上限"),
+
+ /**
+ * mediaid 有误
+ */
+ CODE_9300819(9300819, "mediaid 有误"),
+
+ /**
+ * 可查询标签类别超过上限
+ */
+ CODE_9300820(9300820, "可查询标签类别超过上限"),
+
+ /**
+ * 小程序卡片内appid不符合要求
+ */
+ CODE_9300821(9300821, "小程序卡片内appid不符合要求"),
+
+ /**
+ * 标签类别的名字无效
+ */
+ CODE_9300822(9300822, "标签类别的名字无效"),
+
+ /**
+ * 查询聊天记录时间参数有误
+ */
+ CODE_9300823(9300823, "查询聊天记录时间参数有误"),
+
+ /**
+ * 自动回复字数太长
+ */
+ CODE_9300824(9300824, "自动回复字数太长"),
+
+ /**
+ * 导购群组id错误
+ */
+ CODE_9300825(9300825, "导购群组id错误"),
+
+ /**
+ * 维护中
+ */
+ CODE_9300826(9300826, "维护中"),
+
+ /**
+ * invalid parameter
+ */
+ CODE_9301001(9301001, "invalid parameter"),
+
+ /**
+ * call api service failed
+ */
+ CODE_9301002(9301002, "call api service failed"),
+
+ /**
+ * internal exception
+ */
+ CODE_9301003(9301003, "internal exception"),
+
+ /**
+ * save data error
+ */
+ CODE_9301004(9301004, "save data error"),
+
+ /**
+ * invalid appid
+ */
+ CODE_9301006(9301006, "invalid appid"),
+
+ /**
+ * invalid api config
+ */
+ CODE_9301007(9301007, "invalid api config"),
+
+ /**
+ * invalid api info
+ */
+ CODE_9301008(9301008, "invalid api info"),
+
+ /**
+ * add result check failed
+ */
+ CODE_9301009(9301009, "add result check failed"),
+
+ /**
+ * consumption failure
+ */
+ CODE_9301010(9301010, "consumption failure"),
+
+ /**
+ * frequency limit reached
+ */
+ CODE_9301011(9301011, "frequency limit reached"),
+
+ /**
+ * service timeout
+ */
+ CODE_9301012(9301012, "service timeout"),
+
+ /**
+ * 该开发小程序已开通小程序直播权限,不支持发布版本。如需发版,请解绑开发小程序后再操作。
+ */
+ CODE_9400001(9400001, "该开发小程序已开通小程序直播权限,不支持发布版本。如需发版,请解绑开发小程序后再操作。"),
+
+ /**
+ * 商品已存在
+ */
+ CODE_9401001(9401001, "商品已存在"),
+
+ /**
+ * 商品不存在
+ */
+ CODE_9401002(9401002, "商品不存在"),
+
+ /**
+ * 类目已存在
+ */
+ CODE_9401003(9401003, "类目已存在"),
+
+ /**
+ * 类目不存在
+ */
+ CODE_9401004(9401004, "类目不存在"),
+
+ /**
+ * SKU已存在
+ */
+ CODE_9401005(9401005, "SKU已存在"),
+
+ /**
+ * SKU不存在
+ */
+ CODE_9401006(9401006, "SKU不存在"),
+
+ /**
+ * 属性已存在
+ */
+ CODE_9401007(9401007, "属性已存在"),
+
+ /**
+ * 属性不存在
+ */
+ CODE_9401008(9401008, "属性不存在"),
+
+ /**
+ * 非法参数
+ */
+ CODE_9401020(9401020, "非法参数"),
+
+ /**
+ * 没有商品权限
+ */
+ CODE_9401021(9401021, "没有商品权限"),
+
+ /**
+ * SPU NOT ALLOW
+ */
+ CODE_9401022(9401022, "SPU NOT ALLOW"),
+
+ /**
+ * SPU_NOT_ALLOW_EDIT
+ */
+ CODE_9401023(9401023, "SPU_NOT_ALLOW_EDIT"),
+
+ /**
+ * SKU NOT ALLOW
+ */
+ CODE_9401024(9401024, "SKU NOT ALLOW"),
+
+ /**
+ * SKU_NOT_ALLOW_EDIT
+ */
+ CODE_9401025(9401025, "SKU_NOT_ALLOW_EDIT"),
+
+ /**
+ * limit too large
+ */
+ CODE_9402001(9402001, "limit too large"),
+
+ /**
+ * single send been blocked
+ */
+ CODE_9402002(9402002, "single send been blocked"),
+
+ /**
+ * all send been blocked
+ */
+ CODE_9402003(9402003, "all send been blocked"),
+
+ /**
+ * invalid msg id
+ */
+ CODE_9402004(9402004, "invalid msg id"),
+
+ /**
+ * send msg too quick
+ */
+ CODE_9402005(9402005, "send msg too quick"),
+
+ /**
+ * send to single user too quick
+ */
+ CODE_9402006(9402006, "send to single user too quick"),
+
+ /**
+ * send to all user too quick
+ */
+ CODE_9402007(9402007, "send to all user too quick"),
+
+ /**
+ * send type error
+ */
+ CODE_9402008(9402008, "send type error"),
+
+ /**
+ * can not send this msg
+ */
+ CODE_9402009(9402009, "can not send this msg"),
+
+ /**
+ * content too long or no content
+ */
+ CODE_9402010(9402010, "content too long or no content"),
+
+ /**
+ * path not exist
+ */
+ CODE_9402011(9402011, "path not exist"),
+
+ /**
+ * contain evil word
+ */
+ CODE_9402012(9402012, "contain evil word"),
+
+ /**
+ * path need html suffix
+ */
+ CODE_9402013(9402013, "path need html suffix"),
+
+ /**
+ * not open to personal body type
+ */
+ CODE_9402014(9402014, "not open to personal body type"),
+
+ /**
+ * not open to violation body type
+ */
+ CODE_9402015(9402015, "not open to violation body type"),
+
+ /**
+ * not open to low quality provider
+ */
+ CODE_9402016(9402016, "not open to low quality provider"),
+
+ /**
+ * invalid product_id
+ */
+ CODE_9402101(9402101, "invalid product_id"),
+
+ /**
+ * device_id count more than limit
+ */
+ CODE_9402102(9402102, "device_id count more than limit"),
+
+ /**
+ * 请勿频繁提交,待上一次操作完成后再提交 concurrent limit
+ */
+ CODE_9402202(9402202, "请勿频繁提交,待上一次操作完成后再提交"),
+
+ /**
+ * user not book this ad id
+ */
+ CODE_9402301(9402301, "user not book this ad id"),
+
+ /**
+ * 消息类型错误!
+ */
+ CODE_9403000(9403000, "消息类型错误!"),
+
+ /**
+ * 消息字段的内容过长!
+ */
+ CODE_9403001(9403001, "消息字段的内容过长!"),
+
+ /**
+ * 消息字段的内容违规!
+ */
+ CODE_9403002(9403002, "消息字段的内容违规!"),
+
+ /**
+ * 发送的微信号太多!
+ */
+ CODE_9403003(9403003, "发送的微信号太多!"),
+
+ /**
+ * 存在错误的微信号!
+ */
+ CODE_9403004(9403004, "存在错误的微信号!"),
+
+ /**
+ * 直播间列表为空 live room not exsits
+ */
+ CODE_9410000(9410000, "直播间列表为空"),
+
+ /**
+ * 获取房间失败 inner error: get room fail
+ */
+ CODE_9410001(9410001, "获取房间失败"),
+
+ /**
+ * 获取商品失败 inner error: get goods fail
+ */
+ CODE_9410002(9410002, "获取商品失败"),
+
+ /**
+ * 获取回放失败 inner error: get replay url fail
+ */
+ CODE_9410003(9410003, "获取回放失败");
+
+
+ private final int code;
+ private final String msg;
+
+ WxOpenErrorMsgEnum(int code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ static final Map valueMap = Maps.newHashMap();
+
+ static {
+ for (WxOpenErrorMsgEnum value : WxOpenErrorMsgEnum.values()) {
+ valueMap.put(value.code, value.msg);
}
+ }
+
+ /**
+ * 通过错误代码查找其中文含义.
+ */
+ public static String findMsgByCode(int code) {
+ return valueMap.getOrDefault(code, null);
+ }
}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonParser.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonParser.java
index 53f51e0f3e..061a3cb2ee 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonParser.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonParser.java
@@ -3,7 +3,6 @@
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.stream.JsonReader;
-import lombok.NoArgsConstructor;
import java.io.Reader;
From 08ea0bd9df913c9b5160b76b01997ac4c085af01 Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Fri, 4 Mar 2022 15:07:47 +0800
Subject: [PATCH 0073/1155] =?UTF-8?q?:art:=20StorageType=E6=9E=9A=E4=B8=BE?=
=?UTF-8?q?=E7=B1=BB=E5=A2=9E=E5=8A=A0Redisson?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../spring/starter/wxjava/miniapp/enums/StorageType.java | 4 ++++
.../spring/starter/wxjava/mp/enums/StorageType.java | 4 ++++
.../spring/starter/wxjava/qidian/enums/StorageType.java | 4 ++++
3 files changed, 12 insertions(+)
diff --git a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/enums/StorageType.java b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/enums/StorageType.java
index 9328980bb2..bf9fd6b175 100644
--- a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/enums/StorageType.java
+++ b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/enums/StorageType.java
@@ -15,6 +15,10 @@ public enum StorageType {
* redis(JedisClient).
*/
Jedis,
+ /**
+ * redis(Redisson).
+ */
+ Redisson,
/**
* redis(RedisTemplate).
*/
diff --git a/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/StorageType.java b/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/StorageType.java
index 7dcb5a1157..4bf4b07890 100644
--- a/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/StorageType.java
+++ b/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/StorageType.java
@@ -15,6 +15,10 @@ public enum StorageType {
* redis(JedisClient).
*/
Jedis,
+ /**
+ * redis(Redisson).
+ */
+ Redisson,
/**
* redis(RedisTemplate).
*/
diff --git a/spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/enums/StorageType.java b/spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/enums/StorageType.java
index 0a7a6b85df..e6ae0cab4f 100644
--- a/spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/enums/StorageType.java
+++ b/spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/enums/StorageType.java
@@ -15,6 +15,10 @@ public enum StorageType {
* redis(JedisClient).
*/
Jedis,
+ /**
+ * redis(Redisson).
+ */
+ Redisson,
/**
* redis(RedisTemplate).
*/
From 2c27f8bc5a032acda8701723d654098ba5643c0f Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Fri, 4 Mar 2022 15:09:01 +0800
Subject: [PATCH 0074/1155] =?UTF-8?q?:bug:=20#2553=20=E3=80=90=E5=85=AC?=
=?UTF-8?q?=E4=BC=97=E5=8F=B7=E3=80=91=E4=BF=AE=E5=A4=8D=E8=8D=89=E7=A8=BF?=
=?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E=E5=80=BC?=
=?UTF-8?q?=E5=A4=9A=E5=8F=8C=E5=BC=95=E5=8F=B7=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../me/chanjar/weixin/mp/api/impl/WxMpDraftServiceImpl.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDraftServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDraftServiceImpl.java
index 96ff9f70b6..fb173b1ebb 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDraftServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDraftServiceImpl.java
@@ -43,13 +43,13 @@ public String addDraft(String title, String content, String thumbMediaId) throws
@Override
public String addDraft(WxMpAddDraft addDraft) throws WxErrorException {
String json = this.mpService.post(WxMpApiUrl.Draft.ADD_DRAFT, addDraft);
- return GsonParser.parse(json).get(MEDIA_ID).toString();
+ return GsonParser.parse(json).get(MEDIA_ID).getAsString();
}
@Override
public Boolean updateDraft(WxMpUpdateDraft updateDraftInfo) throws WxErrorException {
String json = this.mpService.post(WxMpApiUrl.Draft.UPDATE_DRAFT, updateDraftInfo);
- return GsonParser.parse(json).get(ERRCODE).toString().equals(ERRCODE_SUCCESS);
+ return GsonParser.parse(json).get(ERRCODE).getAsString().equals(ERRCODE_SUCCESS);
}
@Override
@@ -62,7 +62,7 @@ public WxMpDraftInfo getDraft(String mediaId) throws WxErrorException {
public Boolean delDraft(String mediaId) throws WxErrorException {
String json = this.mpService.post(WxMpApiUrl.Draft.DEL_DRAFT,
GsonHelper.buildJsonObject(MEDIA_ID, mediaId));
- return GsonParser.parse(json).get(ERRCODE).toString().equals(ERRCODE_SUCCESS);
+ return GsonParser.parse(json).get(ERRCODE).getAsString().equals(ERRCODE_SUCCESS);
}
@Override
From 61f1179bdb18af74d813c5ca0986e2679070347d Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Sun, 6 Mar 2022 22:32:55 +0800
Subject: [PATCH 0075/1155] =?UTF-8?q?:art:=20XmlUtils=E5=B7=A5=E5=85=B7?=
=?UTF-8?q?=E7=B1=BB=E4=BC=98=E5=8C=96=EF=BC=8C=E6=94=AF=E6=8C=81=E5=8F=98?=
=?UTF-8?q?=E6=80=81=E5=BE=AE=E4=BF=A1=E6=B6=88=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../chanjar/weixin/common/util/XmlUtils.java | 44 ++++++++++---
.../weixin/common/util/XmlUtilsTest.java | 65 +++++++++++++------
2 files changed, 81 insertions(+), 28 deletions(-)
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/XmlUtils.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/XmlUtils.java
index 91c6b8f2ec..7f7494431b 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/XmlUtils.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/XmlUtils.java
@@ -3,7 +3,6 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.error.WxRuntimeException;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
@@ -15,6 +14,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
/**
*
@@ -50,8 +50,8 @@ public static Map xml2Map(String xmlString) {
private static Object element2MapOrString(Element element) {
- final List content = element.content();
- final Set names = names(content);
+ final List nodes = element.content();
+ final List names = names(nodes);
// 判断节点下有无非文本节点(非Text和CDATA),如无,直接取Text文本内容
if (names.size() < 1) {
@@ -59,10 +59,11 @@ private static Object element2MapOrString(Element element) {
}
Map result = Maps.newHashMap();
- if (names.size() == 1) {
+ Set distinctNames = Sets.newHashSet(names);
+ if (distinctNames.size() == 1) {
// 说明是个列表,各个子对象是相同的name
List
-
- 赞助商招募中,欢迎微信联系洽谈
+
+
+
+
diff --git a/images/banners/diboot.png b/images/banners/diboot.png
new file mode 100644
index 0000000000000000000000000000000000000000..74b28b4fecc53738906ecc004f5b3544b4b75a26
GIT binary patch
literal 374915
zcmZ_#2T;@9_5}=E03n1PAQVA*=m{Xbh2DD!2uK1#P(YAgl>h-k=tYnkx(ZSSM39nD
zrHj&)A_~$4K}Gb<^LX$5f8Wgeo|#N0nO`Pz_St3awf0G}Fw>_4Z~`t|xIkxUpksC6
z0)^a#3zxX5smR~Z^#0}|zg-Nl($~81Y@B}YP3?fqO>5{;FMY)}mcvfpK+p-H+V8@7yf#<@OiG7V`+)yZ_G)bpG`SWCO^|M^@KB6{ctwmB(ZXLvosdclkTZ7j%{n^eQYfs(^3?vM87V5
z`{4Y>(ZW<_mX7SODM1%~YdAQ-`Dc?&)Ypn)>BWzsWB2ODWc0GKQ>LroH4o1XvRVRE
z_OBpIgq3E6_a4HnUuEmmg&1|+n7TIWD81c$tJ^`wB?W&&bWnQ2^qS!5OP#%l;nBoS
zDyHuqt-VE+hj|mU+Zg*+rgx^D^BIQz6;Y}3xj{D*N3SG0eSRvK=ltbE3bu==Gwe_d<)J_&@=|rWKl?(>4eQXUu7>Y0;&n5GDR_R7?T|
z5=>j454ZbFms~QtV|K;yR-|&b*EL0u$?N|eiex#E4PS)Syq-WLiS*h{&h
z9xw2XN+}_n|C_Q`iK+XII;W5v{LNez{l^z6(=_dL62*Fn8g8{UND)m$zIV3(GIh1o
zpMs9;ED2tke7$DvdBA)ODX>9B09yj
z`p8Qy;31fj64sXk;nN{Kxcl1JP)%sps!7VnD3LL9T7&P*(tEN@yRA0BgrmEZ%bBuk
zvy?qyhNepkq#Ly<_C?$+d5PDo`p*s6PDPpH
zyEx}Xq|OE$o`g%I;?+2n>e~y=tx6vn>5MDYmR_4qvZIv@b4KTG-^tv*W79_&PcP{@
z^Et58%m~MJJf0_66GV_o&`Lb!sI<;m@-0(UzGqdFK05_cHfnM^cztJk0yng;I$c#7
zk}$}qVglI6C1s2Ln&_*YBa+}cUZlxjwa
zn^K%Qcc&P`D|W;`VbF))0|kIALki*r5V0t*7&$Yqoy%^%qON(
z!IQh~E4j(sF~z?|SwsiY}NI{VzH
zmxjvT6&%0cI5ItA(u)UIG?PManI(>6T!5@}D8e17T+jsZ-fX0V_@m@o@c}u0z1-}V
zDbF`2wsr4EONYmeFG;m{hFlX8>Js6{d@UQA;>T`T5{BHsG}=ZTQ_niDhv&>vr7a3k
zz0$(}@$G-WES=2=hih$SbTGpzy0k~=aU38(#eK&In{QEx@J@?#ncQkif`FFJcH>B4W%
za8A0#&ZNTI>^})wR~`o!H%EAz%2&t>aGDSIL*cosJ3m
z_)Q*IUc^zvB!MD{z9OyyOnh8uCfKBsUg{a&PaEsPYO*w+Gn-<@e-=E9=!(C*Dax(G
zZX9k*9o4VRIm;NnOxzUXnFO!tRe!~8UXR1^Y+TpMo5d(eIEre1gz3buX#*rLv4qNd
zicDn}X=XXyEuXxGRq}Fw#c&xr>Bse0yz5LaC*Vf9Y*5la*^RJK!
zi30@Z9eTPP!R(=L&{-^Nj)Ytq0pg4kelamtQOae?Hq+5^1E!{A5<>(jdC-8M0{~9Z
znW6LY8cWl=^zbnMp>tF_Kus~bJ>%+I7jDpXghw^e%4U(Gum7em3PXvIC19OyLPS>Q)lh;AC-
z+qI}?a3I-!mp8KxBb-5!*vi7#@ijOlQAZgt7Rj!cN&|bvfzvW)5dQWNFX&hU^|;EE
zZGog_2C+lbXRMvlm5p1i@dmUEuo=L0C5)y0PuVORt;WzxEurYk@p|@V%To7+6LxTilGiKv|
zW1>gJi<5QxtY#x?{iJP>g21Z|2xyI#e)y&myixmSH7PwMxtEh^f#jDuqBugUjbCri
z20=5YMTGSHBH#?lv=LLzGifdWHsBS}9qVBYQPi=)4TiQCdERfRFN*HyHCfQIfy750
z3>-HUB~c&+E;*c~xj6v9QU!q(yy-Ub!ZCnYpQKFVL}jvRDp3--9@R7s7K?E*j|&iO
z;!Sdpeq@3=85@e5HA3L!=TsC!GB;E@f^I-8NMn)GNvNgOFYj+yNV
z<%S{Oj7Rk}7?ZFSh6Jzz6)elH7{kN7K6=gUK&YHbZuLZRc_47MD=UYlq3Wvj_hQ!c
z9v6ye+d%v%K6XT6m|-8^hp{?NLaS593e`_O#|fbSg@%^_Ks&y59cpm?Tu}lU3;hF!
zNHq;iI1X$na;@lbwTWZ_2b-G)4(%%vPJ0IJ&Kp+#jLeC+n9Dvv%v^hscT+Bo@GBbl
z@f$&;O@E`)Rh>3xUkm>M9sCl&YRM;HGAbHm=4LciR^PyTe#w)Lpa~~n_;tG@sH66f
z#~u0Wm?Y&hn?xEy8>P0HqNEth{b^#EE^x&I7H(J$?xb^o&Cpg|q3jZB(L{#p>R9j%
zxV&(>>0tNB>PH>(2)#IFzK(jRgN-e(U8Xkkk(IaWvUJoh3Db5d3Q{Tk(D(Ip*spsx
z-zo+#vJSlZbST3y`+;Zsg~jGdSb&LSWW}I7C8Ids3v&=~B>P$!C50BOw?b=@Ut4SM
z@kuRI+kjd(&4J1Yh~yf+W6zJxzv-6S_$))7f0vsmhTe2LKqw2wLwg~jSpipB6+SwA
zE3nvvYFpzEKq|3+YzCR+{;5b+7b&U!W(7aL?@2w-%r}nN_Ha{rPu?xP`>PLN&QC1l
z;wmL*6JXN!F9ZOt*iM^$YH&56X7Lwm9vil-PksAQh}e7Ry+Cj$0T<8yHyunU!i1HZA~B(T-8(+wr$yF5(-?*{*y8
zDue``B=Gm%S~gLyIco%(qhESES~TjO^k!1om-(+ZJU~CL3Y@W&@UbzzlU$y4xkwU2OtQp<$=&|C@CMw6P1<^aq|=A#(!B|Yh4^car$JTw
z<#t5T2%=52)c?i(%HKjyPcI@}oIiFjhKBc#%FD^z*Ntv_6cd-EGTY9M3ObCG2pA*&
zTH_lP-6UE>OLrWFPZqy-B0cNPrX8RU-uFcdIUTbz
zpn4t*D{c{bAKNd|DxQl~TisHp!?F3xebSk_hJBo`8qlg~PW!3abyL3*{G^<~i)xUK
zjLjapOMVC*u0?HBcnu`!USLkc`pcBR^5S-}H{G^ar-uzAbgD02-;b+O)DO?D^zk(H
z=a^g12hH26+v*+#tQ@ng^?DQN-f7JgwO1v!ouzqjCY@wX&a0U)m`SJMJ{1c#5Iw!7
zSJi`*@hIR6hn`YqMW!;TQG|!(X(c#(t`(_5AOT>b9k9^u3s^=e5?h|md^yT@!Hq~f
z$ja|bSXc?U(Ezwu4M;6rU0GRy(m|kw5IAu!^dH1YUM%Hb-A2>*ErpK?rvSn+?ln}D
zfKNS$UFXENw*haJ5D3M@Fv@fA=(etBbeqxAe6ct}6>2j*z7)I>MQHsT^2I?v?-auW
zHklmG*UhW7F1YGQ3OKfx
zip0>UA%cOS&xs&OC6JKOuaTatkV5S(!}W#GQvp
z^AG2IO1Mw-wsj!&aiYXR5bQFJkF&eBz^~xB@3R|}X|Oe{D~?u}P}q*S6gR*h`H^g=
zlM|?#dfv6b7Qq*W{WT4IXiGO$uU_4Rii1a?T|B*iW0QM8b2aAXX1+U)HzD$G;V6l*W+IP)#47B04)Kv-nHP!JupZR|6B1@wa
zxRJ}aZ*9p*FUCN!iOcHmuj}AN>!p24eFn`oB7=obF{3<%`O?JAUQ2U8-7!R&odQT
zuhIq&2K<9({JtxdsY-hvjH7ku$pM&XImn?&l}y!88_HuB&W3Vesbfsw}>O*O`p=pd+u=l=`3@w|-^gS;k}oTq+pH
zH+J|6={3ME$a{kYZk;v5Z`f<;R{37(7wd1%}&C
zvXqxMuovk@8MT1@=*sKS1`B8Dqx*1)HrmEQv-x`GF=$yFE&o8B5~bLYvqk61D4*D1
zd|~}bJ33xTJ29=BCGV&Yp^)Y2*u_@6%6l^Kd*Wh5`CAZ3X4af4kcVE<0MVr^oXjjQ
zfg$fUMt}vtBMiE3BAqr08$FVp8nz!}EIT|stNy=|&oKB;I~Ah(FTzhKVHoqHDapEPhp|u`q(LF)kNRf3ms19=+8R>(+RQ#ORH+x5^a1WbmBt
z>m;#S*;kAJIiMkOt4Q=T(S4~oi{^h@l36eqwIXe^@6f5~nbk
z9Cdj@dNwlkEZXr=x8*a1o+*(@fjG)|vODg=&CNuV1C-N8r)boaVhs=@Xfq?zr%$Tv
z#_(>6!cUcI5YDHK&2Tm02%j{#Z`j*j5Eg&eL2!Gw1^QH#dXT`#ALbjCyLaTknY)
zlU&QL=xL6>k^a1yV?|Jfw#-s?{}J`hn}oKJQMkgw{gJ}W?M4O1YD^K>b#{XE&wk0c
za_1+{-N5!_`mp?=0yh+#*yE(I0u<$Z(VBnn{@-k~IuonWm-;Xd{=e-#DXVtyvD1S8
z7==3Cv)UBj9F#eAs=YVXKV60#9ox5;%?jKI;x{B{C3=c5v4Hiom;^G#Z@u#Nl)__N
z0!P3_@#o=e%sqN2)Gk@;epU3GOdnjjx_|z>_DiOB3w>XUX53XiWL83b5QuhBInh`8kjwo_#eiX`i
zFLP7sOFw1}E+P3Z^UzS?%1C@MnlzP4krnc2jWR33WAN>$;PH4OEl`Lst7{~5x}$48
zbuAp1Fl9Mc{nb_HUKTp%cS=*qNzbGO>DoJ;Vxyt-Z-J1cqQ>(#eP)y3BYiwGRBmUT
zIq?27AP%N|iyXR^D4TK85mxMb+X{{Xw;QuVM#43bkt_%i-M99*DA6
z%~n$Oa8e;(zhntRR{wtxY*G;v=Dafy@^2|nWSx8umZTm<>)P6Zrk12e1IGGg_AlkE
z1Q;GdKYjW}(5Plvp5HaNCBoVUaC
zTCnp4X9@nZn{%o;q7BvRxn_sbe`LZ(N*>$j^
zY!4%I*vmDljW_x?hi?6*4M&m~*)~&{ZutVe%r}AwD&1F{b%b1rt)^LGWizvJy)0Jm*~7)&PH`BRG;MJEP+-=R!pwJCO|eNQw(mjnI>47x
zR;3mh+8J8-b0^quQ5$eyoQU+ryXr|#t&&)cNa^8lD`GI^wrISH^y8m3(RP*sH)%oY
z+7+b@gn=rsKZQvnMhkaa_DeoyKnHSh0CPrNqy9BAG=6kmcPH+Fb&6$153bXEr^~73
zG`{FT28}Lk`}-h^$|{QgKTzS(91Y8xe&5Ldlo0?(8rN)sEa!NYKUPybU**BbA;r^&
zI(3o|M;Qz=Qjw|4qQ!Vn0IJ3bY#7&!LbEP3v4|@poT-thMF#abVLb3`S-146hT-
z&i`T;J%rnI0;3Rbso$d9VUIlxfKfRl>lK?PKwiQirSTiEtZoc1zgKlwn#{J~)!#^O
zx8a~SFZ&+sox9sK45b=zymeu%LcsY5Js^n|#Z^fI(a0x7m*Pbo4OF(nP&?LmD2Yxt
zW0@$fW8TakOeoRmtql~ONm
zt9u4OKN9ocUwmA8s;0gw5{&7e`u}jByf<}N
z()VW*W~D0K?6f#+g8}Rx(7idaYbBfQciR@g4iu$%D)TrqLinD_RPk(`DzwAtcwiI$
zq~S^u#+O9fF*7PiCq@wQ6iO=9176D^a~Mx7p8gIXIzCH5RBYT3nTuCH8
zrthM}CkY|4v{35GcsWcBZEvWWKPUURPn&Zq1#S)$LIsu<8EVr0oOD*K@qiFYd*=<;
zemJ9F-_f@=yA*`dd52rIE?UMK=~A#x4>*BG?<0lVW_UQ_v|@gzUZeX)TT8e;*Ikph*xMHJgI#%RWrLz-V6FGIB
zi!u=zAt1-mNgfWY2)3nQmG?>gLK>M4CUD0dgj$8O-ZRP7y=oQQXFpfj8dg!%POGA~
zsuT_g9EL6Z(0ja)a%B5i@N-{))#s;+Hi+afUWjj=g&?7UFDOV&^%S^@!DI6g7JZXo
z%e5iI*#be;{o`}%`Vy#^7@`43r$J%Y=(-~thJjMhrF@%X={;RWFcBR~r2f+un%0u#
zoJOwMzwD&D9t|hvw8g_F5jLGW8$+gaBt(mog>(a;=3g$qSl%4p(^OTd)G~Cm!Awx}
zDH*m{E|sQRPL_L!Zi($!^9eo1sFRK&vPJZ=j(yUjW_AQGQQ~D_*qK^E6p6wUS}Rz~
z9J;`HLxb^?8Uc~{+vRS&aYHx?vOYWNm7$+^2ZQYb?}Gq1(xd{xpcHr?MGe9t2>o=)
zlNsWR{gd`ouNI1v*aRYFo~3D#AVp24v@Gw}e7`3>y^;DsaxuKZ`3p#*qQ1V}dUw0r
zf-s(<6|a{Ja-@L8(*>!CRp`3mq>O4x6ZvQNUeDsOqZY2K9i?6J71F28Wt|#x&+6?@
zr}A7RNFX(tMbp5!k&H$bSnXyZuj5Puj=gFK-oE!bRV>i?B*$|eXnV*JRfQA1#GT(b
zv6W#+ODjUpvpzJ~%pxuv`=8pMW#W%go=e&OTl<@|V6iAIpJ498U%sQFJbg`TVTf#v
z#8-t9>iNba
zIX3Ump<
z9_!*p%_>3H*aOf7NM~Wh){FV+_b;bJ!QT5E81bsq>iwBo9px+x4)%VjEN{%AUsC^y
z?3m1%>VFO~SZ3M8g`ZFVg=|58yLXu72TMH!O+S9c3n{k|T-w&aOAENtSmS!(
z=;>&USkL|0ng&g=7|2t8t02H)sUe7a@(
zl+vv6i7Kp#NR4A!XLs}5kpOs&=4(zXiKg;?;mOa;JFtDP
z9BsKI3Fcvo2T6uglPP97&jrQ+Rtzz9)nx|!PRBc@JV4$Rbanq_T)u)Ul=XP!1<9~`&iH^sZH%%}1r>Ao~%!0xI
zGC{R*%hF^&fu405ewRiF4b{;J(=jNqY}B^cbv(A9xt<)pBEFY%{&OXSu4kX;f%!oM
z)#?$jXL~DQ@XeL98>OLert%u&-KRurydUGInxXv%D(0#A`iEpf8HEXSp_2~s@qlIgNt!l%br;moENnr8GU@%1rOQNy5t8?}9((ez)vSOns
z_sUNyr+s9fk(CE?29+4plmDj91MOALy4U-5_y5Z8
z@6K!2iwtT9Rlhb4MtJ4rmDqc6!`(71(huC*O8Muo?{X=WJFGWL7GnsyUy*q_a%y!IJTzxX(7
zIGJ%BrV9*^K+WFeH(7<(7ic9vpCDZt`TpCD%zCqt31|o2*Q85*!vhF7k;Eidl@Qqz
z(R{aDbk>cwf2yrV?o{%HT@`mx@k
zZjL@v6)OLY^QiWfcfN)G4kBzN89JvHTnlA&Xm9WS+Ant5XEzujXsq!o18#p}?`m~y
zktWP`XW(zOP@I~Sjs33VHjD>bg%visGbTF|!BU&rVlS^A?g*|aiEiXf6<)PZQrRkE
z8Z+k0{g7k>SLjGSBeN692spcAWtZVkIb36vhuAO(<9abE?
zSfv*Zd}@z1;upor^7&zvdtJ^Rw&
zo69BDH)+^igixa~8l{Insa6P|+3OD0xBB334-~a-s?1G@xl%|5q1qdOp@-V{1#M)hzbL@{eDGPpniw=NxFQlLm|~iz|dPGuP;?wbVqe2)!9l!g@IaN
z`jtlf?uQn)#o67tpSM(6Ba8b!nKREF!-1!r9R1(SbsASswy0cXY}c^l3PEDb>VOD=km*g`(~>^Vbm4`KWRM;u-6H!OY*T
zqVKq;Bz*RoRd?t_{bGDKwjI2Yn32sDZwz$0ZYxIAbGmxauCf|*he?|(cWfpab<98h
zX-Ts9A+7k@0LF69s&iAjM}zvlEA^`$Xk;%kv~ur|4xk)J5^}3KVA=?SA8I8K{DfI_
zqqTtdvB`;W#=w6dfVss`idb6u*3(tQgY5yS2<$_vhI_ci8@h{;?h{QWk56e*(XV_xt(
zH^5x`xRv)I<#WN;a92O*HJo2dLY@)6Lsa6N6PV>I4!%QZRDb($n@6%|$zXlX*5{55
zDNef&`V-p&G(zByQK_)HZRY2NS!JjO@~xmMu9Gaz5!
za^2RZ!wcy`QMY))4mybn<)*telo(+Vt{YK1OuRb-20aH3Kx3C@omlB-@EHb)$h?D75e^$^&2>_Wo%0xfg&YV9y0(h>ynrAPD9SFCZay`jjeys
zJNy{pud1F&BJKjwf+cUrnRCl8}WnA)uP(Qa1i}aZ4E=
zQh%M-u-um~H^JwW%dotv;egFu6%
zuOvU?mow);aU@wPE4FtxsX=!o;_fdVLbNXuu2qBtb$bM!Lw!irs~lT=|Fx9
zx})29WX-8|vY4q**)}1Y8vDJJbOFGMJ%EbY`8l_yyt@V5a6rzR?c*)s+5@O(Ks68M
z=-f~3KYoJk4&hocDNjuiUwh@^RzcZZ$C>^eySXt&|&_h|?N8EXW~I
zDPffr+?F3bB+_rc@>sN?q|0jL6A?-E-%kM
z;oJOo6ukkQ*pPwV#vQo^7P(-t%sJ7s-E3GeH{NwHCb32L`4FF~nfv*nc9ZGI6?NR|
z$Szaus}{OtZRCs{CjnADU(!s5hz!X^2pGrCz`eh0bg|zTYaw*uyINHdM>6mxPauz|s1rNwBnqyUgzZZy80*0ENv%y@rz!NbAlW;t7#Sd*~XIw+e(iF$MXu
zK^v+|C*+NwNV)ov(GWnRJ(oBvPq!_sLa*Own)=_LO7_qZq1
z9-&SDh6^v3N+U|=(_Mhaq4jjFi7hLxC;)^0qVMdp?e%^jYWXg{6dCGG7RIr&@sB>`oQsMz
zn1&@!MhFVeUK?oTQ*Myfr6%*BGjDBbJeGTw1`e2nBxpXhj;cp?4Pf)ZXRz+1n4kh%
zipllYuP|(savr?RB|+zd9w>P1ToQ}^An1zTb|LGg;NQgMdZZ*zLq^<}7Rvm+JEfEK
z^%fewS#a^F%wc_~(ylV<@#B0v!mgF6DnYy<{%$st24ca~i~5u)*-xxz=5!h8VqCZu
zMO`Dgh;}g>twb66eulkn>6p3_UH`KqWbM)%rfR@0&grLd+)YIA?147HiGyyZRYkGz
z$y^d^R{Q0y@rH%IS5`Bw-inj41
zGFd;oI`fo9Ctx81vI%#xKw&2f3v{}`u5?-{U{_WLrj0G8QC}7T(`1fg?qJ%Jfj5mr
zD6{R?g_#bp={TRe3!fqJ9Wns=jm{l<*gBA9ev1>xPChU7DvW
zgxO_Ob^+q-hVBE)MjZpL?;;N$WF!@pA~RoMA0u&Bwv=^ohx=C}{=s*;O)5#ot*z^X
zb0%*kaKGCX0WCy;COFCUDW69LB^|b!QPS69rlINFRclhV9KAL-?8kOeZE>%iuAn<*
zHRCQz=&_$xYEDn;C7G*zB5*>;^xo~s~A`SH2k6lzL%?$Zz{He!tg^r%M%kFf30176GhXRyW
z*;L~Tm*a+2Q=Gt91DFxE!L=WBZAXXtri)b)ouePL?Ts=2vM1gGReNJmuL~|SPUN1Q
zSmMAw=xwz1N@NC!)S_Zogq)gZIo=4l^ijjX1oy&3W4_JmF(ti@{pDtI
zq+HHH_uH=4NXP%jQo9&eBy!N2xat{O&w^Tx5Dfwd|q4yLpBFp
z;k-Y;c4Ulr>F4nej8cCgPpyucmFkW;PN#;#A5PX~M(V{4EMaEKG%emn~*t<
ze!t8QkM7}N2w>H^2zpX+y>T;%Pfzj)HhDy7zsh4)_hs9%IlIB^BGH=UV9>EDg+iHO
zA01y?*-E%+@dB!Kv?_k%!u?^@@A;EiN$P4q0RlTVUHa_vbE3X95CFby$E>Ybity8c
z3rIS-1DIMNd_>Z#?jY_|A67ZNZLxXJ@S;tfQcmkmsAXSVjIH9esyTSOdPiELZ@2|o
zK&7jMRZ<;Y4}5Cr>#IOXhhsi|W{}M4m4T8gbPrT*PGh}OW7sjqyhOUFrW8>$r9p+-i^q#DQ%+NJgCxeyVQ|9)SS^t((Jtm1V
z<+}lDA{RQq10#!m(Kjy@Ol*n1%5iM;pVW+;T1@=GkdHofWhV$b_vEbfDcxe=yTX(Wpn*b
zm|J10m3H{dM>|llI7TLIqV(XZx6t6&Q6JUsJ^3zJHd0665w?R_yhQ}N_@>-Hq<8mA
zT*2<~^vVwZ&gZSzgdfmf0gRCR`YM}mfV~y&_H%6+y^`Zw_jjXKbI&TjA|aW|g*qDp
zr5212tsn*!+9pGaa3YXvRo#nEt8Nk6VQRW;!~obUPrI``i({4m3uhAJib){3z~P{x
z%{L&~b}79^R^m3wW|A>>KF(+4s1H5iWUnMkdhpIVwaIKWnB^)}*;n#?kfawyL0#S8
zSC~c3gw#!+j+FHZHAV9DJg~6=)mlwSchqi&bd@m)>E1%|m}k98J$V
z5wm7s(K#e|J}*z!{m4a8d9mT=tNHd7X9cN9{m{kOlzq_aaK7>T^^9C`M<2xPoDO_p
zQsFPb54+cU-|qj&Iq=`EW^IqXG^jw=9&(puZ*dlXcG|WUlL6&Xox~=P9pj*vnnwxL
zFJR@%BZSqb3=i<;O%mnPX6ZL`_z-kWeZ&mF(#PBX
ziWWNiF`q%%hsP@$cOnkfg49C4PP>fyr1Ir0Vs3{#?ey9mB)8?ZLmckkRxHxwF7tg3Dw`K^Br=;OE{sHL#_nBnN8OUNm6EpSaD#qb`E2L0HWYK1`
zWc^jTdH)&15>8f^X{-!KmTYc~gU&}q5xt?(i^5bH+^-Aoz15A)9TuZqe6G3rg>x*4
zaB#e-3htkF(SeuWFs=J?;&=Nk-*;p79xg{}h5%IdsQsI|4%H|>!~5)K?7@&jtud3#
zdP+J;Ig2^h$BV33zutPOnZ{7M{)=Dw0(9b+=JW-zz=cklUjF*Wssaq
zd9w7%&E^VH~rb`)=vyo<6?BDKSj#=#DvylX`-14<{WgGS$T-IwG_A0-N@U1dHCh+xzS|k#)3;{ps7Ofi(1-l*m}*gOY4U=^foWa0Skz1>2^H`RO)C;8Oss*2q)OhTpOT
zU&rh}(m1+bw@$t(iLmw7%bR?{s`wz>
z)x{J2hFGNN2SLBt{WV0Z6h>zM@V?(#C35K{e-gX&cK@AO;L6)OKjU3kgTGGGT@Jm!
zNVRjm+y6au5wH|Ar8;w^9HL$~A1rYtp+woPcMbi&$maX1Vn@SiB?GLG5{Ws%_#S^e
z<3oL!=$Nk~2j8#ch+v<#+iy&}QsX$AucesN&|;yb6jV>sVLVUMUBeyG7yEVu
z+`t&BMg245n`xMB?ga1|7m9@bKr^)C`HW?wk`L;wv%zM0iOgsWWb(PXqrg-7RL{+R
zKJHQ&ZI!E<@)afjhpIxk4+prI6HuOFo%`s`!`o8=WGTo*gnU~9)g|(iQ@H(#{%Sid
zryKZ>`i%RDiuxQaI}7=$rnSDh=6RT8qE27?_Y-jIuHmY}hhW!rNq?K%gZSt3B9{TY
zbW70D!t6dzF%}{jRb!&6hCKlm@
z_%gozdl$;-`CvkUhG>7$&9~q_y{9MdEY@_vH!=@1IIB${RywRqp@Gs$3C29)igK4iskIzBkmV$G{%O&eCXJCBgjQ>z=si?fBmK;thv%&XfO8ht%Uzb^}
zUOvt4;*(Qan#YzBI$`ZROxmhdaTkj&m)}@z6g;b7r($^^qeJ?<7dxRqadX%yRMa(F
zIW(s5-m&1V}j
z8T7qNXt^GrzTu$i`JCVS>y+=JC&PlUv8YlQW(}9byNDLme4_b)YeCZnYW$zy5$Ekh
zE9u_&Re_oeQ|(#Y)@uukLRiT|MbIfS6dsWFw-vw%-)y~veDtQLU~MNo>c%vpT6wWEb^b1dvFbXwm6Af8}q|
z^ZAb>4df}m&M@p0v2uL+;&^~UnkxvYI|kpUL0?FSAN7h{4QA3FjZfJ$Jgx=`C)P@Y
zAW@vr`$S#O{(t4C6Aw_Bf`L1OYV`2c|KJ*p^!9^Md0L>{S<4~Vx_y2zGt#UKJa-)8
zOkw%w+cdM2>cmJ)uCFa-lDrCtn8LKnI*RhiYJ)t9f*i(M5R7J1ai6P%qsaIiDu!e>
zhtF>Qn?gUwP6uT0gsTC{PO~O(+t^dMKgzZF);i0SoXRU!^{C_(ZnRw(r$!7F^bdpx
zPhkwUyXVp~m$C%Lo05#to;uZ@d&lD950B98sFcr9*jVTnkp_yOh_&D21kN-)wFDo3
z;`_d}uN`~Y8O+S*ket}^{LcMe#)mQhi(a1NsiFxk`6Uxm#p{kqjx+pFT%WD%30Wex
zw#KMzGu$DCV(TYrVdkzfYUF>|_nX>aB%pq;oad0Mf{d$t#=fs^7(bt2VkQ4eb@val
zsGo6m=aU!6`pEQop0K?I=gz(TZ@*{%ZRAzW#;>oJahbl!HpV}0KTroT7ODLYyii3(
z_eS_4x93acW4UBzx_bz=f~o_zk=uc%>W9E~vQfH&UXNw(wKSLc<1;k5v!7@%x`4#T
zV;}_yp4%Js)h(u=Zv|9boBzb5L~*$Jx8)ak+U$Leky(i;A~{x01XEHQC_|UG6a9TY
zekZOEw_OKP>3!?j&G-lwjH%f|ixZd#cT_N`aK01D53AwjjcG#>n5xYzEP9E%Yw{51
zs7$le^)RL8cx6fH!`yN?X526iDi1c3eTj|IO3coQFrQb!jNgwo-(7+*z-1%<^2g`>
zyqIAqj_RUJPl`fcrhHr_zynjtt;LpEFP;I_FW%io2KO;~6VY%P;yi(a0t}(91OG=?
z`2YJ?awxfw5$qd<96p&Zq@*w{C$_GKIIy*p2~jDikg*E!DVb>4kG#(1
z^
zEX-c=~Ln3NL416bggHNJE~hF=`Jam|cBP->wbSBE>Z1#M=Zn17+a*Pa9
z{K=%(sr7Z#`ciZ~Cj4IJyLPQJRTWg;EmLtmcD0>@@0E8tEr?IVa!dRuv43*)P`7)d
z?=GVgajV?CNkqY>)Z{`2%N;w$%HvC5yi$lcQ5kPg8&Abh_7f)}Rc}AtTcj5Mb
zqrXadC@O0bU}1b(wY2wK_hL?-54MGt|Epn1|LwE|z1qUql=vo4OflCs7i=7oB2X&!prluk{L(s}N|qFn;`mi(gKI)o%-&HKvo
zh=Z7eB1Jq)=OWjf9?(yr7{!s-BlBfl_Ak)<#A_Lupo2h6e-v&+6(f&f*w;U7xJg?1
z265E`6p%8b$m(w*knf%^xEw}d5Vza|p2X=a#Glz}8TC1Wf!KYD8qPN=CUyE#6$x#2
zx$-yqqUo`Cv-`%tZ`b%Jbsejg-qo{`y5G&QzB0V8x-M8k2*2gHb|m;8{BQRAmliYp{3)4VLHo
z#9F!u{l;0yZbzHQdN^6_$L3kqojVt7oZu@PZ=`}6aQN?Xh}y3e+7nyh2e*7uk9~X}
zeCsjnOehrIm1E&g|5^!Y?rJzqf_TL~KOO>V%!$i=_}wiz!y;ARoMV^TSmkEcid#$L
z@CkOA@<%NS%0<&CkD$Xo1Y?8iQYK4zQ2Y{A57*8X)?s7iu}OVLwaOH}>w|Mb7pOM7
z(|zs0a)-agBu0JdeC6cw9`LAY-`(sQ!dG4jiPC@Q*;D{YTfB*-WOFE%qQ&`WN>FW+
zPw<^WONwRM{Wq({bKh_4G~a%STQzzoSXA(jooLC`LLM+5`0=NhzA(9Fa;(Q_4
z($W!NQFqgU+fNJxLr!v0#%lSKX->QODbSX+)YkEEdfEojylR;b^{p
zq2HO=+)bQ)En#CYPhNXK#onv|KWv1c
zTh66D%0w{cPKC!5PZMoHJKG4fgN9PF>bZ%VHo;nZnBFeth9i905niG
zovq!Q6Rvb#{#Og&{fH)RVb5EqJFwZ0d02^*mg=jj>g6GwbhSDD=&^38xaBojN|X+!
zJX5F8wNVc%7(nH*)Z%U+!^2Mwj&Kj;5(O6uvT=f2_^wXZ1OMi+>id0!>*C_)G`xBe
zx*AR)X~Ft>?z?RZ;9;ok2c{oIVcBw>%&?iLxJ-!iLT2|AQFG;f9>WKpcIAK4GslWz
zbphj%ILq(*DuPlvMB;l~f8Rr;8YGc@L>xzFmz+}fCX$&qq6m&Klde2JEAd68u}X%7
z)t4p>4AOS`R=*c*#CN>|%Y!O#X=Ma3W4#v|uIRH?dJyCyUR0KAw@=lhDD%j7yfA$2
zU45tVm%P!pQaU|2Ia#AX`uBCwlDNd#>GRVh`kYf6M$*M(!k$
z=yoYZgU8WbZ)!=QZQpycOR22%eXJvbwb<7%ZKRTpgx(41MTlch81!Bm)q%Mz8-&Oe
z*iP3!uyTdvznf}aNjg2H@MzMlyX;t_|I{ao$zSx2_gy)uzwc9zm2<)_{R#YdQbC9%
zn1R^c$#;=h7?0Dz9;y&c_zJqDJW`I3EGY)KrnAc(ew0@vyC;!8lh-EdulpJ``6nngu`IDe4$Z35^pwqp
zJ3k;Prjb;xq|CF#L$YtJp|k=fzn)q;#ME&Q$%plSw)%EU948mdrc?E_Q%wSy?gAT;
zH5joP^x{-agYgA$ThmRl&ksS~3(cAUUm!}4C
zJofg$oZR4A6`zKjVjC(KABvnMN%v8dWPq2^U$)J~&1X9I4ae87UD&;KxNj4ib6czv
zclKdN{>Umi8meD}-!v1lSxXJy(NKr7IiWb3T($XvpPF5{t~~L<|s&Dvq@a6rP6D?R?`IBlv1&
zx#iV!ylS%u)L6nljQYXEwb{oPo}pJa!6H|ioxf&0=AX8F+-Ev4k&Quq5*my|l|<{d
z2vqHE{m(9TbgC2}J7lj5-@plK1Veu`(r*tODk?jRee2#Xp}??7?wD1l>4|VA!H5K6
z@)RFgj3)}ZUZ=|Dv2%yGLwUrp9AUk9xH710sDk_-?2$9{2gqGUnY_Ba)HvYQ`}92o
zt4KfTYjJm$dmxui*l$^h*3zK3foL=VZx~1I%dI}w%YS1DmQjpzLh{cDkl9~Mi?W&7
zPTdS{455nnY#P>e@1{Iy71U-@x?Xh=3t4~1@{nS4PVGW)nnL1n_rCxj!nwT@%k44J
zMt$mi-#WtB8|9@`Lu+z8R`Q%hFWm2CJSz1`5wb;Utq^&2S
zmLdE@Ozk~c!;jo!9vzXIk^2!?4ury!CMhBGS_Djp5=fl;Rh&(QgR)k^>WSZgq@40{
zzYD=@B%*M48BkD%DOH7EmRna1RB4%3<5H0GsHMbcGw<8J(^aX%p@ML!Q*z1W$shP7
zl_%fd*7ni?Bm_?!=Hf)pT<$E_qwbbm|m!=9n$%#1OmU|xZ<6OKS4OFA)yjBtP
zULpT0)f-YH&g_`q579zxd;bOw_Qv^e
zS{V@fz-7B+JmNLEP)rMr+L*X_a5l5ll`7`eGKri`#Fn&AMWneYJ|DFj+7tQBcrjZ4
z=U%U){&_5k@OIAej>+Ir=RW@NrY8pcxb(?_&nDBq`#1f-TcBQ;niE+0;{Uu4*4b^0
z>zBDf!2GLb$e4Q3e)vs}X-t}-W%tlmuUtF+otFlnJQca3(&-IBO(oEzB`77D88t>K
zjpbT-UXv+
zoVGQ^%Y8*K)fYki+^N_>1I?0WVk)+eAQ_K*p7iMpOep*+x(V%l-nm8n>T^vPCKU@4
z@|S2gRW1^Ae^2Bxz_nKb>(JmOfLZ?IEOj
zOyY(a{vxILRi>p^k4}$vpW3$eb>5^7u5`mxOs;3P{*N
zZo_yHg!e#BCG$30>N3#hX9PcgNf@E>n0VWrwX`so+Bc}T6Fy&)Y}EIx*XTAe$;yp2
z^18rp9dWJnGd`7M&4iw-Zk$=*9pbYX4h`bct2)|Ih6Ccc0+VPOJ-M~bP^#|5VbXN#191Ucy1WSK8uVVFKc$2#5~Ul1si`tO&T-W?1)S*Z3U
z_LKoI9pauEvBPWCOH$M&|OcH;r>l`>_D-
z!1T{^Y@a-^oTufUE8dj$Z2NP`a?-$30pgx2d>Y$Tn9%dI-e_+17&d6by{!xgk0#{Z
zl(c2BkAYhA^k19`mzh+rq(~X6u6JFpvM|*4%q_=0f`50jAUI(HVXv5-$j*nYhh}=k
z^VWXfdz4YDlTy!XAN4!R>9D-U5CT|0z@=1J89G7U;dWI#KNQLtY(9dv8Ly~iUgzOpiSzW?y!7flq3_jsI=IfrL~82
zzsy-jHV_~1_ZjB;AMI{Je<;`7jh%~TRLN#g0x5>67)21JmXo_LmH4Y%`TeP{iRe#-
z;$t4&WYKg)HL^yFFL6>e;36#ww!ed`E7Xom94cZyH$SII)cGMdhU;{!|5N^@xum*o
zg%R(30pEP+*;5M!LS%M-Alm@9b-@R-5_vN)AL?`Je<%y^q&e<oQ@i{u009|n>nBp4bE&PLZ=F?lwh&@M+}Hd4KIp7e;?dYT$Fhd!Sw|6akoo~k
zgx(;+OqD>R5F~h|GnexDi#gY&Vd%oWgQQp7M|7I3_u8zi_v+3e8T_OfGxJ6PC-Y8$
zD)X-G?UdvZIaV}^et>mt)^XCTJ+Spyn6bN+wqsH^vRpdj^tYM8OPfr^tJ9bkh~+4N#g|DlNIYcrJW?&bCL
zTteeU)g|UlZ3J2!3dAD2$R$gwSs>r3e;>mc|Y?6*uS#!<>pc>4#alx3J->ebsAF>i~aC9|KM
zklFoh{TC1F=m
zP;Zcl93v%@rYKD+4ynn)T$jS&s!&NGWIhJE%F09(?jIN--`Csv|4gBo0p#r6pD*5~
z;tnYbh@1J?hUIIHaXZO$jyhqVEkI13V?S70JR2z0&-JeZU&h*T5k*IBdUnkg+Z$F$
z(U*SPp>`7;2y=g*SM=&V>P1-C*CtQgsr1N~lSWq*j$xBW`k!@6L3;m;X@}fMAn)R`
zU%CZLh>{l!l9+F+*{89ns70RH`28k*Z^km+41O51)Fo0e$=j8~6Zug8;jbw~9i~|)I^LApCE9Bo8nc}|!@~|*LiDh?Wfl8}RT}leSB343(
z9-p!Zv^#b{kQJmjqJ_xC-2l?5V-|_yWTCkLtj@?{=9#o`)NSt6OSONzvU(|!vUjoa
zEnfYo%*A%CE%XPV+|UAI<=-3*)*tYXvcQc(8AYSL+)__b-})!yl|HwBJVFFz=F3vh?5OVlwra~joLWoZrwQIs76)IO=7s)C0dLAc8-9uP
z%EN*0KbAAF-|(#H6u(DzvSAwq8%L`x{jQTA8OT9j)Mi_-?T=e<*vC+C=VyUK2Il4C
z&fR82bD+8H`3OuVXejG@y1aIu99(a=9>Lp><
zE^XMT7|xS+FxnD~)8dhoO@ha#lS#oAjMbEJwb`|s#(MABHTvl+XN-gxL-IM&`~5zb
z&X8%DyK3TOM%+oSkk)Jq;Uw=CSbB;%`VX)C$J+W<)AlN;O}e{%ND6&ALp;?H1DUi`^DuFej5
zOibW7HB*fUfOPi@p&UU&x|wW7-OPV}u83l^pMCLLN%7n8B(fO(_Pt}H`S2m^_4iC=
zvqQu`nZ_vW$$K7jYtlpB<#9#4V?Z^Ef91g{5_
z0sdG;s7S(<&sgNg#=QL5H#V&}NmV|y=N^}`pa-8+`zaD>iEXFO`9JVsSeH_y)ckYE
zsPoHA!`v3Jb?U#73h{eY798?)+~i#4=d4zbhBpdFe~E?H@q-(AzM24Kiz7%g?)mXq
zC!v%_@!xFq;|a8Ljy{+eDZEU$vg2}llz--T0&6A}ftbR&0g9Wv%Bt#nzq|S8UIRCU
z{4A+8-yG_O8#O2-yvcxM>xJZU3`toYpfJ=v8gXBZYK}Rv-ZW{
zmv1++n<$$D2?>j6yjDBLvjtXii$eECjj4t;_R{_aQzmgMgr~y#voEnwsz!KCW7;za
zcBuWo0vCYQp=$_D9GOs+RgalfPwaE;)hSO1KD_U_MxV
zv>gi{XGCfK!zSkTD>u2P*FLK2za`eA-Ao}{Yg~K(6yc|zP!`!@E!<*&L`3Y3xa
zvgMeBn`7qoktg4Xt%iUTixc0rm)OZPPF?iDD8`>U{2BwK)kQ7>F|dcg?Sacm5wOsW
zpF?vM@%Su+H54ZSGNg$5vmQby9@d+(_fa%fJ$S8|&*mq|OJ0Fg>sy@X9D#66OETeA
z4|t=t~4)_dSa}tq8@n~x&
z!n!cAevZliVpPxC8{CD3S*L5i{=^{tq*1K1QLvDBtiXZlX{QffyVN@k{i`tAIJiqf(1x*7nk
zw;ni9V8`6w-7#PPhTA7z8@YB?tj=60;*A2=Sfj!|{Nkl#rsNo6i|7pBnvw_-&pZ}9d
zQdryIZu+1|@OBTrGr+J=S4;oP`P#CcdbAU*!~AxL$?HCl=Srb2pQ$jgL#FK>EB)7r
zI{?I1n_e@9!ZgFa1hA|~093Ormj{pE
zoFseW<#HC5FQ(WUPN$Rw#`t7~PxJoKTpezI3`1x<^&v@Y{tEey*K?;Odp&CF`P2Pz
z)X4LFqD=QGO`7b9yTgu&402=Gl?4*opsxZtVt!6B;Di8p$Pq~1zcH~XA+!Uv+
zKzBZ$WF-50eP(vc8DX_ny&IkAPWkw_4t^u_&2lW{W|;tzeEE%#>dR@3+p$f1a=pGh=fk3v9D)i+$RtB-xh#PE%U1mfiN;i
zck4=Yj2qQ$12_Aur3tcd@PP_Dh~niP6f$#8Z*GB}E52Aq3Vnts7({{7tPQ2(75RLPB7U4GJBtvs#qYg7|R%5FzPya=;p{?BlaTLcd@U&ye4~qtvYCq*7
zy0D~qOQ$;Y+n%;nZya&QN7=j|09A#UQfS-tD_4f?s^{jqru(PqVO0}t{XIevgmsv@^jiVP8YmYeg+t3RK$n8BE$++B8=_Iq?&Kr
zDZS2`&xNxjyhm=hzFk)Jz(yQ>WBbWSYxb
zcLdEvSI?`MN2&W9@f|FJz)vX+@5b7n$4Hv}uP*gmn+>H`>xZLXG6s5>^O;JufGQrZ
zd0I~6W8sgCDVFh-w^>xHKY}u&^&j1^P49NyXI;Q&EAUkqPNqPY`VcW$g30>)a|YVT
zwYz4Ny>kJ6=Dp8r>PEshheoDLpDuJK4IXK;NQJ>Ko3!y4%UCacQ~grVnjj7jp5G1#i*K1%e5QYqxmf}
zRMx{4)tW;u-{aM-tm{p+`WqT8*2~8qsKQ&XQjfLxpPDi^q~6vMv>&fCG*nBoDuie~jQ9J@uB3hbi`)Woa#7=x}5q`g-|GyA(MM^*|7
zOFtL89gghkUQdh;yqX6;)#mH0_eJt_xRn(wiU_vgEqUSKau%t!KgRDZ#0u
zp5>0>UaKoRM7d-JV%3{n{x|ibi4NnpuKm|b+MbPNJi6P^{S9^>p{|3u0%wYmGHM>O=1^Iu5((lg75k`hh)IW3-EN(Bu)
zo+eDj0D%j}^Pu}vvxa}w&0oB~fz{p;iwf5T!sa!F!H=~3A@6wR
zlS`#&~(KPEurYcpyNDEPtN?2;g(I49tJr
z8Pwj5Qi*2g9~&pSn?MqL4OtVAKT`re8qP7D-_($lz6<{|D;UQWo1YVM!DLuQ8lEiZ
zV^4t>~c*E7i<62)~PBVH-xSy}hl=tneWJ`Xz!$HNz=y|Bo^*xq-lR0f@4&=WBM17?*v_
zA8FIE&s%UH^qGs&EVqDI^$<7;YVm%c<99>-Kbd`tXjqlsUSKb;t`v*P*#VWzpEgrN
zI~sGga(y3qwHRCgztp5!NoY3<)qDt`_j=qCY`LiSI6BGF>{Aaiid?>b|IGAiO-kzW
zULfp~FSb%V8@37)a09g{IwCi{
z#L(D=$L~tz4b{|>NeQ>ii`)2C3i@=K&MN4F!TIBVx*6~d2RXGU+6vRZ(J4RwbzKn9
z8!S_xc*NRO_WRs{%#k>?B8Xdf&!z1`X00snPCjK=x>;6>0rS*%qc2es;lCDMy$I(Z
z_2o%@iXA^{aF}_eX6!ec0l!c3KAvv3*Nn;I4Z7W3uCnaJa-eHoyMw`qQ+5A@x)24q
zq#OF?G{|YK7)XiDWbv)NHGRNQ5$4riV)a`4Bc4nA77a|KotK2s0go&9no!9J4-GVj
z6y>AzLsiw1hwsySFl=Vkap00ioucr$6M3fnXYCK^aYyGKz%6Lf967l%`eD?#9@P|U
zO4d_7az{C7X&mMuN&I_?nLR!87Z-OF4IYi9zwmltq8&CO1{-SWQ1C;(F6kMYA<0C8
zV3Lt8zjNsP*ZDX|0
z$@TTGmXxBJyDizr&YIEoNGa%8?dNd02sk-`6IK=
zXzvlMt;MKxvpU1DXPbWnpnVfDK&CjmQ_$?vDr1T1U;%T%#|_Kl)Aj--5^#r*0zqUp
zEziw4fwE;#5>8-`FmTeORVu(%h}Z#SSC~_6IJiW;CKueC{7M$M@3kOg>RjG`HL{l$2wD
z^Nny;o?;ZTCTR-`WvG(vn?$M~k~Gv3=)LrI@
zgcvfv*q;)lYe5)`g?qJ$I%~=
zCw7Nrf(vPK+NSQwS{6}zxwH#XXW49%Qy2rYI`p5GXMeU>(MPlIq`~&U{Py_@T6>sL
zC4#24{b5-`>^q|)jNcMW$Bwq@nI;)~>0Nq`uj(`4|IGO_XT`#(l=aLn8TmW69@{9g
z?oRbuPN%t#SIwr-zYi%br*mYi2By5E0-4yJA73%!QND*-O``#Opqv-I8tOAy^*szk
zwLm7P8({{z*b;Tx_FQ$6zf7AHznm2`e$c{A@rQ*(FI{p2Yaytqf|&fbe{Eq@0Q-ir
z{9E*$-$?eq?GfeM)?yk}
zwMj>rRcKh=DsoDByaw?bGxnTL|88wA$MDWviW8Ewv?mmFL7t)p(Gy$Nl)_gG*7lvZ
zhk+mbdl&;|Z_jb-q;EjUBhrUqevYpGZ#%M&mGWd}TU31L_x$&K{LeSqo&}KuIKM%&
zho}ONky|Zk5x7Z;OUtl$UL@6i<1yAj3oozpSjR8gzj%FHt>6BgWCcAcFWO1U<*l^;
zN*UQv=kKJ-3UJzk9-oZ7V~l`KO7LpssenB3G+o-Oa4K4^F5-J>E84<^^oSjZGB9-09^o&S{~6ckmrx;6
zac$jw_OcRy*2ak<8>MT^Y@6v@g7Uh8Ct6RwzZtgtngMGRR0+_N=eQqQ)nIp{2<+<4
z8cOLjruMWf7ih_s;*NspVRr6CkWOJIIL3HSuO|mRteJ_!R|LEUxBP<~L{1*dYE}K%)$sdL(p98MlAy4^M5^~2r}s;>cBoz)>(xd$X^EokvRsY7^?%-
z7KI-Yru*0`=Iyn|Ti#H-S>-;^V`e*h<;KliWHyD9AMhVTiC@g0cll^9AU+L6hO(V@
zkC}yi#fu_QPwL3-{!~hVt5fl*!cxND=B&wpup-eE@99}KgqfTt*}ftw8zz4k)pMkp
z0naxzt|sP#4zwn5uauZR(*#WBpex8r;UCJX+=|fz5GRsv1xp_Z#hF_4i
z8Ts0jhql}PNDoc_uJ*vWRbtC-=sZEi9g;4i7guufzW5JQ{@|xt9QjvMq2#=qWeYUq
z&+i1+Ca-W&Zb<749|h}0$(ZcmQlUP?f_fC5-Ot8OxI}B&sDUR0X$&wRW
zfn~+Wfdpv&lutP+BN<{uA%e{#ZLAEX?xx`9w*8q5nRUi>NWkVAgGYODl}b0&!9U7-
z+IzJT!1($66SI5F@kph-mcr3s%|U`)`ph$G_NgN>Nf!diFP2<0(O|tmV`kKPKBcg@
zdVl#hfsq!zxZ$k&wX{ROqrFbKyNeFImdn1uKP?ByRDMP`oXfn&genlDf`OiPm>ib7N#`MUtyXkv_|zrfGG;RHnr-)gq`GbUWS~Hj4j#676^9_G?j{r-iB&xdHBAF;5Y?cPNA@@(?
z#TahAy45`ituqltt&JBlmr+(n=lXPqeuqb=pGJqD1$w=)l?zp}wVM}AdS_WWh$7mf
zxkm>|tq^(A?9e4BVYE_hKk0boIfOW#*(^Gqf^~0KwlmAEiC8CjmK2y?oENY`+0%)$_c)UBwOQZ*F1&Sd_-eF=}}sN@~f&l
zhFsT`gk{M8c1sS7N6OOHBmkQa1baa27wK%hf@A@r5pG=q2}+!t{yGC*zBXaqE4bE(
z$xGa2g?iJ+Psgj8PB|O~R@a|MTi~W#(?~E4A5`V3B4^9#RJhV;2``AOadox%%jsZh
z<_^GcN`k+29p85MwAe2#JG!>>iZ|FUu^+TEpn;8g2?@s*7^SeMNMM)57a
zv>K~RN+)qd(Pu|WE=9KhUyD~Kk&k#YufN!J%#yVKd#&IG0ZG?hKq0E2phdvf`xX=v1JnO5flb&a0-JXdVF{#5xZERXm7
zsT7`$T7TimF+QTDsI6S~rYFCSV~f>IV`lfMo~4+3shOuW;Qktq?Yb_0pVXFK{p$gw
zGg##q#zkGG9cO6ROse~@fm=(j(>fbpOS=yDi7(HXA9F47lSZmnKB=(E&rW%;ZhE;0r#PbPo0-*rPc|pAQ_%;?W0T>e^}!RN0+u(~#5v4TR^2m4h6cJ)|fh&vkUgEDzXf+>U8=8_w?W
zj9ZFc9j&br`8TX93>S3S@DPxo2G|(!7^wr6Q)Ie^&GgWwzLwySUSM;VeJ@7Wz0&ok
z+T}|d)?~9e9v9c!)0$ATrnYoS02-k)79*%HG_WYB)K+W9h_m)4&>mW$9H}1oJWN=w
z#1FtO5rwOE*{NhInwjDQhGyA!axuueFI}(MjqD8wyvj3@JG=dyd`$%&pN