From b291dbfa44ca8acf0ea4f0d4465608e880105bb9 Mon Sep 17 00:00:00 2001 From: "felord.cn" Date: Tue, 5 Jan 2021 21:21:02 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=B8=8B=E8=BD=BD=E4=BA=A4?= =?UTF-8?q?=E6=98=93=E8=B4=A6=E5=8D=95API=E5=92=8C=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E8=B5=84=E9=87=91=E8=B4=A6=E5=8D=95=E7=8E=B0=E5=9C=A8=E6=98=AF?= =?UTF-8?q?=E5=85=AC=E5=85=B1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- docs/README.md | 3 +- docs/changelog.md | 6 ++ docs/quick_start.md | 2 +- .../wechat/enumeration/WechatPayV3Type.java | 24 ++--- .../felord/payment/wechat/v3/AbstractApi.java | 93 +++++++++++++++++- .../wechat/v3/WechatCombinePayApi.java | 95 +------------------ .../{combine => }/FundFlowBillParams.java | 4 +- .../model/{combine => }/TradeBillParams.java | 4 +- 9 files changed, 123 insertions(+), 110 deletions(-) rename payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/{combine => }/FundFlowBillParams.java (93%) rename payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/{combine => }/TradeBillParams.java (95%) 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 + *

+ * 微信支付按天提供交易账单文件,商户可以通过该接口获取账单文件的下载地址。文件内包含交易相关的金额、时间、营销等信息,供商户核对订单、退款、银行到账等情况。 + *

+ * 注意: + *

+ * + * @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