From 8c9d7f579e113f8add6d318f50d3dc7e983d8230 Mon Sep 17 00:00:00 2001 From: niefy Date: Fri, 3 Jul 2020 17:04:57 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=AC=AC=E4=B8=80=E4=B8=AA=E5=85=AC=E4=BC=97?= =?UTF-8?q?=E5=8F=B7=E6=97=B6=E7=94=B1=E4=BA=8EconfigStorageMap=E4=B8=BAnu?= =?UTF-8?q?ll=E6=8A=A5=E7=A9=BA=E6=8C=87=E9=92=88=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java index 043ddd2be9..1fbc1e4883 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java @@ -433,7 +433,11 @@ public void setMultiConfigStorages(Map configStorages @Override public void addConfigStorage(String mpId, WxMpConfigStorage configStorages) { synchronized (this) { - this.configStorageMap.put(mpId, configStorages); + if (this.configStorageMap == null) { + this.setWxMpConfigStorage(configStorages); + } else { + this.configStorageMap.put(mpId, configStorages); + } } } From b34ea5f7ddaad66320f96e27c73303a9b2f2ae4c Mon Sep 17 00:00:00 2001 From: niefy Date: Fri, 3 Jul 2020 18:02:03 +0800 Subject: [PATCH 2/4] =?UTF-8?q?Json=E8=A7=A3=E6=9E=90=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cp/api/impl/WxCpAgentServiceImpl.java | 7 +++-- .../cp/api/impl/WxCpChatServiceImpl.java | 5 ++-- .../cp/api/impl/WxCpTagServiceImpl.java | 5 ++-- .../cp/api/impl/WxCpUserServiceImpl.java | 5 ++-- .../miniapp/api/impl/BaseWxMaServiceImpl.java | 5 ++-- .../api/impl/WxMaAnalysisServiceImpl.java | 5 ++-- .../api/impl/WxMaCloudServiceImpl.java | 28 +++++++++---------- .../miniapp/api/impl/WxMaCodeServiceImpl.java | 9 +++--- .../api/impl/WxMaJsapiServiceImpl.java | 9 +++--- .../miniapp/api/impl/WxMaLiveServiceImpl.java | 5 ++-- .../miniapp/api/impl/WxMaMsgServiceImpl.java | 11 ++++---- .../wx/miniapp/bean/WxMaRunStepInfo.java | 5 ++-- .../bean/express/WxMaExpressAccount.java | 5 ++-- .../bean/express/WxMaExpressDelivery.java | 5 ++-- .../bean/express/WxMaExpressPrinter.java | 2 +- .../result/WxMaExpressOrderInfoResult.java | 5 ++-- .../mp/api/impl/BaseWxMpServiceImpl.java | 12 ++++---- .../mp/api/impl/WxMpAiOpenServiceImpl.java | 7 +++-- .../mp/api/impl/WxMpMenuServiceImpl.java | 6 ++-- .../api/impl/WxMpTemplateMsgServiceImpl.java | 7 +++-- .../datacube/WxDataCubeArticleResult.java | 3 +- .../bean/datacube/WxDataCubeArticleTotal.java | 3 +- .../bean/datacube/WxDataCubeBaseResult.java | 1 - .../datacube/WxDataCubeInterfaceResult.java | 3 +- .../mp/bean/datacube/WxDataCubeMsgResult.java | 3 +- .../bean/datacube/WxDataCubeUserCumulate.java | 5 ++-- .../bean/datacube/WxDataCubeUserSummary.java | 5 ++-- .../mp/bean/marketing/WxMpAdLeadResult.java | 4 +-- .../mp/bean/marketing/WxMpUserActionSet.java | 4 +-- .../weixin/mp/bean/template/WxMpTemplate.java | 5 ++-- .../api/impl/WxOpenComponentServiceImpl.java | 7 +++-- .../impl/WxPayServiceApacheHttpImpl.java | 6 ++-- 32 files changed, 108 insertions(+), 89 deletions(-) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImpl.java index 94aa977b25..f1e80fce5d 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImpl.java @@ -7,6 +7,7 @@ import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.cp.api.WxCpAgentService; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.WxCpAgent; @@ -27,7 +28,7 @@ */ @RequiredArgsConstructor public class WxCpAgentServiceImpl implements WxCpAgentService { - private static final JsonParser JSON_PARSER = new JsonParser(); + private final WxCpService mainService; @@ -45,7 +46,7 @@ public WxCpAgent get(Integer agentId) throws WxErrorException { public void set(WxCpAgent agentInfo) throws WxErrorException { String url = this.mainService.getWxCpConfigStorage().getApiUrl(AGENT_SET); String responseContent = this.mainService.post(url, agentInfo.toJson()); - JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); if (jsonObject.get("errcode").getAsInt() != 0) { throw new WxErrorException(WxError.fromJson(responseContent, WxType.CP)); } @@ -55,7 +56,7 @@ public void set(WxCpAgent agentInfo) throws WxErrorException { public List list() throws WxErrorException { String url = this.mainService.getWxCpConfigStorage().getApiUrl(AGENT_LIST); String responseContent = this.mainService.get(url, null); - JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); if (jsonObject.get("errcode").getAsInt() != 0) { throw new WxErrorException(WxError.fromJson(responseContent, WxType.CP)); } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpChatServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpChatServiceImpl.java index b1f374c071..f1d6f8110f 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpChatServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpChatServiceImpl.java @@ -3,6 +3,7 @@ import com.google.gson.JsonParser; import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.common.util.json.WxGsonBuilder; import me.chanjar.weixin.cp.api.WxCpChatService; import me.chanjar.weixin.cp.api.WxCpService; @@ -25,7 +26,7 @@ */ @RequiredArgsConstructor public class WxCpChatServiceImpl implements WxCpChatService { - private static final JsonParser JSON_PARSER = new JsonParser(); + private final WxCpService cpService; @Override @@ -87,7 +88,7 @@ public void update(String chatId, String name, String owner, List usersT public WxCpChat chatGet(String chatId) throws WxErrorException { final String url = this.cpService.getWxCpConfigStorage().getApiUrl(APPCHAT_GET_CHATID + chatId); String result = this.cpService.get(url, null); - final String chatInfo = JSON_PARSER.parse(result).getAsJsonObject().getAsJsonObject("chat_info").toString(); + final String chatInfo = GsonParser.parse(result).getAsJsonObject("chat_info").toString(); return WxCpGsonBuilder.create().fromJson(chatInfo, WxCpChat.class); } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTagServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTagServiceImpl.java index 753f2493a1..0ee4ab69be 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTagServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTagServiceImpl.java @@ -4,6 +4,7 @@ import com.google.gson.reflect.TypeToken; import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.api.WxCpTagService; import me.chanjar.weixin.cp.bean.WxCpTag; @@ -49,8 +50,8 @@ public String create(String tagName) throws WxErrorException { private String create(JsonObject param) throws WxErrorException { String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_CREATE); String responseContent = this.mainService.post(url, param.toString()); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); - return tmpJsonElement.getAsJsonObject().get("tagid").getAsString(); + JsonObject jsonObject = GsonParser.parse(responseContent); + return jsonObject.get("tagid").getAsString(); } @Override diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java index b9844d39b9..4fad382f44 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java @@ -5,6 +5,7 @@ import com.google.gson.reflect.TypeToken; import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.api.WxCpUserService; import me.chanjar.weixin.cp.bean.WxCpInviteResult; @@ -84,9 +85,9 @@ public List listByDepartment(Long departId, Boolean fetchChild, Intege String url = this.mainService.getWxCpConfigStorage().getApiUrl(USER_LIST + departId); String responseContent = this.mainService.get(url, params); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); + JsonObject jsonObject = GsonParser.parse(responseContent); return WxCpGsonBuilder.create() - .fromJson(tmpJsonElement.getAsJsonObject().get("userlist"), + .fromJson(jsonObject.get("userlist"), new TypeToken>() { }.getType() ); 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 ee891ecb7b..456398e08c 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 @@ -19,6 +19,7 @@ import me.chanjar.weixin.common.util.http.RequestHttp; import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.common.util.json.WxGsonBuilder; import org.apache.commons.lang3.StringUtils; @@ -36,7 +37,7 @@ */ @Slf4j public abstract class BaseWxMaServiceImpl implements WxMaService, RequestHttp { - private static final JsonParser JSON_PARSER = new JsonParser(); + private WxMaConfig wxMaConfig; private final WxMaMsgService kefuService = new WxMaMsgServiceImpl(this); @@ -91,7 +92,7 @@ public String getPaidUnionId(String openid, String transactionId, String mchId, throw new WxErrorException(error); } - return JSON_PARSER.parse(responseContent).getAsJsonObject().get("unionid").getAsString(); + return GsonParser.parse(responseContent).get("unionid").getAsString(); } @Override diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaAnalysisServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaAnalysisServiceImpl.java index 6eeffad2ea..af8f5742a8 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaAnalysisServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaAnalysisServiceImpl.java @@ -14,6 +14,7 @@ import com.google.gson.reflect.TypeToken; import lombok.AllArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import org.apache.commons.lang3.time.DateFormatUtils; import java.lang.reflect.Type; @@ -26,7 +27,7 @@ */ @AllArgsConstructor public class WxMaAnalysisServiceImpl implements WxMaAnalysisService { - private static final JsonParser JSON_PARSER = new JsonParser(); + private WxMaService wxMaService; @Override @@ -106,7 +107,7 @@ private WxMaRetainInfo getRetainInfo(Date beginDate, Date endDate, String url) t */ private List getAnalysisResultAsList(String url, Date beginDate, Date endDate, Type returnType) throws WxErrorException { String responseContent = this.wxMaService.post(url, toJson(beginDate, endDate)); - JsonObject response = JSON_PARSER.parse(responseContent).getAsJsonObject(); + JsonObject response = GsonParser.parse(responseContent); boolean hasList = response.has("list"); if (hasList) { return WxMaGsonBuilder.create().fromJson(response.getAsJsonArray("list"), returnType); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java index 55a80704c2..6de844bec9 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java @@ -16,6 +16,7 @@ import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.common.util.json.WxGsonBuilder; import org.apache.commons.lang3.StringUtils; @@ -31,7 +32,7 @@ @Slf4j @RequiredArgsConstructor public class WxMaCloudServiceImpl implements WxMaCloudService { - private static final JsonParser JSON_PARSER = new JsonParser(); + private final WxMaService wxMaService; @Override @@ -44,7 +45,7 @@ public String invokeCloudFunction(String name, String body) throws WxErrorExcept public String invokeCloudFunction(String env, String name, String body) throws WxErrorException { String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv(); final String response = this.wxMaService.post(String.format(INVOKE_CLOUD_FUNCTION_URL, cloudEnv, name), body); - return JSON_PARSER.parse(response).getAsJsonObject().get("resp_data").getAsString(); + return GsonParser.parse(response).get("resp_data").getAsString(); } @Override @@ -59,8 +60,7 @@ public List add(String collection, List list) throws WxErrorException { params.addProperty("query", query); String responseContent = wxMaService.post(DATABASE_ADD_URL, params.toString()); - JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent); - JsonObject jsonObject = tmpJsonElement.getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) { throw new WxErrorException(WxError.fromJson(responseContent)); } @@ -84,8 +84,7 @@ public String add(String collection, Object obj) throws WxErrorException { params.addProperty("query", query); String responseContent = wxMaService.post(DATABASE_ADD_URL, params.toString()); - JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent); - JsonObject jsonObject = tmpJsonElement.getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) { throw new WxErrorException(WxError.fromJson(responseContent)); } @@ -102,7 +101,7 @@ public JsonArray databaseAdd(String query) throws WxErrorException { @Override public JsonArray databaseAdd(String env, String query) throws WxErrorException { String response = this.wxMaService.post(DATABASE_ADD_URL, ImmutableMap.of("env", env, "query", query)); - return JSON_PARSER.parse(response).getAsJsonObject().get("id_list").getAsJsonArray(); + return GsonParser.parse(response).get("id_list").getAsJsonArray(); } @Override @@ -116,8 +115,7 @@ public Integer delete(String collection, String whereJson) throws WxErrorExcepti params.addProperty("query", query); String responseContent = wxMaService.post(DATABASE_DELETE_URL, params.toString()); - JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent); - JsonObject jsonObject = tmpJsonElement.getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) { throw new WxErrorException(WxError.fromJson(responseContent)); } @@ -133,7 +131,7 @@ public int databaseDelete(String query) throws WxErrorException { @Override public int databaseDelete(String env, String query) throws WxErrorException { String response = this.wxMaService.post(DATABASE_DELETE_URL, ImmutableMap.of("env", env, "query", query)); - return JSON_PARSER.parse(response).getAsJsonObject().get("deleted").getAsInt(); + return GsonParser.parse(response).get("deleted").getAsInt(); } @Override @@ -214,7 +212,7 @@ public JsonArray databaseAggregate(String query) throws WxErrorException { @Override public JsonArray databaseAggregate(String env, String query) throws WxErrorException { String response = this.wxMaService.post(DATABASE_AGGREGATE_URL, ImmutableMap.of("env", env, "query", query)); - return JSON_PARSER.parse(response).getAsJsonObject().get("data").getAsJsonArray(); + return GsonParser.parse(response).get("data").getAsJsonArray(); } @Override @@ -228,7 +226,7 @@ public Long count(String collection, String whereJson) throws WxErrorException { params.addProperty("query", query); String responseContent = wxMaService.post(DATABASE_COUNT_URL, params.toString()); - return JSON_PARSER.parse(responseContent).getAsJsonObject().get("count").getAsLong(); + return GsonParser.parse(responseContent).get("count").getAsLong(); } @Override @@ -240,7 +238,7 @@ public Long databaseCount(String query) throws WxErrorException { @Override public Long databaseCount(String env, String query) throws WxErrorException { String response = this.wxMaService.post(DATABASE_COUNT_URL, ImmutableMap.of("env", env, "query", query)); - return JSON_PARSER.parse(response).getAsJsonObject().get("count").getAsLong(); + return GsonParser.parse(response).get("count").getAsLong(); } @Override @@ -283,7 +281,7 @@ public Long databaseMigrateImport(String env, String collectionName, String file params.addProperty("conflict_mode", conflictMode); String response = this.wxMaService.post(DATABASE_MIGRATE_IMPORT_URL, params.toString()); - return JSON_PARSER.parse(response).getAsJsonObject().get("job_id").getAsLong(); + return GsonParser.parse(response).get("job_id").getAsLong(); } @Override @@ -301,7 +299,7 @@ public Long databaseMigrateExport(String env, String filePath, int fileType, Str params.addProperty("query", query); String response = this.wxMaService.post(DATABASE_MIGRATE_EXPORT_URL, params.toString()); - return JSON_PARSER.parse(response).getAsJsonObject().get("job_id").getAsLong(); + return GsonParser.parse(response).get("job_id").getAsLong(); } @Override diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCodeServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCodeServiceImpl.java index 2afdce5099..9ec8e9c307 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCodeServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCodeServiceImpl.java @@ -9,6 +9,7 @@ import java.util.List; import lombok.AllArgsConstructor; +import me.chanjar.weixin.common.util.json.GsonParser; import org.apache.commons.lang3.StringUtils; import cn.binarywang.wx.miniapp.api.WxMaCodeService; @@ -34,7 +35,7 @@ */ @AllArgsConstructor public class WxMaCodeServiceImpl implements WxMaCodeService { - private static final JsonParser JSON_PARSER = new JsonParser(); + private WxMaService wxMaService; @Override @@ -73,7 +74,7 @@ public byte[] getQrCode(String path) throws WxErrorException { @Override public List getCategory() throws WxErrorException { String responseContent = this.wxMaService.get(GET_CATEGORY_URL, null); - JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); boolean hasCategoryList = jsonObject.has("category_list"); if (hasCategoryList) { return WxMaGsonBuilder.create().fromJson(jsonObject.getAsJsonArray("category_list"), @@ -87,7 +88,7 @@ public List getCategory() throws WxErrorException { @Override public List getPage() throws WxErrorException { String responseContent = this.wxMaService.get(GET_PAGE_URL, null); - JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); boolean hasPageList = jsonObject.has("page_list"); if (hasPageList) { return WxMaGsonBuilder.create().fromJson(jsonObject.getAsJsonArray("page_list"), @@ -101,7 +102,7 @@ public List getPage() throws WxErrorException { @Override public long submitAudit(WxMaCodeSubmitAuditRequest auditRequest) throws WxErrorException { String responseContent = this.wxMaService.post(SUBMIT_AUDIT_URL, auditRequest.toJson()); - JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); return GsonHelper.getLong(jsonObject, "auditid"); } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaJsapiServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaJsapiServiceImpl.java index ed5b375e24..9b8ce12483 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaJsapiServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaJsapiServiceImpl.java @@ -10,6 +10,7 @@ import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.RandomUtils; import me.chanjar.weixin.common.util.crypto.SHA1; +import me.chanjar.weixin.common.util.json.GsonParser; import java.util.concurrent.locks.Lock; @@ -22,7 +23,7 @@ */ @AllArgsConstructor public class WxMaJsapiServiceImpl implements WxMaJsapiService { - private static final JsonParser JSON_PARSER = new JsonParser(); + private WxMaService wxMaService; @@ -42,8 +43,7 @@ public String getCardApiTicket(boolean forceRefresh) throws WxErrorException { if (this.wxMaService.getWxMaConfig().isCardApiTicketExpired()) { String responseContent = this.wxMaService.get(GET_JSAPI_TICKET_URL + "?type=wx_card", null); - JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent); - JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject(); + JsonObject tmpJsonObject = GsonParser.parse(responseContent); String jsapiTicket = tmpJsonObject.get("ticket").getAsString(); int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt(); this.wxMaService.getWxMaConfig().updateCardApiTicket(jsapiTicket, expiresInSeconds); @@ -70,8 +70,7 @@ public String getJsapiTicket(boolean forceRefresh) throws WxErrorException { if (this.wxMaService.getWxMaConfig().isJsapiTicketExpired()) { String responseContent = this.wxMaService.get(GET_JSAPI_TICKET_URL + "?type=jsapi", null); - JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent); - JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject(); + JsonObject tmpJsonObject = GsonParser.parse(responseContent); String jsapiTicket = tmpJsonObject.get("ticket").getAsString(); int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt(); this.wxMaService.getWxMaConfig().updateJsapiTicket(jsapiTicket, expiresInSeconds); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java index 6f1a154bb1..75f3d4d409 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java @@ -10,6 +10,7 @@ import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import java.util.ArrayList; import java.util.HashMap; @@ -25,7 +26,7 @@ */ @AllArgsConstructor public class WxMaLiveServiceImpl implements WxMaLiveService { - private static final JsonParser JSON_PARSER = new JsonParser(); + private WxMaService service; @Override @@ -91,7 +92,7 @@ private JsonObject getJsonObject(Integer start, Integer limit, MapBinary Wang */ @AllArgsConstructor public class WxMaMsgServiceImpl implements WxMaMsgService { - private static final JsonParser JSON_PARSER = new JsonParser(); + private WxMaService wxMaService; @Override @@ -29,7 +30,7 @@ public boolean sendKefuMsg(WxMaKefuMessage message) throws WxErrorException { @Override public void sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException { String responseContent = this.wxMaService.post(TEMPLATE_MSG_SEND_URL, templateMessage.toJson()); - JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) { throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); } @@ -38,7 +39,7 @@ public void sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorE @Override public void sendSubscribeMsg(WxMaSubscribeMessage subscribeMessage) throws WxErrorException { String responseContent = this.wxMaService.post(SUBSCRIBE_MSG_SEND_URL, subscribeMessage.toJson()); - JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) { throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); } @@ -47,7 +48,7 @@ public void sendSubscribeMsg(WxMaSubscribeMessage subscribeMessage) throws WxErr @Override public void sendUniformMsg(WxMaUniformMessage uniformMessage) throws WxErrorException { String responseContent = this.wxMaService.post(UNIFORM_MSG_SEND_URL, uniformMessage.toJson()); - JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) { throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); } @@ -56,7 +57,7 @@ public void sendUniformMsg(WxMaUniformMessage uniformMessage) throws WxErrorExce @Override public JsonObject createUpdatableMessageActivityId() throws WxErrorException { final String responseContent = this.wxMaService.get(ACTIVITY_ID_CREATE_URL, null); - return JSON_PARSER.parse(responseContent).getAsJsonObject(); + return GsonParser.parse(responseContent); } @Override diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfo.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfo.java index 8a9d7ea777..0e1fcd7d25 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfo.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfo.java @@ -8,6 +8,7 @@ import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import lombok.Data; +import me.chanjar.weixin.common.util.json.GsonParser; /** * 微信运动步数信息. @@ -16,7 +17,7 @@ */ @Data public class WxMaRunStepInfo implements Serializable { - private static final JsonParser JSON_PARSER = new JsonParser(); + private static final long serialVersionUID = -7496372171398607044L; /** @@ -30,7 +31,7 @@ public class WxMaRunStepInfo implements Serializable { private Integer step; public static List fromJson(String json) { - JsonObject jsonObject = JSON_PARSER.parse(json).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(json); return WxMaGsonBuilder.create().fromJson(jsonObject.get("stepInfoList").toString(), new TypeToken>() { }.getType()); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressAccount.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressAccount.java index a3f22b6a4a..201075ba31 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressAccount.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressAccount.java @@ -8,6 +8,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import me.chanjar.weixin.common.util.json.GsonParser; import java.io.Serializable; import java.util.List; @@ -24,7 +25,7 @@ @AllArgsConstructor public class WxMaExpressAccount implements Serializable { - private static final JsonParser JSON_PARSER = new JsonParser(); + private static final long serialVersionUID = -4991983596742569736L; /** @@ -95,7 +96,7 @@ public class WxMaExpressAccount implements Serializable { private List serviceType; public static List fromJsonList(String json) { - JsonObject jsonObject = JSON_PARSER.parse(json).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(json); return WxMaGsonBuilder.create().fromJson(jsonObject.get("list").toString(), new TypeToken>() { }.getType()); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressDelivery.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressDelivery.java index b23bc4c416..4c4f371b37 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressDelivery.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressDelivery.java @@ -8,6 +8,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import me.chanjar.weixin.common.util.json.GsonParser; import java.io.Serializable; import java.util.List; @@ -23,7 +24,7 @@ @NoArgsConstructor @AllArgsConstructor public class WxMaExpressDelivery implements Serializable { - private static final JsonParser JSON_PARSER = new JsonParser(); + private static final long serialVersionUID = -8394544895730223810L; /** @@ -63,7 +64,7 @@ public class WxMaExpressDelivery implements Serializable { private List serviceType; public static List fromJson(String json) { - JsonObject jsonObject = JSON_PARSER.parse(json).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(json); return WxMaGsonBuilder.create().fromJson(jsonObject.get("data").toString(), new TypeToken>() { }.getType()); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressPrinter.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressPrinter.java index 764f2ac894..80e5689bf0 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressPrinter.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressPrinter.java @@ -22,7 +22,7 @@ @AllArgsConstructor public class WxMaExpressPrinter implements Serializable { - private static final JsonParser JSON_PARSER = new JsonParser(); + private static final long serialVersionUID = 7164449984700322531L; /** diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/result/WxMaExpressOrderInfoResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/result/WxMaExpressOrderInfoResult.java index 8a25950a96..3bf71036b7 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/result/WxMaExpressOrderInfoResult.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/result/WxMaExpressOrderInfoResult.java @@ -8,6 +8,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import me.chanjar.weixin.common.util.json.GsonParser; import java.io.Serializable; import java.util.List; @@ -24,7 +25,7 @@ @NoArgsConstructor @AllArgsConstructor public class WxMaExpressOrderInfoResult implements Serializable { - private static final JsonParser JSON_PARSER = new JsonParser(); + private static final long serialVersionUID = -9166603059965942285L; /** @@ -66,7 +67,7 @@ public static WxMaExpressOrderInfoResult fromJson(String json) { } public static List toList(String json) { - JsonObject jsonObject = JSON_PARSER.parse(json).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(json); return WxMaGsonBuilder.create().fromJson(jsonObject.get("order_list").toString(), new TypeToken>() { }.getType()); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java index 1fbc1e4883..4b7e48d2c2 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java @@ -22,6 +22,7 @@ import me.chanjar.weixin.common.util.RandomUtils; import me.chanjar.weixin.common.util.crypto.SHA1; import me.chanjar.weixin.common.util.http.*; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.common.util.json.WxGsonBuilder; import me.chanjar.weixin.mp.api.*; import me.chanjar.weixin.mp.bean.WxMpSemanticQuery; @@ -47,7 +48,7 @@ */ @Slf4j public abstract class BaseWxMpServiceImpl implements WxMpService, RequestHttp { - private static final JsonParser JSON_PARSER = new JsonParser(); + protected WxSessionManager sessionManager = new StandardSessionManager(); private WxMpKefuService kefuService = new WxMpKefuServiceImpl(this); @@ -110,7 +111,7 @@ public String getTicket(TicketType type, boolean forceRefresh) throws WxErrorExc if (this.getWxMpConfigStorage().isTicketExpired(type)) { String responseContent = execute(SimpleGetRequestExecutor.create(this), GET_TICKET_URL.getUrl(this.getWxMpConfigStorage()) + type.getCode(), null); - JsonObject tmpJsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + JsonObject tmpJsonObject = GsonParser.parse(responseContent); String jsapiTicket = tmpJsonObject.get("ticket").getAsString(); int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt(); this.getWxMpConfigStorage().updateTicket(type, jsapiTicket, expiresInSeconds); @@ -165,8 +166,7 @@ public String shortUrl(String longUrl) throws WxErrorException { o.addProperty("action", "long2short"); o.addProperty("long_url", longUrl); String responseContent = this.post(SHORTURL_API_URL, o.toString()); - JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent); - return tmpJsonElement.getAsJsonObject().get("short_url").getAsString(); + return GsonParser.parse(responseContent).get("short_url").getAsString(); } @Override @@ -244,8 +244,8 @@ public boolean oauth2validateAccessToken(WxMpOAuth2AccessToken token) { @Override public String[] getCallbackIP() throws WxErrorException { String responseContent = this.get(GET_CALLBACK_IP_URL, null); - JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent); - JsonArray ipList = tmpJsonElement.getAsJsonObject().get("ip_list").getAsJsonArray(); + JsonObject tmpJsonObject = GsonParser.parse(responseContent); + JsonArray ipList = tmpJsonObject.get("ip_list").getAsJsonArray(); String[] ipArray = new String[ipList.size()]; for (int i = 0; i < ipList.size(); i++) { ipArray[i] = ipList.get(i).getAsString(); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java index 5ac3be31fd..49ab210209 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java @@ -5,6 +5,7 @@ import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.api.WxMpAiOpenService; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.enums.AiLangType; @@ -23,7 +24,7 @@ */ @RequiredArgsConstructor public class WxMpAiOpenServiceImpl implements WxMpAiOpenService { - private static final JsonParser JSON_PARSER = new JsonParser(); + private final WxMpService wxMpService; @Override @@ -53,7 +54,7 @@ public String translate(AiLangType langFrom, AiLangType langTo, String content) throw new WxErrorException(error); } - return JSON_PARSER.parse(response).getAsJsonObject().get("to_content").getAsString(); + return GsonParser.parse(response).get("to_content").getAsString(); } @Override @@ -69,6 +70,6 @@ public String queryRecognitionResult(String voiceId, AiLangType lang) throws WxE throw new WxErrorException(error); } - return JSON_PARSER.parse(response).getAsJsonObject().get("result").getAsString(); + return GsonParser.parse(response).get("result").getAsString(); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java index 2a42a0a590..704e51c5f7 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java @@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.bean.menu.WxMenu; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.api.WxMpMenuService; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.menu.WxMpGetSelfMenuInfoResult; @@ -46,8 +47,7 @@ public String menuCreate(WxMenu menu) throws WxErrorException { @Override public String menuCreate(String json) throws WxErrorException { - JsonParser jsonParser = new JsonParser(); - JsonObject jsonObject = jsonParser.parse(json).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(json); WxMpApiUrl.Menu url = MENU_CREATE; if (jsonObject.get("matchrule") != null) { url = MENU_ADDCONDITIONAL; @@ -55,7 +55,7 @@ public String menuCreate(String json) throws WxErrorException { String result = this.wxMpService.post(url, json); if (jsonObject.get("matchrule") != null) { - return jsonParser.parse(result).getAsJsonObject().get("menuid").getAsString(); + return GsonParser.parse(result).get("menuid").getAsString(); } return null; diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java index daaf60c2f3..377d087647 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java @@ -6,6 +6,7 @@ import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpTemplateMsgService; import me.chanjar.weixin.mp.bean.template.WxMpTemplate; @@ -26,14 +27,14 @@ */ @RequiredArgsConstructor public class WxMpTemplateMsgServiceImpl implements WxMpTemplateMsgService { - private static final JsonParser JSON_PARSER = new JsonParser(); + private final WxMpService wxMpService; @Override public String sendTemplateMsg(WxMpTemplateMessage templateMessage) throws WxErrorException { String responseContent = this.wxMpService.post(MESSAGE_TEMPLATE_SEND, templateMessage.toJson()); - final JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + final JsonObject jsonObject = GsonParser.parse(responseContent); if (jsonObject.get("errcode").getAsInt() == 0) { return jsonObject.get("msgid").getAsString(); } @@ -62,7 +63,7 @@ public String addTemplate(String shortTemplateId) throws WxErrorException { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("template_id_short", shortTemplateId); String responseContent = this.wxMpService.post(TEMPLATE_API_ADD_TEMPLATE, jsonObject.toString()); - final JsonObject result = JSON_PARSER.parse(responseContent).getAsJsonObject(); + final JsonObject result = GsonParser.parse(responseContent); if (result.get("errcode").getAsInt() == 0) { return result.get("template_id").getAsString(); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleResult.java index f625072f80..d90aba2e36 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleResult.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleResult.java @@ -6,6 +6,7 @@ import com.google.gson.reflect.TypeToken; import lombok.Data; import lombok.EqualsAndHashCode; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; /** @@ -116,7 +117,7 @@ public class WxDataCubeArticleResult extends WxDataCubeBaseResult { public static List fromJson(String json) { return WxMpGsonBuilder.create().fromJson( - JSON_PARSER.parse(json).getAsJsonObject().get("list"), + GsonParser.parse(json).get("list"), new TypeToken>() { }.getType()); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotal.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotal.java index 722b6c252e..bb732c34d7 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotal.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotal.java @@ -6,6 +6,7 @@ import com.google.gson.reflect.TypeToken; import lombok.Data; import lombok.EqualsAndHashCode; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; /** @@ -42,7 +43,7 @@ public class WxDataCubeArticleTotal extends WxDataCubeBaseResult { public static List fromJson(String json) { return WxMpGsonBuilder.create().fromJson( - JSON_PARSER.parse(json).getAsJsonObject().get("list"), + GsonParser.parse(json).get("list"), new TypeToken>() { }.getType()); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java index f86035c6b5..c5cbb7da17 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java @@ -18,7 +18,6 @@ @Data public abstract class WxDataCubeBaseResult implements Serializable { private static final long serialVersionUID = 8780389911053297600L; - protected static final JsonParser JSON_PARSER = new JsonParser(); /** * ref_date. diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeInterfaceResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeInterfaceResult.java index 0207d288b2..0cc54c7cc9 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeInterfaceResult.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeInterfaceResult.java @@ -4,6 +4,7 @@ import com.google.gson.reflect.TypeToken; import lombok.Data; import lombok.EqualsAndHashCode; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; import java.util.List; @@ -57,7 +58,7 @@ public class WxDataCubeInterfaceResult extends WxDataCubeBaseResult { public static List fromJson(String json) { return WxMpGsonBuilder.create().fromJson( - JSON_PARSER.parse(json).getAsJsonObject().get("list"), + GsonParser.parse(json).get("list"), new TypeToken>() { }.getType()); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeMsgResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeMsgResult.java index b8796009d6..c556e51758 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeMsgResult.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeMsgResult.java @@ -4,6 +4,7 @@ import com.google.gson.reflect.TypeToken; import lombok.Data; import lombok.EqualsAndHashCode; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; import java.util.List; @@ -70,7 +71,7 @@ public class WxDataCubeMsgResult extends WxDataCubeBaseResult { public static List fromJson(String json) { return WxMpGsonBuilder.create().fromJson( - JSON_PARSER.parse(json).getAsJsonObject().get("list"), + GsonParser.parse(json).get("list"), new TypeToken>() { }.getType()); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserCumulate.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserCumulate.java index f26ac12596..4255fe2a6d 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserCumulate.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserCumulate.java @@ -8,6 +8,7 @@ import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import lombok.Data; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; /** @@ -20,7 +21,7 @@ */ @Data public class WxDataCubeUserCumulate implements Serializable { - private static final JsonParser JSON_PARSER = new JsonParser(); + private static final long serialVersionUID = -3570981300225093657L; @@ -30,7 +31,7 @@ public class WxDataCubeUserCumulate implements Serializable { public static List fromJson(String json) { return WxMpGsonBuilder.create().fromJson( - JSON_PARSER.parse(json).getAsJsonObject().get("list"), + GsonParser.parse(json).get("list"), new TypeToken>() { }.getType()); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserSummary.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserSummary.java index 4d28c7b992..ea9e7d485b 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserSummary.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserSummary.java @@ -8,6 +8,7 @@ import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import lombok.Data; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; /** @@ -20,7 +21,7 @@ public class WxDataCubeUserSummary implements Serializable { private static final long serialVersionUID = -2336654489906694173L; - private static final JsonParser JSON_PARSER = new JsonParser(); + private Date refDate; @@ -32,7 +33,7 @@ public class WxDataCubeUserSummary implements Serializable { public static List fromJson(String json) { return WxMpGsonBuilder.create().fromJson( - JSON_PARSER.parse(json).getAsJsonObject().get("list"), + GsonParser.parse(json).get("list"), new TypeToken>() { }.getType()); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpAdLeadResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpAdLeadResult.java index 61805018b0..c801195910 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpAdLeadResult.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpAdLeadResult.java @@ -4,6 +4,7 @@ import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; import lombok.Data; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; import java.io.Serializable; @@ -15,7 +16,6 @@ @Data public class WxMpAdLeadResult implements Serializable { private static final long serialVersionUID = -1526796632563660821L; - protected static final JsonParser JSON_PARSER = new JsonParser(); @SerializedName("page_info") private WxMpAdLeadPageInfo pageInfo; @@ -25,7 +25,7 @@ public class WxMpAdLeadResult implements Serializable { public static WxMpAdLeadResult fromJson(String json) { return WxMpGsonBuilder.create().fromJson( - JSON_PARSER.parse(json).getAsJsonObject().get("data"), + GsonParser.parse(json).get("data"), new TypeToken() { }.getType()); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpUserActionSet.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpUserActionSet.java index 84b0f4bba0..6bf1737945 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpUserActionSet.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpUserActionSet.java @@ -4,6 +4,7 @@ import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; import lombok.Data; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; import java.io.Serializable; @@ -16,7 +17,6 @@ @Data public class WxMpUserActionSet implements Serializable { private static final long serialVersionUID = 1979861770645159905L; - protected static final JsonParser JSON_PARSER = new JsonParser(); /** * user_action_set_id @@ -48,7 +48,7 @@ public class WxMpUserActionSet implements Serializable { public static List fromJson(String json) { return WxMpGsonBuilder.create().fromJson( - JSON_PARSER.parse(json).getAsJsonObject().get("data").getAsJsonObject().get("list"), + GsonParser.parse(json).get("data").getAsJsonObject().get("list"), new TypeToken>() { }.getType()); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplate.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplate.java index 2b3d45a7da..42c190e7d0 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplate.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplate.java @@ -7,6 +7,7 @@ import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; import lombok.Data; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; /** @@ -19,7 +20,7 @@ */ @Data public class WxMpTemplate implements Serializable { - private static final JsonParser JSON_PARSER = new JsonParser(); + private static final long serialVersionUID = -7366474522571199372L; /** @@ -60,7 +61,7 @@ public class WxMpTemplate implements Serializable { private String example; public static List fromJson(String json) { - return WxMpGsonBuilder.create().fromJson(JSON_PARSER.parse(json).getAsJsonObject().get("template_list"), + return WxMpGsonBuilder.create().fromJson(GsonParser.parse(json).get("template_list"), new TypeToken>() { }.getType()); } diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java index e111b5a18b..2d7809bf4d 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java @@ -10,6 +10,7 @@ import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.crypto.SHA1; import me.chanjar.weixin.common.util.http.URIUtil; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.common.util.json.WxGsonBuilder; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken; @@ -33,7 +34,7 @@ @Slf4j @AllArgsConstructor public class WxOpenComponentServiceImpl implements WxOpenComponentService { - private static final JsonParser JSON_PARSER = new JsonParser(); + private static final Map WX_OPEN_MA_SERVICE_MAP = new ConcurrentHashMap<>(); private static final Map WX_OPEN_MP_SERVICE_MAP = new ConcurrentHashMap<>(); private static final Map WX_OPEN_FAST_MA_SERVICE_MAP = new ConcurrentHashMap<>(); @@ -435,7 +436,7 @@ public WxMaJscode2SessionResult miniappJscode2Session(String appId, String jsCod @Override public List getTemplateDraftList() throws WxErrorException { String responseContent = get(GET_TEMPLATE_DRAFT_LIST_URL, "access_token"); - JsonObject response = JSON_PARSER.parse(StringUtils.defaultString(responseContent, "{}")).getAsJsonObject(); + JsonObject response = GsonParser.parse(StringUtils.defaultString(responseContent, "{}")); boolean hasDraftList = response.has("draft_list"); if (hasDraftList) { return WxOpenGsonBuilder.create().fromJson(response.getAsJsonArray("draft_list"), @@ -449,7 +450,7 @@ public List getTemplateDraftList() throws WxErrorException @Override public List getTemplateList() throws WxErrorException { String responseContent = get(GET_TEMPLATE_LIST_URL, "access_token"); - JsonObject response = JSON_PARSER.parse(StringUtils.defaultString(responseContent, "{}")).getAsJsonObject(); + JsonObject response = GsonParser.parse(StringUtils.defaultString(responseContent, "{}")); boolean hasTemplateList = response.has("template_list"); if (hasTemplateList) { return WxOpenGsonBuilder.create().fromJson(response.getAsJsonArray("template_list"), diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceApacheHttpImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceApacheHttpImpl.java index 1b2d08984a..ec634c11f4 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceApacheHttpImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceApacheHttpImpl.java @@ -5,6 +5,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import jodd.util.Base64; +import me.chanjar.weixin.common.util.json.GsonParser; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpHost; import org.apache.http.HttpStatus; @@ -38,7 +39,6 @@ * @author Binary Wang */ public class WxPayServiceApacheHttpImpl extends BaseWxPayServiceImpl { - private final static JsonParser JSON_PARSER = new JsonParser(); @Override public byte[] postForBytes(String url, String requestStr, boolean useKey) throws WxPayException { @@ -104,7 +104,7 @@ public String postV3(String url, String requestStr) throws WxPayException { return responseString; } else { //有错误提示信息返回 - JsonObject jsonObject = JSON_PARSER.parse(responseString).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseString); throw new WxPayException(jsonObject.get("message").getAsString()); } } catch (Exception e) { @@ -132,7 +132,7 @@ public String getV3(URI url) throws WxPayException { return responseString; } else { //有错误提示信息返回 - JsonObject jsonObject = JSON_PARSER.parse(responseString).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseString); throw new WxPayException(jsonObject.get("message").getAsString()); } } catch (Exception e) { From 4d5c3b0b347f64804fbdaecc336db031981f5b95 Mon Sep 17 00:00:00 2001 From: niefy Date: Mon, 6 Jul 2020 14:44:53 +0800 Subject: [PATCH 3/4] =?UTF-8?q?Json=E8=A7=A3=E6=9E=90=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../binarywang/wx/graal/GraalProcessor.java | 1 - .../ApacheSimpleGetRequestExecutor.java | 1 - .../ApacheSimplePostRequestExecutor.java | 2 -- .../JoddHttpSimpleGetRequestExecutor.java | 1 - .../OkHttpSimpleGetRequestExecutor.java | 1 - .../weixin/common/util/json/GsonParser.java | 23 +++++++++++++++++++ ...WxMessageInMemoryDuplicateCheckerTest.java | 1 - .../cp/api/WxCpExternalContactService.java | 1 - .../cp/api/impl/BaseWxCpServiceImpl.java | 11 ++++----- .../cp/api/impl/BaseWxCpTpServiceImpl.java | 4 ++-- .../cp/api/impl/WxCpAgentServiceImpl.java | 1 - .../cp/api/impl/WxCpChatServiceImpl.java | 4 +--- .../api/impl/WxCpDepartmentServiceImpl.java | 13 +++++------ .../cp/api/impl/WxCpMediaServiceImpl.java | 2 -- .../cp/api/impl/WxCpMenuServiceImpl.java | 1 - .../cp/api/impl/WxCpOAuth2ServiceImpl.java | 11 ++------- .../weixin/cp/api/impl/WxCpOaServiceImpl.java | 14 +++++------ .../weixin/cp/api/impl/WxCpServiceImpl.java | 6 ++--- .../cp/api/impl/WxCpTagServiceImpl.java | 8 +++---- .../cp/api/impl/WxCpTaskCardServiceImpl.java | 1 - .../WxCpTpServiceApacheHttpClientImpl.java | 4 ++-- .../cp/api/impl/WxCpUserServiceImpl.java | 22 +++++++++--------- .../weixin/cp/bean/WxCpInviteResult.java | 5 ---- .../weixin/cp/bean/WxCpTpXmlMessage.java | 9 -------- .../weixin/cp/bean/WxCpTpXmlPackage.java | 7 ------ .../cp/bean/WxCpUserExternalUnassignList.java | 1 - .../weixin/cp/bean/oa/WxCpTemplateResult.java | 3 --- .../oa/templatedata/TemplateControls.java | 1 - .../control/TemplateAttendance.java | 1 - .../cp/api/impl/BaseWxCpServiceImplTest.java | 1 - .../api/impl/BaseWxCpTpServiceImplTest.java | 4 ---- .../cp/api/impl/WxCpAgentServiceImplTest.java | 2 -- .../cp/api/impl/WxCpUserServiceImplTest.java | 1 - .../weixin/cp/bean/WxCpTpXmlPackageTest.java | 1 - .../weixin/cp/demo/WxCpOAuth2Servlet.java | 1 - .../miniapp/api/impl/BaseWxMaServiceImpl.java | 1 - .../api/impl/WxMaAnalysisServiceImpl.java | 1 - .../api/impl/WxMaCloudServiceImpl.java | 1 - .../miniapp/api/impl/WxMaCodeServiceImpl.java | 1 - .../api/impl/WxMaJsapiServiceImpl.java | 2 -- .../miniapp/api/impl/WxMaLiveServiceImpl.java | 1 - .../miniapp/api/impl/WxMaMsgServiceImpl.java | 1 - .../api/impl/WxMaSubscribeServiceImpl.java | 10 ++++---- .../wx/miniapp/bean/WxMaRunStepInfo.java | 1 - .../WxCloudDatabaseCreateIndexRequest.java | 1 - .../bean/express/WxMaExpressAccount.java | 1 - .../bean/express/WxMaExpressDelivery.java | 1 - .../bean/express/WxMaExpressPrinter.java | 1 - .../result/WxMaExpressOrderInfoResult.java | 1 - .../WxMaPubTemplateTitleListResult.java | 2 -- .../bean/template/WxMaTemplateAddResult.java | 2 -- .../WxMaTemplateLibraryListResult.java | 2 -- .../api/impl/WxMaLiveServiceImplTest.java | 8 ------- .../api/impl/WxMaMsgServiceImplTest.java | 3 --- .../api/impl/WxMaShareServiceImplTest.java | 6 ----- .../wx/miniapp/bean/WxMaRunStepInfoTest.java | 1 - .../impl/WxMaRedissonConfigImplTest.java | 2 -- .../message/WxMaXmlOutMessageTest.java | 1 - .../WxMaUniformMessageGsonAdapterTest.java | 10 ++++---- .../mp/api/impl/BaseWxMpServiceImpl.java | 2 -- .../mp/api/impl/WxMpAiOpenServiceImpl.java | 1 - .../mp/api/impl/WxMpCardServiceImpl.java | 9 ++++---- .../mp/api/impl/WxMpDeviceServiceImpl.java | 1 - .../mp/api/impl/WxMpMarketingServiceImpl.java | 7 +++--- .../api/impl/WxMpMassMessageServiceImpl.java | 1 - .../mp/api/impl/WxMpMaterialServiceImpl.java | 1 - .../mp/api/impl/WxMpMenuServiceImpl.java | 3 +-- .../mp/api/impl/WxMpStoreServiceImpl.java | 6 ++--- .../api/impl/WxMpTemplateMsgServiceImpl.java | 2 -- .../impl/WxMpUserBlacklistServiceImpl.java | 1 - .../mp/api/impl/WxMpUserServiceImpl.java | 1 - .../mp/api/impl/WxMpUserTagServiceImpl.java | 4 ++-- .../me/chanjar/weixin/mp/bean/card/Card.java | 1 - .../weixin/mp/bean/card/DiscountCard.java | 1 - .../chanjar/weixin/mp/bean/card/GiftCard.java | 1 - .../card/WxMpCardMpnewsGethtmlResult.java | 1 - .../mp/bean/comment/WxMpCommentListVo.java | 2 -- .../bean/datacube/WxDataCubeBaseResult.java | 1 - .../bean/datacube/WxDataCubeUserCumulate.java | 2 -- .../bean/datacube/WxDataCubeUserSummary.java | 2 -- .../mp/bean/kefu/result/WxMpKfOnlineList.java | 1 - .../kefu/result/WxMpKfSessionGetResult.java | 1 - .../mp/bean/marketing/WxMpAdLeadResult.java | 1 - .../mp/bean/marketing/WxMpUserActionSet.java | 1 - .../mp/bean/ocr/WxMpOcrIdCardResult.java | 1 - .../chanjar/weixin/mp/bean/tag/WxUserTag.java | 6 ++--- .../weixin/mp/bean/template/WxMpTemplate.java | 1 - .../mp/bean/wifi/WxMpWifiShopDataResult.java | 6 ++--- .../mp/bean/wifi/WxMpWifiShopListResult.java | 4 ++-- .../weixin/mp/util/crypto/WxMpCryptUtil.java | 1 - .../impl/WxMpMarketingServiceImplTest.java | 2 -- .../mp/api/impl/WxMpUserServiceImplTest.java | 1 - .../WxMpMemberCardUpdateResultTest.java | 1 - .../menu/WxMpGetSelfMenuInfoResultTest.java | 1 - .../api/impl/WxOpenComponentServiceImpl.java | 1 - .../weixin/open/bean/WxOpenCreateResult.java | 1 - .../open/bean/ma/WxOpenMaPreviewInfo.java | 2 -- .../MaQrCodeOkhttpRequestExecutor.java | 2 -- .../weixin/open/util/WxOpenCryptUtil.java | 1 - .../impl/WxOpenComponentServiceImplTest.java | 2 -- .../wxpay/bean/entpay/EntPayRequest.java | 1 - .../ProfitSharingFinishRequest.java | 1 - .../bean/result/WxPayRefundQueryResult.java | 8 +++---- .../wxpay/bean/result/WxPayRefundResult.java | 8 +++---- .../wxpay/service/PayScoreService.java | 2 -- .../impl/ProfitSharingServiceImpl.java | 2 -- .../impl/WxPayServiceApacheHttpImpl.java | 1 - .../wxpay/v3/auth/WxPayCredentials.java | 2 -- .../wxpay/v3/auth/WxPayValidator.java | 3 +-- .../wxpay/bean/entpay/EntPayRequestTest.java | 2 -- .../impl/ProfitSharingServiceImplTest.java | 3 --- 111 files changed, 106 insertions(+), 245 deletions(-) create mode 100644 weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonParser.java diff --git a/weixin-graal/src/main/java/cn/binarywang/wx/graal/GraalProcessor.java b/weixin-graal/src/main/java/cn/binarywang/wx/graal/GraalProcessor.java index 4eaddadf2e..a7b02cae99 100644 --- a/weixin-graal/src/main/java/cn/binarywang/wx/graal/GraalProcessor.java +++ b/weixin-graal/src/main/java/cn/binarywang/wx/graal/GraalProcessor.java @@ -1,7 +1,6 @@ package cn.binarywang.wx.graal; import lombok.Data; -import lombok.extern.slf4j.Slf4j; import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.RoundEnvironment; diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheSimpleGetRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheSimpleGetRequestExecutor.java index 32299f56fe..2c536c4241 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheSimpleGetRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheSimpleGetRequestExecutor.java @@ -1,7 +1,6 @@ package me.chanjar.weixin.common.util.http.apache; import me.chanjar.weixin.common.WxType; -import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.http.RequestHttp; import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheSimplePostRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheSimplePostRequestExecutor.java index 598278c78c..493295bc9e 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheSimplePostRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheSimplePostRequestExecutor.java @@ -1,7 +1,6 @@ package me.chanjar.weixin.common.util.http.apache; import me.chanjar.weixin.common.WxType; -import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.http.RequestHttp; import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; @@ -12,7 +11,6 @@ import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; -import org.jetbrains.annotations.NotNull; import java.io.IOException; diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpSimpleGetRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpSimpleGetRequestExecutor.java index 193787a6bc..c549967e17 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpSimpleGetRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpSimpleGetRequestExecutor.java @@ -6,7 +6,6 @@ import jodd.http.ProxyInfo; import jodd.util.StringPool; import me.chanjar.weixin.common.WxType; -import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.http.RequestHttp; import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimpleGetRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimpleGetRequestExecutor.java index 09012692f5..4447bb268b 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimpleGetRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimpleGetRequestExecutor.java @@ -1,7 +1,6 @@ package me.chanjar.weixin.common.util.http.okhttp; import me.chanjar.weixin.common.WxType; -import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.http.RequestHttp; import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; 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 new file mode 100644 index 0000000000..494e75a9ee --- /dev/null +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonParser.java @@ -0,0 +1,23 @@ +package me.chanjar.weixin.common.util.json; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.stream.JsonReader; + +import java.io.Reader; + +public class GsonParser { + private static final JsonParser JSON_PARSER = new JsonParser(); + + public static JsonObject parse(String json){ + return JSON_PARSER.parse(json).getAsJsonObject(); + } + + public static JsonObject parse(Reader json){ + return JSON_PARSER.parse(json).getAsJsonObject(); + } + + public static JsonObject parse(JsonReader json){ + return JSON_PARSER.parse(json).getAsJsonObject(); + } +} diff --git a/weixin-java-common/src/test/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateCheckerTest.java b/weixin-java-common/src/test/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateCheckerTest.java index 6f98b3d986..fd8819272c 100644 --- a/weixin-java-common/src/test/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateCheckerTest.java +++ b/weixin-java-common/src/test/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateCheckerTest.java @@ -1,6 +1,5 @@ package me.chanjar.weixin.common.api; -import org.testng.Assert; import org.testng.annotations.Test; import java.util.concurrent.TimeUnit; 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 5aa2336a71..94de03e555 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 @@ -3,7 +3,6 @@ import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.cp.bean.*; -import java.util.Calendar; import java.util.Date; import java.util.List; 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 9dd1333bfa..416d128d51 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 @@ -2,9 +2,7 @@ import com.google.common.base.Joiner; import com.google.gson.JsonArray; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.bean.WxJsapiSignature; @@ -20,6 +18,7 @@ import me.chanjar.weixin.common.util.http.RequestHttp; import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.cp.api.*; import me.chanjar.weixin.cp.bean.WxCpMaJsCode2SessionResult; import me.chanjar.weixin.cp.bean.WxCpMessage; @@ -110,7 +109,7 @@ public String getAgentJsapiTicket(boolean forceRefresh) throws WxErrorException synchronized (this.globalAgentJsapiTicketRefreshLock) { if (this.configStorage.isAgentJsapiTicketExpired()) { String responseContent = this.get(this.configStorage.getApiUrl(GET_AGENT_CONFIG_TICKET), null); - JsonObject jsonObject = new JsonParser().parse(responseContent).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); this.configStorage.updateAgentJsapiTicket(jsonObject.get("ticket").getAsString(), jsonObject.get("expires_in").getAsInt()); } @@ -135,7 +134,7 @@ public String getJsapiTicket(boolean forceRefresh) throws WxErrorException { synchronized (this.globalJsapiTicketRefreshLock) { if (this.configStorage.isJsapiTicketExpired()) { String responseContent = this.get(this.configStorage.getApiUrl(GET_JSAPI_TICKET), null); - JsonObject tmpJsonObject = new JsonParser().parse(responseContent).getAsJsonObject(); + JsonObject tmpJsonObject = GsonParser.parse(responseContent); this.configStorage.updateJsapiTicket(tmpJsonObject.get("ticket").getAsString(), tmpJsonObject.get("expires_in").getAsInt()); } @@ -191,8 +190,8 @@ public WxCpMaJsCode2SessionResult jsCode2Session(String jsCode) throws WxErrorEx @Override public String[] getCallbackIp() throws WxErrorException { String responseContent = get(this.configStorage.getApiUrl(GET_CALLBACK_IP), null); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); - JsonArray jsonArray = tmpJsonElement.getAsJsonObject().get("ip_list").getAsJsonArray(); + JsonObject tmpJsonObject = GsonParser.parse(responseContent); + JsonArray jsonArray = tmpJsonObject.get("ip_list").getAsJsonArray(); String[] ips = new String[jsonArray.size()]; for (int i = 0; i < jsonArray.size(); i++) { ips[i] = jsonArray.get(i).getAsString(); diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpTpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpTpServiceImpl.java index dea647f3f9..2f5872b04d 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpTpServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpTpServiceImpl.java @@ -2,7 +2,6 @@ import com.google.common.base.Joiner; import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.WxType; @@ -15,6 +14,7 @@ import me.chanjar.weixin.common.util.http.RequestHttp; import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.cp.api.WxCpTpService; import me.chanjar.weixin.cp.bean.*; import me.chanjar.weixin.cp.config.WxCpTpConfigStorage; @@ -119,7 +119,7 @@ public WxCpTpCorp getPermanentCode(String authCode) throws WxErrorException { jsonObject.addProperty("auth_code", authCode); String result = post(configStorage.getApiUrl(GET_PERMANENT_CODE), jsonObject.toString()); - jsonObject = new JsonParser().parse(result).getAsJsonObject(); + jsonObject = GsonParser.parse(result); WxCpTpCorp wxCpTpCorp = WxCpTpCorp.fromJson(jsonObject.get("auth_corp_info").getAsJsonObject().toString()); wxCpTpCorp.setPermanentCode(jsonObject.get("permanent_code").getAsString()); return wxCpTpCorp; diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImpl.java index f1e80fce5d..d294c508fb 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImpl.java @@ -1,7 +1,6 @@ package me.chanjar.weixin.cp.api.impl; import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.WxType; diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpChatServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpChatServiceImpl.java index f1d6f8110f..db85d2f251 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpChatServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpChatServiceImpl.java @@ -1,6 +1,5 @@ package me.chanjar.weixin.cp.api.impl; -import com.google.gson.JsonParser; import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.json.GsonParser; @@ -9,7 +8,6 @@ import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.WxCpAppChatMessage; import me.chanjar.weixin.cp.bean.WxCpChat; -import me.chanjar.weixin.cp.constant.WxCpApiPathConsts; import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; import org.apache.commons.lang3.StringUtils; @@ -46,7 +44,7 @@ public String chatCreate(String name, String owner, List users, String c } final String url = this.cpService.getWxCpConfigStorage().getApiUrl(APPCHAT_CREATE); String result = this.cpService.post(url, WxGsonBuilder.create().toJson(data)); - return new JsonParser().parse(result).getAsJsonObject().get("chatid").getAsString(); + return GsonParser.parse(result).get("chatid").getAsString(); } @Override diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpDepartmentServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpDepartmentServiceImpl.java index fb2224e335..3a5ef87985 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpDepartmentServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpDepartmentServiceImpl.java @@ -1,15 +1,14 @@ package me.chanjar.weixin.cp.api.impl; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; +import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import lombok.RequiredArgsConstructor; 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.WxCpDepartmentService; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.WxCpDepart; -import me.chanjar.weixin.cp.constant.WxCpApiPathConsts; import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; import java.util.List; @@ -32,8 +31,8 @@ public class WxCpDepartmentServiceImpl implements WxCpDepartmentService { public Long create(WxCpDepart depart) throws WxErrorException { String url = this.mainService.getWxCpConfigStorage().getApiUrl(DEPARTMENT_CREATE); String responseContent = this.mainService.post(url, depart.toJson()); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); - return GsonHelper.getAsLong(tmpJsonElement.getAsJsonObject().get("id")); + JsonObject tmpJsonObject = GsonParser.parse(responseContent); + return GsonHelper.getAsLong(tmpJsonObject.get("id")); } @Override @@ -56,9 +55,9 @@ public List list(Long id) throws WxErrorException { } String responseContent = this.mainService.get(url, null); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); + JsonObject tmpJsonObject = GsonParser.parse(responseContent); return WxCpGsonBuilder.create() - .fromJson(tmpJsonElement.getAsJsonObject().get("department"), + .fromJson(tmpJsonObject.get("department"), new TypeToken>() { }.getType() ); 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 55579ff051..b83b6d39ab 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 @@ -6,10 +6,8 @@ import me.chanjar.weixin.common.util.fs.FileUtils; import me.chanjar.weixin.common.util.http.BaseMediaDownloadRequestExecutor; import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; -import me.chanjar.weixin.common.util.http.RequestExecutor; import me.chanjar.weixin.cp.api.WxCpMediaService; import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.constant.WxCpApiPathConsts; import java.io.File; import java.io.IOException; diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMenuServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMenuServiceImpl.java index 85abe71f45..d008e77083 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMenuServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMenuServiceImpl.java @@ -5,7 +5,6 @@ import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.cp.api.WxCpMenuService; import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.constant.WxCpApiPathConsts; import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Menu.*; diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOAuth2ServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOAuth2ServiceImpl.java index 2005bc36eb..f271149ee9 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOAuth2ServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOAuth2ServiceImpl.java @@ -1,24 +1,18 @@ package me.chanjar.weixin.cp.api.impl; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; -import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.http.URIUtil; import me.chanjar.weixin.common.util.json.GsonHelper; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.cp.api.WxCpOAuth2Service; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo; import me.chanjar.weixin.cp.bean.WxCpUserDetail; -import me.chanjar.weixin.cp.constant.WxCpApiPathConsts; import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; import static me.chanjar.weixin.common.api.WxConsts.OAuth2Scope.*; -import static me.chanjar.weixin.common.api.WxConsts.OAuth2Scope.SNSAPI_PRIVATEINFO; -import static me.chanjar.weixin.common.api.WxConsts.OAuth2Scope.SNSAPI_USERINFO; import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.OAuth2.*; /** @@ -74,8 +68,7 @@ public WxCpOauth2UserInfo getUserInfo(String code) throws WxErrorException { @Override public WxCpOauth2UserInfo getUserInfo(Integer agentId, String code) throws WxErrorException { String responseText = this.mainService.get(String.format(this.mainService.getWxCpConfigStorage().getApiUrl(GET_USER_INFO), code, agentId), null); - JsonElement je = new JsonParser().parse(responseText); - JsonObject jo = je.getAsJsonObject(); + JsonObject jo = GsonParser.parse(responseText); return WxCpOauth2UserInfo.builder() .userId(GsonHelper.getString(jo, "UserId")) 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 0484e1f62a..c626f6f562 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 @@ -1,13 +1,13 @@ package me.chanjar.weixin.cp.api.impl; import com.google.gson.JsonArray; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import lombok.NonNull; import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.cp.api.WxCpOaService; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.oa.*; @@ -64,10 +64,10 @@ public List getCheckinData(Integer openCheckinDataType, Date st final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_CHECKIN_DATA); String responseContent = this.mainService.post(url, jsonObject.toString()); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); + JsonObject tmpJson = GsonParser.parse(responseContent); return WxCpGsonBuilder.create() .fromJson( - tmpJsonElement.getAsJsonObject().get("checkindata"), + tmpJson.get("checkindata"), new TypeToken>() { }.getType() ); @@ -94,11 +94,11 @@ public List getCheckinOption(Date datetime, List user final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_CHECKIN_OPTION); String responseContent = this.mainService.post(url, jsonObject.toString()); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); + JsonObject tmpJson = GsonParser.parse(responseContent); return WxCpGsonBuilder.create() .fromJson( - tmpJsonElement.getAsJsonObject().get("info"), + tmpJson.get("info"), new TypeToken>() { }.getType() ); @@ -202,9 +202,9 @@ public List getDialRecord(Date startTime, Date endTime, Integer final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_DIAL_RECORD); String responseContent = this.mainService.post(url, jsonObject.toString()); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); + JsonObject tmpJson = GsonParser.parse(responseContent); - return WxCpGsonBuilder.create().fromJson(tmpJsonElement.getAsJsonObject().get("record"), + return WxCpGsonBuilder.create().fromJson(tmpJson.get("record"), new TypeToken>() { }.getType() ); diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpServiceImpl.java index 016c880fd1..d886d31530 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpServiceImpl.java @@ -1,11 +1,11 @@ package me.chanjar.weixin.cp.api.impl; import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.bean.WxAccessToken; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.cp.constant.WxCpApiPathConsts; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; @@ -88,7 +88,7 @@ public String getAgentJsapiTicket(boolean forceRefresh) throws WxErrorException // 拿到锁之后,再次判断一下最新的token是否过期,避免重刷 if (getWxCpConfigStorage().isAgentJsapiTicketExpired()) { String responseContent = this.get(getWxCpConfigStorage().getApiUrl(GET_AGENT_CONFIG_TICKET), null); - JsonObject jsonObject = new JsonParser().parse(responseContent).getAsJsonObject(); + JsonObject jsonObject = GsonParser.parse(responseContent); getWxCpConfigStorage().updateAgentJsapiTicket(jsonObject.get("ticket").getAsString(), jsonObject.get("expires_in").getAsInt()); } @@ -112,7 +112,7 @@ public String getJsapiTicket(boolean forceRefresh) throws WxErrorException { // 拿到锁之后,再次判断一下最新的token是否过期,避免重刷 if (getWxCpConfigStorage().isJsapiTicketExpired()) { String responseContent = this.get(getWxCpConfigStorage().getApiUrl(GET_JSAPI_TICKET), null); - JsonObject tmpJsonObject = new JsonParser().parse(responseContent).getAsJsonObject(); + JsonObject tmpJsonObject = GsonParser.parse(responseContent); getWxCpConfigStorage().updateJsapiTicket(tmpJsonObject.get("ticket").getAsString(), tmpJsonObject.get("expires_in").getAsInt()); } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTagServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTagServiceImpl.java index 0ee4ab69be..9a507e461f 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTagServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTagServiceImpl.java @@ -73,10 +73,10 @@ public void delete(String tagId) throws WxErrorException { public List listAll() throws WxErrorException { String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_LIST); String responseContent = this.mainService.get(url, null); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); + JsonObject tmpJson = GsonParser.parse(responseContent); return WxCpGsonBuilder.create() .fromJson( - tmpJsonElement.getAsJsonObject().get("taglist"), + tmpJson.get("taglist"), new TypeToken>() { }.getType() ); @@ -86,10 +86,10 @@ public List listAll() throws WxErrorException { public List listUsersByTagId(String tagId) throws WxErrorException { String url = String.format(this.mainService.getWxCpConfigStorage().getApiUrl(TAG_GET), tagId); String responseContent = this.mainService.get(url, null); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); + JsonObject tmpJson = GsonParser.parse(responseContent); return WxCpGsonBuilder.create() .fromJson( - tmpJsonElement.getAsJsonObject().get("userlist"), + tmpJson.get("userlist"), new TypeToken>() { }.getType() ); diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java index 97530a6e9d..3993960642 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java @@ -5,7 +5,6 @@ import me.chanjar.weixin.common.util.json.WxGsonBuilder; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.api.WxCpTaskCardService; -import me.chanjar.weixin.cp.constant.WxCpApiPathConsts; import java.util.HashMap; import java.util.List; diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTpServiceApacheHttpClientImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTpServiceApacheHttpClientImpl.java index 14e75125af..43df12657d 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTpServiceApacheHttpClientImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTpServiceApacheHttpClientImpl.java @@ -2,13 +2,13 @@ import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.http.HttpType; import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; import me.chanjar.weixin.common.util.http.apache.DefaultApacheHttpClientBuilder; +import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.cp.config.WxCpTpConfigStorage; import me.chanjar.weixin.cp.constant.WxCpApiPathConsts; import org.apache.http.Consts; @@ -76,7 +76,7 @@ public String getSuiteAccessToken(boolean forceRefresh) throws WxErrorException if (error.getErrorCode() != 0) { throw new WxErrorException(error); } - jsonObject = new JsonParser().parse(resultContent).getAsJsonObject(); + jsonObject = GsonParser.parse(resultContent); String suiteAccussToken = jsonObject.get("suite_access_token").getAsString(); Integer expiresIn = jsonObject.get("expires_in").getAsInt(); this.configStorage.updateSuiteAccessToken(suiteAccussToken, expiresIn); diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java index 4fad382f44..1627117d26 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java @@ -108,10 +108,10 @@ public List listSimpleByDepartment(Long departId, Boolean fetchChild, String url = this.mainService.getWxCpConfigStorage().getApiUrl(USER_SIMPLE_LIST + departId); String responseContent = this.mainService.get(url, params); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); + JsonObject tmpJson = GsonParser.parse(responseContent); return WxCpGsonBuilder.create() .fromJson( - tmpJsonElement.getAsJsonObject().get("userlist"), + tmpJson.get("userlist"), new TypeToken>() { }.getType() ); @@ -159,14 +159,14 @@ public Map userId2Openid(String userId, Integer agentId) throws } String responseContent = this.mainService.post(url, jsonObject.toString()); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); + JsonObject tmpJson = GsonParser.parse(responseContent); Map result = Maps.newHashMap(); - if (tmpJsonElement.getAsJsonObject().get("openid") != null) { - result.put("openid", tmpJsonElement.getAsJsonObject().get("openid").getAsString()); + if (tmpJson.get("openid") != null) { + result.put("openid", tmpJson.get("openid").getAsString()); } - if (tmpJsonElement.getAsJsonObject().get("appid") != null) { - result.put("appid", tmpJsonElement.getAsJsonObject().get("appid").getAsString()); + if (tmpJson.get("appid") != null) { + result.put("appid", tmpJson.get("appid").getAsString()); } return result; @@ -178,8 +178,8 @@ public String openid2UserId(String openid) throws WxErrorException { jsonObject.addProperty("openid", openid); String url = this.mainService.getWxCpConfigStorage().getApiUrl(USER_CONVERT_TO_USERID); String responseContent = this.mainService.post(url, jsonObject.toString()); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); - return tmpJsonElement.getAsJsonObject().get("userid").getAsString(); + JsonObject tmpJson = GsonParser.parse(responseContent); + return tmpJson.get("userid").getAsString(); } @Override @@ -188,8 +188,8 @@ public String getUserId(String mobile) throws WxErrorException { jsonObject.addProperty("mobile", mobile); String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_USER_ID); String responseContent = this.mainService.post(url, jsonObject.toString()); - JsonElement tmpJsonElement = new JsonParser().parse(responseContent); - return tmpJsonElement.getAsJsonObject().get("userid").getAsString(); + JsonObject tmpJson = GsonParser.parse(responseContent); + return tmpJson.get("userid").getAsString(); } @Override 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 ccf6fc94db..f5a0a66bf1 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,12 +1,7 @@ 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; diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpXmlMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpXmlMessage.java index f20f74b757..f39b062c08 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpXmlMessage.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpXmlMessage.java @@ -8,16 +8,7 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.util.XmlUtils; -import me.chanjar.weixin.common.util.crypto.WxCryptUtil; import me.chanjar.weixin.common.util.xml.XStreamCDataConverter; -import me.chanjar.weixin.cp.bean.outxmlbuilder.ImageBuilder; -import me.chanjar.weixin.cp.bean.outxmlbuilder.NewsBuilder; -import me.chanjar.weixin.cp.bean.outxmlbuilder.TextBuilder; -import me.chanjar.weixin.cp.bean.outxmlbuilder.VideoBuilder; -import me.chanjar.weixin.cp.bean.outxmlbuilder.VoiceBuilder; -import me.chanjar.weixin.cp.config.WxCpConfigStorage; -import me.chanjar.weixin.cp.config.WxCpTpConfigStorage; -import me.chanjar.weixin.cp.util.crypto.WxCpCryptUtil; import me.chanjar.weixin.cp.util.xml.XStreamTransformer; /** 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 0e22b626b9..e7af1dd61a 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 @@ -8,13 +8,6 @@ import lombok.Data; import me.chanjar.weixin.common.util.XmlUtils; import me.chanjar.weixin.common.util.xml.XStreamCDataConverter; -import me.chanjar.weixin.cp.bean.outxmlbuilder.ImageBuilder; -import me.chanjar.weixin.cp.bean.outxmlbuilder.NewsBuilder; -import me.chanjar.weixin.cp.bean.outxmlbuilder.TextBuilder; -import me.chanjar.weixin.cp.bean.outxmlbuilder.VideoBuilder; -import me.chanjar.weixin.cp.bean.outxmlbuilder.VoiceBuilder; -import me.chanjar.weixin.cp.config.WxCpConfigStorage; -import me.chanjar.weixin.cp.util.crypto.WxCpCryptUtil; import me.chanjar.weixin.cp.util.xml.XStreamTransformer; /** diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserExternalUnassignList.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserExternalUnassignList.java index ec86dea767..650171a41d 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserExternalUnassignList.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserExternalUnassignList.java @@ -1,6 +1,5 @@ package me.chanjar.weixin.cp.bean; -import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; import lombok.Getter; import lombok.Setter; diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpTemplateResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpTemplateResult.java index df25aabf37..b8dd2dbe91 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpTemplateResult.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpTemplateResult.java @@ -1,15 +1,12 @@ package me.chanjar.weixin.cp.bean.oa; -import com.google.gson.JsonObject; import com.google.gson.annotations.SerializedName; import lombok.Data; import me.chanjar.weixin.cp.bean.oa.templatedata.TemplateContent; -import me.chanjar.weixin.cp.bean.oa.templatedata.TemplateControls; import me.chanjar.weixin.cp.bean.oa.templatedata.TemplateTitle; import java.io.Serializable; import java.util.List; -import java.util.Map; /** * 审批模板详情 diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateControls.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateControls.java index bc9919ac3f..b9d463038e 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateControls.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateControls.java @@ -3,7 +3,6 @@ import lombok.Data; import java.io.Serializable; -import java.util.Map; /** * @author Administrator diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateAttendance.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateAttendance.java index 21dca126e9..7f641611a7 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateAttendance.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateAttendance.java @@ -5,7 +5,6 @@ import me.chanjar.weixin.cp.bean.oa.templatedata.TemplateDateRange; import java.io.Serializable; -import java.util.Map; /** * @author gyv12345@163.com diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImplTest.java index f18f8b7424..22cee8f405 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImplTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImplTest.java @@ -8,7 +8,6 @@ import org.testng.annotations.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.testng.Assert.*; /** *
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/BaseWxCpTpServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/BaseWxCpTpServiceImplTest.java
index 1c489e3515..9f79735612 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/BaseWxCpTpServiceImplTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/BaseWxCpTpServiceImplTest.java
@@ -2,21 +2,17 @@
 
 import com.google.gson.JsonObject;
 import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.cp.api.WxCpService;
 import me.chanjar.weixin.cp.api.WxCpTpService;
 import me.chanjar.weixin.cp.bean.WxCpTpAuthInfo;
 import me.chanjar.weixin.cp.bean.WxCpTpCorp;
 import me.chanjar.weixin.cp.bean.WxCpTpPermanentCodeInfo;
 import me.chanjar.weixin.cp.config.WxCpTpConfigStorage;
 import me.chanjar.weixin.cp.config.impl.WxCpTpDefaultConfigImpl;
-import me.chanjar.weixin.cp.constant.WxCpApiPathConsts;
 import org.testng.annotations.Test;
 
 import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Tp.GET_AUTH_INFO;
 import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Tp.GET_PERMANENT_CODE;
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.*;
 import static org.testng.Assert.*;
 
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImplTest.java
index b785fc0aa3..97c7d40fe5 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImplTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpAgentServiceImplTest.java
@@ -9,14 +9,12 @@
 import me.chanjar.weixin.cp.config.WxCpConfigStorage;
 import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
 import me.chanjar.weixin.cp.constant.WxCpApiPathConsts;
-import me.chanjar.weixin.cp.constant.WxCpConsts;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import java.util.List;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.contentOf;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 import static org.testng.Assert.assertEquals;
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImplTest.java
index 23c86768fd..1f565fbffa 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImplTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImplTest.java
@@ -15,7 +15,6 @@
 import me.chanjar.weixin.cp.bean.Gender;
 import me.chanjar.weixin.cp.bean.WxCpInviteResult;
 import me.chanjar.weixin.cp.bean.WxCpUser;
-import me.chanjar.weixin.cp.bean.WxCpUserExternalContactInfo;
 
 import static org.testng.Assert.*;
 
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/WxCpTpXmlPackageTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/WxCpTpXmlPackageTest.java
index 7b0e75a58c..5a54bfd8af 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/WxCpTpXmlPackageTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/WxCpTpXmlPackageTest.java
@@ -3,7 +3,6 @@
 import org.testng.annotations.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.testng.Assert.*;
 
 /**
  * .
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/demo/WxCpOAuth2Servlet.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/demo/WxCpOAuth2Servlet.java
index 14d933da8a..b6dda81301 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/demo/WxCpOAuth2Servlet.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/demo/WxCpOAuth2Servlet.java
@@ -8,7 +8,6 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.util.Arrays;
 
 public class WxCpOAuth2Servlet extends HttpServlet {
   private static final long serialVersionUID = 1L;
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 456398e08c..5c2bb99d1a 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
@@ -7,7 +7,6 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.gson.Gson;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.WxType;
 import me.chanjar.weixin.common.bean.WxAccessToken;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaAnalysisServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaAnalysisServiceImpl.java
index af8f5742a8..db69642714 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaAnalysisServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaAnalysisServiceImpl.java
@@ -10,7 +10,6 @@
 import cn.binarywang.wx.miniapp.bean.analysis.WxMaVisitTrend;
 import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 import lombok.AllArgsConstructor;
 import me.chanjar.weixin.common.error.WxErrorException;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java
index 6de844bec9..300ded88fe 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java
@@ -11,7 +11,6 @@
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxError;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCodeServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCodeServiceImpl.java
index 9ec8e9c307..2d965b4c45 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCodeServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCodeServiceImpl.java
@@ -21,7 +21,6 @@
 import cn.binarywang.wx.miniapp.bean.code.WxMaCodeVersionDistribution;
 import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 import me.chanjar.weixin.common.error.WxError;
 import me.chanjar.weixin.common.error.WxErrorException;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaJsapiServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaJsapiServiceImpl.java
index 9b8ce12483..a5c8376bc3 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaJsapiServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaJsapiServiceImpl.java
@@ -2,9 +2,7 @@
 
 import cn.binarywang.wx.miniapp.api.WxMaJsapiService;
 import cn.binarywang.wx.miniapp.api.WxMaService;
-import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import lombok.AllArgsConstructor;
 import me.chanjar.weixin.common.bean.WxJsapiSignature;
 import me.chanjar.weixin.common.error.WxErrorException;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java
index 75f3d4d409..e567a7af5a 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java
@@ -5,7 +5,6 @@
 import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo;
 import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import lombok.AllArgsConstructor;
 import me.chanjar.weixin.common.WxType;
 import me.chanjar.weixin.common.error.WxError;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java
index 3b864d15a1..50747a8206 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java
@@ -6,7 +6,6 @@
 import cn.binarywang.wx.miniapp.constant.WxMaConstants;
 import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import lombok.AllArgsConstructor;
 import me.chanjar.weixin.common.WxType;
 import me.chanjar.weixin.common.error.WxError;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImpl.java
index ffd54b3b10..8682612a9b 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImpl.java
@@ -6,10 +6,10 @@
 import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableMap;
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 import lombok.AllArgsConstructor;
 import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import org.apache.commons.lang3.StringUtils;
 
 import java.io.Serializable;
@@ -36,7 +36,7 @@ public WxMaPubTemplateTitleListResult getPubTemplateTitleList(String[] ids, int
   public List getPubTemplateKeyWordsById(String id) throws WxErrorException {
     String responseText = this.wxMaService.get(GET_PUB_TEMPLATE_KEY_WORDS_BY_ID_URL,
       Joiner.on("&").withKeyValueSeparator("=").join(ImmutableMap.of("tid", id)));
-    return WxMaGsonBuilder.create().fromJson(new JsonParser().parse(responseText).getAsJsonObject()
+    return WxMaGsonBuilder.create().fromJson(GsonParser.parse(responseText)
       .getAsJsonArray("data"), new TypeToken>() {
     }.getType());
   }
@@ -46,13 +46,13 @@ public String addTemplate(String id, List keywordIdList, String sceneDe
     String responseText = this.wxMaService.post(TEMPLATE_ADD_URL, ImmutableMap.of("tid", id,
       "kidList", keywordIdList.toArray(),
       "sceneDesc", sceneDesc));
-    return new JsonParser().parse(responseText).getAsJsonObject().get("priTmplId").getAsString();
+    return GsonParser.parse(responseText).get("priTmplId").getAsString();
   }
 
   @Override
   public List getTemplateList() throws WxErrorException {
     String responseText = this.wxMaService.get(TEMPLATE_LIST_URL, null);
-    return WxMaGsonBuilder.create().fromJson(new JsonParser().parse(responseText).getAsJsonObject()
+    return WxMaGsonBuilder.create().fromJson(GsonParser.parse(responseText)
       .getAsJsonArray("data"), new TypeToken>() {
     }.getType());
   }
@@ -66,7 +66,7 @@ public boolean delTemplate(String templateId) throws WxErrorException {
   @Override
   public List getCategory() throws WxErrorException {
     String responseText = this.wxMaService.get(GET_CATEGORY_URL, null);
-    return WxMaGsonBuilder.create().fromJson(new JsonParser().parse(responseText).getAsJsonObject()
+    return WxMaGsonBuilder.create().fromJson(GsonParser.parse(responseText)
       .getAsJsonArray("data"), new TypeToken>() {
     }.getType());
   }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfo.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfo.java
index 0e1fcd7d25..5e6ff641c4 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfo.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfo.java
@@ -5,7 +5,6 @@
 
 import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 import lombok.Data;
 import me.chanjar.weixin.common.util.json.GsonParser;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/cloud/WxCloudDatabaseCreateIndexRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/cloud/WxCloudDatabaseCreateIndexRequest.java
index fbdba099f7..9b551db255 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/cloud/WxCloudDatabaseCreateIndexRequest.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/cloud/WxCloudDatabaseCreateIndexRequest.java
@@ -1,6 +1,5 @@
 package cn.binarywang.wx.miniapp.bean.cloud;
 
-import lombok.Builder;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressAccount.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressAccount.java
index 201075ba31..950bda3066 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressAccount.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressAccount.java
@@ -2,7 +2,6 @@
 
 import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.google.gson.annotations.SerializedName;
 import com.google.gson.reflect.TypeToken;
 import lombok.AllArgsConstructor;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressDelivery.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressDelivery.java
index 4c4f371b37..dbdb02c113 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressDelivery.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressDelivery.java
@@ -2,7 +2,6 @@
 
 import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.google.gson.annotations.SerializedName;
 import com.google.gson.reflect.TypeToken;
 import lombok.AllArgsConstructor;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressPrinter.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressPrinter.java
index 80e5689bf0..b41d33305c 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressPrinter.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/WxMaExpressPrinter.java
@@ -1,7 +1,6 @@
 package cn.binarywang.wx.miniapp.bean.express;
 
 import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
-import com.google.gson.JsonParser;
 import com.google.gson.annotations.SerializedName;
 import lombok.AllArgsConstructor;
 import lombok.Data;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/result/WxMaExpressOrderInfoResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/result/WxMaExpressOrderInfoResult.java
index 3bf71036b7..fb47057d87 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/result/WxMaExpressOrderInfoResult.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/express/result/WxMaExpressOrderInfoResult.java
@@ -2,7 +2,6 @@
 
 import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.google.gson.annotations.SerializedName;
 import com.google.gson.reflect.TypeToken;
 import lombok.AllArgsConstructor;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaPubTemplateTitleListResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaPubTemplateTitleListResult.java
index 21fab6afa2..d2dacc6e61 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaPubTemplateTitleListResult.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaPubTemplateTitleListResult.java
@@ -1,8 +1,6 @@
 package cn.binarywang.wx.miniapp.bean.template;
 
-import lombok.AllArgsConstructor;
 import lombok.Data;
-import lombok.NoArgsConstructor;
 import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 
 import java.io.Serializable;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateAddResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateAddResult.java
index eb64920cd2..e9f68c0973 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateAddResult.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateAddResult.java
@@ -1,9 +1,7 @@
 package cn.binarywang.wx.miniapp.bean.template;
 
 import com.google.gson.annotations.SerializedName;
-import lombok.AllArgsConstructor;
 import lombok.Data;
-import lombok.NoArgsConstructor;
 import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 
 import java.io.Serializable;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateLibraryListResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateLibraryListResult.java
index f32832d349..0714378b96 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateLibraryListResult.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateLibraryListResult.java
@@ -1,9 +1,7 @@
 package cn.binarywang.wx.miniapp.bean.template;
 
 import com.google.gson.annotations.SerializedName;
-import lombok.AllArgsConstructor;
 import lombok.Data;
-import lombok.NoArgsConstructor;
 import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 
 import java.io.Serializable;
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java
index 5ccd16a037..c17fca3c87 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java
@@ -2,22 +2,14 @@
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo;
-import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
-import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
 import cn.binarywang.wx.miniapp.test.ApiTestModule;
-import cn.binarywang.wx.miniapp.test.TestConfig;
-import com.google.common.collect.ImmutableMap;
-import com.google.gson.JsonObject;
 import com.google.inject.Inject;
-import me.chanjar.weixin.common.error.WxErrorException;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import java.util.List;
-import java.util.stream.Collectors;
 
 import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
 
 /**
  * 测试直播相关的接口
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java
index 3ca42b46fc..554ac1da97 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java
@@ -1,6 +1,5 @@
 package cn.binarywang.wx.miniapp.api.impl;
 
-import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.*;
 import cn.binarywang.wx.miniapp.constant.WxMaConstants;
 import org.testng.annotations.*;
@@ -12,8 +11,6 @@
 import com.google.gson.JsonObject;
 import com.google.inject.Inject;
 import me.chanjar.weixin.common.error.WxErrorException;
-import org.testng.annotations.Guice;
-import org.testng.annotations.Test;
 
 import java.text.SimpleDateFormat;
 import java.util.Date;
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImplTest.java
index abd92bb770..dcf3726e33 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImplTest.java
@@ -1,19 +1,13 @@
 package cn.binarywang.wx.miniapp.api.impl;
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
-import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
 import cn.binarywang.wx.miniapp.bean.WxMaShareInfo;
-import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
 import cn.binarywang.wx.miniapp.test.ApiTestModule;
-import cn.binarywang.wx.miniapp.test.TestConfig;
-import com.google.common.collect.ImmutableMap;
 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.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
 
 /**
  * 测试分享相关的接口
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfoTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfoTest.java
index ef09e0731c..bbc87394d2 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfoTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaRunStepInfoTest.java
@@ -5,7 +5,6 @@
 import org.testng.annotations.*;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.testng.Assert.*;
 
 /**
  * 
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/config/impl/WxMaRedissonConfigImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/config/impl/WxMaRedissonConfigImplTest.java
index d4fb45963d..6fdcee10f4 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/config/impl/WxMaRedissonConfigImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/config/impl/WxMaRedissonConfigImplTest.java
@@ -1,13 +1,11 @@
 package cn.binarywang.wx.miniapp.config.impl;
 
-import cn.binarywang.wx.miniapp.config.WxMaConfig;
 import lombok.SneakyThrows;
 import org.redisson.Redisson;
 import org.redisson.api.RedissonClient;
 import org.redisson.config.Config;
 import org.redisson.config.TransportMode;
 import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/message/WxMaXmlOutMessageTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/message/WxMaXmlOutMessageTest.java
index f07c57b120..f6f775b6f6 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/message/WxMaXmlOutMessageTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/message/WxMaXmlOutMessageTest.java
@@ -4,7 +4,6 @@
 import org.testng.annotations.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.testng.Assert.*;
 
 public class WxMaXmlOutMessageTest {
 
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/util/json/WxMaUniformMessageGsonAdapterTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/util/json/WxMaUniformMessageGsonAdapterTest.java
index c28711ab81..1ae60070cd 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/util/json/WxMaUniformMessageGsonAdapterTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/util/json/WxMaUniformMessageGsonAdapterTest.java
@@ -2,7 +2,7 @@
 
 import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;
 import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage;
-import com.google.gson.JsonParser;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import org.testng.annotations.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -33,7 +33,7 @@ public void testSerialize_mp() {
       .addData(new WxMaTemplateData("keyword3", "2014年9月22日", "#173177"))
       .addData(new WxMaTemplateData("remark", "欢迎再次购买!", "#173177"));
 
-    assertThat(message.toJson()).isEqualTo(new JsonParser().parse("{\n" +
+    assertThat(message.toJson()).isEqualTo(GsonParser.parse("{\n" +
       "    \"touser\":\"OPENID\",\n" +
       "    \"mp_template_msg\":{\n" +
       "        \"appid\":\"APPID\",\n" +
@@ -66,7 +66,7 @@ public void testSerialize_mp() {
       "            }\n" +
       "        }\n" +
       "    }\n" +
-      "}").getAsJsonObject().toString());
+      "}").toString());
   }
 
   @Test
@@ -84,7 +84,7 @@ public void testSerialize_ma() {
       .addData(new WxMaTemplateData("keyword3", "腾讯微信总部"))
       .addData(new WxMaTemplateData("keyword4", "广州市海珠区新港中路397号"));
 
-    assertThat(message.toJson()).isEqualTo(new JsonParser().parse("{\n" +
+    assertThat(message.toJson()).isEqualTo(GsonParser.parse("{\n" +
       "    \"touser\":\"OPENID\",\n" +
       "    \"weapp_template_msg\":{\n" +
       "        \"template_id\":\"TEMPLATE_ID\",\n" +
@@ -106,6 +106,6 @@ public void testSerialize_ma() {
       "        },\n" +
       "        \"emphasis_keyword\":\"keyword1.DATA\"\n" +
       "    }\n" +
-      "}").getAsJsonObject().toString());
+      "}").toString());
   }
 }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java
index 4b7e48d2c2..982bc609da 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java
@@ -3,9 +3,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.slf4j.Slf4j;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java
index 49ab210209..831fc2a4ce 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java
@@ -1,6 +1,5 @@
 package me.chanjar.weixin.mp.api.impl;
 
-import com.google.gson.JsonParser;
 import lombok.RequiredArgsConstructor;
 import me.chanjar.weixin.common.WxType;
 import me.chanjar.weixin.common.error.WxError;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java
index faba08acd8..1e179c70f5 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java
@@ -9,6 +9,7 @@
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.common.util.RandomUtils;
 import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 import me.chanjar.weixin.mp.api.WxMpCardService;
 import me.chanjar.weixin.mp.api.WxMpService;
@@ -58,8 +59,7 @@ public String getCardApiTicket(boolean forceRefresh) throws WxErrorException {
       if (this.getWxMpService().getWxMpConfigStorage().isTicketExpired(type)) {
         String responseContent = this.wxMpService.execute(SimpleGetRequestExecutor
           .create(this.getWxMpService().getRequestHttp()), WxMpApiUrl.Card.CARD_GET_TICKET, null);
-        JsonElement tmpJsonElement = new JsonParser().parse(responseContent);
-        JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject();
+        JsonObject tmpJsonObject = GsonParser.parse(responseContent);
         String cardApiTicket = tmpJsonObject.get("ticket").getAsString();
         int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt();
         this.getWxMpService().getWxMpConfigStorage().updateTicket(type, cardApiTicket, expiresInSeconds);
@@ -99,8 +99,7 @@ public String decryptCardCode(String encryptCode) throws WxErrorException {
     JsonObject param = new JsonObject();
     param.addProperty("encrypt_code", encryptCode);
     String responseContent = this.wxMpService.post(WxMpApiUrl.Card.CARD_CODE_DECRYPT, param.toString());
-    JsonElement tmpJsonElement = new JsonParser().parse(responseContent);
-    JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject();
+    JsonObject tmpJsonObject = GsonParser.parse(responseContent);
     JsonPrimitive jsonPrimitive = tmpJsonObject.getAsJsonPrimitive("code");
     return jsonPrimitive.getAsString();
   }
@@ -159,7 +158,7 @@ public String getCardDetail(String cardId) throws WxErrorException {
     String responseContent = this.wxMpService.post(WxMpApiUrl.Card.CARD_GET, param.toString());
 
     // 判断返回值
-    JsonObject json = (new JsonParser()).parse(responseContent).getAsJsonObject();
+    JsonObject json = GsonParser.parse(responseContent);
     String errcode = json.get("errcode").getAsString();
     if (!"0".equals(errcode)) {
       String errmsg = json.get("errmsg").getAsString();
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImpl.java
index 3aa122a533..0f7b807dea 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImpl.java
@@ -6,7 +6,6 @@
 import me.chanjar.weixin.mp.api.WxMpDeviceService;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.bean.device.*;
-import me.chanjar.weixin.mp.enums.WxMpApiUrl;
 
 import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Device.*;
 
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImpl.java
index 6ec51e744f..c3dff12659 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImpl.java
@@ -1,12 +1,11 @@
 package me.chanjar.weixin.mp.api.impl;
 
 import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 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.mp.api.WxMpMarketingService;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.bean.marketing.WxMpAdLeadFilter;
@@ -38,8 +37,8 @@ public long addUserActionSets(String type, String name, String description) thro
     json.addProperty("name", name);
     json.addProperty("description", description);
     String responseContent = wxMpService.post(USER_ACTION_SETS_ADD, json.toString());
-    JsonElement tmpJsonElement = new JsonParser().parse(responseContent);
-    return tmpJsonElement.getAsJsonObject().get("data").getAsJsonObject().get("user_action_set_id").getAsLong();
+    JsonObject tmpJson = GsonParser.parse(responseContent);
+    return tmpJson.get("data").getAsJsonObject().get("user_action_set_id").getAsLong();
   }
 
   @Override
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMassMessageServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMassMessageServiceImpl.java
index dcae606da7..462604cb02 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMassMessageServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMassMessageServiceImpl.java
@@ -11,7 +11,6 @@
 import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult;
 import me.chanjar.weixin.mp.bean.result.WxMpMassSpeedGetResult;
 import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult;
-import me.chanjar.weixin.mp.enums.WxMpApiUrl;
 
 import static me.chanjar.weixin.mp.enums.WxMpApiUrl.*;
 
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java
index 4b852c03fe..bf37f2c414 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java
@@ -13,7 +13,6 @@
 import me.chanjar.weixin.mp.api.WxMpMaterialService;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.bean.material.*;
-import me.chanjar.weixin.mp.enums.WxMpApiUrl;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 import me.chanjar.weixin.mp.util.requestexecuter.material.*;
 import me.chanjar.weixin.mp.util.requestexecuter.media.MediaImgUploadRequestExecutor;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java
index 704e51c5f7..5631a44f7e 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java
@@ -1,7 +1,6 @@
 package me.chanjar.weixin.mp.api.impl;
 
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.bean.menu.WxMenu;
@@ -39,7 +38,7 @@ public String menuCreate(WxMenu menu) throws WxErrorException {
     log.debug("创建菜单:{},结果:{}", menuJson, result);
 
     if (menu.getMatchRule() != null) {
-      return new JsonParser().parse(result).getAsJsonObject().get("menuid").getAsString();
+      return GsonParser.parse(result).get("menuid").getAsString();
     }
 
     return null;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImpl.java
index 913816595c..58b48e9c7a 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImpl.java
@@ -1,13 +1,13 @@
 package me.chanjar.weixin.mp.api.impl;
 
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 import lombok.RequiredArgsConstructor;
 import me.chanjar.weixin.common.WxType;
 import me.chanjar.weixin.common.error.WxError;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.common.util.BeanUtils;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.api.WxMpStoreService;
 import me.chanjar.weixin.mp.bean.store.WxMpStoreBaseInfo;
@@ -47,7 +47,7 @@ public WxMpStoreBaseInfo get(String poiId) throws WxErrorException {
     if (wxError.getErrorCode() != 0) {
       throw new WxErrorException(wxError);
     }
-    return WxMpStoreBaseInfo.fromJson(new JsonParser().parse(response).getAsJsonObject()
+    return WxMpStoreBaseInfo.fromJson(GsonParser.parse(response)
       .get("business").getAsJsonObject().get("base_info").toString());
   }
 
@@ -117,7 +117,7 @@ public List listCategories() throws WxErrorException {
     }
 
     return WxMpGsonBuilder.create().fromJson(
-      new JsonParser().parse(response).getAsJsonObject().get("category_list"),
+      GsonParser.parse(response).get("category_list"),
       new TypeToken>() {
       }.getType());
   }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java
index 377d087647..f2da7571f7 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java
@@ -1,7 +1,6 @@
 package me.chanjar.weixin.mp.api.impl;
 
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import lombok.RequiredArgsConstructor;
 import me.chanjar.weixin.common.WxType;
 import me.chanjar.weixin.common.error.WxError;
@@ -12,7 +11,6 @@
 import me.chanjar.weixin.mp.bean.template.WxMpTemplate;
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
-import me.chanjar.weixin.mp.enums.WxMpApiUrl;
 
 import java.util.List;
 
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlacklistServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlacklistServiceImpl.java
index cd7ac541ae..a3c065e4d4 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlacklistServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlacklistServiceImpl.java
@@ -7,7 +7,6 @@
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.api.WxMpUserBlacklistService;
 import me.chanjar.weixin.mp.bean.result.WxMpUserBlacklistGetResult;
-import me.chanjar.weixin.mp.enums.WxMpApiUrl;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 
 import java.util.HashMap;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java
index 0c77a93ffc..03c83e3b45 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java
@@ -9,7 +9,6 @@
 import me.chanjar.weixin.mp.bean.result.WxMpChangeOpenid;
 import me.chanjar.weixin.mp.bean.result.WxMpUser;
 import me.chanjar.weixin.mp.bean.result.WxMpUserList;
-import me.chanjar.weixin.mp.enums.WxMpApiUrl;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 
 import java.util.HashMap;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserTagServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserTagServiceImpl.java
index bf4696e497..1d2013fd3f 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserTagServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserTagServiceImpl.java
@@ -2,12 +2,12 @@
 
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 import lombok.RequiredArgsConstructor;
 import me.chanjar.weixin.common.WxType;
 import me.chanjar.weixin.common.error.WxError;
 import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.api.WxMpUserTagService;
 import me.chanjar.weixin.mp.bean.tag.WxTagListUser;
@@ -134,7 +134,7 @@ public List userTagList(String openid) throws WxErrorException {
     String responseContent = this.wxMpService.post(TAGS_GETIDLIST, json.toString());
 
     return WxMpGsonBuilder.create().fromJson(
-      new JsonParser().parse(responseContent).getAsJsonObject().get("tagid_list"),
+      GsonParser.parse(responseContent).get("tagid_list"),
       new TypeToken>() {
       }.getType());
   }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java
index 506101089c..6e0f32edc4 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java
@@ -2,7 +2,6 @@
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
-import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 
 import java.io.Serializable;
 
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCard.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCard.java
index b1becbd642..60c7c911bd 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCard.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCard.java
@@ -1,6 +1,5 @@
 package me.chanjar.weixin.mp.bean.card;
 
-import com.google.gson.annotations.SerializedName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCard.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCard.java
index 0bfb5359ba..1712b19eb7 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCard.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCard.java
@@ -1,6 +1,5 @@
 package me.chanjar.weixin.mp.bean.card;
 
-import com.google.gson.annotations.SerializedName;
 import lombok.Data;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardMpnewsGethtmlResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardMpnewsGethtmlResult.java
index d55950666e..13db310d5b 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardMpnewsGethtmlResult.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardMpnewsGethtmlResult.java
@@ -6,7 +6,6 @@
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 
 import java.io.Serializable;
-import java.util.List;
 
 
 @Data
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/comment/WxMpCommentListVo.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/comment/WxMpCommentListVo.java
index 2110546594..10d1dafcad 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/comment/WxMpCommentListVo.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/comment/WxMpCommentListVo.java
@@ -2,8 +2,6 @@
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
-import me.chanjar.weixin.common.util.xml.IntegerArrayConverter;
-import me.chanjar.weixin.mp.bean.device.WxDeviceQrCodeResult;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 
 import java.io.Serializable;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java
index c5cbb7da17..0e9051d231 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java
@@ -2,7 +2,6 @@
 
 import java.io.Serializable;
 
-import com.google.gson.JsonParser;
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserCumulate.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserCumulate.java
index 4255fe2a6d..c278861dc5 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserCumulate.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserCumulate.java
@@ -4,8 +4,6 @@
 import java.util.Date;
 import java.util.List;
 
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 import lombok.Data;
 import me.chanjar.weixin.common.util.json.GsonParser;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserSummary.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserSummary.java
index ea9e7d485b..75df60c55f 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserSummary.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeUserSummary.java
@@ -4,8 +4,6 @@
 import java.util.Date;
 import java.util.List;
 
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 import lombok.Data;
 import me.chanjar.weixin.common.util.json.GsonParser;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfOnlineList.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfOnlineList.java
index 7f7b7db86f..555ee9dba2 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfOnlineList.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfOnlineList.java
@@ -3,7 +3,6 @@
 import java.io.Serializable;
 import java.util.List;
 
-import com.google.gson.GsonBuilder;
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfSessionGetResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfSessionGetResult.java
index 2b833aa20f..785e2126d4 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfSessionGetResult.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfSessionGetResult.java
@@ -2,7 +2,6 @@
 
 import java.io.Serializable;
 
-import com.google.gson.GsonBuilder;
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpAdLeadResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpAdLeadResult.java
index c801195910..7ce44ddbe2 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpAdLeadResult.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpAdLeadResult.java
@@ -1,6 +1,5 @@
 package me.chanjar.weixin.mp.bean.marketing;
 
-import com.google.gson.JsonParser;
 import com.google.gson.annotations.SerializedName;
 import com.google.gson.reflect.TypeToken;
 import lombok.Data;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpUserActionSet.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpUserActionSet.java
index 6bf1737945..1bf41b4871 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpUserActionSet.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/marketing/WxMpUserActionSet.java
@@ -1,6 +1,5 @@
 package me.chanjar.weixin.mp.bean.marketing;
 
-import com.google.gson.JsonParser;
 import com.google.gson.annotations.SerializedName;
 import com.google.gson.reflect.TypeToken;
 import lombok.Data;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrIdCardResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrIdCardResult.java
index fb1749682b..78f4986463 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrIdCardResult.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrIdCardResult.java
@@ -2,7 +2,6 @@
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
-import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 
 import java.io.Serializable;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/tag/WxUserTag.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/tag/WxUserTag.java
index 83782f66f0..76d4f8bccf 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/tag/WxUserTag.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/tag/WxUserTag.java
@@ -3,9 +3,9 @@
 import java.io.Serializable;
 import java.util.List;
 
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 import lombok.Data;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 
 /**
@@ -37,13 +37,13 @@ public class WxUserTag implements Serializable {
 
   public static WxUserTag fromJson(String json) {
     return WxMpGsonBuilder.create().fromJson(
-      new JsonParser().parse(json).getAsJsonObject().get("tag"),
+      GsonParser.parse(json).get("tag"),
       WxUserTag.class);
   }
 
   public static List listFromJson(String json) {
     return WxMpGsonBuilder.create().fromJson(
-      new JsonParser().parse(json).getAsJsonObject().get("tags"),
+      GsonParser.parse(json).get("tags"),
       new TypeToken>() {
       }.getType());
   }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplate.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplate.java
index 42c190e7d0..4458ec3a8d 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplate.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplate.java
@@ -3,7 +3,6 @@
 import java.io.Serializable;
 import java.util.List;
 
-import com.google.gson.JsonParser;
 import com.google.gson.annotations.SerializedName;
 import com.google.gson.reflect.TypeToken;
 import lombok.Data;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopDataResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopDataResult.java
index 2a3c795022..50aec028d1 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopDataResult.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopDataResult.java
@@ -1,8 +1,8 @@
 package me.chanjar.weixin.mp.bean.wifi;
 
-import com.google.gson.JsonParser;
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 
 import java.util.List;
@@ -17,7 +17,7 @@
 public class WxMpWifiShopDataResult {
   public static WxMpWifiShopDataResult fromJson(String json) {
     return WxMpGsonBuilder.create().fromJson(
-      new JsonParser().parse(json).getAsJsonObject().get("data"),
+      GsonParser.parse(json).get("data"),
       WxMpWifiShopDataResult.class);
   }
 
@@ -86,7 +86,7 @@ public static WxMpWifiShopDataResult fromJson(String json) {
    */
   @SerializedName("finishpage_url")
   private String finishPageUrl;
-  
+
   /**
    * 商户自己的id,与门店poi_id对应关系,建议在添加门店时候建立关联关系,具体请参考“微信门店接口”.
    */
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopListResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopListResult.java
index 4a86acb353..63bd638d40 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopListResult.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopListResult.java
@@ -1,8 +1,8 @@
 package me.chanjar.weixin.mp.bean.wifi;
 
-import com.google.gson.JsonParser;
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 
 import java.util.List;
@@ -18,7 +18,7 @@
 public class WxMpWifiShopListResult {
   public static WxMpWifiShopListResult fromJson(String json) {
     return WxMpGsonBuilder.create().fromJson(
-      new JsonParser().parse(json).getAsJsonObject().get("data"),
+      GsonParser.parse(json).get("data"),
       WxMpWifiShopListResult.class);
   }
 
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/crypto/WxMpCryptUtil.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/crypto/WxMpCryptUtil.java
index 8ceba29c26..9f22dbed3e 100755
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/crypto/WxMpCryptUtil.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/crypto/WxMpCryptUtil.java
@@ -20,7 +20,6 @@
 import com.google.common.base.CharMatcher;
 import com.google.common.io.BaseEncoding;
 import me.chanjar.weixin.mp.config.WxMpConfigStorage;
-import org.apache.commons.codec.binary.Base64;
 
 public class WxMpCryptUtil extends me.chanjar.weixin.common.util.crypto.WxCryptUtil {
 
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImplTest.java
index 3d1b74e6c3..dd15496e16 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImplTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImplTest.java
@@ -9,8 +9,6 @@
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
-import static org.testng.Assert.*;
-
 /**
  * 测试类.
  *
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImplTest.java
index 89069bd29f..2d27e4dac7 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImplTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImplTest.java
@@ -9,7 +9,6 @@
 import me.chanjar.weixin.mp.bean.result.WxMpChangeOpenid;
 import me.chanjar.weixin.mp.bean.result.WxMpUser;
 import me.chanjar.weixin.mp.bean.result.WxMpUserList;
-import me.chanjar.weixin.mp.enums.WxMpApiUrl;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
 import org.testng.Assert;
 import org.testng.annotations.BeforeTest;
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/membercard/WxMpMemberCardUpdateResultTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/membercard/WxMpMemberCardUpdateResultTest.java
index f7860e7c85..573fa2860f 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/membercard/WxMpMemberCardUpdateResultTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/membercard/WxMpMemberCardUpdateResultTest.java
@@ -2,7 +2,6 @@
 
 import org.testng.annotations.Test;
 
-import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/menu/WxMpGetSelfMenuInfoResultTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/menu/WxMpGetSelfMenuInfoResultTest.java
index 3df5742704..0b80ed083e 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/menu/WxMpGetSelfMenuInfoResultTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/menu/WxMpGetSelfMenuInfoResultTest.java
@@ -5,7 +5,6 @@
 import java.util.List;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.testng.Assert.*;
 
 /**
  * @author Binary Wang
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java
index 2d7809bf4d..5e54929a04 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java
@@ -2,7 +2,6 @@
 
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenCreateResult.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenCreateResult.java
index 6e06a16d4a..274b5c49dd 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenCreateResult.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenCreateResult.java
@@ -1,6 +1,5 @@
 package me.chanjar.weixin.open.bean;
 
-import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/ma/WxOpenMaPreviewInfo.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/ma/WxOpenMaPreviewInfo.java
index a1f0416dd2..47f8b37a3e 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/ma/WxOpenMaPreviewInfo.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/ma/WxOpenMaPreviewInfo.java
@@ -3,8 +3,6 @@
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
 
-import java.util.List;
-
 /**
  * @author zxfreedom
  * @description
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/executor/MaQrCodeOkhttpRequestExecutor.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/executor/MaQrCodeOkhttpRequestExecutor.java
index b7e567182f..cdc05af72e 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/executor/MaQrCodeOkhttpRequestExecutor.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/executor/MaQrCodeOkhttpRequestExecutor.java
@@ -11,8 +11,6 @@
 import okhttp3.Request;
 import okhttp3.Response;
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/WxOpenCryptUtil.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/WxOpenCryptUtil.java
index 5b11878d28..b507e0daa4 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/WxOpenCryptUtil.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/WxOpenCryptUtil.java
@@ -3,7 +3,6 @@
 import com.google.common.base.CharMatcher;
 import com.google.common.io.BaseEncoding;
 import me.chanjar.weixin.open.api.WxOpenConfigStorage;
-import org.apache.commons.codec.binary.Base64;
 
 /**
  * @author 007
diff --git a/weixin-java-open/src/test/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImplTest.java b/weixin-java-open/src/test/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImplTest.java
index 0e8cba5c3c..47a5069f24 100644
--- a/weixin-java-open/src/test/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImplTest.java
+++ b/weixin-java-open/src/test/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImplTest.java
@@ -2,8 +2,6 @@
 
 import org.testng.annotations.Test;
 
-import static org.testng.Assert.*;
-
 /**
  * 单元测试类.
  *
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequest.java
index 6f89254714..79ca491ecf 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequest.java
@@ -8,7 +8,6 @@
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import me.chanjar.weixin.common.annotation.Required;
-import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 
 import java.util.Map;
 
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingFinishRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingFinishRequest.java
index c8200b4cc9..3bff328b80 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingFinishRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingFinishRequest.java
@@ -2,7 +2,6 @@
 
 import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
 import com.github.binarywang.wxpay.constant.WxPayConstants;
-import com.github.binarywang.wxpay.exception.WxPayException;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import lombok.*;
 import me.chanjar.weixin.common.annotation.Required;
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayRefundQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayRefundQueryResult.java
index d67edc1ab3..6a2d3b46d6 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayRefundQueryResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayRefundQueryResult.java
@@ -1,11 +1,11 @@
 package com.github.binarywang.wxpay.bean.result;
 
 import com.google.common.collect.Lists;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParser;
+import com.google.gson.JsonObject;
 import com.google.gson.reflect.TypeToken;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import lombok.*;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 import org.apache.commons.lang3.StringUtils;
 import org.w3c.dom.Document;
@@ -149,10 +149,10 @@ public void composePromotionDetails() {
       return;
     }
 
-    JsonElement tmpJsonElement = new JsonParser().parse(this.promotionDetailString);
+    JsonObject tmpJson = GsonParser.parse(this.promotionDetailString);
 
     final List promotionDetail = WxGsonBuilder.create()
-      .fromJson(tmpJsonElement.getAsJsonObject().get("promotion_detail"),
+      .fromJson(tmpJson.get("promotion_detail"),
         new TypeToken>() {
         }.getType()
       );
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayRefundResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayRefundResult.java
index 8d21f7a0f3..6b4de3d639 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayRefundResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayRefundResult.java
@@ -1,13 +1,13 @@
 package com.github.binarywang.wxpay.bean.result;
 
 import com.google.common.collect.Lists;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParser;
+import com.google.gson.JsonObject;
 import com.google.gson.reflect.TypeToken;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 import org.apache.commons.lang3.StringUtils;
 import org.w3c.dom.Document;
@@ -138,10 +138,10 @@ public void composePromotionDetails() {
       return;
     }
 
-    JsonElement tmpJsonElement = new JsonParser().parse(this.promotionDetailString);
+    JsonObject tmpJson = GsonParser.parse(this.promotionDetailString);
 
     final List promotionDetail = WxGsonBuilder.create()
-      .fromJson(tmpJsonElement.getAsJsonObject().get("promotion_detail"),
+      .fromJson(tmpJson.get("promotion_detail"),
         new TypeToken>() {
         }.getType()
       );
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PayScoreService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PayScoreService.java
index d4d3b245e3..ff6aafe9f4 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PayScoreService.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PayScoreService.java
@@ -5,8 +5,6 @@
 import com.github.binarywang.wxpay.bean.payscore.WxPayScoreResult;
 import com.github.binarywang.wxpay.exception.WxPayException;
 
-import java.net.URISyntaxException;
-
 /**
  * 
  *  支付分相关服务类.
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java
index 1055320997..45d0f2be82 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java
@@ -1,8 +1,6 @@
 package com.github.binarywang.wxpay.service.impl;
 
 import com.github.binarywang.wxpay.bean.profitsharing.*;
-import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingResult;
-import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingRequest;
 import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.ProfitSharingService;
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceApacheHttpImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceApacheHttpImpl.java
index ec634c11f4..951451a1dd 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceApacheHttpImpl.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceApacheHttpImpl.java
@@ -3,7 +3,6 @@
 import com.github.binarywang.wxpay.bean.WxPayApiData;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import jodd.util.Base64;
 import me.chanjar.weixin.common.util.json.GsonParser;
 import org.apache.commons.lang3.StringUtils;
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/WxPayCredentials.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/WxPayCredentials.java
index 2654e8675c..9fca14e644 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/WxPayCredentials.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/WxPayCredentials.java
@@ -10,8 +10,6 @@
 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
 import org.apache.http.client.methods.HttpUriRequest;
 import org.apache.http.util.EntityUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Slf4j
 public class WxPayCredentials implements Credentials {
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/WxPayValidator.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/WxPayValidator.java
index c83f8853e3..9b9b0ad4de 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/WxPayValidator.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/WxPayValidator.java
@@ -9,8 +9,7 @@
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.util.EntityUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
 @Slf4j
 public class WxPayValidator implements Validator {
   private Verifier verifier;
diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequestTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequestTest.java
index 2a2f030fc7..5cd4dcdc10 100644
--- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequestTest.java
+++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequestTest.java
@@ -2,8 +2,6 @@
 
 import org.testng.annotations.Test;
 
-import static org.testng.Assert.*;
-
 /**
  * .
  *
diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java
index 087ba7fc34..13f94d4015 100644
--- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java
+++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java
@@ -1,9 +1,6 @@
 package com.github.binarywang.wxpay.service.impl;
 
 import com.github.binarywang.wxpay.bean.profitsharing.*;
-import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingRequest;
-import com.github.binarywang.wxpay.bean.profitsharing.Receiver;
-import com.github.binarywang.wxpay.bean.profitsharing.ReceiverList;
 import com.github.binarywang.wxpay.constant.WxPayConstants;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.WxPayService;

From 95ca9087ff35c8944041d3a4d7306625deeb9b94 Mon Sep 17 00:00:00 2001
From: niefy 
Date: Mon, 6 Jul 2020 16:22:17 +0800
Subject: [PATCH 4/4] Merge branch 'develop' of
 https://github.com/Wechat-Group/WxJava into Wechat-Group-develop

---
 pom.xml                                       |   2 +-
 spring-boot-starters/pom.xml                  |   2 +-
 .../pom.xml                                   |   2 +-
 .../wx-java-mp-spring-boot-starter/pom.xml    |   2 +-
 .../config/WxMpServiceAutoConfiguration.java  |   3 +-
 .../wx-java-open-spring-boot-starter/pom.xml  |   2 +-
 .../wx-java-pay-spring-boot-starter/pom.xml   |   2 +-
 weixin-graal/pom.xml                          |   2 +-
 weixin-java-common/pom.xml                    |   2 +-
 .../weixin/common/api/WxOcrService.java       |  40 +-
 .../common/bean/ocr/WxOcrBankCardResult.java  |  29 ++
 .../bean/ocr/WxOcrBizLicenseResult.java       |  19 +-
 .../common/bean/ocr/WxOcrCommResult.java      |  20 +-
 .../bean/ocr/WxOcrDrivingLicenseResult.java   |  12 +-
 .../common/bean/ocr/WxOcrDrivingResult.java   |  21 +-
 .../common/bean/ocr/WxOcrIdCardResult.java    |  10 +-
 .../weixin/common/bean/ocr/WxOcrImgSize.java  |   8 +-
 .../weixin/common/bean/ocr/WxOcrPos.java      |  12 +-
 .../OcrDiscernApacheHttpRequestExecutor.java  |   0
 .../ocr/OcrDiscernRequestExecutor.java        |   4 +-
 weixin-java-cp/pom.xml                        |   2 +-
 .../weixin/cp/constant/WxCpApiPathConsts.java |   2 +-
 weixin-java-miniapp/pom.xml                   |   8 +-
 .../wx/miniapp/api/WxMaLiveGoodsService.java  | 123 ++++++
 .../wx/miniapp/api/WxMaLiveService.java       |  72 +++-
 .../wx/miniapp/api/WxMaMediaService.java      |  11 +-
 .../wx/miniapp/api/WxMaService.java           |  15 +
 .../miniapp/api/impl/BaseWxMaServiceImpl.java |  14 +
 .../api/impl/WxMaLiveGoodsServiceImpl.java    | 132 ++++++
 .../miniapp/api/impl/WxMaLiveServiceImpl.java |  84 ++--
 .../api/impl/WxMaMediaServiceImpl.java        |   2 +-
 .../miniapp/api/impl/WxMaOcrServiceImpl.java  | 151 +++++++
 .../wx/miniapp/bean/WxMaLiveInfo.java         |  60 +++
 ...MaGetLiveInfo.java => WxMaLiveResult.java} |  77 ++--
 .../impl/WxMaLiveGoodsServiceImplTest.java    |  92 +++++
 .../api/impl/WxMaLiveServiceImplTest.java     |  44 +-
 .../api/impl/WxMaOcrServiceImplTest.java      | 385 ++++++++++++++++++
 .../wx/miniapp/test/TestConstants.java        |  17 +
 weixin-java-mp/pom.xml                        |   2 +-
 .../me/chanjar/weixin/mp/api/WxMpService.java |   5 +-
 .../mp/api/impl/BaseWxMpServiceImpl.java      |   7 +-
 .../mp/api/impl/WxMpOcrServiceImpl.java       |  64 +--
 .../mp/bean/ocr/WxMpOcrBankCardResult.java    |  28 --
 .../mp/config/impl/WxMpRedisConfigImpl.java   |  11 +-
 .../chanjar/weixin/mp/enums/WxMpApiUrl.java   |  24 +-
 .../mp/api/impl/WxMpOcrServiceImplTest.java   |  50 +--
 weixin-java-open/pom.xml                      |   2 +-
 weixin-java-pay/pom.xml                       |   2 +-
 .../impl/ProfitSharingServiceImpl.java        |   2 +
 49 files changed, 1401 insertions(+), 281 deletions(-)
 rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpOcrService.java => weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxOcrService.java (67%)
 create mode 100644 weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrBankCardResult.java
 rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrBizLicenseResult.java => weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrBizLicenseResult.java (79%)
 rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrCommResult.java => weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrCommResult.java (58%)
 rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrDrivingLicenseResult.java => weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrDrivingLicenseResult.java (76%)
 rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrDrivingResult.java => weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrDrivingResult.java (83%)
 rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrIdCardResult.java => weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrIdCardResult.java (63%)
 rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrImgSize.java => weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrImgSize.java (62%)
 rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrPos.java => weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrPos.java (70%)
 rename {weixin-java-mp => weixin-java-common}/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernApacheHttpRequestExecutor.java (100%)
 rename {weixin-java-mp => weixin-java-common}/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernRequestExecutor.java (95%)
 create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveGoodsService.java
 create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveGoodsServiceImpl.java
 create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaOcrServiceImpl.java
 create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaLiveInfo.java
 rename weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/{WxMaGetLiveInfo.java => WxMaLiveResult.java} (55%)
 create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveGoodsServiceImplTest.java
 create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaOcrServiceImplTest.java
 create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/test/TestConstants.java
 delete mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrBankCardResult.java

diff --git a/pom.xml b/pom.xml
index ecd08ae5d7..5c00db5b0f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
   4.0.0
   com.github.binarywang
   wx-java
-  3.8.3.B
+  3.8.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 73b578d5f5..902d1a0e73 100644
--- a/spring-boot-starters/pom.xml
+++ b/spring-boot-starters/pom.xml
@@ -6,7 +6,7 @@
   
     com.github.binarywang
     wx-java
-    3.8.3.B
+    3.8.4.B
   
   pom
   wx-java-spring-boot-starters
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 066d73409d..e827a68a75 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
-    3.8.3.B
+    3.8.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 93b164ded5..96dd35b9c1 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
-    3.8.3.B
+    3.8.4.B
   
   4.0.0
 
diff --git a/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpServiceAutoConfiguration.java b/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpServiceAutoConfiguration.java
index f46ebf8dc1..491d0da584 100644
--- a/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpServiceAutoConfiguration.java
+++ b/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpServiceAutoConfiguration.java
@@ -1,6 +1,7 @@
 package com.binarywang.spring.starter.wxjava.mp.config;
 
 import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties;
+import me.chanjar.weixin.common.api.WxOcrService;
 import me.chanjar.weixin.mp.api.*;
 import me.chanjar.weixin.mp.api.impl.WxMpServiceHttpClientImpl;
 import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
@@ -176,7 +177,7 @@ public WxMpCommentService wxMpCommentService(WxMpService wxMpService) {
 
   @Bean
   @Deprecated
-  public WxMpOcrService wxMpOcrService(WxMpService wxMpService) {
+  public WxOcrService wxMpOcrService(WxMpService wxMpService) {
     return wxMpService.getOcrService();
   }
 
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 6cb5dcee10..a39374e777 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
-    3.8.3.B
+    3.8.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 f7d46d4f33..60b5e6cf76 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
-    3.8.3.B
+    3.8.4.B
   
   4.0.0
 
diff --git a/weixin-graal/pom.xml b/weixin-graal/pom.xml
index c0570ad9f2..976d1483d0 100644
--- a/weixin-graal/pom.xml
+++ b/weixin-graal/pom.xml
@@ -6,7 +6,7 @@
   
     com.github.binarywang
     wx-java
-    3.8.3.B
+    3.8.4.B
   
 
   weixin-graal
diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml
index 645d510126..ff95e01c88 100644
--- a/weixin-java-common/pom.xml
+++ b/weixin-java-common/pom.xml
@@ -6,7 +6,7 @@
   
     com.github.binarywang
     wx-java
-    3.8.3.B
+    3.8.4.B
   
 
   weixin-java-common
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpOcrService.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxOcrService.java
similarity index 67%
rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpOcrService.java
rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxOcrService.java
index f7986d24c1..480ed3e95b 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpOcrService.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxOcrService.java
@@ -1,12 +1,12 @@
-package me.chanjar.weixin.mp.api;
+package me.chanjar.weixin.common.api;
 
 import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBankCardResult;
-import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBizLicenseResult;
-import me.chanjar.weixin.mp.bean.ocr.WxMpOcrCommResult;
-import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingLicenseResult;
-import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingResult;
-import me.chanjar.weixin.mp.bean.ocr.WxMpOcrIdCardResult;
+import me.chanjar.weixin.common.bean.ocr.WxOcrBankCardResult;
+import me.chanjar.weixin.common.bean.ocr.WxOcrBizLicenseResult;
+import me.chanjar.weixin.common.bean.ocr.WxOcrCommResult;
+import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingLicenseResult;
+import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingResult;
+import me.chanjar.weixin.common.bean.ocr.WxOcrIdCardResult;
 
 import java.io.File;
 
@@ -17,7 +17,7 @@
  * @author Binary Wang
  * @date 2019-06-22
  */
-public interface WxMpOcrService {
+public interface WxOcrService {
 
   /**
    * 身份证OCR识别接口.
@@ -26,7 +26,7 @@ public interface WxMpOcrService {
    * @return WxMpOcrIdCardResult
    * @throws WxErrorException .
    */
-  WxMpOcrIdCardResult idCard(String imgUrl) throws WxErrorException;
+  WxOcrIdCardResult idCard(String imgUrl) throws WxErrorException;
 
   /**
    * 身份证OCR识别接口.
@@ -35,7 +35,7 @@ public interface WxMpOcrService {
    * @return WxMpOcrIdCardResult
    * @throws WxErrorException .
    */
-  WxMpOcrIdCardResult idCard(File imgFile) throws WxErrorException;
+  WxOcrIdCardResult idCard(File imgFile) throws WxErrorException;
 
   /**
    * 银行卡OCR识别接口
@@ -44,7 +44,7 @@ public interface WxMpOcrService {
    * @return WxMpOcrBankCardResult
    * @throws WxErrorException .
    */
-  WxMpOcrBankCardResult bankCard(String imgUrl) throws WxErrorException;
+  WxOcrBankCardResult bankCard(String imgUrl) throws WxErrorException;
 
   /**
    * 银行卡OCR识别接口
@@ -53,7 +53,7 @@ public interface WxMpOcrService {
    * @return WxMpOcrBankCardResult
    * @throws WxErrorException .
    */
-  WxMpOcrBankCardResult bankCard(File imgFile) throws WxErrorException;
+  WxOcrBankCardResult bankCard(File imgFile) throws WxErrorException;
 
   /**
    * 行驶证OCR识别接口
@@ -62,7 +62,7 @@ public interface WxMpOcrService {
    * @return WxMpOcrDrivingResult
    * @throws WxErrorException .
    */
-  WxMpOcrDrivingResult driving(String imgUrl) throws WxErrorException;
+  WxOcrDrivingResult driving(String imgUrl) throws WxErrorException;
 
   /**
    * 行驶证OCR识别接口
@@ -71,7 +71,7 @@ public interface WxMpOcrService {
    * @return WxMpOcrDrivingResult
    * @throws WxErrorException .
    */
-  WxMpOcrDrivingResult driving(File imgFile) throws WxErrorException;
+  WxOcrDrivingResult driving(File imgFile) throws WxErrorException;
 
   /**
    * 驾驶证OCR识别接口
@@ -80,7 +80,7 @@ public interface WxMpOcrService {
    * @return WxMpOcrDrivingLicenseResult
    * @throws WxErrorException .
    */
-  WxMpOcrDrivingLicenseResult drivingLicense(String imgUrl) throws WxErrorException;
+  WxOcrDrivingLicenseResult drivingLicense(String imgUrl) throws WxErrorException;
 
   /**
    * 驾驶证OCR识别接口
@@ -89,7 +89,7 @@ public interface WxMpOcrService {
    * @return WxMpOcrDrivingLicenseResult
    * @throws WxErrorException .
    */
-  WxMpOcrDrivingLicenseResult drivingLicense(File imgFile) throws WxErrorException;
+  WxOcrDrivingLicenseResult drivingLicense(File imgFile) throws WxErrorException;
 
   /**
    * 营业执照OCR识别接口
@@ -98,7 +98,7 @@ public interface WxMpOcrService {
    * @return WxMpOcrBizLicenseResult
    * @throws WxErrorException .
    */
-  WxMpOcrBizLicenseResult bizLicense(String imgUrl) throws WxErrorException;
+  WxOcrBizLicenseResult bizLicense(String imgUrl) throws WxErrorException;
 
   /**
    * 营业执照OCR识别接口
@@ -107,7 +107,7 @@ public interface WxMpOcrService {
    * @return WxMpOcrBizLicenseResult
    * @throws WxErrorException .
    */
-  WxMpOcrBizLicenseResult bizLicense(File imgFile) throws WxErrorException;
+  WxOcrBizLicenseResult bizLicense(File imgFile) throws WxErrorException;
 
   /**
    * 通用印刷体OCR识别接口
@@ -117,7 +117,7 @@ public interface WxMpOcrService {
    * @return WxMpOcrCommResult
    * @throws WxErrorException .
    */
-  WxMpOcrCommResult comm(String imgUrl) throws WxErrorException;
+  WxOcrCommResult comm(String imgUrl) throws WxErrorException;
 
   /**
    * 通用印刷体OCR识别接口
@@ -127,5 +127,5 @@ public interface WxMpOcrService {
    * @return WxMpOcrCommResult
    * @throws WxErrorException .
    */
-  WxMpOcrCommResult comm(File imgFile) throws WxErrorException;
+  WxOcrCommResult comm(File imgFile) throws WxErrorException;
 }
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrBankCardResult.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrBankCardResult.java
new file mode 100644
index 0000000000..d5ff0b901d
--- /dev/null
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrBankCardResult.java
@@ -0,0 +1,29 @@
+package me.chanjar.weixin.common.bean.ocr;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 银行卡OCR识别结果
+ *
+ * @author Theo Nie
+ */
+@Data
+public class WxOcrBankCardResult implements Serializable {
+
+  private static final long serialVersionUID = 554136620394204143L;
+  @SerializedName("number")
+  private String number;
+
+  @Override
+  public String toString() {
+    return WxGsonBuilder.create().toJson(this);
+  }
+
+  public static WxOcrBankCardResult fromJson(String json) {
+    return WxGsonBuilder.create().fromJson(json, WxOcrBankCardResult.class);
+  }
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrBizLicenseResult.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrBizLicenseResult.java
similarity index 79%
rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrBizLicenseResult.java
rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrBizLicenseResult.java
index aa97fc83f2..2e83443e95 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrBizLicenseResult.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrBizLicenseResult.java
@@ -1,8 +1,8 @@
-package me.chanjar.weixin.mp.bean.ocr;
+package me.chanjar.weixin.common.bean.ocr;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
-import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 
 import java.io.Serializable;
 
@@ -10,7 +10,7 @@
  * @author Theo Nie
  */
 @Data
-public class WxMpOcrBizLicenseResult implements Serializable {
+public class WxOcrBizLicenseResult implements Serializable {
   private static final long serialVersionUID = -5007671093920178291L;
 
   /**
@@ -82,26 +82,27 @@ public class WxMpOcrBizLicenseResult implements Serializable {
    * 图片大小
    */
   @SerializedName("img_size")
-  private WxMpOcrImgSize imgSize;
+  private WxOcrImgSize imgSize;
 
-  public static WxMpOcrBizLicenseResult fromJson(String json) {
-    return WxMpGsonBuilder.create().fromJson(json, WxMpOcrBizLicenseResult.class);
+  public static WxOcrBizLicenseResult fromJson(String json) {
+    return WxGsonBuilder.create().fromJson(json, WxOcrBizLicenseResult.class);
   }
 
   @Override
   public String toString() {
-    return WxMpGsonBuilder.create().toJson(this);
+    return WxGsonBuilder.create().toJson(this);
   }
 
   @Data
   public static class CertPosition implements Serializable {
     private static final long serialVersionUID = 290286813344131863L;
+
     @SerializedName("pos")
-    private WxMpOcrPos pos;
+    private WxOcrPos pos;
 
     @Override
     public String toString() {
-      return WxMpGsonBuilder.create().toJson(this);
+      return WxGsonBuilder.create().toJson(this);
     }
   }
 }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrCommResult.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrCommResult.java
similarity index 58%
rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrCommResult.java
rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrCommResult.java
index cc391bdfee..5f56d16e3c 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrCommResult.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrCommResult.java
@@ -1,8 +1,8 @@
-package me.chanjar.weixin.mp.bean.ocr;
+package me.chanjar.weixin.common.bean.ocr;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
-import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 
 import java.io.Serializable;
 import java.util.List;
@@ -11,35 +11,35 @@
  * @author Theo Nie
  */
 @Data
-public class WxMpOcrCommResult implements Serializable {
+public class WxOcrCommResult implements Serializable {
   private static final long serialVersionUID = 455833771627756440L;
 
   @SerializedName("img_size")
-  private WxMpOcrImgSize imgSize;
+  private WxOcrImgSize imgSize;
   @SerializedName("items")
   private List items;
 
-  public static WxMpOcrCommResult fromJson(String json) {
-    return WxMpGsonBuilder.create().fromJson(json, WxMpOcrCommResult.class);
+  public static WxOcrCommResult fromJson(String json) {
+    return WxGsonBuilder.create().fromJson(json, WxOcrCommResult.class);
   }
 
   @Override
   public String toString() {
-    return WxMpGsonBuilder.create().toJson(this);
+    return WxGsonBuilder.create().toJson(this);
   }
 
   @Data
   public static class Items implements Serializable {
-
     private static final long serialVersionUID = 3066181677009102791L;
+
     @SerializedName("text")
     private String text;
     @SerializedName("pos")
-    private WxMpOcrPos pos;
+    private WxOcrPos pos;
 
     @Override
     public String toString() {
-      return WxMpGsonBuilder.create().toJson(this);
+      return WxGsonBuilder.create().toJson(this);
     }
   }
 }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrDrivingLicenseResult.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrDrivingLicenseResult.java
similarity index 76%
rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrDrivingLicenseResult.java
rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrDrivingLicenseResult.java
index 3ef8fee91c..c9306200de 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrDrivingLicenseResult.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrDrivingLicenseResult.java
@@ -1,8 +1,8 @@
-package me.chanjar.weixin.mp.bean.ocr;
+package me.chanjar.weixin.common.bean.ocr;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
-import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 
 import java.io.Serializable;
 
@@ -10,7 +10,7 @@
  * @author Theo Nie
  */
 @Data
-public class WxMpOcrDrivingLicenseResult implements Serializable {
+public class WxOcrDrivingLicenseResult implements Serializable {
   private static final long serialVersionUID = -6984670645802585738L;
 
   /**
@@ -71,10 +71,10 @@ public class WxMpOcrDrivingLicenseResult implements Serializable {
 
   @Override
   public String toString() {
-    return WxMpGsonBuilder.create().toJson(this);
+    return WxGsonBuilder.create().toJson(this);
   }
 
-  public static WxMpOcrDrivingLicenseResult fromJson(String json) {
-    return WxMpGsonBuilder.create().fromJson(json, WxMpOcrDrivingLicenseResult.class);
+  public static WxOcrDrivingLicenseResult fromJson(String json) {
+    return WxGsonBuilder.create().fromJson(json, WxOcrDrivingLicenseResult.class);
   }
 }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrDrivingResult.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrDrivingResult.java
similarity index 83%
rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrDrivingResult.java
rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrDrivingResult.java
index 3e5576934e..b486baf1c4 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrDrivingResult.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrDrivingResult.java
@@ -1,8 +1,8 @@
-package me.chanjar.weixin.mp.bean.ocr;
+package me.chanjar.weixin.common.bean.ocr;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
-import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 
 import java.io.Serializable;
 
@@ -10,9 +10,9 @@
  * @author Theo Nie
  */
 @Data
-public class WxMpOcrDrivingResult implements Serializable {
-
+public class WxOcrDrivingResult implements Serializable {
   private static final long serialVersionUID = -7477484374200211303L;
+
   /**
    * 车牌号码
    */
@@ -107,26 +107,27 @@ public class WxMpOcrDrivingResult implements Serializable {
    * 图片大小
    */
   @SerializedName("img_size")
-  private WxMpOcrImgSize imgSize;
+  private WxOcrImgSize imgSize;
 
   @Data
   public static class CardPosition implements Serializable {
     private static final long serialVersionUID = 2884515165228160517L;
+
     @SerializedName("pos")
-    private WxMpOcrPos pos;
+    private WxOcrPos pos;
 
     @Override
     public String toString() {
-      return WxMpGsonBuilder.create().toJson(this);
+      return WxGsonBuilder.create().toJson(this);
     }
   }
 
-  public static WxMpOcrDrivingResult fromJson(String json) {
-    return WxMpGsonBuilder.create().fromJson(json, WxMpOcrDrivingResult.class);
+  public static WxOcrDrivingResult fromJson(String json) {
+    return WxGsonBuilder.create().fromJson(json, WxOcrDrivingResult.class);
   }
 
   @Override
   public String toString() {
-    return WxMpGsonBuilder.create().toJson(this);
+    return WxGsonBuilder.create().toJson(this);
   }
 }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrIdCardResult.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrIdCardResult.java
similarity index 63%
rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrIdCardResult.java
rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrIdCardResult.java
index 78f4986463..0b1e0ff838 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrIdCardResult.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrIdCardResult.java
@@ -1,8 +1,8 @@
-package me.chanjar.weixin.mp.bean.ocr;
+package me.chanjar.weixin.common.bean.ocr;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
-import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 
 import java.io.Serializable;
 
@@ -13,7 +13,7 @@
  * @date 2019-06-23
  */
 @Data
-public class WxMpOcrIdCardResult implements Serializable {
+public class WxOcrIdCardResult implements Serializable {
   private static final long serialVersionUID = 8184352486986729980L;
 
   @SerializedName("type")
@@ -25,8 +25,8 @@ public class WxMpOcrIdCardResult implements Serializable {
   @SerializedName("valid_date")
   private String validDate;
 
-  public static WxMpOcrIdCardResult fromJson(String json) {
-    return WxMpGsonBuilder.create().fromJson(json, WxMpOcrIdCardResult.class);
+  public static WxOcrIdCardResult fromJson(String json) {
+    return WxGsonBuilder.create().fromJson(json, WxOcrIdCardResult.class);
   }
 
 }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrImgSize.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrImgSize.java
similarity index 62%
rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrImgSize.java
rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrImgSize.java
index f30a15399c..f5446ab405 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrImgSize.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrImgSize.java
@@ -1,8 +1,8 @@
-package me.chanjar.weixin.mp.bean.ocr;
+package me.chanjar.weixin.common.bean.ocr;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
-import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 
 import java.io.Serializable;
 
@@ -10,7 +10,7 @@
  * @author Theo Nie
  */
 @Data
-public class WxMpOcrImgSize implements Serializable {
+public class WxOcrImgSize implements Serializable {
   private static final long serialVersionUID = 5234409123551074168L;
 
   @SerializedName("w")
@@ -20,6 +20,6 @@ public class WxMpOcrImgSize implements Serializable {
 
   @Override
   public String toString() {
-    return WxMpGsonBuilder.create().toJson(this);
+    return WxGsonBuilder.create().toJson(this);
   }
 }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrPos.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrPos.java
similarity index 70%
rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrPos.java
rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrPos.java
index 0a4fe586e4..54089f3235 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrPos.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/ocr/WxOcrPos.java
@@ -1,8 +1,8 @@
-package me.chanjar.weixin.mp.bean.ocr;
+package me.chanjar.weixin.common.bean.ocr;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
-import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 
 import java.io.Serializable;
 
@@ -10,7 +10,7 @@
  * @author Theo Nie
  */
 @Data
-public class WxMpOcrPos implements Serializable {
+public class WxOcrPos implements Serializable {
   private static final long serialVersionUID = 4204160206873907920L;
 
   @SerializedName("left_top")
@@ -24,11 +24,11 @@ public class WxMpOcrPos implements Serializable {
 
   @Override
   public String toString() {
-    return WxMpGsonBuilder.create().toJson(this);
+    return WxGsonBuilder.create().toJson(this);
   }
 
   @Data
-  public static class Coordinate implements Serializable{
+  public static class Coordinate implements Serializable {
     private static final long serialVersionUID = 8675059935386304399L;
     @SerializedName("x")
     private int x;
@@ -37,7 +37,7 @@ public static class Coordinate implements Serializable{
 
     @Override
     public String toString() {
-      return WxMpGsonBuilder.create().toJson(this);
+      return WxGsonBuilder.create().toJson(this);
     }
   }
 }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernApacheHttpRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernApacheHttpRequestExecutor.java
similarity index 100%
rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernApacheHttpRequestExecutor.java
rename to weixin-java-common/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernApacheHttpRequestExecutor.java
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernRequestExecutor.java
similarity index 95%
rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernRequestExecutor.java
rename to weixin-java-common/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernRequestExecutor.java
index 536097e497..dff256e472 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernRequestExecutor.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/mp/util/requestexecuter/ocr/OcrDiscernRequestExecutor.java
@@ -12,8 +12,8 @@
 /**
  * .
  *
- * @author   zhayueran
- * @date  2019/6/27 15:06
+ * @author zhayueran
+ * @date 2019/6/27 15:06
  */
 public abstract class OcrDiscernRequestExecutor implements RequestExecutor {
   protected RequestHttp requestHttp;
diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml
index 16785cd1d0..14f16edee0 100644
--- a/weixin-java-cp/pom.xml
+++ b/weixin-java-cp/pom.xml
@@ -7,7 +7,7 @@
   
     com.github.binarywang
     wx-java
-    3.8.3.B
+    3.8.4.B
   
 
   weixin-java-cp
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 f10a4dd124..9b465fd0c5 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
@@ -70,7 +70,7 @@ public static class Oa {
     @Deprecated
     public static final String GET_APPROVAL_DATA = "/cgi-bin/corp/getapprovaldata";
     public static final String GET_TEMPLATE_DETAIL = "/cgi-bin/oa/gettemplatedetail";
-    public static final String APPLY_EVENT="/cgi-bin/oa/applyevent";
+    public static final String APPLY_EVENT = "/cgi-bin/oa/applyevent";
   }
 
   public static class Tag {
diff --git a/weixin-java-miniapp/pom.xml b/weixin-java-miniapp/pom.xml
index e6c4858bd2..2497aa3c8e 100644
--- a/weixin-java-miniapp/pom.xml
+++ b/weixin-java-miniapp/pom.xml
@@ -7,7 +7,7 @@
   
     com.github.binarywang
     wx-java
-    3.8.3.B
+    3.8.4.B
   
 
   weixin-java-miniapp
@@ -90,6 +90,12 @@
       1.0.0
       true
     
+    
+      org.mockito
+      mockito-core
+      3.3.3
+      test
+    
   
 
   
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveGoodsService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveGoodsService.java
new file mode 100644
index 0000000000..f52f9efde2
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveGoodsService.java
@@ -0,0 +1,123 @@
+package cn.binarywang.wx.miniapp.api;
+
+import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo;
+import cn.binarywang.wx.miniapp.bean.WxMaLiveResult;
+import me.chanjar.weixin.common.error.WxErrorException;
+
+import java.util.List;
+
+/**
+ * 
+ * 直播间商品相关操作接口
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/liveplayer/commodity-api.html
+ * Created by lipengjun on 2020/6/29.
+ * 
+ * + * @author lipengjun (939961241@qq.com) + */ +public interface WxMaLiveGoodsService { + String ADD_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add"; + String RESET_AUDIT_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/resetaudit"; + String AUDIT_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/audit"; + String DELETE_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/delete"; + String UPDATE_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/update"; + String GET_GOODS_WARE_HOUSE = "https://api.weixin.qq.com/wxa/business/getgoodswarehouse"; + String GET_APPROVED_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/getapproved"; + + /** + * 商品添加并提审 + *
+   * 调用此接口上传并提审需要直播的商品信息,审核通过后商品录入【小程序直播】商品库
+   * 注意:开发者必须保存【商品ID】与【审核单ID】,如果丢失,则无法调用其他相关接口
+   * 调用额度:500次/一天
+   * http请求方式:POST https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token=ACCESS_TOKEN
+   * 
+ * + * @param goods 商品 + * @return 返回auditId、goodsId + * @throws WxErrorException . + */ + WxMaLiveResult addGoods(WxMaLiveInfo.Goods goods) throws WxErrorException; + + /** + * 撤回审核 + *
+   * 调用此接口,可撤回直播商品的提审申请,消耗的提审次数不返还
+   * 调用额度:500次/一天
+   * http请求方式:POST https://api.weixin.qq.com/wxaapi/broadcast/goods/resetaudit?access_token=ACCESS_TOKEN
+   * 
+   * @param auditId 审核单ID
+   * @param goodsId 商品ID
+   * @return 撤回审核是否成功
+   * @throws WxErrorException .
+   */
+  boolean resetAudit(Integer auditId, Integer goodsId) throws WxErrorException;
+
+  /**
+   * 重新提交审核
+   * 
+   * 调用此接口,可撤回直播商品的提审申请,消耗的提审次数不返还
+   * 调用额度:500次/一天(与接口'商品添加并提审'共用500次限制)
+   * http请求方式:POST https://api.weixin.qq.com/wxaapi/broadcast/goods/audit?access_token=ACCESS_TOKEN
+   * 
+   * @param goodsId 商品ID
+   * @return 审核单ID
+   * @throws WxErrorException .
+   */
+  String auditGoods(Integer goodsId) throws WxErrorException;
+
+  /**
+   * 删除商品
+   * 
+   * 调用此接口,可删除【小程序直播】商品库中的商品,删除后直播间上架的该商品也将被同步删除,不可恢复;
+   * 调用额度:1000次/一天
+   * http请求方式:POST https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token=ACCESS_TOKEN
+   * 
+   * @param goodsId 商品ID
+   * @return 删除商品是否成功
+   * @throws WxErrorException .
+   */
+  boolean deleteGoods(Integer goodsId) throws WxErrorException;
+
+  /**
+   * 更新商品
+   * 
+   * 调用此接口可以更新商品信息,审核通过的商品仅允许更新价格类型与价格,审核中的商品不允许更新,未审核的商品允许更新所有字段, 只传入需要更新的字段。
+   * 调用额度:1000次/一天
+   * http请求方式:POST https://api.weixin.qq.com/wxaapi/broadcast/goods/update?access_token=ACCESS_TOKEN
+   * 
+ * + * @param goods 商品 + * @return 更新商品是否成功 + * @throws WxErrorException . + */ + boolean updateGoods(WxMaLiveInfo.Goods goods) throws WxErrorException; + + /** + * 获取商品状态 + *
+   * 调用此接口可获取商品的信息与审核状态
+   * 调用额度:1000次/一天
+   * http请求方式:POST https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token=ACCESS_TOKEN
+   * 
+   * @param goodsIds 商品ID集
+   * @return 商品状态信息
+   * @throws WxErrorException .
+   */
+  WxMaLiveResult getGoodsWareHouse(List goodsIds) throws WxErrorException;
+
+  /**
+   * 获取商品列表
+   * 
+   * 调用此接口可获取商品列表
+   * 调用额度:10000次/一天
+   * http请求方式:GET https://api.weixin.qq.com/wxaapi/broadcast/goods/getapproved?access_token=ACCESS_TOKEN
+   * 
+   * @param offset 分页条数起点
+   * @param limit  分页大小,默认30,不超过100
+   * @param status 商品状态,0:未审核。1:审核中,2:审核通过,3:审核驳回
+   * @return 商品列表
+   * @throws WxErrorException .
+   */
+  WxMaLiveResult getApprovedGoods(Integer offset, Integer limit, Integer status) throws WxErrorException;
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveService.java
index ee7da797d4..185085478e 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveService.java
@@ -1,6 +1,7 @@
 package cn.binarywang.wx.miniapp.api;
 
-import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo;
+import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo;
+import cn.binarywang.wx.miniapp.bean.WxMaLiveResult;
 import me.chanjar.weixin.common.error.WxErrorException;
 
 import java.util.List;
@@ -15,6 +16,22 @@
  */
 public interface WxMaLiveService {
   String GET_LIVE_INFO = "https://api.weixin.qq.com/wxa/business/getliveinfo";
+  String CREATE_ROOM = "https://api.weixin.qq.com/wxaapi/broadcast/room/create";
+  String ADD_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/room/addgoods";
+
+  /**
+   * 创建直播间
+   * 
+   * 调用此接口创建直播间,创建成功后将在直播间列表展示,调用额度:10000次/一天
+   * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/liveplayer/studio-api.html#1
+   * http请求方式:POST https://api.weixin.qq.com/wxaapi/broadcast/room/create?access_token=ACCESS_TOKEN
+   * 
+ * + * @param roomInfo 直播间信息 + * @return . + * @throws WxErrorException . + */ + Integer createRoom(WxMaLiveInfo.RoomInfo roomInfo) throws WxErrorException; /** * 获取直播房间列表.(分页) @@ -24,39 +41,54 @@ public interface WxMaLiveService { * @return . * @throws WxErrorException . */ - WxMaGetLiveInfo getLiveInfo(Integer start, Integer limit) throws WxErrorException; + WxMaLiveResult getLiveInfo(Integer start, Integer limit) throws WxErrorException; /** * 获取所有直播间信息(没有分页直接获取全部) - * @return - * @throws WxErrorException + * + * @return . + * @throws WxErrorException . */ - List getLiveinfos() throws WxErrorException; + List getLiveInfos() throws WxErrorException; /** - * * 获取直播房间回放数据信息. * * @param action 获取回放 - * @param room_id 直播间 id - * @param start 起始拉取视频,start = 0 表示从第 1 个视频片段开始拉取 - * @param limit 每次拉取的个数上限,不要设置过大,建议 100 以内 - * @return - * @throws WxErrorException + * @param roomId 直播间 id + * @param start 起始拉取视频,start = 0 表示从第 1 个视频片段开始拉取 + * @param limit 每次拉取的个数上限,不要设置过大,建议 100 以内 + * @return . + * @throws WxErrorException . */ - WxMaGetLiveInfo getLiveReplay(String action, Integer room_id, Integer start, Integer limit) throws WxErrorException; + WxMaLiveResult getLiveReplay(String action, Integer roomId, Integer start, Integer limit) throws WxErrorException; /** - * * 获取直播房间回放数据信息. + *

+ * 获取回放 (默认:get_replay) * - * 获取回放 (默认:get_replay) - * @param room_id 直播间 id - * @param start 起始拉取视频,start = 0 表示从第 1 个视频片段开始拉取 - * @param limit 每次拉取的个数上限,不要设置过大,建议 100 以内 - * @return - * @throws WxErrorException + * @param roomId 直播间 id + * @param start 起始拉取视频,start = 0 表示从第 1 个视频片段开始拉取 + * @param limit 每次拉取的个数上限,不要设置过大,建议 100 以内 + * @return . + * @throws WxErrorException . */ - WxMaGetLiveInfo getLiveReplay(Integer room_id, Integer start, Integer limit) throws WxErrorException; + WxMaLiveResult getLiveReplay(Integer roomId, Integer start, Integer limit) throws WxErrorException; + /** + * 直播间导入商品 + *

+ * 调用接口往指定直播间导入已入库的商品 + * 调用频率 + * 调用额度:10000次/一天 + *

+ * http请求方式:POST https://api.weixin.qq.com/wxaapi/broadcast/room/addgoods?access_token=ACCESS_TOKEN + *

+   * @param roomId 房间ID
+   * @param goodsIds 数组列表,可传入多个,里面填写 商品 ID
+   * @return 导入商品是否成功
+   * @throws WxErrorException .
+   */
+  boolean addGoodsToRoom(Integer roomId, List goodsIds) throws WxErrorException;
 }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMediaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMediaService.java
index d2c57ca5e4..48ebb8a101 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMediaService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMediaService.java
@@ -28,7 +28,9 @@ public interface WxMaMediaService {
    *
    * @param mediaType 媒体类型,
    * @param file      文件对象
-   * @see #uploadMedia(String, String, InputStream)
+   * @return the wx media upload result
+   * @throws WxErrorException the wx error exception
+   * @see #uploadMedia(String, String, InputStream) #uploadMedia(String, String, InputStream)
    */
   WxMediaUploadResult uploadMedia(String mediaType, File file) throws WxErrorException;
 
@@ -44,7 +46,9 @@ public interface WxMaMediaService {
    * @param mediaType   媒体类型
    * @param fileType    文件类型
    * @param inputStream 输入流
-   * @see #uploadMedia(java.lang.String, java.io.File)
+   * @return the wx media upload result
+   * @throws WxErrorException the wx error exception
+   * @see #uploadMedia(java.lang.String, java.io.File) #uploadMedia(java.lang.String, java.io.File)
    */
   WxMediaUploadResult uploadMedia(String mediaType, String fileType, InputStream inputStream) throws WxErrorException;
 
@@ -58,7 +62,8 @@ public interface WxMaMediaService {
    * 
* * @param mediaId 媒体Id - * @return 保存到本地的临时文件 + * @return 保存到本地的临时文件 media + * @throws WxErrorException the wx error exception */ File getMedia(String mediaId) 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 875d9430d4..c7de9cc472 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 @@ -2,6 +2,7 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.binarywang.wx.miniapp.config.WxMaConfig; +import me.chanjar.weixin.common.api.WxOcrService; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.service.WxService; import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; @@ -280,4 +281,18 @@ public interface WxMaService extends WxService { * @return . */ WxMaLiveService getLiveService(); + + /** + * 获取直播间商品服务对象 + * + * @return . + */ + WxMaLiveGoodsService getLiveGoodsService(); + + /** + * 获取ocr实现接口服务对象 + * + * @return 。 + */ + WxOcrService getOcrService(); } 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 5c2bb99d1a..19f9d36e99 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 @@ -9,6 +9,7 @@ import com.google.gson.JsonObject; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.WxType; +import me.chanjar.weixin.common.api.WxOcrService; import me.chanjar.weixin.common.bean.WxAccessToken; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; @@ -56,6 +57,8 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH private final WxMaSubscribeService subscribeService = new WxMaSubscribeServiceImpl(this); private final WxMaCloudService cloudService = new WxMaCloudServiceImpl(this); private final WxMaLiveService liveService = new WxMaLiveServiceImpl(this); + private final WxMaLiveGoodsService liveGoodsService = new WxMaLiveGoodsServiceImpl(this); + private final WxOcrService ocrService = new WxMaOcrServiceImpl(this); private int retrySleepMillis = 1000; private int maxRetryTimes = 5; @@ -394,4 +397,15 @@ public WxMaCloudService getCloudService() { public WxMaLiveService getLiveService() { return this.liveService; } + + @Override + public WxMaLiveGoodsService getLiveGoodsService() { + return this.liveGoodsService; + } + + @Override + public WxOcrService getOcrService() { + return this.ocrService; + } + } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveGoodsServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveGoodsServiceImpl.java new file mode 100644 index 0000000000..8e6a3f2caa --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveGoodsServiceImpl.java @@ -0,0 +1,132 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.api.WxMaLiveGoodsService; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo; +import cn.binarywang.wx.miniapp.bean.WxMaLiveResult; +import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; +import com.google.common.base.Joiner; +import com.google.common.collect.ImmutableMap; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import lombok.AllArgsConstructor; +import me.chanjar.weixin.common.WxType; +import me.chanjar.weixin.common.error.WxError; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + *
+ *  Created by lipengjun on 2020/6/29.
+ * 
+ * + * @author lipengjun (939961241@qq.com) + */ +@AllArgsConstructor +public class WxMaLiveGoodsServiceImpl implements WxMaLiveGoodsService { + + private WxMaService wxMaService; + + @Override + public WxMaLiveResult addGoods(WxMaLiveInfo.Goods goods) throws WxErrorException { + Map map = new HashMap<>(2); + map.put("goodsInfo", goods); + String responseContent = this.wxMaService.post(ADD_GOODS, WxMaGsonBuilder.create().toJson(map)); + JsonObject jsonObject = GsonParser.parse(responseContent); + if (jsonObject.get("errcode").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + return WxMaLiveResult.fromJson(jsonObject.toString()); + } + + @Override + public boolean resetAudit(Integer auditId, Integer goodsId) throws WxErrorException { + Map map = new HashMap<>(4); + map.put("auditId", auditId); + map.put("goodsId", goodsId); + String responseContent = this.wxMaService.post(RESET_AUDIT_GOODS, WxMaGsonBuilder.create().toJson(map)); + JsonObject jsonObject = GsonParser.parse(responseContent); + if (jsonObject.get("errcode").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + return true; + } + + @Override + public String auditGoods(Integer goodsId) throws WxErrorException { + Map map = new HashMap<>(2); + map.put("goodsId", goodsId); + String responseContent = this.wxMaService.post(AUDIT_GOODS, WxMaGsonBuilder.create().toJson(map)); + JsonObject jsonObject = GsonParser.parse(responseContent); + if (jsonObject.get("errcode").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + return jsonObject.get("auditId").getAsString(); + } + + @Override + public boolean deleteGoods(Integer goodsId) throws WxErrorException { + Map map = new HashMap<>(2); + map.put("goodsId", goodsId); + String responseContent = this.wxMaService.post(DELETE_GOODS, WxMaGsonBuilder.create().toJson(map)); + JsonObject jsonObject = GsonParser.parse(responseContent); + if (jsonObject.get("errcode").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + return true; + } + + @Override + public boolean updateGoods(WxMaLiveInfo.Goods goods) throws WxErrorException { + Map map = new HashMap<>(2); + map.put("goodsInfo", goods); + String responseContent = this.wxMaService.post(UPDATE_GOODS, WxMaGsonBuilder.create().toJson(map)); + JsonObject jsonObject = GsonParser.parse(responseContent); + if (jsonObject.get("errcode").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + return true; + } + + @Override + public WxMaLiveResult getGoodsWareHouse(List goodsIds) throws WxErrorException { + Map map = new HashMap<>(2); + map.put("goods_ids", goodsIds); + String responseContent = this.wxMaService.post(GET_GOODS_WARE_HOUSE, WxMaGsonBuilder.create().toJson(map)); + JsonObject jsonObject = GsonParser.parse(responseContent); + if (jsonObject.get("errcode").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + return WxMaLiveResult.fromJson(jsonObject.toString()); + } + + @Override + public WxMaLiveResult getApprovedGoods(Integer offset, Integer limit, Integer status) throws WxErrorException { + ImmutableMap params = ImmutableMap.of("status", status, "offset", offset, "limit", limit); + String responseContent = wxMaService.get(GET_APPROVED_GOODS, Joiner.on("&").withKeyValueSeparator("=").join(params)); + JsonObject jsonObject = GsonParser.parse(responseContent); + if (jsonObject.get("errcode").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + JsonArray goodsArr = jsonObject.getAsJsonArray("goods"); + if (goodsArr.size() > 0) { + for (int i = 0; i < goodsArr.size(); i++) { + // 接口返回key是驼峰 + JsonObject goods = (JsonObject) goodsArr.get(i); + goods.addProperty("goods_id", goods.get("goodsId").getAsInt()); + goods.addProperty("cover_img_url", goods.get("coverImgUrl").getAsString()); + goods.addProperty("price_type", goods.get("priceType").getAsInt()); + goods.addProperty("third_party_tag", goods.get("thirdPartyTag").getAsInt()); + goods.addProperty("audit_status", status); + } + } + return WxMaLiveResult.fromJson(jsonObject.toString()); + } + +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java index e567a7af5a..e021095aed 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java @@ -2,10 +2,13 @@ import cn.binarywang.wx.miniapp.api.WxMaLiveService; import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo; +import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo; +import cn.binarywang.wx.miniapp.bean.WxMaLiveResult; import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; @@ -23,26 +26,36 @@ * * @author yjwang */ +@Slf4j @AllArgsConstructor public class WxMaLiveServiceImpl implements WxMaLiveService { + private final WxMaService wxMaService; - private WxMaService service; + @Override + public Integer createRoom(WxMaLiveInfo.RoomInfo roomInfo) throws WxErrorException { + String responseContent = this.wxMaService.post(CREATE_ROOM, WxMaGsonBuilder.create().toJson(roomInfo)); + JsonObject jsonObject = GsonParser.parse(responseContent); + if (jsonObject.get("errcode").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + return jsonObject.get("roomId").getAsInt(); + } @Override - public WxMaGetLiveInfo getLiveInfo(Integer start, Integer limit) throws WxErrorException { - JsonObject jsonObject = getJsonObject(start, limit, null); - return WxMaGetLiveInfo.fromJson(jsonObject.toString()); + public WxMaLiveResult getLiveInfo(Integer start, Integer limit) throws WxErrorException { + JsonObject jsonObject = getLiveInfo(start, limit, null); + return WxMaLiveResult.fromJson(jsonObject.toString()); } @Override - public List getLiveinfos() throws WxErrorException { - List results = new ArrayList<>(); - Integer start = 0; + public List getLiveInfos() throws WxErrorException { + List results = new ArrayList<>(); + int start = 0; Integer limit = 80; - Integer tatal = 0; - WxMaGetLiveInfo liveInfo = null; + Integer total = 0; + WxMaLiveResult liveInfo; do { - if (tatal != 0 && tatal <= start) { + if (total != 0 && total <= start) { break; } liveInfo = getLiveInfo(start, limit); @@ -50,47 +63,52 @@ public List getLiveinfos() throws WxErrorException { return null; } results.addAll(liveInfo.getRoomInfos()); - tatal = liveInfo.getTotal(); + total = liveInfo.getTotal(); start = results.size(); try { Thread.sleep(100); } catch (InterruptedException e) { - e.printStackTrace(); + log.error("InterruptedException", e); } - } while (results.size() <= tatal); + } while (results.size() <= total); + return results; } @Override - public WxMaGetLiveInfo getLiveReplay(String action, Integer room_id, Integer start, Integer limit) throws WxErrorException { - Map map = new HashMap(4); + public WxMaLiveResult getLiveReplay(String action, Integer roomId, Integer start, Integer limit) throws WxErrorException { + Map map = new HashMap<>(4); map.put("action", action); - map.put("room_id", room_id); - JsonObject jsonObject = getJsonObject(start, limit, map); - return WxMaGetLiveInfo.fromJson(jsonObject.toString()); + map.put("room_id", roomId); + JsonObject jsonObject = getLiveInfo(start, limit, map); + return WxMaLiveResult.fromJson(jsonObject.toString()); } @Override - public WxMaGetLiveInfo getLiveReplay(Integer room_id, Integer start, Integer limit) throws WxErrorException { - return getLiveReplay("get_replay", room_id, start, limit); + public WxMaLiveResult getLiveReplay(Integer roomId, Integer start, Integer limit) throws WxErrorException { + return getLiveReplay("get_replay", roomId, start, limit); + } + + @Override + public boolean addGoodsToRoom(Integer roomId, List goodsIds) throws WxErrorException { + Map map = new HashMap<>(2); + map.put("roomId", roomId); + map.put("ids", goodsIds); + String responseContent = this.wxMaService.post(ADD_GOODS, WxMaGsonBuilder.create().toJson(map)); + JsonObject jsonObject = GsonParser.parse(responseContent); + if (jsonObject.get("errcode").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + return true; } - /** - * 包装一下 - * - * @param start - * @param limit - * @param map - * @return - * @throws WxErrorException - */ - private JsonObject getJsonObject(Integer start, Integer limit, Map map) throws WxErrorException { + private JsonObject getLiveInfo(Integer start, Integer limit, Map map) throws WxErrorException { if (map == null) { - map = new HashMap(2); + map = new HashMap<>(2); } map.put("start", start); map.put("limit", limit); - String responseContent = service.post(GET_LIVE_INFO, WxMaGsonBuilder.create().toJson(map)); + String responseContent = wxMaService.post(GET_LIVE_INFO, WxMaGsonBuilder.create().toJson(map)); JsonObject jsonObject = GsonParser.parse(responseContent); if (jsonObject.get("errcode").getAsInt() != 0) { throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMediaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMediaServiceImpl.java index 06a453caed..b39f50cb41 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMediaServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMediaServiceImpl.java @@ -22,7 +22,7 @@ */ @AllArgsConstructor public class WxMaMediaServiceImpl implements WxMaMediaService { - private WxMaService wxMaService; + private final WxMaService wxMaService; @Override public WxMediaUploadResult uploadMedia(String mediaType, String fileType, InputStream inputStream) throws WxErrorException { diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaOcrServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaOcrServiceImpl.java new file mode 100644 index 0000000000..b7df6849e7 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaOcrServiceImpl.java @@ -0,0 +1,151 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import lombok.RequiredArgsConstructor; +import me.chanjar.weixin.common.api.WxOcrService; +import me.chanjar.weixin.common.bean.ocr.*; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.mp.util.requestexecuter.ocr.OcrDiscernRequestExecutor; + +import java.io.File; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +/** + * ocr 接口实现. + * + * @author Binary Wang + * @date 2019-06-22 + */ +@RequiredArgsConstructor +public class WxMaOcrServiceImpl implements WxOcrService { + private static final String IDCARD = "https://api.weixin.qq.com/cv/ocr/idcard?img_url=%s"; + private static final String FILEIDCARD = "https://api.weixin.qq.com/cv/ocr/idcard"; + private static final String BANK_CARD = "https://api.weixin.qq.com/cv/ocr/bankcard?img_url=%s"; + private static final String FILE_BANK_CARD = "https://api.weixin.qq.com/cv/ocr/bankcard"; + private static final String DRIVING = "https://api.weixin.qq.com/cv/ocr/driving?img_url=%s"; + private static final String FILE_DRIVING = "https://api.weixin.qq.com/cv/ocr/driving"; + private static final String DRIVING_LICENSE = "https://api.weixin.qq.com/cv/ocr/drivinglicense?img_url=%s"; + private static final String FILE_DRIVING_LICENSE = "https://api.weixin.qq.com/cv/ocr/drivinglicense"; + private static final String BIZ_LICENSE = "https://api.weixin.qq.com/cv/ocr/bizlicense?img_url=%s"; + private static final String FILE_BIZ_LICENSE = "https://api.weixin.qq.com/cv/ocr/bizlicense"; + private static final String COMM = "https://api.weixin.qq.com/cv/ocr/comm?img_url=%s"; + private static final String FILE_COMM = "https://api.weixin.qq.com/cv/ocr/comm"; + + private final WxMaService mainService; + + @Override + public WxOcrIdCardResult idCard(String imgUrl) throws WxErrorException { + try { + imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + // ignore cannot happen + } + + final String result = this.mainService.get(String.format(IDCARD, imgUrl), null); + return WxOcrIdCardResult.fromJson(result); + } + + @Override + public WxOcrIdCardResult idCard(File imgFile) throws WxErrorException { + String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), + FILEIDCARD, imgFile); + return WxOcrIdCardResult.fromJson(result); + } + + @Override + public WxOcrBankCardResult bankCard(String imgUrl) throws WxErrorException { + try { + imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + // ignore cannot happen + } + + final String result = this.mainService.get(String.format(BANK_CARD, imgUrl), null); + return WxOcrBankCardResult.fromJson(result); + } + + @Override + public WxOcrBankCardResult bankCard(File imgFile) throws WxErrorException { + String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), + FILE_BANK_CARD, imgFile); + return WxOcrBankCardResult.fromJson(result); + } + + @Override + public WxOcrDrivingResult driving(String imgUrl) throws WxErrorException { + try { + imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + // ignore cannot happen + } + + final String result = this.mainService.get(String.format(DRIVING, imgUrl), null); + return WxOcrDrivingResult.fromJson(result); + } + + @Override + public WxOcrDrivingResult driving(File imgFile) throws WxErrorException { + String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), + FILE_DRIVING, imgFile); + return WxOcrDrivingResult.fromJson(result); + } + + @Override + public WxOcrDrivingLicenseResult drivingLicense(String imgUrl) throws WxErrorException { + try { + imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + // ignore cannot happen + } + + final String result = this.mainService.get(String.format(DRIVING_LICENSE, imgUrl), null); + return WxOcrDrivingLicenseResult.fromJson(result); + } + + @Override + public WxOcrDrivingLicenseResult drivingLicense(File imgFile) throws WxErrorException { + String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), + FILE_DRIVING_LICENSE, imgFile); + return WxOcrDrivingLicenseResult.fromJson(result); + } + + @Override + public WxOcrBizLicenseResult bizLicense(String imgUrl) throws WxErrorException { + try { + imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + // ignore cannot happen + } + + final String result = this.mainService.get(String.format(BIZ_LICENSE, imgUrl), null); + return WxOcrBizLicenseResult.fromJson(result); + } + + @Override + public WxOcrBizLicenseResult bizLicense(File imgFile) throws WxErrorException { + String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), + FILE_BIZ_LICENSE, imgFile); + return WxOcrBizLicenseResult.fromJson(result); + } + + @Override + public WxOcrCommResult comm(String imgUrl) throws WxErrorException { + try { + imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + // ignore cannot happen + } + + final String result = this.mainService.get(String.format(COMM, imgUrl), null); + return WxOcrCommResult.fromJson(result); + } + + @Override + public WxOcrCommResult comm(File imgFile) throws WxErrorException { + String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), + FILE_COMM, imgFile); + return WxOcrCommResult.fromJson(result); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaLiveInfo.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaLiveInfo.java new file mode 100644 index 0000000000..8a98b4a218 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaLiveInfo.java @@ -0,0 +1,60 @@ +package cn.binarywang.wx.miniapp.bean; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 直播接口入参 + * + * @author yjwang + * @date 2020/4/5 + */ +@Data +public class WxMaLiveInfo implements Serializable { + private static final long serialVersionUID = 7285263767524755887L; + + /** + * 直播列表 + */ + @Data + public static class RoomInfo implements Serializable { + private static final long serialVersionUID = 7745775280267417154L; + private String name; + private Integer roomid; + private String coverImg; + private String shareImg; + private Integer liveStatus; + private Long startTime; + private Long endTime; + private String anchorName; + private String anchorWechat; + private String anchorImg; + private Integer type; + private Integer screenType; + private Integer closeLike; + private Integer closeGoods; + private Integer closeComment; + private List goods; + } + + /** + * 商品列表 + */ + @Data + public static class Goods implements Serializable { + private static final long serialVersionUID = 5769245932149287574L; + private Integer goodsId; + private String coverImgUrl; + private String url; + private Integer priceType; + private String price; + private String price2; + private String name; + /** + * 1, 2:表示是为api添加商品,否则是在MP添加商品 + */ + private String thirdPartyTag; + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaGetLiveInfo.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaLiveResult.java similarity index 55% rename from weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaGetLiveInfo.java rename to weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaLiveResult.java index 77817d3cec..2b0407e6aa 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaGetLiveInfo.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaLiveResult.java @@ -8,30 +8,65 @@ import java.util.List; /** - * 获取直播房间列表 + *
+ * 直播间操作返回结果
+ * Created by lipengjun on 2020/6/29.
+ * 
* - * @author yjwang - * @date 2020/4/5 + * @author lipengjun (939961241@qq.com) */ @Data -public class WxMaGetLiveInfo implements Serializable { - private static final long serialVersionUID = 7285263767524755887L; +public class WxMaLiveResult implements Serializable { + private static final long serialVersionUID = 1L; private Integer errcode; private String errmsg; private Integer total; + private Integer auditId; + private Integer goodsId; + private List goods; + /** * 直播间列表 */ @SerializedName("room_info") private List roomInfos; + /** * 获取回放源视频列表 */ @SerializedName("live_replay") private List liveReplay; - public static WxMaGetLiveInfo fromJson(String json) { - return WxMaGsonBuilder.create().fromJson(json, WxMaGetLiveInfo.class); + public static WxMaLiveResult fromJson(String json) { + return WxMaGsonBuilder.create().fromJson(json, WxMaLiveResult.class); + } + + /** + * 商品列表 + */ + @Data + public static class Goods implements Serializable { + private static final long serialVersionUID = 5769245932149287574L; + @SerializedName("goods_id") + private Integer goodsId; + @SerializedName("cover_img_url") + private String coverImgUrl; + private String name; + private String url; + @SerializedName("price_type") + private Integer priceType; + /** + * 0:未审核,1:审核中,2:审核通过,3审核失败 + */ + @SerializedName("audit_status") + private Integer auditStatus; + private String price; + private String price2; + /** + * 1, 2:表示是为api添加商品,否则是在MP添加商品 + */ + @SerializedName("third_party_tag") + private String thirdPartyTag; } /** @@ -54,22 +89,20 @@ public static class RoomInfo implements Serializable { private Long endTime; @SerializedName("anchor_name") private String anchorName; + @SerializedName("anchor_wechat") + private String anchorWechat; @SerializedName("anchor_img") private String anchorImg; - private List goods; - } - - /** - * 商品列表 - */ - @Data - public static class Goods implements Serializable { - private static final long serialVersionUID = 5769245932149287574L; - @SerializedName("cover_img") - private String coverImg; - private String url; - private String price; - private String name; + private Integer type; + @SerializedName("screen_type") + private Integer screenType; + @SerializedName("close_like") + private Integer closeLike; + @SerializedName("closeGoods") + private Integer closeGoods; + @SerializedName("close_comment") + private Integer closeComment; + private List goods; } /** @@ -85,6 +118,4 @@ public static class LiveReplay implements Serializable { @SerializedName("media_url") private String mediaUrl; } - - } diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveGoodsServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveGoodsServiceImplTest.java new file mode 100644 index 0000000000..769d82919e --- /dev/null +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveGoodsServiceImplTest.java @@ -0,0 +1,92 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo; +import cn.binarywang.wx.miniapp.bean.WxMaLiveResult; +import cn.binarywang.wx.miniapp.test.ApiTestModule; +import com.google.inject.Inject; +import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + +import java.io.File; +import java.util.Arrays; + +import static org.testng.Assert.assertNotNull; + +/** + * 测试直播商品管理相关的接口 + * + * @author lipengjun (939961241@qq.com) + */ +@Test +@Guice(modules = ApiTestModule.class) +public class WxMaLiveGoodsServiceImplTest { + + @Inject + private WxMaService wxService; + + @Test + public void addGoods() throws Exception { + //上传临时素材 + WxMediaUploadResult mediaUpload = this.wxService.getMediaService().uploadMedia("image", new File("E:\\1.png")); + + WxMaLiveInfo.Goods goods = new WxMaLiveInfo.Goods(); + goods.setCoverImgUrl(mediaUpload.getMediaId()); + goods.setName("宫廷奢华真丝四件套"); + goods.setPrice("1599"); + goods.setPrice2("0"); + goods.setPriceType(1); + goods.setUrl("pages/goods/goods?id=b7c4fbf95493bd294054fe4296d0d9ad"); + WxMaLiveResult liveResult = this.wxService.getLiveGoodsService().addGoods(goods); + assertNotNull(liveResult); + System.out.println(liveResult.toString()); + } + + @Test + public void resetAudit() throws Exception { + boolean result = this.wxService.getLiveGoodsService().resetAudit(715138516, 9); + System.out.println(result); + } + + @Test + public void auditGoods() throws Exception { + String result = this.wxService.getLiveGoodsService().auditGoods(9); + System.out.println(result); + } + + @Test + public void deleteGoods() throws Exception { + boolean result = this.wxService.getLiveGoodsService().deleteGoods(9); + System.out.println(result); + } + + @Test + public void updateGoods() throws Exception { + + WxMaLiveInfo.Goods goods = new WxMaLiveInfo.Goods(); + goods.setGoodsId(8); + goods.setName("宫廷奢华真丝四件套"); + goods.setCoverImgUrl("http://mmbiz.qpic.cn/mmbiz_png/omYktZNGamuUQE0WPVfqdnLV61JDhluXOac7PiaoZeticFpcR7wvicC0aXUC2VXkl7r1gN0QSKosv2satn6oCFeiaQ/0"); + goods.setPrice("2299"); + goods.setPrice2("0"); + goods.setPriceType(1); + goods.setUrl("pages/goods/goods?id=b7c4fbf95493bd294054fe4296d0d9ad"); + boolean maLiveInfo = this.wxService.getLiveGoodsService().updateGoods(goods); + System.out.println(maLiveInfo); + } + + @Test + public void getGoodsWareHouse() throws Exception { + WxMaLiveResult liveResult = this.wxService.getLiveGoodsService().getGoodsWareHouse(Arrays.asList(1, 2)); + assertNotNull(liveResult); + System.out.println(liveResult.toString()); + } + + @Test + public void getApprovedGoods() throws Exception { + WxMaLiveResult liveResult = this.wxService.getLiveGoodsService().getApprovedGoods(0, 4, 2); + assertNotNull(liveResult); + System.out.println(liveResult.toString()); + } +} diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java index c17fca3c87..e92913366a 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java @@ -1,12 +1,17 @@ package cn.binarywang.wx.miniapp.api.impl; import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo; +import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo; +import cn.binarywang.wx.miniapp.bean.WxMaLiveResult; import cn.binarywang.wx.miniapp.test.ApiTestModule; import com.google.inject.Inject; +import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; import org.testng.annotations.Guice; import org.testng.annotations.Test; +import java.io.File; +import java.util.Arrays; +import java.util.Calendar; import java.util.List; import static org.testng.Assert.assertNotNull; @@ -23,9 +28,34 @@ public class WxMaLiveServiceImplTest { @Inject private WxMaService wxService; + @Test + public void createRoom() throws Exception { + //上传临时素材 + WxMediaUploadResult mediaUpload = this.wxService.getMediaService().uploadMedia("image", new File("E:\\1.png")); + + WxMaLiveInfo.RoomInfo roomInfo = new WxMaLiveInfo.RoomInfo(); + roomInfo.setName("订阅通知直播间"); + roomInfo.setCoverImg(mediaUpload.getMediaId()); + Calendar c = Calendar.getInstance(); + c.set(2020, Calendar.SEPTEMBER, 10, 8, 0); + roomInfo.setStartTime(c.getTimeInMillis() / 1000); + c.set(2020, Calendar.SEPTEMBER, 10, 12, 0); + roomInfo.setEndTime(c.getTimeInMillis() / 1000); + roomInfo.setAnchorName("鹏军_专业小程序开发"); + roomInfo.setAnchorWechat("pengjun939961241"); + roomInfo.setShareImg(mediaUpload.getMediaId()); + roomInfo.setType(1); + roomInfo.setScreenType(1); + roomInfo.setCloseLike(0); + roomInfo.setCloseGoods(0); + roomInfo.setCloseComment(0); + Integer roomId = this.wxService.getLiveService().createRoom(roomInfo); + System.out.println(roomId); + } + @Test public void getLiveInfo() throws Exception { - WxMaGetLiveInfo list = this.wxService.getLiveService().getLiveInfo(0,10); + WxMaLiveResult list = this.wxService.getLiveService().getLiveInfo(0, 10); assertNotNull(list); System.out.println(list.toString()); } @@ -33,15 +63,21 @@ public void getLiveInfo() throws Exception { @Test public void getLiveReplay() throws Exception { // [12, 11, 10, 9, 8, 7, 6, 5, 3, 2] - WxMaGetLiveInfo list = this.wxService.getLiveService().getLiveReplay(11,0,10); + WxMaLiveResult list = this.wxService.getLiveService().getLiveReplay(3, 0, 10); assertNotNull(list); System.out.println(list.toString()); } @Test public void getLiveinfos() throws Exception { - List list = this.wxService.getLiveService().getLiveinfos(); + List list = this.wxService.getLiveService().getLiveInfos(); assertNotNull(list); System.out.println(list.toString()); } + + @Test + public void addGoodsToRoom() throws Exception { + boolean result = this.wxService.getLiveService().addGoodsToRoom(5, Arrays.asList(8, 7, 5, 4, 10)); + System.out.println(result); + } } diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaOcrServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaOcrServiceImplTest.java new file mode 100644 index 0000000000..b52476fb92 --- /dev/null +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaOcrServiceImplTest.java @@ -0,0 +1,385 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.test.ApiTestModule; +import cn.binarywang.wx.miniapp.test.TestConstants; +import me.chanjar.weixin.common.bean.ocr.*; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.fs.FileUtils; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + +import javax.inject.Inject; +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 org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * @author Binary Wang + * @date 2020-07-05 + */ +@Test +@Guice(modules = ApiTestModule.class) +public class WxMaOcrServiceImplTest { + @Inject + private WxMaService service; + + @Test + public void testIdCard() throws WxErrorException { + final WxOcrIdCardResult result = this.service.getOcrService().idCard( + "https://res.wx.qq.com/op_res/E_oqdHqP4ETOJsT46sQnXz1HbeHOpqDQTuhkYeaLaJTf-JKld7de3091dwxCQwa6"); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testIdCard2() throws Exception { + InputStream inputStream = this.getImageStream("https://res.wx.qq.com/op_res/E_oqdHqP4ETOJsT46sQnXz1HbeHOpqDQTuhkYeaLaJTf-JKld7de3091dwxCQwa6"); + File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); + final WxOcrIdCardResult result = this.service.getOcrService().idCard(tempFile); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testBankCard() throws WxErrorException { + final WxOcrBankCardResult result = this.service.getOcrService().bankCard("https://res.wx.qq.com/op_res/eP7PObYbBJj-_19EbGBL4PWe_zQ1NwET5NXSugjEWc-4ayns4Q-HFJrp-AOog8ih"); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testBankCard2() throws Exception { + InputStream inputStream = this.getImageStream("https://res.wx.qq.com/op_res/eP7PObYbBJj-_19EbGBL4PWe_zQ1NwET5NXSugjEWc-4ayns4Q-HFJrp-AOog8ih"); + File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); + final WxOcrBankCardResult result = this.service.getOcrService().bankCard(tempFile); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testDriving() throws WxErrorException { + final WxOcrDrivingResult result = this.service.getOcrService().driving("https://res.wx.qq.com/op_res/T051P5uWvh9gSJ9j78tWib53WiNi2pHSSZhoO8wnY3Av-djpsA4kA9whbtt6_Tb6"); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testDriving2() throws Exception { + InputStream inputStream = ClassLoader.getSystemResourceAsStream("mm.jpeg"); + File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); + final WxOcrDrivingResult result = this.service.getOcrService().driving(tempFile); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testDrivingLicense() throws WxErrorException { + final WxOcrDrivingLicenseResult result = this.service.getOcrService().drivingLicense("https://res.wx.qq.com/op_res/kD4YXjYVAW1eaQqn9uTA0rrOFoZRvVINitNDSGo5gJ7SzTCezNq_ZDDmU1I08kGn"); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testDrivingLicense2() throws Exception { + InputStream inputStream = this.getImageStream("https://res.wx.qq.com/op_res/kD4YXjYVAW1eaQqn9uTA0rrOFoZRvVINitNDSGo5gJ7SzTCezNq_ZDDmU1I08kGn"); + File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); + final WxOcrDrivingLicenseResult result = this.service.getOcrService().drivingLicense(tempFile); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testBizLicense() throws WxErrorException { + final WxOcrBizLicenseResult result = this.service.getOcrService().bizLicense("https://res.wx.qq.com/op_res/apCy0YbnEdjYsa_cjW6x3FlpCc20uQ-2BYE7aXnFsrB-ALHZNgdKXhzIUcrRnDoL"); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testBizLicense2() throws Exception { + InputStream inputStream = ClassLoader.getSystemResourceAsStream("mm.jpeg"); + File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); + final WxOcrBizLicenseResult result = this.service.getOcrService().bizLicense(tempFile); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testComm() throws WxErrorException { + final WxOcrCommResult result = this.service.getOcrService().comm("https://res.wx.qq.com/op_res/apCy0YbnEdjYsa_cjW6x3FlpCc20uQ-2BYE7aXnFsrB-ALHZNgdKXhzIUcrRnDoL"); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testComm2() throws Exception { + InputStream inputStream = ClassLoader.getSystemResourceAsStream("mm.jpeg"); + File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); + final WxOcrCommResult result = this.service.getOcrService().comm(tempFile); + assertThat(result).isNotNull(); + System.out.println(result); + } + + private InputStream getImageStream(String url) { + try { + HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); + connection.setReadTimeout(5000); + connection.setConnectTimeout(5000); + connection.setRequestMethod("GET"); + if (HttpURLConnection.HTTP_OK == connection.getResponseCode()) { + return connection.getInputStream(); + } + } catch (IOException e) { + System.out.println("获取网络图片出现异常,图片路径为:" + url); + } + return null; + } + + public static class MockTest { + private final WxMaService wxService = mock(WxMaService.class); + + @Test + public void testIdCard() throws Exception { + String returnJson = "{\"type\":\"Back\",\"name\":\"张三\",\"id\":\"110101199909090099\",\"valid_date\":\"20110101-20210201\"}"; + + when(wxService.get(anyString(), anyString())).thenReturn(returnJson); + final WxMaOcrServiceImpl wxMpOcrService = new WxMaOcrServiceImpl(wxService); + + final WxOcrIdCardResult result = wxMpOcrService.idCard("abc"); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testBankCard() throws Exception { + String returnJson = "{\"number\":\"24234234345234\"}"; + + when(wxService.get(anyString(), anyString())).thenReturn(returnJson); + final WxMaOcrServiceImpl ocrService = new WxMaOcrServiceImpl(wxService); + final WxOcrBankCardResult result = ocrService.bankCard("abc"); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testDriving() throws Exception { + String returnJson = "{\n" + + " \"errcode\": 0,\n" + + " \"errmsg\": \"ok\",\n" + + " \"plate_num\": \"粤xxxxx\", //车牌号码\n" + + " \"vehicle_type\": \"小型普通客车\", //车辆类型\n" + + " \"owner\": \"东莞市xxxxx机械厂\", //所有人\n" + + " \"addr\": \"广东省东莞市xxxxx号\", //住址\n" + + " \"use_character\": \"非营运\", //使用性质\n" + + " \"model\": \"江淮牌HFCxxxxxxx\", //品牌型号\n" + + " \"vin\": \"LJ166xxxxxxxx51\", //车辆识别代号\n" + + " \"engine_num\": \"J3xxxxx3\", //发动机号码\n" + + " \"register_date\": \"2018-07-06\", //注册日期\n" + + " \"issue_date\": \"2018-07-01\", //发证日期\n" + + " \"plate_num_b\": \"粤xxxxx\", //车牌号码\n" + + " \"record\": \"441xxxxxx3\", //号牌\n" + + " \"passengers_num\": \"7人\", //核定载人数\n" + + " \"total_quality\": \"2700kg\", //总质量\n" + + " \"prepare_quality\": \"1995kg\", //整备质量\n" + + " \"overall_size\": \"4582x1795x1458mm\", //外廓尺寸\n" + + " \"card_position_front\": {//卡片正面位置(检测到卡片正面才会返回)\n" + + " \"pos\": {\n" + + " \"left_top\": {\n" + + " \"x\": 119, \n" + + " \"y\": 2925\n" + + " }, \n" + + " \"right_top\": {\n" + + " \"x\": 1435, \n" + + " \"y\": 2887\n" + + " }, \n" + + " \"right_bottom\": {\n" + + " \"x\": 1435, \n" + + " \"y\": 3793\n" + + " }, \n" + + " \"left_bottom\": {\n" + + " \"x\": 119, \n" + + " \"y\": 3831\n" + + " }\n" + + " }\n" + + " }, \n" + + " \"card_position_back\": {//卡片反面位置(检测到卡片反面才会返回)\n" + + " \"pos\": {\n" + + " \"left_top\": {\n" + + " \"x\": 1523, \n" + + " \"y\": 2849\n" + + " }, \n" + + " \"right_top\": {\n" + + " \"x\": 2898, \n" + + " \"y\": 2887\n" + + " }, \n" + + " \"right_bottom\": {\n" + + " \"x\": 2927, \n" + + " \"y\": 3831\n" + + " }, \n" + + " \"left_bottom\": {\n" + + " \"x\": 1523, \n" + + " \"y\": 3831\n" + + " }\n" + + " }\n" + + " }, \n" + + " \"img_size\": {//图片大小\n" + + " \"w\": 3120, \n" + + " \"h\": 4208\n" + + " }\n" + + "}"; + + when(wxService.get(anyString(), anyString())).thenReturn(returnJson); + final WxMaOcrServiceImpl ocrService = new WxMaOcrServiceImpl(wxService); + + final WxOcrDrivingResult result = ocrService.driving("abc"); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testDrivingLicense() throws Exception { + String returnJson = "{\n" + + " \"errcode\": 0,\n" + + " \"errmsg\": \"ok\",\n" + + " \"id_num\": \"660601xxxxxxxx1234\", //证号\n" + + " \"name\": \"张三\", //姓名\n" + + " \"sex\": \"男\", //性别\n" + + " \"nationality\": \"中国\", //国籍\n" + + " \"address\": \"广东省东莞市xxxxx号\", //住址\n" + + " \"birth_date\": \"1990-12-21\", //出生日期\n" + + " \"issue_date\": \"2012-12-21\", //初次领证日期\n" + + " \"car_class\": \"C1\", //准驾车型\n" + + " \"valid_from\": \"2018-07-06\", //有效期限起始日\n" + + " \"valid_to\": \"2020-07-01\", //有效期限终止日\n" + + " \"official_seal\": \"xx市公安局公安交通管理局\" //印章文字\n" + + "}"; + when(wxService.get(anyString(), anyString())).thenReturn(returnJson); + final WxMaOcrServiceImpl wxMpOcrService = new WxMaOcrServiceImpl(wxService); + + final WxOcrDrivingLicenseResult result = wxMpOcrService.drivingLicense("abc"); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testBizLicense() throws Exception { + String returnJson = "{\n" + + " \"errcode\": 0, \n" + + " \"errmsg\": \"ok\", \n" + + " \"reg_num\": \"123123\",//注册号\n" + + " \"serial\": \"123123\",//编号\n" + + " \"legal_representative\": \"张三\", //法定代表人姓名\n" + + " \"enterprise_name\": \"XX饮食店\", //企业名称\n" + + " \"type_of_organization\": \"个人经营\", //组成形式\n" + + " \"address\": \"XX市XX区XX路XX号\", //经营场所/企业住所\n" + + " \"type_of_enterprise\": \"xxx\", //公司类型\n" + + " \"business_scope\": \"中型餐馆(不含凉菜、不含裱花蛋糕,不含生食海产品)。\", //经营范围\n" + + " \"registered_capital\": \"200万\", //注册资本\n" + + " \"paid_in_capital\": \"200万\", //实收资本\n" + + " \"valid_period\": \"2019年1月1日\", //营业期限\n" + + " \"registered_date\": \"2018年1月1日\", //注册日期/成立日期\n" + + " \"cert_position\": { //营业执照位置\n" + + " \"pos\": {\n" + + " \"left_top\": {\n" + + " \"x\": 155, \n" + + " \"y\": 191\n" + + " }, \n" + + " \"right_top\": {\n" + + " \"x\": 725, \n" + + " \"y\": 157\n" + + " }, \n" + + " \"right_bottom\": {\n" + + " \"x\": 743, \n" + + " \"y\": 512\n" + + " }, \n" + + " \"left_bottom\": {\n" + + " \"x\": 164, \n" + + " \"y\": 525\n" + + " }\n" + + " }\n" + + " }, \n" + + " \"img_size\": { //图片大小\n" + + " \"w\": 966, \n" + + " \"h\": 728\n" + + " }\n" + + "}"; + when(wxService.get(anyString(), anyString())).thenReturn(returnJson); + final WxMaOcrServiceImpl ocrService = new WxMaOcrServiceImpl(wxService); + + final WxOcrBizLicenseResult result = ocrService.bizLicense("abc"); + assertThat(result).isNotNull(); + System.out.println(result); + } + + @Test + public void testComm() throws Exception { + String returnJson = "{\n" + + " \"errcode\": 0, \n" + + " \"errmsg\": \"ok\", \n" + + " \"items\": [ //识别结果\n" + + " {\n" + + " \"text\": \"腾讯\", \n" + + " \"pos\": {\n" + + " \"left_top\": {\n" + + " \"x\": 575, \n" + + " \"y\": 519\n" + + " }, \n" + + " \"right_top\": {\n" + + " \"x\": 744, \n" + + " \"y\": 519\n" + + " }, \n" + + " \"right_bottom\": {\n" + + " \"x\": 744, \n" + + " \"y\": 532\n" + + " }, \n" + + " \"left_bottom\": {\n" + + " \"x\": 573, \n" + + " \"y\": 532\n" + + " }\n" + + " }\n" + + " }, \n" + + " {\n" + + " \"text\": \"微信团队\", \n" + + " \"pos\": {\n" + + " \"left_top\": {\n" + + " \"x\": 670, \n" + + " \"y\": 516\n" + + " }, \n" + + " \"right_top\": {\n" + + " \"x\": 762, \n" + + " \"y\": 517\n" + + " }, \n" + + " \"right_bottom\": {\n" + + " \"x\": 762, \n" + + " \"y\": 532\n" + + " }, \n" + + " \"left_bottom\": {\n" + + " \"x\": 670, \n" + + " \"y\": 531\n" + + " }\n" + + " }\n" + + " }\n" + + " ], \n" + + " \"img_size\": { //图片大小\n" + + " \"w\": 1280, \n" + + " \"h\": 720\n" + + " }\n" + + "}"; + when(wxService.get(anyString(), anyString())).thenReturn(returnJson); + final WxMaOcrServiceImpl ocrService = new WxMaOcrServiceImpl(wxService); + + final WxOcrCommResult result = ocrService.comm("abc"); + assertThat(result).isNotNull(); + System.out.println(result); + } + } +} diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/test/TestConstants.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/test/TestConstants.java new file mode 100644 index 0000000000..091de1d3ed --- /dev/null +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/test/TestConstants.java @@ -0,0 +1,17 @@ +package cn.binarywang.wx.miniapp.test; + +/** + *
+ * 仅供测试使用的一些常量
+ * Created by Binary Wang on 2017-3-9.
+ * 
+ */ +public class TestConstants { + /////////////////////// + // 文件类型 + /////////////////////// + public static final String FILE_JPG = "jpeg"; + public static final String FILE_MP3 = "mp3"; + public static final String FILE_AMR = "amr"; + public static final String FILE_MP4 = "mp4"; +} diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml index 555309038c..eb160cb2b0 100644 --- a/weixin-java-mp/pom.xml +++ b/weixin-java-mp/pom.xml @@ -7,7 +7,7 @@ com.github.binarywang wx-java - 3.8.3.B + 3.8.4.B weixin-java-mp diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java index 3803ef9793..a1841bff1d 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java @@ -1,5 +1,6 @@ package me.chanjar.weixin.mp.api; +import me.chanjar.weixin.common.api.WxOcrService; import me.chanjar.weixin.common.bean.WxJsapiSignature; import me.chanjar.weixin.common.bean.WxNetCheckResult; import me.chanjar.weixin.common.error.WxErrorException; @@ -555,7 +556,7 @@ public interface WxMpService extends WxService { * * @return WxMpWifiService */ - WxMpOcrService getOcrService(); + WxOcrService getOcrService(); /** * 返回图像处理接口的实现类对象,以方便调用其各个接口. @@ -688,7 +689,7 @@ public interface WxMpService extends WxService { * * @param ocrService . */ - void setOcrService(WxMpOcrService ocrService); + void setOcrService(WxOcrService ocrService); /** * . diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java index 982bc609da..7cd4e402e6 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java @@ -8,6 +8,7 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.WxType; +import me.chanjar.weixin.common.api.WxOcrService; import me.chanjar.weixin.common.bean.WxAccessToken; import me.chanjar.weixin.common.bean.WxJsapiSignature; import me.chanjar.weixin.common.bean.WxNetCheckResult; @@ -69,7 +70,7 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH private final WxMpWifiService wifiService = new WxMpWifiServiceImpl(this); private WxMpMarketingService marketingService = new WxMpMarketingServiceImpl(this); private WxMpCommentService commentService = new WxMpCommentServiceImpl(this); - private WxMpOcrService ocrService = new WxMpOcrServiceImpl(this); + private WxOcrService ocrService = new WxMpOcrServiceImpl(this); private WxMpImgProcService imgProcService = new WxMpImgProcServiceImpl(this); @Getter @@ -665,7 +666,7 @@ public WxMpWifiService getWifiService() { } @Override - public WxMpOcrService getOcrService() { + public WxOcrService getOcrService() { return this.ocrService; } @@ -680,7 +681,7 @@ public void setMarketingService(WxMpMarketingService marketingService) { } @Override - public void setOcrService(WxMpOcrService ocrService) { + public void setOcrService(WxOcrService ocrService) { this.ocrService = ocrService; } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpOcrServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpOcrServiceImpl.java index dbf3dd0395..6b40c98226 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpOcrServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpOcrServiceImpl.java @@ -2,14 +2,14 @@ import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.mp.api.WxMpOcrService; +import me.chanjar.weixin.common.api.WxOcrService; import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBankCardResult; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBizLicenseResult; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrCommResult; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingLicenseResult; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingResult; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrIdCardResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrBankCardResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrBizLicenseResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrCommResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingLicenseResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrIdCardResult; import me.chanjar.weixin.mp.util.requestexecuter.ocr.OcrDiscernRequestExecutor; import java.io.File; @@ -37,11 +37,11 @@ * @date 2019-06-22 */ @RequiredArgsConstructor -public class WxMpOcrServiceImpl implements WxMpOcrService { +public class WxMpOcrServiceImpl implements WxOcrService { private final WxMpService mainService; @Override - public WxMpOcrIdCardResult idCard(String imgUrl) throws WxErrorException { + public WxOcrIdCardResult idCard(String imgUrl) throws WxErrorException { try { imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); } catch (UnsupportedEncodingException e) { @@ -50,18 +50,18 @@ public WxMpOcrIdCardResult idCard(String imgUrl) throws WxErrorException { final String result = this.mainService.get(String.format(IDCARD.getUrl(this.mainService.getWxMpConfigStorage()), imgUrl), null); - return WxMpOcrIdCardResult.fromJson(result); + return WxOcrIdCardResult.fromJson(result); } @Override - public WxMpOcrIdCardResult idCard(File imgFile) throws WxErrorException { + public WxOcrIdCardResult idCard(File imgFile) throws WxErrorException { String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), FILEIDCARD.getUrl(this.mainService.getWxMpConfigStorage()), imgFile); - return WxMpOcrIdCardResult.fromJson(result); + return WxOcrIdCardResult.fromJson(result); } @Override - public WxMpOcrBankCardResult bankCard(String imgUrl) throws WxErrorException { + public WxOcrBankCardResult bankCard(String imgUrl) throws WxErrorException { try { imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); } catch (UnsupportedEncodingException e) { @@ -70,18 +70,18 @@ public WxMpOcrBankCardResult bankCard(String imgUrl) throws WxErrorException { final String result = this.mainService.get(String.format(BANK_CARD.getUrl(this.mainService.getWxMpConfigStorage()), imgUrl), null); - return WxMpOcrBankCardResult.fromJson(result); + return WxOcrBankCardResult.fromJson(result); } @Override - public WxMpOcrBankCardResult bankCard(File imgFile) throws WxErrorException { + public WxOcrBankCardResult bankCard(File imgFile) throws WxErrorException { String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), FILE_BANK_CARD.getUrl(this.mainService.getWxMpConfigStorage()), imgFile); - return WxMpOcrBankCardResult.fromJson(result); + return WxOcrBankCardResult.fromJson(result); } @Override - public WxMpOcrDrivingResult driving(String imgUrl) throws WxErrorException { + public WxOcrDrivingResult driving(String imgUrl) throws WxErrorException { try { imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); } catch (UnsupportedEncodingException e) { @@ -90,18 +90,18 @@ public WxMpOcrDrivingResult driving(String imgUrl) throws WxErrorException { final String result = this.mainService.get(String.format(DRIVING.getUrl(this.mainService.getWxMpConfigStorage()), imgUrl), null); - return WxMpOcrDrivingResult.fromJson(result); + return WxOcrDrivingResult.fromJson(result); } @Override - public WxMpOcrDrivingResult driving(File imgFile) throws WxErrorException { + public WxOcrDrivingResult driving(File imgFile) throws WxErrorException { String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), FILE_DRIVING.getUrl(this.mainService.getWxMpConfigStorage()), imgFile); - return WxMpOcrDrivingResult.fromJson(result); + return WxOcrDrivingResult.fromJson(result); } @Override - public WxMpOcrDrivingLicenseResult drivingLicense(String imgUrl) throws WxErrorException { + public WxOcrDrivingLicenseResult drivingLicense(String imgUrl) throws WxErrorException { try { imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); } catch (UnsupportedEncodingException e) { @@ -110,18 +110,18 @@ public WxMpOcrDrivingLicenseResult drivingLicense(String imgUrl) throws WxErrorE final String result = this.mainService.get(String.format(DRIVING_LICENSE.getUrl(this.mainService.getWxMpConfigStorage()), imgUrl), null); - return WxMpOcrDrivingLicenseResult.fromJson(result); + return WxOcrDrivingLicenseResult.fromJson(result); } @Override - public WxMpOcrDrivingLicenseResult drivingLicense(File imgFile) throws WxErrorException { + public WxOcrDrivingLicenseResult drivingLicense(File imgFile) throws WxErrorException { String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), FILE_DRIVING_LICENSE.getUrl(this.mainService.getWxMpConfigStorage()), imgFile); - return WxMpOcrDrivingLicenseResult.fromJson(result); + return WxOcrDrivingLicenseResult.fromJson(result); } @Override - public WxMpOcrBizLicenseResult bizLicense(String imgUrl) throws WxErrorException { + public WxOcrBizLicenseResult bizLicense(String imgUrl) throws WxErrorException { try { imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); } catch (UnsupportedEncodingException e) { @@ -130,18 +130,18 @@ public WxMpOcrBizLicenseResult bizLicense(String imgUrl) throws WxErrorException final String result = this.mainService.get(String.format(BIZ_LICENSE.getUrl(this.mainService.getWxMpConfigStorage()), imgUrl), null); - return WxMpOcrBizLicenseResult.fromJson(result); + return WxOcrBizLicenseResult.fromJson(result); } @Override - public WxMpOcrBizLicenseResult bizLicense(File imgFile) throws WxErrorException { + public WxOcrBizLicenseResult bizLicense(File imgFile) throws WxErrorException { String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), FILE_BIZ_LICENSE.getUrl(this.mainService.getWxMpConfigStorage()), imgFile); - return WxMpOcrBizLicenseResult.fromJson(result); + return WxOcrBizLicenseResult.fromJson(result); } @Override - public WxMpOcrCommResult comm(String imgUrl) throws WxErrorException { + public WxOcrCommResult comm(String imgUrl) throws WxErrorException { try { imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name()); } catch (UnsupportedEncodingException e) { @@ -150,13 +150,13 @@ public WxMpOcrCommResult comm(String imgUrl) throws WxErrorException { final String result = this.mainService.get(String.format(COMM.getUrl(this.mainService.getWxMpConfigStorage()), imgUrl), null); - return WxMpOcrCommResult.fromJson(result); + return WxOcrCommResult.fromJson(result); } @Override - public WxMpOcrCommResult comm(File imgFile) throws WxErrorException { + public WxOcrCommResult comm(File imgFile) throws WxErrorException { String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()), FILE_COMM.getUrl(this.mainService.getWxMpConfigStorage()), imgFile); - return WxMpOcrCommResult.fromJson(result); + return WxOcrCommResult.fromJson(result); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrBankCardResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrBankCardResult.java deleted file mode 100644 index 9b76a31579..0000000000 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/ocr/WxMpOcrBankCardResult.java +++ /dev/null @@ -1,28 +0,0 @@ -package me.chanjar.weixin.mp.bean.ocr; - -import com.google.gson.annotations.SerializedName; -import lombok.Data; -import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; - -import java.io.Serializable; - -/** - * 银行卡OCR识别结果 - * @author Theo Nie - */ -@Data -public class WxMpOcrBankCardResult implements Serializable { - - private static final long serialVersionUID = 554136620394204143L; - @SerializedName("number") - private String number; - - @Override - public String toString() { - return WxMpGsonBuilder.create().toJson(this); - } - - public static WxMpOcrBankCardResult fromJson(String json) { - return WxMpGsonBuilder.create().fromJson(json, WxMpOcrBankCardResult.class); - } -} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpRedisConfigImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpRedisConfigImpl.java index dbb3878218..7f54eb0bb9 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpRedisConfigImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpRedisConfigImpl.java @@ -1,10 +1,9 @@ package me.chanjar.weixin.mp.config.impl; import lombok.Data; -import me.chanjar.weixin.common.redis.JedisWxRedisOps; -import me.chanjar.weixin.common.redis.WxRedisOps; +import lombok.EqualsAndHashCode; import me.chanjar.weixin.common.enums.TicketType; -import redis.clients.jedis.JedisPool; +import me.chanjar.weixin.common.redis.WxRedisOps; import java.util.concurrent.TimeUnit; @@ -19,7 +18,7 @@ * @author nickwong */ @Data -@SuppressWarnings("hiding") +@EqualsAndHashCode(callSuper = false) public class WxMpRedisConfigImpl extends WxMpDefaultConfigImpl { private static final long serialVersionUID = -988502871997239733L; @@ -33,10 +32,6 @@ public class WxMpRedisConfigImpl extends WxMpDefaultConfigImpl { private String accessTokenKey; private String lockKey; - public WxMpRedisConfigImpl(JedisPool jedisPool) { - this(new JedisWxRedisOps(jedisPool), "wx"); - } - public WxMpRedisConfigImpl(WxRedisOps redisOps, String keyPrefix) { this.redisOps = redisOps; this.keyPrefix = keyPrefix; diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java index 9bc0e1de03..7f3b45d249 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java @@ -199,8 +199,8 @@ enum Menu implements WxMpApiUrl { */ MENU_ADDCONDITIONAL(API_DEFAULT_HOST_URL, "/cgi-bin/menu/addconditional"); - private String prefix; - private String path; + private final String prefix; + private final String path; @Override public String getUrl(WxMpConfigStorage config) { @@ -224,8 +224,8 @@ enum Qrcode implements WxMpApiUrl { */ SHOW_QRCODE_WITH_TICKET(MP_DEFAULT_HOST_URL, "/cgi-bin/showqrcode?ticket=%s"); - private String prefix; - private String path; + private final String prefix; + private final String path; @Override public String getUrl(WxMpConfigStorage config) { @@ -252,8 +252,8 @@ enum ShakeAround implements WxMpApiUrl { */ SHAKEAROUND_RELATION_SEARCH(API_DEFAULT_HOST_URL, "/shakearound/relation/search"); - private String prefix; - private String path; + private final String prefix; + private final String path; @Override public String getUrl(WxMpConfigStorage config) { @@ -272,8 +272,8 @@ enum SubscribeMsg implements WxMpApiUrl { */ SEND_MESSAGE_URL(API_DEFAULT_HOST_URL, "/cgi-bin/message/template/subscribe"); - private String prefix; - private String path; + private final String prefix; + private final String path; @Override public String getUrl(WxMpConfigStorage config) { @@ -376,8 +376,8 @@ enum UserTag implements WxMpApiUrl { */ TAGS_GETIDLIST(API_DEFAULT_HOST_URL, "/cgi-bin/tags/getidlist"); - private String prefix; - private String path; + private final String prefix; + private final String path; @Override public String getUrl(WxMpConfigStorage config) { @@ -426,8 +426,8 @@ enum AiOpen implements WxMpApiUrl { */ VOICE_QUERY_RESULT_URL(API_DEFAULT_HOST_URL, "/cgi-bin/media/voice/queryrecoresultfortext"); - private String prefix; - private String path; + private final String prefix; + private final String path; @Override public String getUrl(WxMpConfigStorage config) { diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpOcrServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpOcrServiceImplTest.java index 55bfa06233..5f71786681 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpOcrServiceImplTest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpOcrServiceImplTest.java @@ -5,12 +5,12 @@ import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.test.ApiTestModule; import me.chanjar.weixin.mp.api.test.TestConstants; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBankCardResult; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBizLicenseResult; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrCommResult; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingLicenseResult; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingResult; -import me.chanjar.weixin.mp.bean.ocr.WxMpOcrIdCardResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrBankCardResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrBizLicenseResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrCommResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingLicenseResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingResult; +import me.chanjar.weixin.common.bean.ocr.WxOcrIdCardResult; import org.testng.annotations.Guice; import org.testng.annotations.Test; @@ -38,11 +38,11 @@ @Guice(modules = ApiTestModule.class) public class WxMpOcrServiceImplTest { @Inject - private WxMpService mpService; + private WxMpService service; @Test public void testIdCard() throws WxErrorException { - final WxMpOcrIdCardResult result = this.mpService.getOcrService().idCard( + final WxOcrIdCardResult result = this.service.getOcrService().idCard( "https://res.wx.qq.com/op_res/E_oqdHqP4ETOJsT46sQnXz1HbeHOpqDQTuhkYeaLaJTf-JKld7de3091dwxCQwa6"); assertThat(result).isNotNull(); System.out.println(result); @@ -52,14 +52,14 @@ public void testIdCard() throws WxErrorException { public void testIdCard2() throws Exception { InputStream inputStream = this.getImageStream("https://res.wx.qq.com/op_res/E_oqdHqP4ETOJsT46sQnXz1HbeHOpqDQTuhkYeaLaJTf-JKld7de3091dwxCQwa6"); File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); - final WxMpOcrIdCardResult result = this.mpService.getOcrService().idCard(tempFile); + final WxOcrIdCardResult result = this.service.getOcrService().idCard(tempFile); assertThat(result).isNotNull(); System.out.println(result); } @Test public void testBankCard() throws WxErrorException { - final WxMpOcrBankCardResult result = this.mpService.getOcrService().bankCard("https://res.wx.qq.com/op_res/eP7PObYbBJj-_19EbGBL4PWe_zQ1NwET5NXSugjEWc-4ayns4Q-HFJrp-AOog8ih"); + final WxOcrBankCardResult result = this.service.getOcrService().bankCard("https://res.wx.qq.com/op_res/eP7PObYbBJj-_19EbGBL4PWe_zQ1NwET5NXSugjEWc-4ayns4Q-HFJrp-AOog8ih"); assertThat(result).isNotNull(); System.out.println(result); } @@ -68,14 +68,14 @@ public void testBankCard() throws WxErrorException { public void testBankCard2() throws Exception { InputStream inputStream = this.getImageStream("https://res.wx.qq.com/op_res/eP7PObYbBJj-_19EbGBL4PWe_zQ1NwET5NXSugjEWc-4ayns4Q-HFJrp-AOog8ih"); File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); - final WxMpOcrBankCardResult result = this.mpService.getOcrService().bankCard(tempFile); + final WxOcrBankCardResult result = this.service.getOcrService().bankCard(tempFile); assertThat(result).isNotNull(); System.out.println(result); } @Test public void testDriving() throws WxErrorException { - final WxMpOcrDrivingResult result = this.mpService.getOcrService().driving("https://res.wx.qq.com/op_res/T051P5uWvh9gSJ9j78tWib53WiNi2pHSSZhoO8wnY3Av-djpsA4kA9whbtt6_Tb6"); + final WxOcrDrivingResult result = this.service.getOcrService().driving("https://res.wx.qq.com/op_res/T051P5uWvh9gSJ9j78tWib53WiNi2pHSSZhoO8wnY3Av-djpsA4kA9whbtt6_Tb6"); assertThat(result).isNotNull(); System.out.println(result); } @@ -84,14 +84,14 @@ public void testDriving() throws WxErrorException { public void testDriving2() throws Exception { InputStream inputStream = ClassLoader.getSystemResourceAsStream("mm.jpeg"); File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); - final WxMpOcrDrivingResult result = this.mpService.getOcrService().driving(tempFile); + final WxOcrDrivingResult result = this.service.getOcrService().driving(tempFile); assertThat(result).isNotNull(); System.out.println(result); } @Test public void testDrivingLicense() throws WxErrorException { - final WxMpOcrDrivingLicenseResult result = this.mpService.getOcrService().drivingLicense("https://res.wx.qq.com/op_res/kD4YXjYVAW1eaQqn9uTA0rrOFoZRvVINitNDSGo5gJ7SzTCezNq_ZDDmU1I08kGn"); + final WxOcrDrivingLicenseResult result = this.service.getOcrService().drivingLicense("https://res.wx.qq.com/op_res/kD4YXjYVAW1eaQqn9uTA0rrOFoZRvVINitNDSGo5gJ7SzTCezNq_ZDDmU1I08kGn"); assertThat(result).isNotNull(); System.out.println(result); } @@ -100,14 +100,14 @@ public void testDrivingLicense() throws WxErrorException { public void testDrivingLicense2() throws Exception { InputStream inputStream = this.getImageStream("https://res.wx.qq.com/op_res/kD4YXjYVAW1eaQqn9uTA0rrOFoZRvVINitNDSGo5gJ7SzTCezNq_ZDDmU1I08kGn"); File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); - final WxMpOcrDrivingLicenseResult result = this.mpService.getOcrService().drivingLicense(tempFile); + final WxOcrDrivingLicenseResult result = this.service.getOcrService().drivingLicense(tempFile); assertThat(result).isNotNull(); System.out.println(result); } @Test public void testBizLicense() throws WxErrorException { - final WxMpOcrBizLicenseResult result = this.mpService.getOcrService().bizLicense("https://res.wx.qq.com/op_res/apCy0YbnEdjYsa_cjW6x3FlpCc20uQ-2BYE7aXnFsrB-ALHZNgdKXhzIUcrRnDoL"); + final WxOcrBizLicenseResult result = this.service.getOcrService().bizLicense("https://res.wx.qq.com/op_res/apCy0YbnEdjYsa_cjW6x3FlpCc20uQ-2BYE7aXnFsrB-ALHZNgdKXhzIUcrRnDoL"); assertThat(result).isNotNull(); System.out.println(result); } @@ -116,14 +116,14 @@ public void testBizLicense() throws WxErrorException { public void testBizLicense2() throws Exception { InputStream inputStream = ClassLoader.getSystemResourceAsStream("mm.jpeg"); File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); - final WxMpOcrBizLicenseResult result = this.mpService.getOcrService().bizLicense(tempFile); + final WxOcrBizLicenseResult result = this.service.getOcrService().bizLicense(tempFile); assertThat(result).isNotNull(); System.out.println(result); } @Test public void testComm() throws WxErrorException { - final WxMpOcrCommResult result = this.mpService.getOcrService().comm("https://res.wx.qq.com/op_res/apCy0YbnEdjYsa_cjW6x3FlpCc20uQ-2BYE7aXnFsrB-ALHZNgdKXhzIUcrRnDoL"); + final WxOcrCommResult result = this.service.getOcrService().comm("https://res.wx.qq.com/op_res/apCy0YbnEdjYsa_cjW6x3FlpCc20uQ-2BYE7aXnFsrB-ALHZNgdKXhzIUcrRnDoL"); assertThat(result).isNotNull(); System.out.println(result); } @@ -132,7 +132,7 @@ public void testComm() throws WxErrorException { public void testComm2() throws Exception { InputStream inputStream = ClassLoader.getSystemResourceAsStream("mm.jpeg"); File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG); - final WxMpOcrCommResult result = this.mpService.getOcrService().comm(tempFile); + final WxOcrCommResult result = this.service.getOcrService().comm(tempFile); assertThat(result).isNotNull(); System.out.println(result); } @@ -162,7 +162,7 @@ public void testIdCard() throws Exception { when(wxService.get(anyString(), anyString())).thenReturn(returnJson); final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService); - final WxMpOcrIdCardResult result = wxMpOcrService.idCard("abc"); + final WxOcrIdCardResult result = wxMpOcrService.idCard("abc"); assertThat(result).isNotNull(); System.out.println(result); } @@ -174,7 +174,7 @@ public void testBankCard() throws Exception { when(wxService.get(anyString(), anyString())).thenReturn(returnJson); final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService); - final WxMpOcrBankCardResult result = wxMpOcrService.bankCard("abc"); + final WxOcrBankCardResult result = wxMpOcrService.bankCard("abc"); assertThat(result).isNotNull(); System.out.println(result); } @@ -249,7 +249,7 @@ public void testDriving() throws Exception { when(wxService.get(anyString(), anyString())).thenReturn(returnJson); final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService); - final WxMpOcrDrivingResult result = wxMpOcrService.driving("abc"); + final WxOcrDrivingResult result = wxMpOcrService.driving("abc"); assertThat(result).isNotNull(); System.out.println(result); } @@ -274,7 +274,7 @@ public void testDrivingLicense() throws Exception { when(wxService.get(anyString(), anyString())).thenReturn(returnJson); final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService); - final WxMpOcrDrivingLicenseResult result = wxMpOcrService.drivingLicense("abc"); + final WxOcrDrivingLicenseResult result = wxMpOcrService.drivingLicense("abc"); assertThat(result).isNotNull(); System.out.println(result); } @@ -324,7 +324,7 @@ public void testBizLicense() throws Exception { when(wxService.get(anyString(), anyString())).thenReturn(returnJson); final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService); - final WxMpOcrBizLicenseResult result = wxMpOcrService.bizLicense("abc"); + final WxOcrBizLicenseResult result = wxMpOcrService.bizLicense("abc"); assertThat(result).isNotNull(); System.out.println(result); } @@ -386,7 +386,7 @@ public void testComm() throws Exception { when(wxService.get(anyString(), anyString())).thenReturn(returnJson); final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService); - final WxMpOcrCommResult result = wxMpOcrService.comm("abc"); + final WxOcrCommResult result = wxMpOcrService.comm("abc"); assertThat(result).isNotNull(); System.out.println(result); } diff --git a/weixin-java-open/pom.xml b/weixin-java-open/pom.xml index 719ea23e52..ed551cb399 100644 --- a/weixin-java-open/pom.xml +++ b/weixin-java-open/pom.xml @@ -7,7 +7,7 @@ com.github.binarywang wx-java - 3.8.3.B + 3.8.4.B weixin-java-open diff --git a/weixin-java-pay/pom.xml b/weixin-java-pay/pom.xml index b14258ed0a..e199395a10 100644 --- a/weixin-java-pay/pom.xml +++ b/weixin-java-pay/pom.xml @@ -5,7 +5,7 @@ com.github.binarywang wx-java - 3.8.3.B + 3.8.4.B 4.0.0 diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java index 45d0f2be82..3500ad41ef 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java @@ -74,6 +74,8 @@ public ProfitSharingReceiverResult removeReceiver(ProfitSharingReceiverRequest r @Override public ProfitSharingQueryResult profitSharingQuery(ProfitSharingQueryRequest request) throws WxPayException { + request.setAppid(null); + request.checkAndSign(this.payService.getConfig()); String url = this.payService.getPayBaseUrl() + "/pay/profitsharingquery";