| @@ -6,7 +6,7 @@ | |||||
| <modelVersion>4.0.0</modelVersion> | <modelVersion>4.0.0</modelVersion> | ||||
| <groupId>com.github.binarywang</groupId> | <groupId>com.github.binarywang</groupId> | ||||
| <artifactId>weixin-java-parent</artifactId> | <artifactId>weixin-java-parent</artifactId> | ||||
| <version>2.8.8.BETA</version> | |||||
| <version>2.9.0</version> | |||||
| <packaging>pom</packaging> | <packaging>pom</packaging> | ||||
| <name>WeiXin Java Tools - Parent</name> | <name>WeiXin Java Tools - Parent</name> | ||||
| <description>微信公众号、企业号上级POM</description> | <description>微信公众号、企业号上级POM</description> | ||||
| @@ -1,4 +1,4 @@ | |||||
| 微信支付/公众号/企业号/小程序的Java开发工具包(SDK) | |||||
| 微信支付/开放平台/公众号/企业微信/小程序的Java开发工具包(SDK) | |||||
| --------------------------------- | --------------------------------- | ||||
| [](https://maven-badges.herokuapp.com/maven-central/com.github.binarywang/weixin-java-parent) | [](https://maven-badges.herokuapp.com/maven-central/com.github.binarywang/weixin-java-parent) | ||||
| [](https://travis-ci.org/Wechat-Group/weixin-java-tools) | [](https://travis-ci.org/Wechat-Group/weixin-java-tools) | ||||
| @@ -16,14 +16,15 @@ | |||||
| * https://github.com/binarywang/weixin-java-mp-demo (公众号Demo,使用Spring MVC实现) | * 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-demo-springboot (公众号Demo,使用Spring Boot实现) | ||||
| * https://github.com/binarywang/weixin-java-mp-multi-demo (支持多公众号) | * https://github.com/binarywang/weixin-java-mp-multi-demo (支持多公众号) | ||||
| * https://github.com/wechat-group/weixin-java-tools-springmvc (公众号Demo,内含部分微信支付代码) | |||||
| * https://github.com/Wechat-Group/weixin-java-open-demo (开放平台Demo) | |||||
| * https://github.com/Wechat-Group/weixin-java-tools-springmvc (公众号Demo,内含部分微信支付代码) | |||||
| --------------------------------- | --------------------------------- | ||||
| ### 重要提示信息(部分为新手必读): | ### 重要提示信息(部分为新手必读): | ||||
| 1. 最新更新:**2017-9-3 发布[【2.8.0正式版】](https://github.com/Wechat-Group/weixin-java-tools/releases)**! | 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. 开源中国本项目的首页地址:https://www.oschina.net/p/weixin-java-tools-new (欢迎大家积极留言评分 🙂) | ||||
| 1. SDK详细开发文档请查阅 [【Wiki】](https://github.com/wechat-group/weixin-java-tools/wiki),部分文档可能未能及时更新,如有发现,可以及时上报或者自行修改。 | 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. 本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. 如有新功能需求,发现BUG,或者由于微信官方接口调整导致的代码问题,可以直接在[【Issues】](https://github.com/Wechat-Group/weixin-java-tools/issues)页提出issue,便于讨论追踪问题; | ||||
| 1. 如果想贡献代码,请阅读[【代码贡献指南】](contribution.md); | 1. 如果想贡献代码,请阅读[【代码贡献指南】](contribution.md); | ||||
| @@ -41,7 +42,7 @@ | |||||
| ## 版本说明 | ## 版本说明 | ||||
| 1. 本项目定为大约每两个月发布一次正式版,版本号格式为X.X.0(如2.1.0,2.2.0等),遇到重大问题需修复会及时提交新版本,欢迎大家随时提交Pull Request; | 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. BUG修复和新特性一般会先发布成小版本作为临时测试版本(如2.4.5.BETA,2.4.6.BETA等,即尾号不为0,并添加BETA字样,以区别于正式版); | ||||
| 1. 目前最新版本号为 [](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. 目前最新版本号为 [](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) | |||||
| 分别查看所有最新的版本。 | 分别查看所有最新的版本。 | ||||
| --------------------------------- | --------------------------------- | ||||
| @@ -52,44 +53,16 @@ | |||||
| * Coding: https://git.coding.net/binarywang/weixin-java-tools.git | * Coding: https://git.coding.net/binarywang/weixin-java-tools.git | ||||
| --------------------------------- | --------------------------------- | ||||
| ## Maven 最新正式版本 | |||||
| * 微信小程序: | |||||
| ## Maven 引用 | |||||
| ```xml | ```xml | ||||
| <dependency> | <dependency> | ||||
| <groupId>com.github.binarywang</groupId> | <groupId>com.github.binarywang</groupId> | ||||
| <artifactId>weixin-java-miniapp</artifactId> | |||||
| <artifactId>(按模块不同)</artifactId> | |||||
| <version>2.8.0</version> | <version>2.8.0</version> | ||||
| </dependency> | </dependency> | ||||
| ``` | ``` | ||||
| * 微信支付: | |||||
| ```xml | |||||
| <dependency> | |||||
| <groupId>com.github.binarywang</groupId> | |||||
| <artifactId>weixin-java-pay</artifactId> | |||||
| <version>2.8.0</version> | |||||
| </dependency> | |||||
| ``` | |||||
| * 公众号(订阅号及服务号): | |||||
| ```xml | |||||
| <dependency> | |||||
| <groupId>com.github.binarywang</groupId> | |||||
| <artifactId>weixin-java-mp</artifactId> | |||||
| <version>2.8.0</version> | |||||
| </dependency> | |||||
| ``` | |||||
| * 企业号: | |||||
| ```xml | |||||
| <dependency> | |||||
| <groupId>com.github.binarywang</groupId> | |||||
| <artifactId>weixin-java-cp</artifactId> | |||||
| <version>2.8.0</version> | |||||
| </dependency> | |||||
| ``` | |||||
| * 各模块的artifactId: | |||||
| - 微信小程序:`weixin-java-miniapp` | |||||
| - 微信支付:`weixin-java-pay` | |||||
| - 公众号(订阅号及服务号):`weixin-java-mp` | |||||
| - 企业号:`weixin-java-cp` | |||||
| @@ -7,7 +7,7 @@ | |||||
| <parent> | <parent> | ||||
| <groupId>com.github.binarywang</groupId> | <groupId>com.github.binarywang</groupId> | ||||
| <artifactId>weixin-java-parent</artifactId> | <artifactId>weixin-java-parent</artifactId> | ||||
| <version>2.8.8.BETA</version> | |||||
| <version>2.9.0</version> | |||||
| </parent> | </parent> | ||||
| <artifactId>weixin-java-common</artifactId> | <artifactId>weixin-java-common</artifactId> | ||||
| @@ -7,7 +7,7 @@ | |||||
| <parent> | <parent> | ||||
| <groupId>com.github.binarywang</groupId> | <groupId>com.github.binarywang</groupId> | ||||
| <artifactId>weixin-java-parent</artifactId> | <artifactId>weixin-java-parent</artifactId> | ||||
| <version>2.8.8.BETA</version> | |||||
| <version>2.9.0</version> | |||||
| </parent> | </parent> | ||||
| <artifactId>weixin-java-cp</artifactId> | <artifactId>weixin-java-cp</artifactId> | ||||
| @@ -381,7 +381,7 @@ public abstract class WxCpServiceAbstractImpl<H, P> implements WxCpService, Requ | |||||
| throw new RuntimeException("微信服务端异常,超出重试次数"); | throw new RuntimeException("微信服务端异常,超出重试次数"); | ||||
| } | } | ||||
| protected synchronized <T, E> T executeInternal(RequestExecutor<T, E> executor, String uri, E data) throws WxErrorException { | |||||
| protected <T, E> T executeInternal(RequestExecutor<T, E> executor, String uri, E data) throws WxErrorException { | |||||
| if (uri.contains("access_token=")) { | if (uri.contains("access_token=")) { | ||||
| throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri); | throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri); | ||||
| } | } | ||||
| @@ -9,7 +9,11 @@ import redis.clients.jedis.JedisPoolConfig; | |||||
| import java.io.File; | import java.io.File; | ||||
| /** | /** | ||||
| * Jedis client implementor for wechat config storage | |||||
| * Jedis client implementor for wechat config storage. | |||||
| * <pre> | |||||
| * 使用说明:本实现仅供参考,并不完整, | |||||
| * 比如为减少项目依赖,未加入redis分布式锁的实现,如有需要请自行实现。 | |||||
| * </pre> | |||||
| * | * | ||||
| * @author gaigeshen | * @author gaigeshen | ||||
| */ | */ | ||||
| @@ -7,7 +7,7 @@ | |||||
| <parent> | <parent> | ||||
| <groupId>com.github.binarywang</groupId> | <groupId>com.github.binarywang</groupId> | ||||
| <artifactId>weixin-java-parent</artifactId> | <artifactId>weixin-java-parent</artifactId> | ||||
| <version>2.8.8.BETA</version> | |||||
| <version>2.9.0</version> | |||||
| </parent> | </parent> | ||||
| <artifactId>weixin-java-miniapp</artifactId> | <artifactId>weixin-java-miniapp</artifactId> | ||||
| <name>WeiXin Java Tools - MiniApp</name> | <name>WeiXin Java Tools - MiniApp</name> | ||||
| @@ -181,7 +181,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl | |||||
| throw new RuntimeException("微信服务端异常,超出重试次数"); | throw new RuntimeException("微信服务端异常,超出重试次数"); | ||||
| } | } | ||||
| public synchronized <T, E> T executeInternal(RequestExecutor<T, E> executor, String uri, E data) throws WxErrorException { | |||||
| public <T, E> T executeInternal(RequestExecutor<T, E> executor, String uri, E data) throws WxErrorException { | |||||
| if (uri.contains("access_token=")) { | if (uri.contains("access_token=")) { | ||||
| throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri); | throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri); | ||||
| } | } | ||||
| @@ -7,7 +7,7 @@ | |||||
| <parent> | <parent> | ||||
| <groupId>com.github.binarywang</groupId> | <groupId>com.github.binarywang</groupId> | ||||
| <artifactId>weixin-java-parent</artifactId> | <artifactId>weixin-java-parent</artifactId> | ||||
| <version>2.8.8.BETA</version> | |||||
| <version>2.9.0</version> | |||||
| </parent> | </parent> | ||||
| <artifactId>weixin-java-mp</artifactId> | <artifactId>weixin-java-mp</artifactId> | ||||
| <name>WeiXin Java Tools - MP</name> | <name>WeiXin Java Tools - MP</name> | ||||
| @@ -5,7 +5,10 @@ import redis.clients.jedis.JedisPool; | |||||
| /** | /** | ||||
| * 基于Redis的微信配置provider | * 基于Redis的微信配置provider | ||||
| * | |||||
| * <pre> | |||||
| * 使用说明:本实现仅供参考,并不完整, | |||||
| * 比如为减少项目依赖,未加入redis分布式锁的实现,如有需要请自行实现。 | |||||
| * </pre> | |||||
| * @author nickwong | * @author nickwong | ||||
| */ | */ | ||||
| @SuppressWarnings("hiding") | @SuppressWarnings("hiding") | ||||
| @@ -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.MediaUploadRequestExecutor; | ||||
| import me.chanjar.weixin.common.util.http.RequestExecutor; | import me.chanjar.weixin.common.util.http.RequestExecutor; | ||||
| import me.chanjar.weixin.common.util.http.RequestHttp; | 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 | * 微信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"; | 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"; | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 验证消息的确来自微信服务器 | * 验证消息的确来自微信服务器 | ||||
| @@ -219,6 +227,18 @@ public interface WxMpService { | |||||
| */ | */ | ||||
| WxMpCurrentAutoReplyInfo getCurrentAutoReplyInfo() throws WxErrorException; | WxMpCurrentAutoReplyInfo getCurrentAutoReplyInfo() throws WxErrorException; | ||||
| /** | |||||
| * <pre> | |||||
| * 公众号调用或第三方平台帮公众号调用对公众号的所有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 | |||||
| * | |||||
| * </pre> | |||||
| * | |||||
| * @param appid 公众号的APPID | |||||
| */ | |||||
| void clearQuota(String appid) throws WxErrorException; | |||||
| /** | /** | ||||
| * 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的GET请求 | * 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的GET请求 | ||||
| */ | */ | ||||
| @@ -376,6 +396,7 @@ public interface WxMpService { | |||||
| /** | /** | ||||
| * 返回群发消息相关接口方法的实现类对象,以方便调用其各个接口 | * 返回群发消息相关接口方法的实现类对象,以方便调用其各个接口 | ||||
| * | |||||
| * @return WxMpMassMessageService | * @return WxMpMassMessageService | ||||
| */ | */ | ||||
| WxMpMassMessageService getMassMessageService(); | WxMpMassMessageService getMassMessageService(); | ||||
| @@ -207,6 +207,13 @@ public abstract class WxMpServiceAbstractImpl<H, P> implements WxMpService, Requ | |||||
| return WxMpCurrentAutoReplyInfo.fromJson(this.get(GET_CURRENT_AUTOREPLY_INFO_URL, null)); | 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 | @Override | ||||
| public String get(String url, String queryParam) throws WxErrorException { | public String get(String url, String queryParam) throws WxErrorException { | ||||
| return execute(SimpleGetRequestExecutor.create(this), url, queryParam); | return execute(SimpleGetRequestExecutor.create(this), url, queryParam); | ||||
| @@ -252,7 +259,7 @@ public abstract class WxMpServiceAbstractImpl<H, P> implements WxMpService, Requ | |||||
| throw new RuntimeException("微信服务端异常,超出重试次数"); | throw new RuntimeException("微信服务端异常,超出重试次数"); | ||||
| } | } | ||||
| public synchronized <T, E> T executeInternal(RequestExecutor<T, E> executor, String uri, E data) throws WxErrorException { | |||||
| public <T, E> T executeInternal(RequestExecutor<T, E> executor, String uri, E data) throws WxErrorException { | |||||
| if (uri.contains("access_token=")) { | if (uri.contains("access_token=")) { | ||||
| throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri); | throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri); | ||||
| } | } | ||||
| @@ -1,5 +1,6 @@ | |||||
| package me.chanjar.weixin.mp.util.http.apache; | 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.bean.result.WxError; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.common.util.http.RequestHttp; | import me.chanjar.weixin.common.util.http.RequestHttp; | ||||
| @@ -43,9 +44,7 @@ public class ApacheMaterialNewsInfoRequestExecutor | |||||
| httpPost.setConfig(config); | httpPost.setConfig(config); | ||||
| } | } | ||||
| Map<String, String> 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)) { | try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpPost)) { | ||||
| String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); | String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); | ||||
| this.logger.debug("响应原始数据:{}", responseContent); | this.logger.debug("响应原始数据:{}", responseContent); | ||||
| @@ -1,5 +1,6 @@ | |||||
| package me.chanjar.weixin.mp.util.http.jodd; | package me.chanjar.weixin.mp.util.http.jodd; | ||||
| import com.google.common.collect.ImmutableMap; | |||||
| import jodd.http.HttpConnectionProvider; | import jodd.http.HttpConnectionProvider; | ||||
| import jodd.http.HttpRequest; | import jodd.http.HttpRequest; | ||||
| import jodd.http.HttpResponse; | 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.bean.result.WxError; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.common.util.http.RequestHttp; | 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.bean.material.WxMpMaterialNews; | ||||
| import me.chanjar.weixin.mp.util.http.MaterialNewsInfoRequestExecutor; | import me.chanjar.weixin.mp.util.http.MaterialNewsInfoRequestExecutor; | ||||
| import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | ||||
| @@ -28,13 +30,13 @@ public class JoddMaterialNewsInfoRequestExecutor extends MaterialNewsInfoRequest | |||||
| @Override | @Override | ||||
| public WxMpMaterialNews execute(String uri, String materialId) throws WxErrorException, IOException { | public WxMpMaterialNews execute(String uri, String materialId) throws WxErrorException, IOException { | ||||
| HttpRequest request = HttpRequest.post(uri); | |||||
| if (requestHttp.getRequestHttpProxy() != null) { | if (requestHttp.getRequestHttpProxy() != null) { | ||||
| requestHttp.getRequestHttpClient().useProxy(requestHttp.getRequestHttpProxy()); | 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(); | HttpResponse response = request.send(); | ||||
| response.charset(StringPool.UTF_8); | response.charset(StringPool.UTF_8); | ||||
| @@ -1,9 +1,11 @@ | |||||
| package me.chanjar.weixin.mp.util.http.okhttp; | 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.bean.result.WxError; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.common.util.http.RequestHttp; | import me.chanjar.weixin.common.util.http.RequestHttp; | ||||
| import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo; | 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.bean.material.WxMpMaterialNews; | ||||
| import me.chanjar.weixin.mp.util.http.MaterialNewsInfoRequestExecutor; | import me.chanjar.weixin.mp.util.http.MaterialNewsInfoRequestExecutor; | ||||
| import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | ||||
| @@ -28,7 +30,8 @@ public class OkhttpMaterialNewsInfoRequestExecutor extends MaterialNewsInfoReque | |||||
| //得到httpClient | //得到httpClient | ||||
| OkHttpClient client = requestHttp.getRequestHttpClient(); | 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(); | Request request = new Request.Builder().url(uri).post(requestBody).build(); | ||||
| Response response = client.newCall(request).execute(); | Response response = client.newCall(request).execute(); | ||||
| @@ -15,7 +15,6 @@ import static org.testng.Assert.*; | |||||
| @Test | @Test | ||||
| @Guice(modules = ApiTestModule.class) | @Guice(modules = ApiTestModule.class) | ||||
| public class WxMpServiceImplTest { | public class WxMpServiceImplTest { | ||||
| @Inject | @Inject | ||||
| private WxMpService wxService; | private WxMpService wxService; | ||||
| @@ -28,88 +27,8 @@ public class WxMpServiceImplTest { | |||||
| } | } | ||||
| @Test | @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 | @Test | ||||
| @@ -121,44 +40,4 @@ public class WxMpServiceImplTest { | |||||
| System.out.println(qrConnectUrl); | 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"); | |||||
| } | |||||
| } | } | ||||
| @@ -8,7 +8,7 @@ | |||||
| <parent> | <parent> | ||||
| <groupId>com.github.binarywang</groupId> | <groupId>com.github.binarywang</groupId> | ||||
| <artifactId>weixin-java-parent</artifactId> | <artifactId>weixin-java-parent</artifactId> | ||||
| <version>2.8.8.BETA</version> | |||||
| <version>2.9.0</version> | |||||
| </parent> | </parent> | ||||
| <artifactId>weixin-java-open</artifactId> | <artifactId>weixin-java-open</artifactId> | ||||
| <name>WeiXin Java Tools - Open</name> | <name>WeiXin Java Tools - Open</name> | ||||
| @@ -5,7 +5,7 @@ | |||||
| <parent> | <parent> | ||||
| <artifactId>weixin-java-parent</artifactId> | <artifactId>weixin-java-parent</artifactId> | ||||
| <groupId>com.github.binarywang</groupId> | <groupId>com.github.binarywang</groupId> | ||||
| <version>2.8.8.BETA</version> | |||||
| <version>2.9.0</version> | |||||
| </parent> | </parent> | ||||
| <modelVersion>4.0.0</modelVersion> | <modelVersion>4.0.0</modelVersion> | ||||
| @@ -21,7 +21,7 @@ import lombok.NoArgsConstructor; | |||||
| public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:设备号 | |||||
| * 字段名:设备号. | |||||
| * 变量名:device_info | * 变量名:device_info | ||||
| * 是否必填:否 | * 是否必填:否 | ||||
| * 示例值:123456sb | * 示例值:123456sb | ||||
| @@ -34,7 +34,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:批次ID | |||||
| * 字段名:批次ID. | |||||
| * 变量名:coupon_stock_id | * 变量名:coupon_stock_id | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:1567 | * 示例值:1567 | ||||
| @@ -47,7 +47,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:代金券id | |||||
| * 字段名:代金券id. | |||||
| * 变量名:coupon_id | * 变量名:coupon_id | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:4242 | * 示例值:4242 | ||||
| @@ -60,7 +60,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:代金券面额 | |||||
| * 字段名:代金券面额. | |||||
| * 变量名:coupon_value | * 变量名:coupon_value | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:4 | * 示例值:4 | ||||
| @@ -73,7 +73,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:代金券使用门槛 | |||||
| * 字段名:代金券使用门槛. | |||||
| * 变量名:coupon_mininum | * 变量名:coupon_mininum | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:10 | * 示例值:10 | ||||
| @@ -86,7 +86,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:代金券名称 | |||||
| * 字段名:代金券名称. | |||||
| * 变量名:coupon_name | * 变量名:coupon_name | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:测试代金券 | * 示例值:测试代金券 | ||||
| @@ -99,20 +99,20 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:代金券状态 | |||||
| * 字段名:代金券状态. | |||||
| * 变量名:coupon_state | * 变量名:coupon_state | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:SENDED | * 示例值:SENDED | ||||
| * 类型:int | |||||
| * 类型:String | |||||
| * 说明:代金券状态:SENDED-可用,USED-已实扣,EXPIRED-已过期 | * 说明:代金券状态:SENDED-可用,USED-已实扣,EXPIRED-已过期 | ||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("coupon_state") | @XStreamAlias("coupon_state") | ||||
| private Integer couponState; | |||||
| private String couponState; | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:代金券描述 | |||||
| * 字段名:代金券描述. | |||||
| * 变量名:coupon_desc | * 变量名:coupon_desc | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:微信支付-代金券 | * 示例值:微信支付-代金券 | ||||
| @@ -125,7 +125,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:实际优惠金额 | |||||
| * 字段名:实际优惠金额. | |||||
| * 变量名:coupon_use_value | * 变量名:coupon_use_value | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:0 | * 示例值:0 | ||||
| @@ -138,7 +138,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:优惠剩余可用额 | |||||
| * 字段名:优惠剩余可用额. | |||||
| * 变量名:coupon_remain_value | * 变量名:coupon_remain_value | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:4 | * 示例值:4 | ||||
| @@ -151,7 +151,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:生效开始时间 | |||||
| * 字段名:生效开始时间. | |||||
| * 变量名:begin_time | * 变量名:begin_time | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:1943787483 | * 示例值:1943787483 | ||||
| @@ -164,7 +164,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:生效结束时间 | |||||
| * 字段名:生效结束时间. | |||||
| * 变量名:end_time | * 变量名:end_time | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:1943787484 | * 示例值:1943787484 | ||||
| @@ -177,7 +177,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:发放时间 | |||||
| * 字段名:发放时间. | |||||
| * 变量名:send_time | * 变量名:send_time | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:1943787420 | * 示例值:1943787420 | ||||
| @@ -190,7 +190,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:消耗方商户id | |||||
| * 字段名:消耗方商户id. | |||||
| * 变量名:consumer_mch_id | * 变量名:consumer_mch_id | ||||
| * 是否必填:否 | * 是否必填:否 | ||||
| * 示例值:10000098 | * 示例值:10000098 | ||||
| @@ -203,7 +203,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:发放来源 | |||||
| * 字段名:发放来源. | |||||
| * 变量名:send_source | * 变量名:send_source | ||||
| * 是否必填:是 | * 是否必填:是 | ||||
| * 示例值:FULL_SEND | * 示例值:FULL_SEND | ||||
| @@ -216,7 +216,7 @@ public class WxPayCouponInfoQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 字段名:是否允许部分使用 | |||||
| * 字段名:是否允许部分使用. | |||||
| * 变量名:is_partial_use | * 变量名:is_partial_use | ||||
| * 是否必填:否 | * 是否必填:否 | ||||
| * 示例值:1 | * 示例值:1 | ||||
| @@ -14,13 +14,6 @@ import java.util.Arrays; | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 微信支付-申请退款请求参数 | * 微信支付-申请退款请求参数 | ||||
| * 注释中各行每个字段描述对应如下: | |||||
| * <li>字段名 | |||||
| * <li>变量名 | |||||
| * <li>是否必填 | |||||
| * <li>类型 | |||||
| * <li>示例值 | |||||
| * <li>描述 | |||||
| * Created by Binary Wang on 2016-10-08. | * Created by Binary Wang on 2016-10-08. | ||||
| * </pre> | * </pre> | ||||
| * | * | ||||
| @@ -34,53 +27,52 @@ import java.util.Arrays; | |||||
| @XStreamAlias("xml") | @XStreamAlias("xml") | ||||
| public class WxPayRefundRequest extends WxPayBaseRequest { | public class WxPayRefundRequest extends WxPayBaseRequest { | ||||
| private static final String[] REFUND_ACCOUNT = new String[]{ | private static final String[] REFUND_ACCOUNT = new String[]{ | ||||
| RefundAccountSource.RECHARGE_FUNDS, | |||||
| RefundAccountSource.UNSETTLED_FUNDS | |||||
| }; | |||||
| RefundAccountSource.RECHARGE_FUNDS, RefundAccountSource.UNSETTLED_FUNDS}; | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 设备号 | |||||
| * device_info | |||||
| * 否 | |||||
| * String(32) | |||||
| * 13467007045764 | |||||
| * 终端设备号 | |||||
| * 字段名:设备号. | |||||
| * 变量名:device_info | |||||
| * 是否必填:否 | |||||
| * 类型:String(32) | |||||
| * 示例值:13467007045764 | |||||
| * 描述:终端设备号 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("device_info") | @XStreamAlias("device_info") | ||||
| private String deviceInfo; | private String deviceInfo; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 微信订单号 | |||||
| * transaction_id | |||||
| * 跟out_trade_no二选一 | |||||
| * String(28) | |||||
| * 1217752501201400000000000000 | |||||
| * 微信生成的订单号,在支付通知中有返回 | |||||
| * 字段名:微信订单号. | |||||
| * 变量名:transaction_id | |||||
| * 是否必填:跟out_trade_no二选一 | |||||
| * 类型:String(28) | |||||
| * 示例值:1217752501201400000000000000 | |||||
| * 描述:微信生成的订单号,在支付通知中有返回 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("transaction_id") | @XStreamAlias("transaction_id") | ||||
| private String transactionId; | private String transactionId; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 商户订单号 | |||||
| * out_trade_no | |||||
| * 跟transaction_id二选一 | |||||
| * String(32) | |||||
| * 1217752501201400000000000000 | |||||
| * 商户侧传给微信的订单号 | |||||
| * 字段名:商户订单号. | |||||
| * 变量名:out_trade_no | |||||
| * 是否必填:跟transaction_id二选一 | |||||
| * 类型:String(32) | |||||
| * 示例值:1217752501201400000000000000 | |||||
| * 描述:商户侧传给微信的订单号 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("out_trade_no") | @XStreamAlias("out_trade_no") | ||||
| private String outTradeNo; | private String outTradeNo; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 商户退款单号 | |||||
| * out_refund_no | |||||
| * 是 | |||||
| * String(32) | |||||
| * 1217752501201400000000000000 | |||||
| * 商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔 | |||||
| * 字段名:商户退款单号. | |||||
| * 变量名:out_refund_no | |||||
| * 是否必填:是 | |||||
| * 类型:String(32) | |||||
| * 示例值:1217752501201400000000000000 | |||||
| * 描述:商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @Required | @Required | ||||
| @@ -88,12 +80,12 @@ public class WxPayRefundRequest extends WxPayBaseRequest { | |||||
| private String outRefundNo; | private String outRefundNo; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 订单金额 | |||||
| * total_fee | |||||
| * 是 | |||||
| * Int | |||||
| * 100 | |||||
| * 订单总金额,单位为分,只能为整数,详见支付金额 | |||||
| * 字段名:订单金额. | |||||
| * 变量名:total_fee | |||||
| * 是否必填:是 | |||||
| * 类型:Int | |||||
| * 示例值:100 | |||||
| * 描述:订单总金额,单位为分,只能为整数,详见支付金额 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @Required | @Required | ||||
| @@ -101,12 +93,12 @@ public class WxPayRefundRequest extends WxPayBaseRequest { | |||||
| private Integer totalFee; | private Integer totalFee; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款金额 | |||||
| * refund_fee | |||||
| * 是 | |||||
| * Int | |||||
| * 100 | |||||
| * 退款总金额,订单总金额,单位为分,只能为整数,详见支付金额 | |||||
| * 字段名:退款金额. | |||||
| * 变量名:refund_fee | |||||
| * 是否必填:是 | |||||
| * 类型:Int | |||||
| * 示例值:100 | |||||
| * 描述:退款总金额,订单总金额,单位为分,只能为整数,详见支付金额 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @Required | @Required | ||||
| @@ -114,24 +106,24 @@ public class WxPayRefundRequest extends WxPayBaseRequest { | |||||
| private Integer refundFee; | private Integer refundFee; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 货币种类 | |||||
| * refund_fee_type | |||||
| * 否 | |||||
| * String(8) | |||||
| * CNY | |||||
| * 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 | |||||
| * 字段名:货币种类. | |||||
| * 变量名:refund_fee_type | |||||
| * 是否必填:否 | |||||
| * 类型:String(8) | |||||
| * 示例值:CNY | |||||
| * 描述:货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("refund_fee_type") | @XStreamAlias("refund_fee_type") | ||||
| private String refundFeeType; | private String refundFeeType; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 操作员 | |||||
| * op_user_id | |||||
| * 是 | |||||
| * String(32) | |||||
| * 1900000109 | |||||
| * 操作员帐号, 默认为商户号 | |||||
| * 字段名:操作员. | |||||
| * 变量名:op_user_id | |||||
| * 是否必填:是 | |||||
| * 类型:String(32) | |||||
| * 示例值:1900000109 | |||||
| * 描述:操作员帐号, 默认为商户号 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| //@Required | //@Required | ||||
| @@ -139,12 +131,12 @@ public class WxPayRefundRequest extends WxPayBaseRequest { | |||||
| private String opUserId; | private String opUserId; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款资金来源 | |||||
| * refund_account | |||||
| * 否 | |||||
| * String(30) | |||||
| * REFUND_SOURCE_RECHARGE_FUNDS | |||||
| * 仅针对老资金流商户使用, | |||||
| * 字段名:退款资金来源. | |||||
| * 变量名:refund_account | |||||
| * 是否必填:否 | |||||
| * 类型:String(30) | |||||
| * 示例值:REFUND_SOURCE_RECHARGE_FUNDS | |||||
| * 描述:仅针对老资金流商户使用, | |||||
| * <li>REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款(默认使用未结算资金退款), | * <li>REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款(默认使用未结算资金退款), | ||||
| * <li>REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款 | * <li>REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款 | ||||
| * </pre> | * </pre> | ||||
| @@ -153,12 +145,12 @@ public class WxPayRefundRequest extends WxPayBaseRequest { | |||||
| private String refundAccount; | private String refundAccount; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款原因 | |||||
| * refund_account | |||||
| * 否 | |||||
| * String(80) | |||||
| * 商品已售完 | |||||
| * 若商户传入,会在下发给用户的退款消息中体现退款原因 | |||||
| * 字段名:退款原因. | |||||
| * 变量名:refund_account | |||||
| * 是否必填:否 | |||||
| * 类型:String(80) | |||||
| * 示例值:商品已售完 | |||||
| * 描述:若商户传入,会在下发给用户的退款消息中体现退款原因 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("refund_desc") | @XStreamAlias("refund_desc") | ||||
| @@ -177,8 +169,8 @@ public class WxPayRefundRequest extends WxPayBaseRequest { | |||||
| protected void checkConstraints() throws WxPayException { | protected void checkConstraints() throws WxPayException { | ||||
| if (StringUtils.isNotBlank(this.getRefundAccount())) { | if (StringUtils.isNotBlank(this.getRefundAccount())) { | ||||
| if (!ArrayUtils.contains(REFUND_ACCOUNT, 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())); | |||||
| } | } | ||||
| } | } | ||||
| @@ -8,6 +8,7 @@ import java.util.List; | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 微信支付-退款查询返回结果 | |||||
| * Created by Binary Wang on 2016-11-24. | * Created by Binary Wang on 2016-11-24. | ||||
| * </pre> | * </pre> | ||||
| * | * | ||||
| @@ -20,96 +21,104 @@ import java.util.List; | |||||
| public class WxPayRefundQueryResult extends WxPayBaseResult { | public class WxPayRefundQueryResult extends WxPayBaseResult { | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 设备号 | |||||
| * device_info | |||||
| * 否 | |||||
| * String(32) | |||||
| * 013467007045764 | |||||
| * 终端设备号 | |||||
| * 字段名:设备号. | |||||
| * 变量名:device_info | |||||
| * 是否必填:否 | |||||
| * 类型:String(32) | |||||
| * 示例值:013467007045764 | |||||
| * 描述:终端设备号 | |||||
| * </pre> | |||||
| */ | */ | ||||
| @XStreamAlias("device_info") | @XStreamAlias("device_info") | ||||
| private String deviceInfo; | private String deviceInfo; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 微信订单号 | |||||
| * transaction_id | |||||
| * 是 | |||||
| * String(32) | |||||
| * 1217752501201407033233368018 | |||||
| * 微信订单号 | |||||
| * 字段名:微信订单号. | |||||
| * 变量名:transaction_id | |||||
| * 是否必填:是 | |||||
| * 类型:String(32) | |||||
| * 示例值:1217752501201407033233368018 | |||||
| * 描述:微信订单号 | |||||
| * </pre> | |||||
| */ | */ | ||||
| @XStreamAlias("transaction_id") | @XStreamAlias("transaction_id") | ||||
| private String transactionId; | private String transactionId; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 商户订单号 | |||||
| * out_trade_no | |||||
| * 是 | |||||
| * String(32) | |||||
| * 1217752501201407033233368018 | |||||
| * 商户系统内部的订单号 | |||||
| * 字段名:商户订单号. | |||||
| * 变量名:out_trade_no | |||||
| * 是否必填:是 | |||||
| * 类型:String(32) | |||||
| * 示例值:1217752501201407033233368018 | |||||
| * 描述:商户系统内部的订单号 | |||||
| * </pre> | |||||
| */ | */ | ||||
| @XStreamAlias("out_trade_no") | @XStreamAlias("out_trade_no") | ||||
| private String outTradeNo; | private String outTradeNo; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 订单金额 | |||||
| * total_fee | |||||
| * 是 | |||||
| * Int | |||||
| * 100 | |||||
| * 订单总金额,单位为分,只能为整数,详见支付金额 | |||||
| * 字段名:订单金额. | |||||
| * 变量名:total_fee | |||||
| * 是否必填:是 | |||||
| * 类型:Int | |||||
| * 示例值:100 | |||||
| * 描述:订单总金额,单位为分,只能为整数,详见支付金额 | |||||
| * </pre> | |||||
| */ | */ | ||||
| @XStreamAlias("total_fee") | @XStreamAlias("total_fee") | ||||
| private Integer totalFee; | private Integer totalFee; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 应结订单金额 | |||||
| * settlement_total_fee | |||||
| * 否 | |||||
| * Int | |||||
| * 100 | |||||
| * 应结订单金额=订单金额-非充值代金券金额,应结订单金额<=订单金额。 | |||||
| * 字段名:应结订单金额. | |||||
| * 变量名:settlement_total_fee | |||||
| * 是否必填:否 | |||||
| * 类型:Int | |||||
| * 示例值:100 | |||||
| * 描述:应结订单金额=订单金额-非充值代金券金额,应结订单金额<=订单金额。 | |||||
| * </pre> | |||||
| */ | */ | ||||
| @XStreamAlias("settlement_total_fee") | @XStreamAlias("settlement_total_fee") | ||||
| private Integer settlementTotalFee; | private Integer settlementTotalFee; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 货币种类 | |||||
| * fee_type | |||||
| * 否 | |||||
| * String(8) | |||||
| * CNY | |||||
| * 订单金额货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 | |||||
| * 字段名:货币种类. | |||||
| * 变量名:fee_type | |||||
| * 是否必填:否 | |||||
| * 类型:String(8) | |||||
| * 示例值:CNY | |||||
| * 描述:订单金额货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 | |||||
| * </pre> | |||||
| */ | */ | ||||
| @XStreamAlias("fee_type") | @XStreamAlias("fee_type") | ||||
| private String feeType; | private String feeType; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 现金支付金额 | |||||
| * cash_fee | |||||
| * 是 | |||||
| * Int | |||||
| * 100 | |||||
| * 现金支付金额,单位为分,只能为整数,详见支付金额 | |||||
| * 字段名:现金支付金额. | |||||
| * 变量名:cash_fee | |||||
| * 是否必填:是 | |||||
| * 类型:Int | |||||
| * 示例值:100 | |||||
| * 描述:现金支付金额,单位为分,只能为整数,详见支付金额 | |||||
| * </pre> | |||||
| */ | */ | ||||
| @XStreamAlias("cash_fee") | @XStreamAlias("cash_fee") | ||||
| private Integer cashFee; | private Integer cashFee; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款笔数 | |||||
| * refund_count | |||||
| * 是 | |||||
| * Int | |||||
| * 1 | |||||
| * 退款记录数 | |||||
| * 字段名:退款笔数. | |||||
| * 变量名:refund_count | |||||
| * 是否必填:是 | |||||
| * 类型:Int | |||||
| * 示例值:1 | |||||
| * 描述:退款记录数 | |||||
| * </pre> | |||||
| */ | */ | ||||
| @XStreamAlias("refund_count") | @XStreamAlias("refund_count") | ||||
| private Integer refundCount; | private Integer refundCount; | ||||
| @@ -117,7 +126,7 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| private List<RefundRecord> refundRecords; | private List<RefundRecord> refundRecords; | ||||
| /** | /** | ||||
| * 组装生成退款记录属性的内容 | |||||
| * 组装生成退款记录属性的内容. | |||||
| */ | */ | ||||
| public void composeRefundRecords() { | public void composeRefundRecords() { | ||||
| if (this.refundCount != null && this.refundCount > 0) { | 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.setCouponRefundCount(this.getXmlValueAsInt("xml/coupon_refund_count_" + i)); | ||||
| refundRecord.setRefundStatus(this.getXmlValue("xml/refund_status_" + i)); | refundRecord.setRefundStatus(this.getXmlValue("xml/refund_status_" + i)); | ||||
| refundRecord.setRefundRecvAccount(this.getXmlValue("xml/refund_recv_accout_" + 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) { | if (refundRecord.getCouponRefundCount() == null || refundRecord.getCouponRefundCount() == 0) { | ||||
| continue; | 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 { | public static class RefundRecord { | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 商户退款单号 | |||||
| * out_refund_no_$n | |||||
| * 是 | |||||
| * String(32) | |||||
| * 1217752501201407033233368018 | |||||
| * 商户退款单号 | |||||
| * 字段名:商户退款单号. | |||||
| * 变量名:out_refund_no_$n | |||||
| * 是否必填:是 | |||||
| * 类型:String(32) | |||||
| * 示例值:1217752501201407033233368018 | |||||
| * 描述:商户退款单号 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("out_refund_no") | @XStreamAlias("out_refund_no") | ||||
| @@ -176,12 +188,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 微信退款单号 | |||||
| * refund_id_$n | |||||
| * 是 | |||||
| * String(28) | |||||
| * 1217752501201407033233368018 | |||||
| * 微信退款单号 | |||||
| * 字段名:微信退款单号. | |||||
| * 变量名:refund_id_$n | |||||
| * 是否必填:是 | |||||
| * 类型:String(28) | |||||
| * 示例值:1217752501201407033233368018 | |||||
| * 描述:微信退款单号 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("refund_id") | @XStreamAlias("refund_id") | ||||
| @@ -189,12 +201,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款渠道 | |||||
| * refund_channel_$n | |||||
| * 否 | |||||
| * String(16) | |||||
| * ORIGINAL | |||||
| * ORIGINAL—原路退款 BALANCE—退回到余额 | |||||
| * 字段名:退款渠道. | |||||
| * 变量名:refund_channel_$n | |||||
| * 是否必填:否 | |||||
| * 类型:String(16) | |||||
| * 示例值:ORIGINAL | |||||
| * 描述:ORIGINAL—原路退款 BALANCE—退回到余额 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("refund_channel") | @XStreamAlias("refund_channel") | ||||
| @@ -202,12 +214,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 申请退款金额 | |||||
| * refund_fee_$n | |||||
| * 是 | |||||
| * Int | |||||
| * 100 | |||||
| * 退款总金额,单位为分,可以做部分退款 | |||||
| * 字段名:申请退款金额. | |||||
| * 变量名:refund_fee_$n | |||||
| * 是否必填:是 | |||||
| * 类型:Int | |||||
| * 示例值:100 | |||||
| * 描述:退款总金额,单位为分,可以做部分退款 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("refund_fee") | @XStreamAlias("refund_fee") | ||||
| @@ -215,12 +227,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款金额 | |||||
| * settlement_refund_fee_$n | |||||
| * 否 | |||||
| * Int | |||||
| * 100 | |||||
| * 退款金额=申请退款金额-非充值代金券退款金额,退款金额<=申请退款金额 | |||||
| * 字段名:退款金额. | |||||
| * 变量名:settlement_refund_fee_$n | |||||
| * 是否必填:否 | |||||
| * 类型:Int | |||||
| * 示例值:100 | |||||
| * 描述:退款金额=申请退款金额-非充值代金券退款金额,退款金额<=申请退款金额 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("settlement_refund_fee") | @XStreamAlias("settlement_refund_fee") | ||||
| @@ -228,12 +240,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款资金来源 | |||||
| * 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---未结算资金退款 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("refund_account") | @XStreamAlias("refund_account") | ||||
| @@ -241,12 +253,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 代金券类型 | |||||
| * 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 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("coupon_type") | @XStreamAlias("coupon_type") | ||||
| @@ -254,12 +266,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 代金券退款金额 | |||||
| * coupon_refund_fee_$n | |||||
| * 否 | |||||
| * Int | |||||
| * 100 | |||||
| * 代金券退款金额<=退款金额,退款金额-代金券或立减优惠退款金额为现金,说明详见代金券或立减优惠 | |||||
| * 字段名:代金券退款金额. | |||||
| * 变量名:coupon_refund_fee_$n | |||||
| * 是否必填:否 | |||||
| * 类型:Int | |||||
| * 示例值:100 | |||||
| * 描述:代金券退款金额<=退款金额,退款金额-代金券或立减优惠退款金额为现金,说明详见代金券或立减优惠 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("coupon_refund_fee") | @XStreamAlias("coupon_refund_fee") | ||||
| @@ -267,12 +279,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款代金券使用数量 | |||||
| * coupon_refund_count_$n | |||||
| * 否 | |||||
| * Int | |||||
| * 1 | |||||
| * 退款代金券使用数量 ,$n为下标,从0开始编号 | |||||
| * 字段名:退款代金券使用数量. | |||||
| * 变量名:coupon_refund_count_$n | |||||
| * 是否必填:否 | |||||
| * 类型:Int | |||||
| * 示例值:1 | |||||
| * 描述:退款代金券使用数量 ,$n为下标,从0开始编号 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("coupon_refund_count") | @XStreamAlias("coupon_refund_count") | ||||
| @@ -282,12 +294,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款状态 | |||||
| * refund_status_$n | |||||
| * 是 | |||||
| * String(16) | |||||
| * SUCCESS | |||||
| * 退款状态: | |||||
| * 字段名:退款状态. | |||||
| * 变量名:refund_status_$n | |||||
| * 是否必填:是 | |||||
| * 类型:String(16) | |||||
| * 示例值:SUCCESS | |||||
| * 描述:退款状态: | |||||
| * SUCCESS—退款成功, | * SUCCESS—退款成功, | ||||
| * FAIL—退款失败, | * FAIL—退款失败, | ||||
| * PROCESSING—退款处理中, | * PROCESSING—退款处理中, | ||||
| @@ -297,30 +309,44 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| */ | */ | ||||
| @XStreamAlias("refund_status") | @XStreamAlias("refund_status") | ||||
| private String refundStatus; | private String refundStatus; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款入账账户 | |||||
| * refund_recv_accout_$n | |||||
| * 是 | |||||
| * String(64) | |||||
| * 招商银行信用卡0403 | |||||
| * 取当前退款单的退款入账方,1)退回银行卡:{银行名称}{卡类型}{卡尾号},2)退回支付用户零钱:支付用户零钱 | |||||
| * 字段名:退款入账账户. | |||||
| * 变量名:refund_recv_accout_$n | |||||
| * 是否必填:是 | |||||
| * 类型:String(64) | |||||
| * 示例值:招商银行信用卡0403 | |||||
| * 描述:取当前退款单的退款入账方,1)退回银行卡:{银行名称}{卡类型}{卡尾号},2)退回支付用户零钱:支付用户零钱 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("refund_recv_accout") | @XStreamAlias("refund_recv_accout") | ||||
| private String refundRecvAccount; | private String refundRecvAccount; | ||||
| /** | |||||
| * <pre> | |||||
| * 字段名:退款成功时间. | |||||
| * 变量名:refund_success_time_$n | |||||
| * 是否必填:否 | |||||
| * 类型:String(20) | |||||
| * 示例值:2016-07-25 15:26:26 | |||||
| * 描述:退款成功时间,当退款状态为退款成功时有返回。$n为下标,从0开始编号。 | |||||
| * </pre> | |||||
| */ | |||||
| @XStreamAlias("refund_success_time") | |||||
| private String refundSuccessTime; | |||||
| @Data | @Data | ||||
| @NoArgsConstructor | @NoArgsConstructor | ||||
| public static class RefundCoupon { | public static class RefundCoupon { | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款代金券批次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开始编号 | |||||
| * </pre> | * </pre> | ||||
| * | * | ||||
| * @deprecated 貌似是被去掉了,但不知是何时! | * @deprecated 貌似是被去掉了,但不知是何时! | ||||
| @@ -330,12 +356,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 退款代金券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开始编号 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("coupon_refund_id") | @XStreamAlias("coupon_refund_id") | ||||
| @@ -343,12 +369,12 @@ public class WxPayRefundQueryResult extends WxPayBaseResult { | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 单个退款代金券支付金额 | |||||
| * coupon_refund_fee_$n_$m | |||||
| * 否 | |||||
| * Int | |||||
| * 100 | |||||
| * 单个退款代金券支付金额, $n为下标,$m为下标,从0开始编号 | |||||
| * 字段名:单个退款代金券支付金额. | |||||
| * 变量名:coupon_refund_fee_$n_$m | |||||
| * 是否必填:否 | |||||
| * 类型:Int | |||||
| * 示例值:100 | |||||
| * 描述:单个退款代金券支付金额, $n为下标,$m为下标,从0开始编号 | |||||
| * </pre> | * </pre> | ||||
| */ | */ | ||||
| @XStreamAlias("coupon_refund_fee") | @XStreamAlias("coupon_refund_fee") | ||||
| @@ -422,9 +422,9 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | |||||
| String responseContent = this.post(url, request.toXML(), false); | String responseContent = this.post(url, request.toXML(), false); | ||||
| if (responseContent.startsWith("<")) { | if (responseContent.startsWith("<")) { | ||||
| throw WxPayException.from(WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class)); | throw WxPayException.from(WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class)); | ||||
| } else { | |||||
| return this.handleBillInformation(responseContent); | |||||
| } | } | ||||
| return this.handleBillInformation(responseContent); | |||||
| } | } | ||||
| private WxPayBillResult handleBillInformation(String responseContent) { | private WxPayBillResult handleBillInformation(String responseContent) { | ||||