From 81ebe1a085ddaecfdf1d8aa0602450d8f5445b84 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Wed, 22 Nov 2017 23:10:53 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wxpay/service/impl/WxPayServiceAbstractImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceAbstractImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceAbstractImpl.java index 07c36279..0eccb727 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceAbstractImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceAbstractImpl.java @@ -422,9 +422,9 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { String responseContent = this.post(url, request.toXML(), false); if (responseContent.startsWith("<")) { throw WxPayException.from(WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class)); - } else { - return this.handleBillInformation(responseContent); } + + return this.handleBillInformation(responseContent); } private WxPayBillResult handleBillInformation(String responseContent) { From 20825922ce42788896546d4e0385dbadc48423c5 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Wed, 22 Nov 2017 23:15:18 +0800 Subject: [PATCH 02/13] =?UTF-8?q?#367=20=E5=A2=9E=E5=8A=A0=E5=AF=B9api?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E6=AC=A1=E6=95=B0=E6=B8=85=E9=9B=B6=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/chanjar/weixin/mp/api/WxMpService.java | 25 +++- .../mp/api/impl/WxMpServiceAbstractImpl.java | 7 + .../mp/api/impl/WxMpServiceImplTest.java | 125 +----------------- 3 files changed, 32 insertions(+), 125 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 914c902d..0dd5a66b 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 @@ -5,8 +5,11 @@ import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; import me.chanjar.weixin.common.util.http.RequestExecutor; import me.chanjar.weixin.common.util.http.RequestHttp; -import me.chanjar.weixin.mp.bean.*; -import me.chanjar.weixin.mp.bean.result.*; +import me.chanjar.weixin.mp.bean.WxMpSemanticQuery; +import me.chanjar.weixin.mp.bean.result.WxMpCurrentAutoReplyInfo; +import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken; +import me.chanjar.weixin.mp.bean.result.WxMpSemanticQueryResult; +import me.chanjar.weixin.mp.bean.result.WxMpUser; /** * 微信API的Service @@ -62,6 +65,11 @@ public interface WxMpService { */ String GET_CURRENT_AUTOREPLY_INFO_URL = "https://api.weixin.qq.com/cgi-bin/get_current_autoreply_info"; + /** + * 公众号调用或第三方平台帮公众号调用对公众号的所有api调用(包括第三方帮其调用)次数进行清零 + */ + String CLEAR_QUOTA_URL = "https://api.weixin.qq.com/cgi-bin/clear_quota"; + /** *
    * 验证消息的确来自微信服务器
@@ -219,6 +227,18 @@ public interface WxMpService {
    */
   WxMpCurrentAutoReplyInfo getCurrentAutoReplyInfo() throws WxErrorException;
 
+  /**
+   * 
+   *  公众号调用或第三方平台帮公众号调用对公众号的所有api调用(包括第三方帮其调用)次数进行清零:
+   *  HTTP调用:https://api.weixin.qq.com/cgi-bin/clear_quota?access_token=ACCESS_TOKEN
+   *  接口文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433744592
+   *
+   * 
+ * + * @param appid 公众号的APPID + */ + void clearQuota(String appid) throws WxErrorException; + /** * 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的GET请求 */ @@ -376,6 +396,7 @@ public interface WxMpService { /** * 返回群发消息相关接口方法的实现类对象,以方便调用其各个接口 + * * @return WxMpMassMessageService */ WxMpMassMessageService getMassMessageService(); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceAbstractImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceAbstractImpl.java index 420cb252..54b4c360 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceAbstractImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceAbstractImpl.java @@ -207,6 +207,13 @@ public abstract class WxMpServiceAbstractImpl implements WxMpService, Requ return WxMpCurrentAutoReplyInfo.fromJson(this.get(GET_CURRENT_AUTOREPLY_INFO_URL, null)); } + @Override + public void clearQuota(String appid) throws WxErrorException { + JsonObject o = new JsonObject(); + o.addProperty("appid", appid); + this.post(CLEAR_QUOTA_URL, o.toString()); + } + @Override public String get(String url, String queryParam) throws WxErrorException { return execute(SimpleGetRequestExecutor.create(this), url, queryParam); diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImplTest.java index 9cb9e1d1..89060a6e 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImplTest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImplTest.java @@ -15,7 +15,6 @@ import static org.testng.Assert.*; @Test @Guice(modules = ApiTestModule.class) public class WxMpServiceImplTest { - @Inject private WxMpService wxService; @@ -28,88 +27,8 @@ public class WxMpServiceImplTest { } @Test - public void testCheckSignature() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testGetAccessToken() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testGetAccessTokenBoolean() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testGetJsapiTicket() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testGetJsapiTicketBoolean() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testCreateJsapiSignature() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testCustomMessageSend() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testMassNewsUpload() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testMassVideoUpload() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testMassGroupMessageSend() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testMassOpenIdsMessageSend() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testMassMessagePreview() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testShortUrl() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testSetIndustry() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testGetIndustry() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testSemanticQuery() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testOauth2buildAuthorizationUrl() { - Assert.fail("Not yet implemented"); + public void testClearQuota() throws WxErrorException { + this.wxService.clearQuota(wxService.getWxMpConfigStorage().getAppId()); } @Test @@ -121,44 +40,4 @@ public class WxMpServiceImplTest { System.out.println(qrConnectUrl); } - @Test - public void testOauth2getAccessToken() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testOauth2refreshAccessToken() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testOauth2getUserInfo() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testOauth2validateAccessToken() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testGetCallbackIP() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testGet() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testPost() { - Assert.fail("Not yet implemented"); - } - - @Test - public void testExecute() { - Assert.fail("Not yet implemented"); - } - } From 6180577f65c0935385fb52517775a366e22e4f5b Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Wed, 22 Nov 2017 23:22:10 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E5=A2=9E=E5=8A=A0redis=E7=9A=84configSto?= =?UTF-8?q?rage=E5=AE=9E=E7=8E=B0=E7=9A=84=E6=B3=A8=E9=87=8A=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/chanjar/weixin/cp/config/WxCpJedisConfigStorage.java | 6 +++++- .../me/chanjar/weixin/mp/api/WxMpInRedisConfigStorage.java | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpJedisConfigStorage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpJedisConfigStorage.java index 39b2ae50..5ef99a3c 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpJedisConfigStorage.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpJedisConfigStorage.java @@ -9,7 +9,11 @@ import redis.clients.jedis.JedisPoolConfig; import java.io.File; /** - * Jedis client implementor for wechat config storage + * Jedis client implementor for wechat config storage. + *
+ *    使用说明:本实现仅供参考,并不完整,
+ *    比如为减少项目依赖,未加入redis分布式锁的实现,如有需要请自行实现。
+ * 
* * @author gaigeshen */ diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInRedisConfigStorage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInRedisConfigStorage.java index 3254972c..6974221c 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInRedisConfigStorage.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInRedisConfigStorage.java @@ -5,7 +5,10 @@ import redis.clients.jedis.JedisPool; /** * 基于Redis的微信配置provider - * + *
+ *    使用说明:本实现仅供参考,并不完整,
+ *    比如为减少项目依赖,未加入redis分布式锁的实现,如有需要请自行实现。
+ * 
* @author nickwong */ @SuppressWarnings("hiding") From fa4cc5a9fd72d365bca1adfde74acd450b1cc536 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Wed, 22 Nov 2017 23:48:59 +0800 Subject: [PATCH 04/13] =?UTF-8?q?#380=20=E4=BF=AE=E5=A4=8Dokhttp=E5=92=8Cj?= =?UTF-8?q?odd-http=E5=AE=9E=E7=8E=B0=E7=9A=84=E8=8E=B7=E5=8F=96=E6=B0=B8?= =?UTF-8?q?=E4=B9=85=E7=B4=A0=E6=9D=90=E6=8E=A5=E5=8F=A3=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apache/ApacheMaterialNewsInfoRequestExecutor.java | 5 ++--- .../http/jodd/JoddMaterialNewsInfoRequestExecutor.java | 8 +++++--- .../okhttp/OkhttpMaterialNewsInfoRequestExecutor.java | 5 ++++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/apache/ApacheMaterialNewsInfoRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/apache/ApacheMaterialNewsInfoRequestExecutor.java index fe8dc580..baab51b5 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/apache/ApacheMaterialNewsInfoRequestExecutor.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/apache/ApacheMaterialNewsInfoRequestExecutor.java @@ -1,5 +1,6 @@ package me.chanjar.weixin.mp.util.http.apache; +import com.google.common.collect.ImmutableMap; import me.chanjar.weixin.common.bean.result.WxError; import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.util.http.RequestHttp; @@ -43,9 +44,7 @@ public class ApacheMaterialNewsInfoRequestExecutor httpPost.setConfig(config); } - Map params = new HashMap<>(); - params.put("media_id", materialId); - httpPost.setEntity(new StringEntity(WxGsonBuilder.create().toJson(params))); + httpPost.setEntity(new StringEntity(WxGsonBuilder.create().toJson(ImmutableMap.of("media_id", materialId)))); try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpPost)) { String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); this.logger.debug("响应原始数据:{}", responseContent); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/jodd/JoddMaterialNewsInfoRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/jodd/JoddMaterialNewsInfoRequestExecutor.java index 181a6407..2bce6ee4 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/jodd/JoddMaterialNewsInfoRequestExecutor.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/jodd/JoddMaterialNewsInfoRequestExecutor.java @@ -1,5 +1,6 @@ package me.chanjar.weixin.mp.util.http.jodd; +import com.google.common.collect.ImmutableMap; import jodd.http.HttpConnectionProvider; import jodd.http.HttpRequest; import jodd.http.HttpResponse; @@ -9,6 +10,7 @@ import jodd.util.StringPool; import me.chanjar.weixin.common.bean.result.WxError; import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.util.http.RequestHttp; +import me.chanjar.weixin.common.util.json.WxGsonBuilder; import me.chanjar.weixin.mp.bean.material.WxMpMaterialNews; import me.chanjar.weixin.mp.util.http.MaterialNewsInfoRequestExecutor; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; @@ -28,13 +30,13 @@ public class JoddMaterialNewsInfoRequestExecutor extends MaterialNewsInfoRequest @Override public WxMpMaterialNews execute(String uri, String materialId) throws WxErrorException, IOException { - HttpRequest request = HttpRequest.post(uri); if (requestHttp.getRequestHttpProxy() != null) { requestHttp.getRequestHttpClient().useProxy(requestHttp.getRequestHttpProxy()); } - request.withConnectionProvider(requestHttp.getRequestHttpClient()); - request.query("media_id", materialId); + HttpRequest request = HttpRequest.post(uri) + .withConnectionProvider(requestHttp.getRequestHttpClient()) + .body(WxGsonBuilder.create().toJson(ImmutableMap.of("media_id", materialId))); HttpResponse response = request.send(); response.charset(StringPool.UTF_8); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialNewsInfoRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialNewsInfoRequestExecutor.java index 3f46ab78..e8bd9bee 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialNewsInfoRequestExecutor.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialNewsInfoRequestExecutor.java @@ -1,9 +1,11 @@ package me.chanjar.weixin.mp.util.http.okhttp; +import com.google.common.collect.ImmutableMap; import me.chanjar.weixin.common.bean.result.WxError; import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.util.http.RequestHttp; import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo; +import me.chanjar.weixin.common.util.json.WxGsonBuilder; import me.chanjar.weixin.mp.bean.material.WxMpMaterialNews; import me.chanjar.weixin.mp.util.http.MaterialNewsInfoRequestExecutor; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; @@ -28,7 +30,8 @@ public class OkhttpMaterialNewsInfoRequestExecutor extends MaterialNewsInfoReque //得到httpClient OkHttpClient client = requestHttp.getRequestHttpClient(); - RequestBody requestBody = new FormBody.Builder().add("media_id", materialId).build(); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), + WxGsonBuilder.create().toJson(ImmutableMap.of("media_id", materialId))); Request request = new Request.Builder().url(uri).post(requestBody).build(); Response response = client.newCall(request).execute(); From 41a838ba8dfb5ad1880bf9511b4a9289b88b8ee2 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Thu, 23 Nov 2017 11:39:53 +0800 Subject: [PATCH 05/13] Update readme.md --- readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 48f0aac8..60804890 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -微信支付/公众号/企业号/小程序的Java开发工具包(SDK) +微信支付/开放平台/公众号/企业微信/小程序的Java开发工具包(SDK) --------------------------------- [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.binarywang/weixin-java-parent/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.binarywang/weixin-java-parent) [![Build Status](https://travis-ci.org/Wechat-Group/weixin-java-tools.svg?branch=develop)](https://travis-ci.org/Wechat-Group/weixin-java-tools) @@ -10,6 +10,7 @@ ***新人提示:本项目仅是一个开发工具包(即SDK),未提供Web实现,建议使用maven或gradle引用本项目即可使用本SDK提供的各种功能,详情可参考下文中提到的Demo项目或本项目中的部分单元测试代码;另外微信开发新手请务必阅读[Wiki首页](https://github.com/Wechat-Group/weixin-java-tools/wiki)的常见问题部分,可以少走很多弯路,节省不少时间。*** ## Demo项目列表 +* https://github.com/007gzs/weixin-java-open-demo (开放平台Demo) * https://github.com/binarywang/weixin-java-pay-demo (微信支付Demo) * https://github.com/binarywang/weixin-java-cp-demo (企业号/企业微信Demo) * https://github.com/binarywang/weixin-java-miniapp-demo (微信小程序Demo) From 1875c1b374233ab792b7a2f7ed7078a957e4bb53 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Thu, 23 Nov 2017 12:08:40 +0800 Subject: [PATCH 06/13] =?UTF-8?q?#383=20=E4=BF=AE=E5=A4=8D=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E6=94=AF=E4=BB=98=E6=9F=A5=E8=AF=A2=E4=BB=A3=E9=87=91?= =?UTF-8?q?=E5=88=B8=E4=BF=A1=E6=81=AF=E8=BF=94=E5=9B=9E=E7=9A=84coupon=5F?= =?UTF-8?q?state=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coupon/WxPayCouponInfoQueryResult.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/coupon/WxPayCouponInfoQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/coupon/WxPayCouponInfoQueryResult.java index ad9aceb4..f7d91383 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/coupon/WxPayCouponInfoQueryResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/coupon/WxPayCouponInfoQueryResult.java @@ -21,7 +21,7 @@ import lombok.NoArgsConstructor; public class WxPayCouponInfoQueryResult extends WxPayBaseResult { /** *
-   * 字段名:设备号
+   * 字段名:设备号.
    * 变量名:device_info
    * 是否必填:否
    * 示例值:123456sb
@@ -34,7 +34,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:批次ID
+   * 字段名:批次ID.
    * 变量名:coupon_stock_id
    * 是否必填:是
    * 示例值:1567
@@ -47,7 +47,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:代金券id
+   * 字段名:代金券id.
    * 变量名:coupon_id
    * 是否必填:是
    * 示例值:4242
@@ -60,7 +60,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:代金券面额
+   * 字段名:代金券面额.
    * 变量名:coupon_value
    * 是否必填:是
    * 示例值:4
@@ -73,7 +73,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:代金券使用门槛
+   * 字段名:代金券使用门槛.
    * 变量名:coupon_mininum
    * 是否必填:是
    * 示例值:10
@@ -86,7 +86,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:代金券名称
+   * 字段名:代金券名称.
    * 变量名:coupon_name
    * 是否必填:是
    * 示例值:测试代金券
@@ -99,20 +99,20 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:代金券状态
+   * 字段名:代金券状态.
    * 变量名:coupon_state
    * 是否必填:是
    * 示例值:SENDED
-   * 类型:int
+   * 类型:String
    * 说明:代金券状态:SENDED-可用,USED-已实扣,EXPIRED-已过期
    * 
*/ @XStreamAlias("coupon_state") - private Integer couponState; + private String couponState; /** *
-   * 字段名:代金券描述
+   * 字段名:代金券描述.
    * 变量名:coupon_desc
    * 是否必填:是
    * 示例值:微信支付-代金券
@@ -125,7 +125,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:实际优惠金额
+   * 字段名:实际优惠金额.
    * 变量名:coupon_use_value
    * 是否必填:是
    * 示例值:0
@@ -138,7 +138,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:优惠剩余可用额
+   * 字段名:优惠剩余可用额.
    * 变量名:coupon_remain_value
    * 是否必填:是
    * 示例值:4
@@ -151,7 +151,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:生效开始时间
+   * 字段名:生效开始时间.
    * 变量名:begin_time
    * 是否必填:是
    * 示例值:1943787483
@@ -164,7 +164,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:生效结束时间
+   * 字段名:生效结束时间.
    * 变量名:end_time
    * 是否必填:是
    * 示例值:1943787484
@@ -177,7 +177,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:发放时间
+   * 字段名:发放时间.
    * 变量名:send_time
    * 是否必填:是
    * 示例值:1943787420
@@ -190,7 +190,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:消耗方商户id
+   * 字段名:消耗方商户id.
    * 变量名:consumer_mch_id
    * 是否必填:否
    * 示例值:10000098
@@ -203,7 +203,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:发放来源
+   * 字段名:发放来源.
    * 变量名:send_source
    * 是否必填:是
    * 示例值:FULL_SEND
@@ -216,7 +216,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult {
 
   /**
    * 
-   * 字段名:是否允许部分使用
+   * 字段名:是否允许部分使用.
    * 变量名:is_partial_use
    * 是否必填:否
    * 示例值:1

From 6d566ced44a352e4ecb5ad7dbacc80536d67ca21 Mon Sep 17 00:00:00 2001
From: Binary Wang 
Date: Thu, 23 Nov 2017 12:16:34 +0800
Subject: [PATCH 07/13] =?UTF-8?q?=E5=8F=91=E5=B8=83=E4=B8=B4=E6=97=B6?=
 =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=89=88=E6=9C=AC2.8.9.BETA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pom.xml                     | 2 +-
 weixin-java-common/pom.xml  | 2 +-
 weixin-java-cp/pom.xml      | 2 +-
 weixin-java-miniapp/pom.xml | 2 +-
 weixin-java-mp/pom.xml      | 2 +-
 weixin-java-open/pom.xml    | 2 +-
 weixin-java-pay/pom.xml     | 2 +-
 7 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/pom.xml b/pom.xml
index 54f52b02..c6401735 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
   4.0.0
   com.github.binarywang
   weixin-java-parent
-  2.8.8.BETA
+  2.8.9.BETA
   pom
   WeiXin Java Tools - Parent
   微信公众号、企业号上级POM
diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml
index 25dc5bd1..aa1e4c35 100644
--- a/weixin-java-common/pom.xml
+++ b/weixin-java-common/pom.xml
@@ -7,7 +7,7 @@
   
     com.github.binarywang
     weixin-java-parent
-    2.8.8.BETA
+    2.8.9.BETA
   
 
   weixin-java-common
diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml
index 96dba9c9..4dbab6b6 100644
--- a/weixin-java-cp/pom.xml
+++ b/weixin-java-cp/pom.xml
@@ -7,7 +7,7 @@
   
     com.github.binarywang
     weixin-java-parent
-    2.8.8.BETA
+    2.8.9.BETA
   
 
   weixin-java-cp
diff --git a/weixin-java-miniapp/pom.xml b/weixin-java-miniapp/pom.xml
index b7e2f1cb..8638ea3b 100644
--- a/weixin-java-miniapp/pom.xml
+++ b/weixin-java-miniapp/pom.xml
@@ -7,7 +7,7 @@
   
     com.github.binarywang
     weixin-java-parent
-    2.8.8.BETA
+    2.8.9.BETA
   
   weixin-java-miniapp
   WeiXin Java Tools - MiniApp
diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml
index 81bf0008..876386fb 100644
--- a/weixin-java-mp/pom.xml
+++ b/weixin-java-mp/pom.xml
@@ -7,7 +7,7 @@
   
     com.github.binarywang
     weixin-java-parent
-    2.8.8.BETA
+    2.8.9.BETA
   
   weixin-java-mp
   WeiXin Java Tools - MP
diff --git a/weixin-java-open/pom.xml b/weixin-java-open/pom.xml
index b52c5781..1eb63805 100644
--- a/weixin-java-open/pom.xml
+++ b/weixin-java-open/pom.xml
@@ -8,7 +8,7 @@
   
     com.github.binarywang
     weixin-java-parent
-    2.8.8.BETA
+    2.8.9.BETA
   
   weixin-java-open
   WeiXin Java Tools - Open
diff --git a/weixin-java-pay/pom.xml b/weixin-java-pay/pom.xml
index 47b3f4da..d1208763 100644
--- a/weixin-java-pay/pom.xml
+++ b/weixin-java-pay/pom.xml
@@ -5,7 +5,7 @@
   
     weixin-java-parent
     com.github.binarywang
-    2.8.8.BETA
+    2.8.9.BETA
   
   4.0.0
 

From 920a2f7e13db0d2e23d7695085bbbd4c09a3a4a2 Mon Sep 17 00:00:00 2001
From: axeon <23231269@qq.com>
Date: Fri, 24 Nov 2017 12:25:20 +0800
Subject: [PATCH 08/13] =?UTF-8?q?#384=20=E5=8E=BB=E6=8E=89executeInternal?=
 =?UTF-8?q?=E4=B8=8A=E4=BC=9A=E5=AF=BC=E8=87=B4=E6=80=A7=E8=83=BD=E9=97=AE?=
 =?UTF-8?q?=E9=A2=98=E7=9A=84=E5=90=8C=E6=AD=A5=E4=BB=A3=E7=A0=81synchroni?=
 =?UTF-8?q?zed?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../me/chanjar/weixin/cp/api/impl/WxCpServiceAbstractImpl.java  | 2 +-
 .../java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java | 2 +-
 .../me/chanjar/weixin/mp/api/impl/WxMpServiceAbstractImpl.java  | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpServiceAbstractImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpServiceAbstractImpl.java
index 83bc5e13..aac09e34 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpServiceAbstractImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpServiceAbstractImpl.java
@@ -381,7 +381,7 @@ public abstract class WxCpServiceAbstractImpl implements WxCpService, Requ
     throw new RuntimeException("微信服务端异常,超出重试次数");
   }
 
-  protected synchronized  T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException {
+  protected  T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException {
     if (uri.contains("access_token=")) {
       throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri);
     }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java
index 9cfa7efa..df3fad8e 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java
@@ -181,7 +181,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException {
+  public  T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException {
     if (uri.contains("access_token=")) {
       throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri);
     }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceAbstractImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceAbstractImpl.java
index 54b4c360..d81018da 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceAbstractImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceAbstractImpl.java
@@ -259,7 +259,7 @@ public abstract class WxMpServiceAbstractImpl implements WxMpService, Requ
     throw new RuntimeException("微信服务端异常,超出重试次数");
   }
 
-  public synchronized  T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException {
+  public  T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException {
     if (uri.contains("access_token=")) {
       throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri);
     }

From 93ba02e20df24a32380d4f2601aa27d1da688f40 Mon Sep 17 00:00:00 2001
From: Binary Wang 
Date: Sat, 25 Nov 2017 20:36:51 +0800
Subject: [PATCH 09/13] Update readme.md

---
 readme.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/readme.md b/readme.md
index 60804890..5a7199e5 100644
--- a/readme.md
+++ b/readme.md
@@ -10,13 +10,13 @@
 ***新人提示:本项目仅是一个开发工具包(即SDK),未提供Web实现,建议使用maven或gradle引用本项目即可使用本SDK提供的各种功能,详情可参考下文中提到的Demo项目或本项目中的部分单元测试代码;另外微信开发新手请务必阅读[Wiki首页](https://github.com/Wechat-Group/weixin-java-tools/wiki)的常见问题部分,可以少走很多弯路,节省不少时间。***
 
 ## Demo项目列表
-* https://github.com/007gzs/weixin-java-open-demo (开放平台Demo)
 * https://github.com/binarywang/weixin-java-pay-demo (微信支付Demo) 
 * https://github.com/binarywang/weixin-java-cp-demo (企业号/企业微信Demo)
 * https://github.com/binarywang/weixin-java-miniapp-demo (微信小程序Demo) 
 * https://github.com/binarywang/weixin-java-mp-demo (公众号Demo,使用Spring MVC实现)
 * https://github.com/binarywang/weixin-java-mp-demo-springboot (公众号Demo,使用Spring Boot实现)
 * https://github.com/binarywang/weixin-java-mp-multi-demo (支持多公众号)
+* https://github.com/Wechat-Group/weixin-java-open-demo (开放平台Demo)
 * https://github.com/wechat-group/weixin-java-tools-springmvc (公众号Demo,内含部分微信支付代码)
 
 ---------------------------------
@@ -24,7 +24,7 @@
 1. 最新更新:**2017-9-3 发布[【2.8.0正式版】](https://github.com/Wechat-Group/weixin-java-tools/releases)**!
 1. 开源中国本项目的首页地址:https://www.oschina.net/p/weixin-java-tools-new (欢迎大家积极留言评分 🙂)
 1. SDK详细开发文档请查阅 [【Wiki】](https://github.com/wechat-group/weixin-java-tools/wiki),部分文档可能未能及时更新,如有发现,可以及时上报或者自行修改。
-1. 各个模块的Javadoc可以在线查看(有可能是最新的测试版本的,请注意观察版本号):[weixin-java-miniapp](https://binarywang.github.io/weixin-java-miniapp-javadoc/)、[weixin-java-pay](https://binarywang.github.io/weixin-java-pay-javadoc/)、[weixin-java-mp](https://binarywang.github.io/weixin-java-mp-javadoc/)、[weixin-java-common](https://binarywang.github.io/weixin-java-common-javadoc/)、[weixin-java-cp](https://binarywang.github.io/weixin-java-cp-javadoc/)
+1. 各个模块的Javadoc可以在线查看(有可能是最新的测试版本的,请注意观察版本号):[weixin-java-miniapp](https://binarywang.github.io/weixin-java-miniapp-javadoc/)、[weixin-java-pay](https://binarywang.github.io/weixin-java-pay-javadoc/)、[weixin-java-mp](https://binarywang.github.io/weixin-java-mp-javadoc/)、[weixin-java-common](https://binarywang.github.io/weixin-java-common-javadoc/)、[weixin-java-cp](https://binarywang.github.io/weixin-java-cp-javadoc/)、[weixin-java-open](https://binarywang.github.io/weixin-java-open-javadoc/)
 1. 本SDK要求的最低JDK版本是7,还在使用JDK6的用户请参考[【此项目】]( https://github.com/binarywang/weixin-java-tools-for-jdk6) ,而其他更早的JDK版本则需要自己改造实现。
 1. 如有新功能需求,发现BUG,或者由于微信官方接口调整导致的代码问题,可以直接在[【Issues】](https://github.com/Wechat-Group/weixin-java-tools/issues)页提出issue,便于讨论追踪问题;
 1. 如果想贡献代码,请阅读[【代码贡献指南】](contribution.md);
@@ -42,7 +42,7 @@
 ## 版本说明
 1. 本项目定为大约每两个月发布一次正式版,版本号格式为X.X.0(如2.1.0,2.2.0等),遇到重大问题需修复会及时提交新版本,欢迎大家随时提交Pull Request;
 1. BUG修复和新特性一般会先发布成小版本作为临时测试版本(如2.4.5.BETA,2.4.6.BETA等,即尾号不为0,并添加BETA字样,以区别于正式版);
-1. 目前最新版本号为 [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.binarywang/weixin-java-parent/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.binarywang/weixin-java-parent) ,也可以通过访问链接 [【微信支付】](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.github.binarywang%22%20AND%20a%3A%22weixin-java-pay%22) 、[【微信小程序】](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.github.binarywang%22%20AND%20a%3A%22weixin-java-miniapp%22) 、[【公众号】](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.github.binarywang%22%20AND%20a%3A%22weixin-java-mp%22) 、[【企业号】](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.github.binarywang%22%20AND%20a%3A%22weixin-java-cp%22)
+1. 目前最新版本号为 [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.binarywang/weixin-java-parent/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.binarywang/weixin-java-parent) ,也可以通过访问链接 [【微信支付】](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.github.binarywang%22%20AND%20a%3A%22weixin-java-pay%22) 、[【微信小程序】](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.github.binarywang%22%20AND%20a%3A%22weixin-java-miniapp%22) 、[【公众号】](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.github.binarywang%22%20AND%20a%3A%22weixin-java-mp%22) 、[【企业微信】](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.github.binarywang%22%20AND%20a%3A%22weixin-java-cp%22)、[【开放平台】](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.github.binarywang%22%20AND%20a%3A%22weixin-java-open%22)
 分别查看所有最新的版本。 
 
 ---------------------------------

From ed2cec8d1a85f74cacb587aa2d30f3945e6019bd Mon Sep 17 00:00:00 2001
From: Binary Wang 
Date: Sat, 25 Nov 2017 20:48:10 +0800
Subject: [PATCH 10/13] Update readme.md

---
 readme.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/readme.md b/readme.md
index 5a7199e5..e6e04c99 100644
--- a/readme.md
+++ b/readme.md
@@ -17,7 +17,7 @@
 * https://github.com/binarywang/weixin-java-mp-demo-springboot (公众号Demo,使用Spring Boot实现)
 * https://github.com/binarywang/weixin-java-mp-multi-demo (支持多公众号)
 * https://github.com/Wechat-Group/weixin-java-open-demo (开放平台Demo)
-* https://github.com/wechat-group/weixin-java-tools-springmvc (公众号Demo,内含部分微信支付代码)
+* https://github.com/Wechat-Group/weixin-java-tools-springmvc (公众号Demo,内含部分微信支付代码)
 
 ---------------------------------
 ### 重要提示信息(部分为新手必读):

From 3be10487c2fca7f6fdf5a667a61a0c6a5440e9ad Mon Sep 17 00:00:00 2001
From: Binary Wang 
Date: Mon, 27 Nov 2017 22:21:21 +0800
Subject: [PATCH 11/13] Update readme.md

---
 readme.md | 42 +++++++-----------------------------------
 1 file changed, 7 insertions(+), 35 deletions(-)

diff --git a/readme.md b/readme.md
index e6e04c99..869d8ee0 100644
--- a/readme.md
+++ b/readme.md
@@ -53,44 +53,16 @@
 * Coding: https://git.coding.net/binarywang/weixin-java-tools.git
 
 ---------------------------------
-## Maven 最新正式版本
-
-* 微信小程序:
-
+## Maven 引用
 ```xml
 
   com.github.binarywang
-  weixin-java-miniapp
+  (按模块不同)
   2.8.0
 
 ```
-
-* 微信支付:
-
-```xml
-
-  com.github.binarywang
-  weixin-java-pay
-  2.8.0
-
-```
-
-* 公众号(订阅号及服务号):
-
-```xml
-
-  com.github.binarywang
-  weixin-java-mp
-  2.8.0
-
-```
-
-* 企业号:
-
-```xml
-
-  com.github.binarywang
-  weixin-java-cp
-  2.8.0
-
-```
+* 各模块的artifactId:
+  - 微信小程序:`weixin-java-miniapp`
+  - 微信支付:`weixin-java-pay`
+  - 公众号(订阅号及服务号):`weixin-java-mp`
+  - 企业号:`weixin-java-cp`

From 919a534962756a0d1447ddeb4bf84f22e4e3da0f Mon Sep 17 00:00:00 2001
From: Binary Wang 
Date: Fri, 1 Dec 2017 19:01:35 +0800
Subject: [PATCH 12/13] =?UTF-8?q?=E5=8F=91=E5=B8=832.9.0=E6=AD=A3=E5=BC=8F?=
 =?UTF-8?q?=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pom.xml                     | 2 +-
 weixin-java-common/pom.xml  | 2 +-
 weixin-java-cp/pom.xml      | 2 +-
 weixin-java-miniapp/pom.xml | 2 +-
 weixin-java-mp/pom.xml      | 2 +-
 weixin-java-open/pom.xml    | 2 +-
 weixin-java-pay/pom.xml     | 2 +-
 7 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/pom.xml b/pom.xml
index c6401735..6a683db1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
   4.0.0
   com.github.binarywang
   weixin-java-parent
-  2.8.9.BETA
+  2.9.0
   pom
   WeiXin Java Tools - Parent
   微信公众号、企业号上级POM
diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml
index aa1e4c35..7dcff6ad 100644
--- a/weixin-java-common/pom.xml
+++ b/weixin-java-common/pom.xml
@@ -7,7 +7,7 @@
   
     com.github.binarywang
     weixin-java-parent
-    2.8.9.BETA
+    2.9.0
   
 
   weixin-java-common
diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml
index 4dbab6b6..f589bbe0 100644
--- a/weixin-java-cp/pom.xml
+++ b/weixin-java-cp/pom.xml
@@ -7,7 +7,7 @@
   
     com.github.binarywang
     weixin-java-parent
-    2.8.9.BETA
+    2.9.0
   
 
   weixin-java-cp
diff --git a/weixin-java-miniapp/pom.xml b/weixin-java-miniapp/pom.xml
index 8638ea3b..d10de236 100644
--- a/weixin-java-miniapp/pom.xml
+++ b/weixin-java-miniapp/pom.xml
@@ -7,7 +7,7 @@
   
     com.github.binarywang
     weixin-java-parent
-    2.8.9.BETA
+    2.9.0
   
   weixin-java-miniapp
   WeiXin Java Tools - MiniApp
diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml
index 876386fb..a135b6dd 100644
--- a/weixin-java-mp/pom.xml
+++ b/weixin-java-mp/pom.xml
@@ -7,7 +7,7 @@
   
     com.github.binarywang
     weixin-java-parent
-    2.8.9.BETA
+    2.9.0
   
   weixin-java-mp
   WeiXin Java Tools - MP
diff --git a/weixin-java-open/pom.xml b/weixin-java-open/pom.xml
index 1eb63805..5dfd4308 100644
--- a/weixin-java-open/pom.xml
+++ b/weixin-java-open/pom.xml
@@ -8,7 +8,7 @@
   
     com.github.binarywang
     weixin-java-parent
-    2.8.9.BETA
+    2.9.0
   
   weixin-java-open
   WeiXin Java Tools - Open
diff --git a/weixin-java-pay/pom.xml b/weixin-java-pay/pom.xml
index d1208763..f245bff2 100644
--- a/weixin-java-pay/pom.xml
+++ b/weixin-java-pay/pom.xml
@@ -5,7 +5,7 @@
   
     weixin-java-parent
     com.github.binarywang
-    2.8.9.BETA
+    2.9.0
   
   4.0.0
 

From f7dab9267e730a37104878e28c88bae8314a4053 Mon Sep 17 00:00:00 2001
From: Binary Wang 
Date: Sat, 2 Dec 2017 15:07:39 +0800
Subject: [PATCH 13/13] =?UTF-8?q?#389=20=E5=BE=AE=E4=BF=A1=E6=94=AF?=
 =?UTF-8?q?=E4=BB=98=E6=9F=A5=E8=AF=A2=E9=80=80=E6=AC=BE=E8=BF=94=E5=9B=9E?=
 =?UTF-8?q?=E7=BB=93=E6=9E=9C=E4=B8=AD=E5=A2=9E=E5=8A=A0=E9=80=80=E6=AC=BE?=
 =?UTF-8?q?=E6=88=90=E5=8A=9F=E6=97=B6=E9=97=B4=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../bean/request/WxPayRefundRequest.java      | 136 ++++----
 .../bean/result/WxPayRefundQueryResult.java   | 292 ++++++++++--------
 2 files changed, 223 insertions(+), 205 deletions(-)

diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundRequest.java
index 1a3b85e8..43bc51b4 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundRequest.java
@@ -14,13 +14,6 @@ import java.util.Arrays;
 /**
  * 
  * 微信支付-申请退款请求参数
- * 注释中各行每个字段描述对应如下:
- * 
  • 字段名 - *
  • 变量名 - *
  • 是否必填 - *
  • 类型 - *
  • 示例值 - *
  • 描述 * Created by Binary Wang on 2016-10-08. *
  • * @@ -34,53 +27,52 @@ import java.util.Arrays; @XStreamAlias("xml") public class WxPayRefundRequest extends WxPayBaseRequest { private static final String[] REFUND_ACCOUNT = new String[]{ - RefundAccountSource.RECHARGE_FUNDS, - RefundAccountSource.UNSETTLED_FUNDS - }; + RefundAccountSource.RECHARGE_FUNDS, RefundAccountSource.UNSETTLED_FUNDS}; + /** *
    -   * 设备号
    -   * device_info
    -   * 否
    -   * String(32)
    -   * 13467007045764
    -   * 终端设备号
    +   * 字段名:设备号.
    +   * 变量名:device_info
    +   * 是否必填:否
    +   * 类型:String(32)
    +   * 示例值:13467007045764
    +   * 描述:终端设备号
        * 
    */ @XStreamAlias("device_info") private String deviceInfo; /** *
    -   * 微信订单号
    -   * transaction_id
    -   * 跟out_trade_no二选一
    -   * String(28)
    -   * 1217752501201400000000000000
    -   * 微信生成的订单号,在支付通知中有返回
    +   * 字段名:微信订单号.
    +   * 变量名:transaction_id
    +   * 是否必填:跟out_trade_no二选一
    +   * 类型:String(28)
    +   * 示例值:1217752501201400000000000000
    +   * 描述:微信生成的订单号,在支付通知中有返回
        * 
    */ @XStreamAlias("transaction_id") private String transactionId; /** *
    -   * 商户订单号
    -   * out_trade_no
    -   * 跟transaction_id二选一
    -   * String(32)
    -   * 1217752501201400000000000000
    -   * 商户侧传给微信的订单号
    +   * 字段名:商户订单号.
    +   * 变量名:out_trade_no
    +   * 是否必填:跟transaction_id二选一
    +   * 类型:String(32)
    +   * 示例值:1217752501201400000000000000
    +   * 描述:商户侧传给微信的订单号
        * 
    */ @XStreamAlias("out_trade_no") private String outTradeNo; /** *
    -   * 商户退款单号
    -   * out_refund_no
    -   * 是
    -   * String(32)
    -   * 1217752501201400000000000000
    -   * 商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
    +   * 字段名:商户退款单号.
    +   * 变量名:out_refund_no
    +   * 是否必填:是
    +   * 类型:String(32)
    +   * 示例值:1217752501201400000000000000
    +   * 描述:商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
        * 
    */ @Required @@ -88,12 +80,12 @@ public class WxPayRefundRequest extends WxPayBaseRequest { private String outRefundNo; /** *
    -   * 订单金额
    -   * total_fee
    -   * 是
    -   * Int
    -   * 100
    -   * 订单总金额,单位为分,只能为整数,详见支付金额
    +   * 字段名:订单金额.
    +   * 变量名:total_fee
    +   * 是否必填:是
    +   * 类型:Int
    +   * 示例值:100
    +   * 描述:订单总金额,单位为分,只能为整数,详见支付金额
        * 
    */ @Required @@ -101,12 +93,12 @@ public class WxPayRefundRequest extends WxPayBaseRequest { private Integer totalFee; /** *
    -   * 退款金额
    -   * refund_fee
    -   * 是
    -   * Int
    -   * 100
    -   * 退款总金额,订单总金额,单位为分,只能为整数,详见支付金额
    +   * 字段名:退款金额.
    +   * 变量名:refund_fee
    +   * 是否必填:是
    +   * 类型:Int
    +   * 示例值:100
    +   * 描述:退款总金额,订单总金额,单位为分,只能为整数,详见支付金额
        * 
    */ @Required @@ -114,24 +106,24 @@ public class WxPayRefundRequest extends WxPayBaseRequest { private Integer refundFee; /** *
    -   * 货币种类
    -   * refund_fee_type
    -   * 否
    -   * String(8)
    -   * CNY
    -   * 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
    +   * 字段名:货币种类.
    +   * 变量名:refund_fee_type
    +   * 是否必填:否
    +   * 类型:String(8)
    +   * 示例值:CNY
    +   * 描述:货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
        * 
    */ @XStreamAlias("refund_fee_type") private String refundFeeType; /** *
    -   * 操作员
    -   * op_user_id
    -   * 是
    -   * String(32)
    -   * 1900000109
    -   * 操作员帐号, 默认为商户号
    +   * 字段名:操作员.
    +   * 变量名:op_user_id
    +   * 是否必填:是
    +   * 类型:String(32)
    +   * 示例值:1900000109
    +   * 描述:操作员帐号, 默认为商户号
        * 
    */ //@Required @@ -139,12 +131,12 @@ public class WxPayRefundRequest extends WxPayBaseRequest { private String opUserId; /** *
    -   * 退款资金来源
    -   * refund_account
    -   * 否
    -   * String(30)
    -   * REFUND_SOURCE_RECHARGE_FUNDS
    -   * 仅针对老资金流商户使用,
    +   * 字段名:退款资金来源.
    +   * 变量名:refund_account
    +   * 是否必填:否
    +   * 类型:String(30)
    +   * 示例值:REFUND_SOURCE_RECHARGE_FUNDS
    +   * 描述:仅针对老资金流商户使用,
        * 
  • REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款(默认使用未结算资金退款), *
  • REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款 *
  • @@ -153,12 +145,12 @@ public class WxPayRefundRequest extends WxPayBaseRequest { private String refundAccount; /** *
    -   * 退款原因
    -   * refund_account
    -   * 否
    -   * String(80)
    -   * 商品已售完
    -   * 若商户传入,会在下发给用户的退款消息中体现退款原因
    +   * 字段名:退款原因.
    +   * 变量名:refund_account
    +   * 是否必填:否
    +   * 类型:String(80)
    +   * 示例值:商品已售完
    +   * 描述:若商户传入,会在下发给用户的退款消息中体现退款原因
        * 
    */ @XStreamAlias("refund_desc") @@ -177,8 +169,8 @@ public class WxPayRefundRequest extends WxPayBaseRequest { protected void checkConstraints() throws WxPayException { if (StringUtils.isNotBlank(this.getRefundAccount())) { if (!ArrayUtils.contains(REFUND_ACCOUNT, this.getRefundAccount())) { - throw new WxPayException(String.format("refund_account目前必须为%s其中之一,实际值:%s", - Arrays.toString(REFUND_ACCOUNT), this.getRefundAccount())); + throw new WxPayException( + String.format("refund_account目前必须为%s其中之一,实际值:%s", Arrays.toString(REFUND_ACCOUNT), this.getRefundAccount())); } } 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 f9733601..2fad8f2e 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 @@ -8,6 +8,7 @@ import java.util.List; /** *
    + * 微信支付-退款查询返回结果
      * Created by Binary Wang on 2016-11-24.
      * 
    * @@ -20,96 +21,104 @@ import java.util.List; public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -   * 设备号
    -   * device_info
    -   * 否
    -   * String(32)
    -   * 013467007045764
    -   * 终端设备号
    +   * 字段名:设备号.
    +   * 变量名:device_info
    +   * 是否必填:否
    +   * 类型:String(32)
    +   * 示例值:013467007045764
    +   * 描述:终端设备号
    +   * 
    */ @XStreamAlias("device_info") private String deviceInfo; /** *
    -   * 微信订单号
    -   * transaction_id
    -   * 是
    -   * String(32)
    -   * 1217752501201407033233368018
    -   * 微信订单号
    +   * 字段名:微信订单号.
    +   * 变量名:transaction_id
    +   * 是否必填:是
    +   * 类型:String(32)
    +   * 示例值:1217752501201407033233368018
    +   * 描述:微信订单号
    +   * 
    */ @XStreamAlias("transaction_id") private String transactionId; /** *
    -   * 商户订单号
    -   * out_trade_no
    -   * 是
    -   * String(32)
    -   * 1217752501201407033233368018
    -   * 商户系统内部的订单号
    +   * 字段名:商户订单号.
    +   * 变量名:out_trade_no
    +   * 是否必填:是
    +   * 类型:String(32)
    +   * 示例值:1217752501201407033233368018
    +   * 描述:商户系统内部的订单号
    +   * 
    */ @XStreamAlias("out_trade_no") private String outTradeNo; /** *
    -   * 订单金额
    -   * total_fee
    -   * 是
    -   * Int
    -   * 100
    -   * 订单总金额,单位为分,只能为整数,详见支付金额
    +   * 字段名:订单金额.
    +   * 变量名:total_fee
    +   * 是否必填:是
    +   * 类型:Int
    +   * 示例值:100
    +   * 描述:订单总金额,单位为分,只能为整数,详见支付金额
    +   * 
    */ @XStreamAlias("total_fee") private Integer totalFee; /** *
    -   * 应结订单金额
    -   * settlement_total_fee
    -   * 否
    -   * Int
    -   * 100
    -   * 应结订单金额=订单金额-非充值代金券金额,应结订单金额<=订单金额。
    +   * 字段名:应结订单金额.
    +   * 变量名:settlement_total_fee
    +   * 是否必填:否
    +   * 类型:Int
    +   * 示例值:100
    +   * 描述:应结订单金额=订单金额-非充值代金券金额,应结订单金额<=订单金额。
    +   * 
    */ @XStreamAlias("settlement_total_fee") private Integer settlementTotalFee; /** *
    -   * 货币种类
    -   * fee_type
    -   * 否
    -   * String(8)
    -   * CNY
    -   * 订单金额货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
    +   * 字段名:货币种类.
    +   * 变量名:fee_type
    +   * 是否必填:否
    +   * 类型:String(8)
    +   * 示例值:CNY
    +   * 描述:订单金额货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
    +   * 
    */ @XStreamAlias("fee_type") private String feeType; /** *
    -   * 现金支付金额
    -   * cash_fee
    -   * 是
    -   * Int
    -   * 100
    -   * 现金支付金额,单位为分,只能为整数,详见支付金额
    +   * 字段名:现金支付金额.
    +   * 变量名:cash_fee
    +   * 是否必填:是
    +   * 类型:Int
    +   * 示例值:100
    +   * 描述:现金支付金额,单位为分,只能为整数,详见支付金额
    +   * 
    */ @XStreamAlias("cash_fee") private Integer cashFee; /** *
    -   * 退款笔数
    -   * refund_count
    -   * 是
    -   * Int
    -   * 1
    -   * 退款记录数
    +   * 字段名:退款笔数.
    +   * 变量名:refund_count
    +   * 是否必填:是
    +   * 类型:Int
    +   * 示例值:1
    +   * 描述:退款记录数
    +   * 
    */ @XStreamAlias("refund_count") private Integer refundCount; @@ -117,7 +126,7 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { private List refundRecords; /** - * 组装生成退款记录属性的内容 + * 组装生成退款记录属性的内容. */ public void composeRefundRecords() { if (this.refundCount != null && this.refundCount > 0) { @@ -137,6 +146,7 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { refundRecord.setCouponRefundCount(this.getXmlValueAsInt("xml/coupon_refund_count_" + i)); refundRecord.setRefundStatus(this.getXmlValue("xml/refund_status_" + i)); refundRecord.setRefundRecvAccount(this.getXmlValue("xml/refund_recv_accout_" + i)); + refundRecord.setRefundSuccessTime(this.getXmlValue("xml/refund_success_time_" + i)); if (refundRecord.getCouponRefundCount() == null || refundRecord.getCouponRefundCount() == 0) { continue; @@ -151,6 +161,8 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { ) ); } + + refundRecord.setRefundCoupons(coupons); } } @@ -163,12 +175,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { public static class RefundRecord { /** *
    -     * 商户退款单号
    -     * out_refund_no_$n
    -     * 是
    -     * String(32)
    -     * 1217752501201407033233368018
    -     * 商户退款单号
    +     * 字段名:商户退款单号.
    +     * 变量名:out_refund_no_$n
    +     * 是否必填:是
    +     * 类型:String(32)
    +     * 示例值:1217752501201407033233368018
    +     * 描述:商户退款单号
          * 
    */ @XStreamAlias("out_refund_no") @@ -176,12 +188,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -     * 微信退款单号
    -     * refund_id_$n
    -     * 是
    -     * String(28)
    -     * 1217752501201407033233368018
    -     * 微信退款单号
    +     * 字段名:微信退款单号.
    +     * 变量名:refund_id_$n
    +     * 是否必填:是
    +     * 类型:String(28)
    +     * 示例值:1217752501201407033233368018
    +     * 描述:微信退款单号
          * 
    */ @XStreamAlias("refund_id") @@ -189,12 +201,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -     * 退款渠道
    -     * refund_channel_$n
    -     * 否
    -     * String(16)
    -     * ORIGINAL
    -     * ORIGINAL—原路退款 BALANCE—退回到余额
    +     * 字段名:退款渠道.
    +     * 变量名:refund_channel_$n
    +     * 是否必填:否
    +     * 类型:String(16)
    +     * 示例值:ORIGINAL
    +     * 描述:ORIGINAL—原路退款 BALANCE—退回到余额
          * 
    */ @XStreamAlias("refund_channel") @@ -202,12 +214,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -     * 申请退款金额
    -     * refund_fee_$n
    -     * 是
    -     * Int
    -     * 100
    -     * 退款总金额,单位为分,可以做部分退款
    +     * 字段名:申请退款金额.
    +     * 变量名:refund_fee_$n
    +     * 是否必填:是
    +     * 类型:Int
    +     * 示例值:100
    +     * 描述:退款总金额,单位为分,可以做部分退款
          * 
    */ @XStreamAlias("refund_fee") @@ -215,12 +227,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -     * 退款金额
    -     * settlement_refund_fee_$n
    -     * 否
    -     * Int
    -     * 100
    -     * 退款金额=申请退款金额-非充值代金券退款金额,退款金额<=申请退款金额
    +     * 字段名:退款金额.
    +     * 变量名:settlement_refund_fee_$n
    +     * 是否必填:否
    +     * 类型:Int
    +     * 示例值:100
    +     * 描述:退款金额=申请退款金额-非充值代金券退款金额,退款金额<=申请退款金额
          * 
    */ @XStreamAlias("settlement_refund_fee") @@ -228,12 +240,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -     * 退款资金来源
    -     * refund_account
    -     * 否
    -     * String(30)
    -     * REFUND_SOURCE_RECHARGE_FUNDS
    -     * REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款/基本账户, REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款
    +     * 字段名:退款资金来源.
    +     * 变量名:refund_account
    +     * 是否必填:否
    +     * 类型:String(30)
    +     * 示例值:REFUND_SOURCE_RECHARGE_FUNDS
    +     * 描述:REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款/基本账户, REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款
          * 
    */ @XStreamAlias("refund_account") @@ -241,12 +253,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -     * 代金券类型
    -     * coupon_type_$n
    -     * 否
    -     * Int
    -     * CASH
    -     * CASH--充值代金券 , NO_CASH---非充值代金券。订单使用代金券时有返回(取值:CASH、NO_CASH)。$n为下标,从0开始编号,举例:coupon_type_$0
    +     * 字段名:代金券类型.
    +     * 变量名:coupon_type_$n
    +     * 是否必填:否
    +     * 类型:Int
    +     * 示例值:CASH
    +     * 描述:CASH--充值代金券 , NO_CASH---非充值代金券。订单使用代金券时有返回(取值:CASH、NO_CASH)。$n为下标,从0开始编号,举例:coupon_type_$0
          * 
    */ @XStreamAlias("coupon_type") @@ -254,12 +266,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -     * 代金券退款金额
    -     * coupon_refund_fee_$n
    -     * 否
    -     * Int
    -     * 100
    -     * 代金券退款金额<=退款金额,退款金额-代金券或立减优惠退款金额为现金,说明详见代金券或立减优惠
    +     * 字段名:代金券退款金额.
    +     * 变量名:coupon_refund_fee_$n
    +     * 是否必填:否
    +     * 类型:Int
    +     * 示例值:100
    +     * 描述:代金券退款金额<=退款金额,退款金额-代金券或立减优惠退款金额为现金,说明详见代金券或立减优惠
          * 
    */ @XStreamAlias("coupon_refund_fee") @@ -267,12 +279,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -     * 退款代金券使用数量
    -     * coupon_refund_count_$n
    -     * 否
    -     * Int
    -     * 1
    -     * 退款代金券使用数量 ,$n为下标,从0开始编号
    +     * 字段名:退款代金券使用数量.
    +     * 变量名:coupon_refund_count_$n
    +     * 是否必填:否
    +     * 类型:Int
    +     * 示例值:1
    +     * 描述:退款代金券使用数量 ,$n为下标,从0开始编号
          * 
    */ @XStreamAlias("coupon_refund_count") @@ -282,12 +294,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -     * 退款状态
    -     * refund_status_$n
    -     * 是
    -     * String(16)
    -     * SUCCESS
    -     * 退款状态:
    +     * 字段名:退款状态.
    +     * 变量名:refund_status_$n
    +     * 是否必填:是
    +     * 类型:String(16)
    +     * 示例值:SUCCESS
    +     * 描述:退款状态:
          *  SUCCESS—退款成功,
          *  FAIL—退款失败,
          *  PROCESSING—退款处理中,
    @@ -297,30 +309,44 @@ public class WxPayRefundQueryResult extends WxPayBaseResult {
          */
         @XStreamAlias("refund_status")
         private String refundStatus;
    +
         /**
          * 
    -     * 退款入账账户
    -     * refund_recv_accout_$n
    -     * 是
    -     * String(64)
    -     * 招商银行信用卡0403
    -     * 取当前退款单的退款入账方,1)退回银行卡:{银行名称}{卡类型}{卡尾号},2)退回支付用户零钱:支付用户零钱
    +     * 字段名:退款入账账户.
    +     * 变量名:refund_recv_accout_$n
    +     * 是否必填:是
    +     * 类型:String(64)
    +     * 示例值:招商银行信用卡0403
    +     * 描述:取当前退款单的退款入账方,1)退回银行卡:{银行名称}{卡类型}{卡尾号},2)退回支付用户零钱:支付用户零钱
          * 
    */ @XStreamAlias("refund_recv_accout") private String refundRecvAccount; + /** + *
    +     * 字段名:退款成功时间.
    +     * 变量名:refund_success_time_$n
    +     * 是否必填:否
    +     * 类型:String(20)
    +     * 示例值:2016-07-25 15:26:26
    +     * 描述:退款成功时间,当退款状态为退款成功时有返回。$n为下标,从0开始编号。
    +     * 
    + */ + @XStreamAlias("refund_success_time") + private String refundSuccessTime; + @Data @NoArgsConstructor public static class RefundCoupon { /** *
    -       * 退款代金券批次ID
    -       * coupon_refund_batch_id_$n_$m
    -       * 否
    -       * String(20)
    -       * 100
    -       * 退款代金券批次ID ,$n为下标,$m为下标,从0开始编号
    +       * 字段名:退款代金券批次ID.
    +       * 变量名:coupon_refund_batch_id_$n_$m
    +       * 是否必填:否
    +       * 类型:String(20)
    +       * 示例值:100
    +       * 描述:退款代金券批次ID ,$n为下标,$m为下标,从0开始编号
            * 
    * * @deprecated 貌似是被去掉了,但不知是何时! @@ -330,12 +356,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -       * 退款代金券ID
    -       * coupon_refund_id_$n_$m
    -       * 否
    -       * String(20)
    -       * 10000
    -       * 退款代金券ID, $n为下标,$m为下标,从0开始编号
    +       * 字段名:退款代金券ID.
    +       * 变量名:coupon_refund_id_$n_$m
    +       * 是否必填:否
    +       * 类型:String(20)
    +       * 示例值:10000
    +       * 描述:退款代金券ID, $n为下标,$m为下标,从0开始编号
            * 
    */ @XStreamAlias("coupon_refund_id") @@ -343,12 +369,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { /** *
    -       * 单个退款代金券支付金额
    -       * coupon_refund_fee_$n_$m
    -       * 否
    -       * Int
    -       * 100
    -       * 单个退款代金券支付金额, $n为下标,$m为下标,从0开始编号
    +       * 字段名:单个退款代金券支付金额.
    +       * 变量名:coupon_refund_fee_$n_$m
    +       * 是否必填:否
    +       * 类型:Int
    +       * 示例值:100
    +       * 描述:单个退款代金券支付金额, $n为下标,$m为下标,从0开始编号
            * 
    */ @XStreamAlias("coupon_refund_fee")