From 9bbdc3b2a00ef9cc095cc192f4de51a9192e97a8 Mon Sep 17 00:00:00 2001 From: Daniel Qian Date: Fri, 11 Sep 2015 09:10:43 +0800 Subject: [PATCH 1/7] promote to 1.3.1-SNAPSHOT --- pom.xml | 2 +- weixin-java-common/pom.xml | 2 +- weixin-java-cp/pom.xml | 2 +- weixin-java-mp/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 40e2f2f2..a8e650b2 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 me.chanjar weixin-java-parent - 1.3.0 + 1.3.1-SNAPSHOT pom WeiXin Java Tools - Parent 微信公众号、企业号上级POM diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml index a8d1da30..8b61c209 100644 --- a/weixin-java-common/pom.xml +++ b/weixin-java-common/pom.xml @@ -6,7 +6,7 @@ me.chanjar weixin-java-parent - 1.3.0 + 1.3.1-SNAPSHOT weixin-java-common diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml index d770a4c2..91188cda 100644 --- a/weixin-java-cp/pom.xml +++ b/weixin-java-cp/pom.xml @@ -6,7 +6,7 @@ me.chanjar weixin-java-parent - 1.3.0 + 1.3.1-SNAPSHOT weixin-java-cp diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml index 48999b06..3de43835 100644 --- a/weixin-java-mp/pom.xml +++ b/weixin-java-mp/pom.xml @@ -6,7 +6,7 @@ me.chanjar weixin-java-parent - 1.3.0 + 1.3.1-SNAPSHOT weixin-java-mp WeiXin Java Tools - MP From a6db21fbc8f886673b9090900771bacf1546d33c Mon Sep 17 00:00:00 2001 From: Daniel Qian Date: Fri, 11 Sep 2015 14:04:34 +0800 Subject: [PATCH 2/7] fix #207 --- .../me/chanjar/weixin/mp/util/json/WxMpUserGsonAdapter.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserGsonAdapter.java index 9ffb41a0..0b80e90a 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserGsonAdapter.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserGsonAdapter.java @@ -19,7 +19,10 @@ public class WxMpUserGsonAdapter implements JsonDeserializer { public WxMpUser deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { JsonObject o = json.getAsJsonObject(); WxMpUser wxMpUser = new WxMpUser(); - wxMpUser.setSubscribe(new Integer(0).equals(GsonHelper.getInteger(o, "subscribe")) ? false : true); + Integer subscribe = GsonHelper.getInteger(o, "subscribe"); + if (subscribe != null) { + wxMpUser.setSubscribe(new Integer(0).equals(subscribe) ? false : true); + } wxMpUser.setCity(GsonHelper.getString(o, "city")); wxMpUser.setCountry(GsonHelper.getString(o, "country")); wxMpUser.setHeadImgUrl(GsonHelper.getString(o, "headimgurl")); From c722496167ba594f5e89190b50535809f331188b Mon Sep 17 00:00:00 2001 From: Daniel Qian Date: Mon, 14 Sep 2015 12:35:39 +0800 Subject: [PATCH 3/7] #204 --- .../java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java index 6e616284..1263c9a1 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java @@ -634,8 +634,9 @@ public class WxMpServiceImpl implements WxMpService { param.addProperty("end_date", SIMPLE_DATE_FORMAT.format(endDate)); String responseContent = post(url, param.toString()); JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); - return WxMpGsonBuilder.INSTANCE.create().fromJson(tmpJsonElement.getAsJsonObject().get("list"), new TypeToken>() { - }.getType()); + return WxMpGsonBuilder.INSTANCE.create().fromJson(tmpJsonElement.getAsJsonObject().get("list"), + new TypeToken>() { + }.getType()); } @Override @@ -695,7 +696,7 @@ public class WxMpServiceImpl implements WxMpService { throw new RuntimeException("微信服务端异常,超出重试次数"); } - protected T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException { + protected synchronized T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException { if (uri.indexOf("access_token=") != -1) { throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri); } From a25d2edc2fe2fd4706b5de95799d51cdf5fa4e89 Mon Sep 17 00:00:00 2001 From: Daniel Qian Date: Mon, 14 Sep 2015 12:38:29 +0800 Subject: [PATCH 4/7] =?UTF-8?q?issue=20#204,=20=E5=9B=A0=E4=B8=BAgetAccess?= =?UTF-8?q?Token()=E6=96=B9=E6=B3=95=E5=8F=AF=E8=83=BD=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=E6=95=B0=E6=8D=AE=EF=BC=8C=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E5=9C=A8executeInternal=E5=86=85=E9=83=A8=E5=AE=B9=E6=98=93?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=20=E6=97=A0=E9=99=90=E9=80=92=E5=BD=92?= =?UTF-8?q?=E4=BA=A7=E7=94=9FStackoverflowException?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java index 7b95c32c..3b9e8fe7 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java @@ -555,7 +555,7 @@ public class WxCpServiceImpl implements WxCpService { throw new RuntimeException("微信服务端异常,超出重试次数"); } - protected T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException { + protected synchronized T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException { if (uri.indexOf("access_token=") != -1) { throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri); } From fe8c70849a4f3868944be151ce7ba6aab46f0ee3 Mon Sep 17 00:00:00 2001 From: Daniel Qian Date: Sat, 3 Oct 2015 10:46:27 +0800 Subject: [PATCH 5/7] =?UTF-8?q?fix=20#211=20=E4=B8=8A=E4=BC=A0=E7=B4=A0?= =?UTF-8?q?=E6=9D=90=E6=97=B6=E5=A6=82=E6=9E=9C=E6=96=87=E4=BB=B6=E5=90=8D?= =?UTF-8?q?=E6=98=AF=E4=B8=AD=E6=96=87=E4=BC=9A=E4=B9=B1=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin/common/util/http/MediaUploadRequestExecutor.java | 2 ++ .../weixin/mp/util/http/MaterialUploadRequestExecutor.java | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaUploadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaUploadRequestExecutor.java index c44ceea7..ce1cca01 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaUploadRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaUploadRequestExecutor.java @@ -11,6 +11,7 @@ import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import me.chanjar.weixin.common.bean.result.WxError; @@ -35,6 +36,7 @@ public class MediaUploadRequestExecutor implements RequestExecutor form = material.getForm(); if (material.getForm() != null) { multipartEntityBuilder.addTextBody("description", WxGsonBuilder.create().toJson(form)); From cc3714c59996676ebce82384bfa63602c749dacc Mon Sep 17 00:00:00 2001 From: Kane Zhu Date: Wed, 14 Oct 2015 16:36:55 +0800 Subject: [PATCH 6/7] Improve prepay API to support all parameters. --- .../me/chanjar/weixin/mp/api/WxMpService.java | 76 ++++++++++++------- .../weixin/mp/api/WxMpServiceImpl.java | 73 +++++++++++++----- .../mp/bean/result/WxMpPrepayIdResult.java | 27 +++++++ 3 files changed, 130 insertions(+), 46 deletions(-) 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 5c15e89b..b583798e 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 @@ -671,33 +671,57 @@ public interface WxMpService { */ void setMaxRetryTimes(int maxRetryTimes); - /** - * 统一下单(详见http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1) - * 在发起微信支付前,需要调用统一下单接口,获取"预支付交易会话标识" - * @param openId 支付人openId - * @param outTradeNo 商户端对应订单号 - * @param amt 金额(单位元) - * @param body 商品描述 - * @param tradeType 交易类型 JSAPI,NATIVE,APP,WAP - * @param ip 发起支付的客户端IP - * @param notifyUrl 通知地址 - * @return - */ - WxMpPrepayIdResult getPrepayId(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String notifyUrl); + /** + * 统一下单(详见http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1) + * 在发起微信支付前,需要调用统一下单接口,获取"预支付交易会话标识" + * @param openId 支付人openId + * @param outTradeNo 商户端对应订单号 + * @param amt 金额(单位元) + * @param body 商品描述 + * @param tradeType 交易类型 JSAPI,NATIVE,APP,WAP + * @param ip 发起支付的客户端IP + * @param notifyUrl 通知地址 + * @return + * @deprecated Use me.chanjar.weixin.mp.api.WxMpService.getPrepayId(Map) instead + */ + @Deprecated + WxMpPrepayIdResult getPrepayId(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String notifyUrl); - /** - * 该接口调用“统一下单”接口,并拼装JSSDK发起支付请求需要的参数 - * 详见http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E5.8F.91.E8.B5.B7.E4.B8.80.E4.B8.AA.E5.BE.AE.E4.BF.A1.E6.94.AF.E4.BB.98.E8.AF.B7.E6.B1.82 - * @param openId 支付人openId - * @param outTradeNo 商户端对应订单号 - * @param amt 金额(单位元) - * @param body 商品描述 - * @param tradeType 交易类型 JSAPI,NATIVE,APP,WAP - * @param ip 发起支付的客户端IP - * @param notifyUrl 通知地址 - * @return - */ - Map getJSSDKPayInfo(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String notifyUrl); + /** + * 统一下单(详见http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1) + * 在发起微信支付前,需要调用统一下单接口,获取"预支付交易会话标识" + * + * @param parameters + * All required/optional parameters for weixin payment + * @return + * @throws IllegalArgumentException + */ + WxMpPrepayIdResult getPrepayId(Map parameters); + + /** + * 该接口调用“统一下单”接口,并拼装JSSDK发起支付请求需要的参数 + * 详见http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E5.8F.91.E8.B5.B7.E4.B8.80.E4.B8.AA.E5.BE.AE.E4.BF.A1.E6.94.AF.E4.BB.98.E8.AF.B7.E6.B1.82 + * @param parameters + * the required or optional parameters + * @return + */ + Map getJSSDKPayInfo(Map parameters); + + /** + * 该接口调用“统一下单”接口,并拼装JSSDK发起支付请求需要的参数 + * 详见http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E5.8F.91.E8.B5.B7.E4.B8.80.E4.B8.AA.E5.BE.AE.E4.BF.A1.E6.94.AF.E4.BB.98.E8.AF.B7.E6.B1.82 + * @param openId 支付人openId + * @param outTradeNo 商户端对应订单号 + * @param amt 金额(单位元) + * @param body 商品描述 + * @param tradeType 交易类型 JSAPI,NATIVE,APP,WAP + * @param ip 发起支付的客户端IP + * @param notifyUrl 通知地址 + * @return + * @deprecated Use me.chanjar.weixin.mp.api.WxMpService.getJSSDKPayInfo(Map) instead + */ + @Deprecated + Map getJSSDKPayInfo(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String notifyUrl); /** * 该接口提供所有微信支付订单的查询,当支付通知处理异常戒丢失的情冴,商户可以通过该接口查询订单支付状态。 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java index 1263c9a1..da4252fd 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java @@ -11,6 +11,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.SortedMap; import java.util.TreeMap; import java.util.UUID; @@ -777,35 +778,37 @@ public class WxMpServiceImpl implements WxMpService { @Override public WxMpPrepayIdResult getPrepayId(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String callbackUrl) { - String nonce_str = System.currentTimeMillis() + ""; - - SortedMap packageParams = new TreeMap(); + Map packageParams = new HashMap(); packageParams.put("appid", wxMpConfigStorage.getAppId()); packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); - packageParams.put("nonce_str", nonce_str); packageParams.put("body", body); packageParams.put("out_trade_no", outTradeNo); - packageParams.put("total_fee", (int) (amt * 100) + ""); packageParams.put("spbill_create_ip", ip); packageParams.put("notify_url", callbackUrl); packageParams.put("trade_type", tradeType); packageParams.put("openid", openId); + return getPrepayId(packageParams); + } + + public WxMpPrepayIdResult getPrepayId(final Map parameters) { + String nonce_str = System.currentTimeMillis() + ""; + + final SortedMap packageParams = new TreeMap(parameters); + packageParams.put("appid", wxMpConfigStorage.getAppId()); + packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); + packageParams.put("nonce_str", nonce_str); + checkParameters(packageParams); + String sign = WxCryptUtil.createSign(packageParams, wxMpConfigStorage.getPartnerKey()); - String xml = "" + - "" + wxMpConfigStorage.getAppId() + "" + - "" + wxMpConfigStorage.getPartnerId() + "" + - "" + nonce_str + "" + - "" + sign + "" + - "" + - "" + outTradeNo + "" + - "" + packageParams.get("total_fee") + "" + - "" + ip + "" + - "" + callbackUrl + "" + - "" + tradeType + "" + - "" + openId + "" + - ""; + packageParams.put("sign", sign); + + StringBuilder request = new StringBuilder(""); + for (Entry para : packageParams.entrySet()) { + request.append(String.format("<%s>%s", para.getKey(), para.getValue(), para.getKey())); + } + request.append(""); HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/pay/unifiedorder"); if (httpProxy != null) { @@ -813,7 +816,7 @@ public class WxMpServiceImpl implements WxMpService { httpPost.setConfig(config); } - StringEntity entity = new StringEntity(xml, Consts.UTF_8); + StringEntity entity = new StringEntity(request.toString(), Consts.UTF_8); httpPost.setEntity(entity); try { CloseableHttpResponse response = getHttpclient().execute(httpPost); @@ -828,9 +831,39 @@ public class WxMpServiceImpl implements WxMpService { return new WxMpPrepayIdResult(); } + final String[] REQUIRED_ORDER_PARAMETERS = new String[] { "appid", "mch_id", "body", "out_trade_no", "total_fee", "spbill_create_ip", "notify_url", + "trade_type", }; + + private void checkParameters(Map parameters) { + for (String para : REQUIRED_ORDER_PARAMETERS) { + if (!parameters.containsKey(para)) + throw new IllegalArgumentException("Reqiured argument '" + para + "' is missing."); + } + if ("JSAPI".equals(parameters.get("trade_type")) && !parameters.containsKey("openid")) + throw new IllegalArgumentException("Reqiured argument 'openid' is missing when trade_type is 'JSAPI'."); + if ("NATIVE".equals(parameters.get("trade_type")) && !parameters.containsKey("product_id")) + throw new IllegalArgumentException("Reqiured argument 'product_id' is missing when trade_type is 'NATIVE'."); + } + @Override public Map getJSSDKPayInfo(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String callbackUrl) { - WxMpPrepayIdResult wxMpPrepayIdResult = getPrepayId(openId, outTradeNo, amt, body, tradeType, ip, callbackUrl); + Map packageParams = new HashMap(); + packageParams.put("appid", wxMpConfigStorage.getAppId()); + packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); + packageParams.put("body", body); + packageParams.put("out_trade_no", outTradeNo); + packageParams.put("total_fee", (int) (amt * 100) + ""); + packageParams.put("spbill_create_ip", ip); + packageParams.put("notify_url", callbackUrl); + packageParams.put("trade_type", tradeType); + packageParams.put("openid", openId); + + return getJSSDKPayInfo(packageParams); + } + + @Override + public Map getJSSDKPayInfo(Map parameters) { + WxMpPrepayIdResult wxMpPrepayIdResult = getPrepayId(parameters); String prepayId = wxMpPrepayIdResult.getPrepay_id(); if (prepayId == null || prepayId.equals("")) { throw new RuntimeException("get prepayid error"); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpPrepayIdResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpPrepayIdResult.java index aa42299a..b5c09b21 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpPrepayIdResult.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpPrepayIdResult.java @@ -22,6 +22,9 @@ public class WxMpPrepayIdResult implements Serializable { private String result_code; private String prepay_id; private String trade_type; + private String err_code; + private String err_code_des; + private String code_url; public String getReturn_code() { return return_code; @@ -94,4 +97,28 @@ public class WxMpPrepayIdResult implements Serializable { public void setTrade_type(String trade_type) { this.trade_type = trade_type; } + + public String getErr_code() { + return err_code; + } + + public void setErr_code(String err_code) { + this.err_code = err_code; + } + + public String getErr_code_des() { + return err_code_des; + } + + public void setErr_code_des(String err_code_des) { + this.err_code_des = err_code_des; + } + + public String getCode_url() { + return code_url; + } + + public void setCode_url(String code_url) { + this.code_url = code_url; + } } From 5e7d1ebbbd5f2b8c4496efa5bdda8d6ee105c3e9 Mon Sep 17 00:00:00 2001 From: Daniel Qian Date: Fri, 16 Oct 2015 10:07:12 +0800 Subject: [PATCH 7/7] upgrade to 1.3.1 --- README.md | 4 ++-- pom.xml | 2 +- weixin-java-common/pom.xml | 2 +- weixin-java-cp/pom.xml | 2 +- weixin-java-mp/pom.xml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a519eaeb..9691368a 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ weixin-java-tools me.chanjar weixin-java-mp - 1.3.0 + 1.3.1 ``` @@ -27,7 +27,7 @@ weixin-java-tools me.chanjar weixin-java-cp - 1.3.0 + 1.3.1 ``` diff --git a/pom.xml b/pom.xml index a8e650b2..01b42407 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 me.chanjar weixin-java-parent - 1.3.1-SNAPSHOT + 1.3.1 pom WeiXin Java Tools - Parent 微信公众号、企业号上级POM diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml index 8b61c209..a8366c7a 100644 --- a/weixin-java-common/pom.xml +++ b/weixin-java-common/pom.xml @@ -6,7 +6,7 @@ me.chanjar weixin-java-parent - 1.3.1-SNAPSHOT + 1.3.1 weixin-java-common diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml index 91188cda..19fd0264 100644 --- a/weixin-java-cp/pom.xml +++ b/weixin-java-cp/pom.xml @@ -6,7 +6,7 @@ me.chanjar weixin-java-parent - 1.3.1-SNAPSHOT + 1.3.1 weixin-java-cp diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml index 3de43835..e4695436 100644 --- a/weixin-java-mp/pom.xml +++ b/weixin-java-mp/pom.xml @@ -6,7 +6,7 @@ me.chanjar weixin-java-parent - 1.3.1-SNAPSHOT + 1.3.1 weixin-java-mp WeiXin Java Tools - MP