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 00f848e31..9385cad46 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 @@ -302,7 +302,7 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH if (isApiSignatureRequired(url)) { // 接口需要签名 log.debug("已经配置接口需要签名,接口{}将走加密访问路径", url); - JsonObject jsonObject = GSON.fromJson(postData, JsonObject.class); + JsonObject jsonObject = GSON.fromJson(postData == null ? "{}" : postData, JsonObject.class); return postWithSignature(url, jsonObject); } else { return execute(SimplePostRequestExecutor.create(this), url, postData); @@ -323,12 +323,12 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH @Override public String post(String url, ToJson obj) throws WxErrorException { - return this.post(url, obj.toJson()); + return this.post(url, obj == null ? "{}" : obj.toJson()); } @Override public String post(String url, JsonObject jsonObject) throws WxErrorException { - return this.post(url, jsonObject.toString()); + return this.post(url, jsonObject == null ? "{}" : jsonObject.toString()); } @Override @@ -845,7 +845,12 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .create(); - JsonObject jsonObject = gson.toJsonTree(obj).getAsJsonObject(); + JsonObject jsonObject; + if (obj == null) { + jsonObject = gson.fromJson("{}", JsonObject.class); + } else { + jsonObject = gson.toJsonTree(obj).getAsJsonObject(); + } return this.postWithSignature(url, jsonObject); } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreBalance.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreBalance.java index 783c76fcd..defc7b275 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreBalance.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreBalance.java @@ -13,7 +13,7 @@ public class WxMaStoreBalance { private String appid; private int allBalance; - private List balanceDetail; + private List balanceDetail; public String getWxStoreId() { return wxStoreId; @@ -39,11 +39,11 @@ public class WxMaStoreBalance { this.allBalance = allBalance; } - public List getBalanceDetail() { + public List getBalanceDetail() { return balanceDetail; } - public void setBalanceDetail(List balanceDetail) { + public void setBalanceDetail(List balanceDetail) { this.balanceDetail = balanceDetail; } @@ -52,7 +52,51 @@ public class WxMaStoreBalance { return ToStringBuilder.reflectionToString(this); } - public static class Detail { + public static class BalanceDetail { + private int balance; + private String serviceTransId; + private String serviceTransName; + private List orderList; + + public int getBalance() { + return balance; + } + + public void setBalance(int balance) { + this.balance = balance; + } + + public String getServiceTransId() { + return serviceTransId; + } + + public void setServiceTransId(String serviceTransId) { + this.serviceTransId = serviceTransId; + } + + public String getServiceTransName() { + return serviceTransName; + } + + public void setServiceTransName(String serviceTransName) { + this.serviceTransName = serviceTransName; + } + + public List getOrderList() { + return orderList; + } + + public void setOrderList(List orderList) { + this.orderList = orderList; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } + + public static class OrderDetail { private String payorderId; private int chargeAmt; private int unusedAmt; diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpleTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpleTest.java index 51ad846e9..9828542a4 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpleTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpleTest.java @@ -8,9 +8,11 @@ import cn.binarywang.wx.miniapp.bean.openapi.WxMiniGetApiQuotaResult; import cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants; import cn.binarywang.wx.miniapp.test.ApiTestModule; import cn.binarywang.wx.miniapp.test.TestConfig; +import com.google.gson.JsonObject; import com.google.inject.Inject; import java.util.ArrayList; import java.util.List; +import me.chanjar.weixin.common.bean.ToJson; import me.chanjar.weixin.common.error.WxErrorException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,6 +37,85 @@ public class WxMaIntracityServiceImpleTest { logger.info("apply 额度剩余 :{}", result.getQuota()); } + @Test + public void testApiGetPostNullData() throws Exception { + try { + wxService.get(WxMaApiUrlConstants.Analysis.GET_USER_PORTRAIT_URL, null); + } catch (NullPointerException npe) { + logger.error("NullPointerException", npe); + fail("遇到空指针 get(url, null)"); + } catch (WxErrorException wxErrorException) { + // 这个是正常的,因为这里的调用没按照接口规则 + } + // 走加密路径url + try { + wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (Object) null); + } catch (NullPointerException npe) { + logger.error("NullPointerException", npe); + fail("遇到空指针 post(url, Object null)"); + } catch (WxErrorException wxErrorException) { + // 这个是正常的,因为这里的调用没按照接口规则 + } + try { + wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (String) null); + } catch (NullPointerException npe) { + logger.error("NullPointerException", npe); + fail("遇到空指针 post(url, String null)"); + } catch (WxErrorException wxErrorException) { + // 这个是正常的,因为这里的调用没按照接口规则 + } + try { + wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (JsonObject) null); + } catch (NullPointerException npe) { + logger.error("NullPointerException", npe); + fail("遇到空指针 post(url, JsonObject null)"); + } catch (WxErrorException wxErrorException) { + // 这个是正常的,因为这里的调用没按照接口规则 + } + try { + wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (ToJson) null); + } catch (NullPointerException npe) { + logger.error("NullPointerException", npe); + fail("遇到空指针 post(url, ToJson null)"); + } catch (WxErrorException wxErrorException) { + // 这个是正常的,因为这里的调用没按照接口规则 + } + + // 不走加密路径URL + try { + wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (Object) null); + } catch (NullPointerException npe) { + logger.error("NullPointerException", npe); + fail("遇到空指针 post(url, Object null)"); + } catch (WxErrorException wxErrorException) { + // 这个是正常的,因为这里的调用没按照接口规则 + } + try { + wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (String) null); + } catch (NullPointerException npe) { + logger.error("NullPointerException", npe); + fail("遇到空指针 post(url, String null)"); + } catch (WxErrorException wxErrorException) { + // 这个是正常的,因为这里的调用没按照接口规则 + } + try { + wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (JsonObject) null); + } catch (NullPointerException npe) { + logger.error("NullPointerException", npe); + fail("遇到空指针 post(url, JsonObject null)"); + } catch (WxErrorException wxErrorException) { + // 这个是正常的,因为这里的调用没按照接口规则 + } + try { + wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (ToJson) null); + } catch (NullPointerException npe) { + logger.error("NullPointerException", npe); + fail("遇到空指针 post(url, ToJson null)"); + } catch (WxErrorException wxErrorException) { + // 这个是正常的,因为这里的调用没按照接口规则 + } + } + @Test public void testApply() throws Exception { logger.debug("testApply");