diff --git a/README.md b/README.md
index 8613e8c..c1bad36 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
cn.felord
payment-spring-boot-starter
- 1.0.2.RELEASE
+ 1.0.3.RELEASE
```
diff --git a/docs/README.md b/docs/README.md
index 8ad18f7..6a5a65e 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -24,11 +24,12 @@
- 微信合单支付 `WechatCombinePayApi` 100%
## Maven 中央仓库坐标
+> 推荐使用最新版本
```xml
cn.felord
payment-spring-boot-starter
- 1.0.1.RELEASE
+ 1.0.3.RELEASE
```
## 采用技术
diff --git a/docs/changelog.md b/docs/changelog.md
index a10b01a..0524842 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -1,3 +1,9 @@
+## 1.0.2.RELEASE
+- 微信支付
+ - feat: 接入微信支付分
+ - feat: 接入微信支付先享卡
+ - fix: 支付回调参数不全的问题
+
## 1.0.1.RELEASE
- 微信支付
diff --git a/docs/quick_start.md b/docs/quick_start.md
index 4a656ec..cd2d15e 100644
--- a/docs/quick_start.md
+++ b/docs/quick_start.md
@@ -4,7 +4,7 @@
cn.felord
payment-spring-boot-starter
- 1.0.1.RELEASE
+ 1.0.3.RELEASE
```
> 基于 **Spring Boot 2.4.1**
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WechatPayV3Type.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WechatPayV3Type.java
index 96ef262..59bb9d1 100644
--- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WechatPayV3Type.java
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WechatPayV3Type.java
@@ -44,6 +44,18 @@ public enum WechatPayV3Type {
* @since 1.0.0.RELEASE
*/
FILE_DOWNLOAD(HttpMethod.GET, "%s/v3/billdownload/file"),
+ /**
+ * 申请交易账单API.
+ *
+ * @since 1.0.3.RELEASE
+ */
+ TRADEBILL(HttpMethod.GET, "%s/v3/bill/tradebill"),
+ /**
+ * 申请资金账单API.
+ *
+ * @since 1.0.3.RELEASE
+ */
+ FUNDFLOWBILL(HttpMethod.GET, "%s/v3/bill/fundflowbill"),
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -133,18 +145,6 @@ public enum WechatPayV3Type {
* @since 1.0.0.RELEASE
*/
COMBINE_CLOSE(HttpMethod.POST, "%s/v3/combine-transactions/out-trade-no/{combine_out_trade_no}/close"),
- /**
- * 申请交易账单API.
- *
- * @since 1.0.3.RELEASE
- */
- COMBINE_TRADEBILL(HttpMethod.POST, "%s/v3/bill/tradebill"),
- /**
- * 申请资金账单API.
- *
- * @since 1.0.3.RELEASE
- */
- COMBINE_FUNDFLOWBILL(HttpMethod.POST, "%s/v3/bill/fundflowbill"),
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/AbstractApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/AbstractApi.java
index 04d078e..ff27c9b 100644
--- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/AbstractApi.java
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/AbstractApi.java
@@ -19,7 +19,9 @@
package cn.felord.payment.wechat.v3;
import cn.felord.payment.PayException;
-import cn.felord.payment.wechat.enumeration.WechatPayV3Type;
+import cn.felord.payment.wechat.enumeration.*;
+import cn.felord.payment.wechat.v3.model.FundFlowBillParams;
+import cn.felord.payment.wechat.v3.model.TradeBillParams;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -28,9 +30,16 @@ import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.http.RequestEntity;
import org.springframework.util.Assert;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.util.StringUtils;
import org.springframework.web.util.UriComponentsBuilder;
import java.net.URI;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.Objects;
+import java.util.Optional;
/**
* The type Abstract api.
@@ -172,4 +181,86 @@ public abstract class AbstractApi {
})
.download();
}
+
+
+ /**
+ * 申请交易账单API
+ *
+ * 微信支付按天提供交易账单文件,商户可以通过该接口获取账单文件的下载地址。文件内包含交易相关的金额、时间、营销等信息,供商户核对订单、退款、银行到账等情况。
+ *
+ * 注意:
+ *
+ * - 微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致;
+ * - 对账单中涉及金额的字段单位为“元”;
+ * - 对账单接口只能下载三个月以内的账单。
+ * - 小微商户不单独提供对账单下载,如有需要,可在调取“下载对账单”API接口时不传sub_mch_id,获取服务商下全量电商二级商户(包括小微商户和非小微商户)的对账单。
+ *
+ *
+ * @param tradeBillParams tradeBillParams
+ * @since 1.0.3.RELEASE
+ */
+ public final void downloadTradeBill(TradeBillParams tradeBillParams) {
+ this.client().withType(WechatPayV3Type.TRADEBILL, tradeBillParams)
+ .function((wechatPayV3Type, params) -> {
+ MultiValueMap queryParams = new LinkedMultiValueMap<>();
+ LocalDate billDate = params.getBillDate();
+ queryParams.add("bill_date", billDate.format(DateTimeFormatter.ISO_DATE));
+ String subMchid = params.getSubMchid();
+
+ if (StringUtils.hasText(subMchid)) {
+ queryParams.add("sub_mchid", subMchid);
+ }
+
+ TradeBillType tradeBillType = Optional.ofNullable(params.getBillType())
+ .orElse(TradeBillType.ALL);
+ queryParams.add("bill_type", tradeBillType.name());
+ TarType tarType = params.getTarType();
+ if (Objects.nonNull(tarType)) {
+ queryParams.add("tar_type", tarType.name());
+ }
+ URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA))
+ .queryParams(queryParams)
+ .build().toUri();
+ return Get(uri);
+ })
+ .consumer(response -> this.billDownload(Objects.requireNonNull(response.getBody()).get("download_url").asText()))
+ .request();
+ }
+
+ /**
+ * 申请资金账单API
+ *
+ * 微信支付按天提供微信支付账户的资金流水账单文件,商户可以通过该接口获取账单文件的下载地址。文件内包含该账户资金操作相关的业务单号、收支金额、记账时间等信息,供商户进行核对。
+ *
+ * 注意:
+ *
+ * - 资金账单中的数据反映的是商户微信支付账户资金变动情况;
+ * - 对账单中涉及金额的字段单位为“元”。
+ *
+ *
+ * @param fundFlowBillParams fundFlowBillParams
+ * @since 1.0.3.RELEASE
+ */
+ public final void downloadFundFlowBill(FundFlowBillParams fundFlowBillParams) {
+ this.client().withType(WechatPayV3Type.FUNDFLOWBILL, fundFlowBillParams)
+ .function((wechatPayV3Type, params) -> {
+ MultiValueMap queryParams = new LinkedMultiValueMap<>();
+ LocalDate billDate = params.getBillDate();
+ queryParams.add("bill_date", billDate.format(DateTimeFormatter.ISO_DATE));
+
+ FundFlowAccountType accountType = Optional.ofNullable(params.getAccountType())
+ .orElse(FundFlowAccountType.BASIC);
+ queryParams.add("account_type", accountType.name());
+ TarType tarType = params.getTarType();
+ if (Objects.nonNull(tarType)) {
+ queryParams.add("tar_type", tarType.name());
+ }
+ URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA))
+ .queryParams(queryParams)
+ .build().toUri();
+ return Get(uri);
+ })
+ .consumer(response -> this.billDownload(Objects.requireNonNull(response.getBody()).get("download_url").asText()))
+ .request();
+ }
}
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatCombinePayApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatCombinePayApi.java
index 1169705..9c62786 100644
--- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatCombinePayApi.java
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatCombinePayApi.java
@@ -19,20 +19,16 @@
package cn.felord.payment.wechat.v3;
import cn.felord.payment.wechat.WechatPayProperties;
-import cn.felord.payment.wechat.enumeration.*;
-import cn.felord.payment.wechat.v3.model.combine.*;
+import cn.felord.payment.wechat.enumeration.WeChatServer;
+import cn.felord.payment.wechat.enumeration.WechatPayV3Type;
+import cn.felord.payment.wechat.v3.model.combine.CombineCloseParams;
+import cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams;
+import cn.felord.payment.wechat.v3.model.combine.CombinePayParams;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.springframework.http.RequestEntity;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-import org.springframework.util.StringUtils;
import org.springframework.web.util.UriComponentsBuilder;
import java.net.URI;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.Objects;
-import java.util.Optional;
/**
* 微信合单支付.
@@ -215,85 +211,4 @@ public class WechatCombinePayApi extends AbstractApi {
.request();
return wechatResponseEntity;
}
-
- /**
- * 申请交易账单API
- *
- * 微信支付按天提供交易账单文件,商户可以通过该接口获取账单文件的下载地址。文件内包含交易相关的金额、时间、营销等信息,供商户核对订单、退款、银行到账等情况。
- *
- * 注意:
- *
- * - 微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致;
- * - 对账单中涉及金额的字段单位为“元”;
- * - 对账单接口只能下载三个月以内的账单。
- * - 小微商户不单独提供对账单下载,如有需要,可在调取“下载对账单”API接口时不传sub_mch_id,获取服务商下全量电商二级商户(包括小微商户和非小微商户)的对账单。
- *
- *
- * @param tradeBillParams tradeBillParams
- * @since 1.0.3.RELEASE
- */
- public void downloadTradeBill(TradeBillParams tradeBillParams) {
- this.client().withType(WechatPayV3Type.COMBINE_TRADEBILL, tradeBillParams)
- .function((wechatPayV3Type, params) -> {
- MultiValueMap queryParams = new LinkedMultiValueMap<>();
- LocalDate billDate = params.getBillDate();
- queryParams.add("bill_date", billDate.format(DateTimeFormatter.ISO_DATE));
- String subMchid = params.getSubMchid();
-
- if (StringUtils.hasText(subMchid)) {
- queryParams.add("sub_mchid", subMchid);
- }
-
- TradeBillType tradeBillType = Optional.ofNullable(params.getBillType())
- .orElse(TradeBillType.ALL);
- queryParams.add("bill_type", tradeBillType.name());
- TarType tarType = params.getTarType();
- if (Objects.nonNull(tarType)) {
- queryParams.add("tar_type", tarType.name());
- }
- URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA))
- .queryParams(queryParams)
- .build().toUri();
- return Get(uri);
- })
- .consumer(response -> this.billDownload(Objects.requireNonNull(response.getBody()).get("download_url").asText()))
- .request();
- }
-
- /**
- * 申请资金账单API
- *
- * 微信支付按天提供微信支付账户的资金流水账单文件,商户可以通过该接口获取账单文件的下载地址。文件内包含该账户资金操作相关的业务单号、收支金额、记账时间等信息,供商户进行核对。
- *
- * 注意:
- *
- * - 资金账单中的数据反映的是商户微信支付账户资金变动情况;
- * - 对账单中涉及金额的字段单位为“元”。
- *
- *
- * @param fundFlowBillParams fundFlowBillParams
- * @since 1.0.3.RELEASE
- */
- public void downloadFundFlowBill(FundFlowBillParams fundFlowBillParams) {
- this.client().withType(WechatPayV3Type.COMBINE_FUNDFLOWBILL, fundFlowBillParams)
- .function((wechatPayV3Type, params) -> {
- MultiValueMap queryParams = new LinkedMultiValueMap<>();
- LocalDate billDate = params.getBillDate();
- queryParams.add("bill_date", billDate.format(DateTimeFormatter.ISO_DATE));
-
- FundFlowAccountType accountType = Optional.ofNullable(params.getAccountType())
- .orElse(FundFlowAccountType.BASIC);
- queryParams.add("account_type", accountType.name());
- TarType tarType = params.getTarType();
- if (Objects.nonNull(tarType)) {
- queryParams.add("tar_type", tarType.name());
- }
- URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA))
- .queryParams(queryParams)
- .build().toUri();
- return Get(uri);
- })
- .consumer(response -> this.billDownload(Objects.requireNonNull(response.getBody()).get("download_url").asText()))
- .request();
- }
}
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/FundFlowBillParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FundFlowBillParams.java
similarity index 93%
rename from payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/FundFlowBillParams.java
rename to payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FundFlowBillParams.java
index e889562..b4ad6af 100644
--- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/FundFlowBillParams.java
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FundFlowBillParams.java
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.felord.payment.wechat.v3.model.combine;
+package cn.felord.payment.wechat.v3.model;
import cn.felord.payment.wechat.enumeration.FundFlowAccountType;
import cn.felord.payment.wechat.enumeration.TarType;
@@ -24,7 +24,7 @@ import lombok.Data;
import java.time.LocalDate;
/**
- * 合单支付申请资金账单请求参数
+ * 申请资金账单请求参数
*
* @author felord.cn
* @since 1.0.3.RELEASE
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/TradeBillParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TradeBillParams.java
similarity index 95%
rename from payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/TradeBillParams.java
rename to payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TradeBillParams.java
index df7b80f..b44e0b3 100644
--- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/TradeBillParams.java
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TradeBillParams.java
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.felord.payment.wechat.v3.model.combine;
+package cn.felord.payment.wechat.v3.model;
import cn.felord.payment.wechat.enumeration.TarType;
import cn.felord.payment.wechat.enumeration.TradeBillType;
@@ -24,7 +24,7 @@ import lombok.Data;
import java.time.LocalDate;
/**
- * 合单支付申请交易账单请求参数
+ * 申请交易账单请求参数
*
* @author felord.cn
* @since 1.0.3.RELEASE