From b10e2702ce113448f5c7f902092beb5c72efaae0 Mon Sep 17 00:00:00 2001 From: "felord.cn" Date: Mon, 11 Jan 2021 14:08:14 +0800 Subject: [PATCH] 'init' --- LICENSE | 201 ++ README.md | 41 + docs/.nojekyll | 0 docs/README.md | 48 + docs/_coverpage.md | 14 + docs/_sidebar.md | 7 + docs/apidocs/allclasses-frame.html | 104 + docs/apidocs/allclasses-noframe.html | 104 + .../cn/felord/payment/PayException.html | 329 +++ .../payment/alipay/AliPayConfiguration.html | 315 ++ .../payment/alipay/AliPayProperties.V1.html | 417 +++ .../payment/alipay/AliPayProperties.html | 308 ++ .../alipay/class-use/AliPayConfiguration.html | 126 + .../alipay/class-use/AliPayProperties.V1.html | 168 ++ .../alipay/class-use/AliPayProperties.html | 166 ++ .../felord/payment/alipay/package-frame.html | 23 + .../payment/alipay/package-summary.html | 156 + .../felord/payment/alipay/package-tree.html | 141 + .../cn/felord/payment/alipay/package-use.html | 166 ++ .../autoconfigure/EnableMobilePay.html | 175 ++ .../autoconfigure/PayConfiguration.html | 247 ++ .../class-use/EnableMobilePay.html | 126 + .../class-use/PayConfiguration.html | 126 + .../payment/autoconfigure/package-frame.html | 25 + .../autoconfigure/package-summary.html | 159 + .../payment/autoconfigure/package-tree.html | 143 + .../payment/autoconfigure/package-use.html | 126 + .../payment/class-use/PayException.html | 126 + .../cn/felord/payment/package-frame.html | 21 + .../cn/felord/payment/package-summary.html | 144 + .../cn/felord/payment/package-tree.html | 151 + .../cn/felord/payment/package-use.html | 126 + .../wechat/WechatPayConfiguration.html | 405 +++ .../wechat/WechatPayProperties.V3.html | 385 +++ .../payment/wechat/WechatPayProperties.html | 307 ++ .../wechat/WechatPayResponseErrorHandler.html | 311 ++ .../class-use/WechatPayConfiguration.html | 126 + .../class-use/WechatPayProperties.V3.html | 192 ++ .../wechat/class-use/WechatPayProperties.html | 168 ++ .../WechatPayResponseErrorHandler.html | 126 + .../payment/wechat/enumeration/BankCode.html | 1091 +++++++ .../wechat/enumeration/CouponBgColor.html | 497 ++++ .../wechat/enumeration/CouponStatus.html | 371 +++ .../wechat/enumeration/StockStatus.html | 490 ++++ .../wechat/enumeration/TradeState.html | 431 +++ .../payment/wechat/enumeration/TradeType.html | 416 +++ .../wechat/enumeration/WeChatServer.html | 492 ++++ .../wechat/enumeration/WechatPayV3Type.html | 878 ++++++ .../enumeration/class-use/BankCode.html | 175 ++ .../enumeration/class-use/CouponBgColor.html | 199 ++ .../enumeration/class-use/CouponStatus.html | 175 ++ .../enumeration/class-use/StockStatus.html | 201 ++ .../enumeration/class-use/TradeState.html | 175 ++ .../enumeration/class-use/TradeType.html | 175 ++ .../enumeration/class-use/WeChatServer.html | 190 ++ .../class-use/WechatPayV3Type.html | 374 +++ .../wechat/enumeration/package-frame.html | 28 + .../wechat/enumeration/package-summary.html | 190 ++ .../wechat/enumeration/package-tree.html | 150 + .../wechat/enumeration/package-use.html | 247 ++ .../felord/payment/wechat/package-frame.html | 24 + .../payment/wechat/package-summary.html | 162 ++ .../felord/payment/wechat/package-tree.html | 146 + .../cn/felord/payment/wechat/package-use.html | 187 ++ .../felord/payment/wechat/v3/AbstractApi.html | 519 ++++ ...eConverter.MultipartHttpOutputMessage.html | 447 +++ .../v3/ExtensionFormHttpMessageConverter.html | 754 +++++ .../payment/wechat/v3/KeyPairFactory.html | 344 +++ .../payment/wechat/v3/SignatureProvider.html | 553 ++++ .../payment/wechat/v3/WechatApiProvider.html | 401 +++ .../wechat/v3/WechatCombinePayApi.html | 499 ++++ .../payment/wechat/v3/WechatDirectPayApi.html | 488 ++++ .../wechat/v3/WechatMarketingFavorApi.html | 1026 +++++++ .../payment/wechat/v3/WechatMetaBean.html | 333 +++ .../wechat/v3/WechatMetaContainer.html | 405 +++ .../v3/WechatPayCallback.EventType.html | 399 +++ .../payment/wechat/v3/WechatPayCallback.html | 473 +++ .../wechat/v3/WechatPayClient.Executor.html | 562 ++++ .../payment/wechat/v3/WechatPayClient.html | 415 +++ .../wechat/v3/WechatRequestEntity.html | 427 +++ .../wechat/v3/WechatResponseEntity.html | 446 +++ .../wechat/v3/class-use/AbstractApi.html | 180 ++ ...eConverter.MultipartHttpOutputMessage.html | 126 + .../ExtensionFormHttpMessageConverter.html | 126 + .../wechat/v3/class-use/KeyPairFactory.html | 126 + .../v3/class-use/SignatureProvider.html | 261 ++ .../v3/class-use/WechatApiProvider.html | 168 ++ .../v3/class-use/WechatCombinePayApi.html | 168 ++ .../v3/class-use/WechatDirectPayApi.html | 168 ++ .../v3/class-use/WechatMarketingFavorApi.html | 168 ++ .../wechat/v3/class-use/WechatMetaBean.html | 224 ++ .../v3/class-use/WechatMetaContainer.html | 241 ++ .../WechatPayCallback.EventType.html | 191 ++ .../v3/class-use/WechatPayCallback.html | 168 ++ .../class-use/WechatPayClient.Executor.html | 181 ++ .../wechat/v3/class-use/WechatPayClient.html | 265 ++ .../v3/class-use/WechatRequestEntity.html | 208 ++ .../v3/class-use/WechatResponseEntity.html | 366 +++ .../payment/wechat/v3/model/Amount.html | 301 ++ .../v3/model/CallbackParams.Resource.html | 347 +++ .../wechat/v3/model/CallbackParams.html | 386 +++ ...eTransactionConsumeData.CombineAmount.html | 337 +++ ...ansactionConsumeData.SubOrderCallback.html | 433 +++ .../model/CombineTransactionConsumeData.html | 392 +++ .../wechat/v3/model/ConsumeInformation.html | 321 ++ .../wechat/v3/model/CouponAvailableTime.html | 316 ++ .../wechat/v3/model/CouponConsumeData.html | 477 +++ .../v3/model/CouponDetailsQueryParams.html | 305 ++ .../wechat/v3/model/CouponUseRule.html | 360 +++ .../payment/wechat/v3/model/Detail.html | 316 ++ .../payment/wechat/v3/model/DiscountTo.html | 295 ++ .../wechat/v3/model/FixAvailableTime.html | 317 ++ .../wechat/v3/model/FixedNormalCoupon.html | 303 ++ .../felord/payment/wechat/v3/model/Goods.html | 348 +++ .../payment/wechat/v3/model/GoodsDetail.html | 321 ++ .../payment/wechat/v3/model/H5Info.html | 348 +++ .../wechat/v3/model/MchQueryParams.html | 325 +++ .../v3/model/NormalCouponInformation.html | 295 ++ .../payment/wechat/v3/model/PatternInfo.html | 349 +++ .../payment/wechat/v3/model/PayParams.html | 458 +++ .../felord/payment/wechat/v3/model/Payer.html | 316 ++ .../v3/model/PromotionDetail.GoodsDetail.html | 353 +++ .../wechat/v3/model/PromotionDetail.html | 466 +++ .../v3/model/ResponseSignVerifyParams.html | 351 +++ .../payment/wechat/v3/model/SceneInfo.html | 333 +++ .../payment/wechat/v3/model/SettleInfo.html | 300 ++ .../v3/model/SingleitemDiscountOff.html | 282 ++ .../payment/wechat/v3/model/StockUseRule.html | 366 +++ .../wechat/v3/model/StocksCreateParams.html | 465 +++ .../wechat/v3/model/StocksQueryParams.html | 379 +++ .../wechat/v3/model/StocksSendParams.html | 383 +++ .../payment/wechat/v3/model/StoreInfo.html | 332 +++ .../model/TransactionConsumeData.Amount.html | 337 +++ .../model/TransactionConsumeData.Payer.html | 289 ++ .../TransactionConsumeData.SceneInfo.html | 289 ++ .../v3/model/TransactionConsumeData.html | 525 ++++ .../v3/model/TransactionQueryParams.html | 294 ++ .../model/UserCouponsQueryParams.Status.html | 360 +++ .../v3/model/UserCouponsQueryParams.html | 434 +++ .../wechat/v3/model/class-use/Amount.html | 168 ++ .../class-use/CallbackParams.Resource.html | 168 ++ .../v3/model/class-use/CallbackParams.html | 126 + ...eTransactionConsumeData.CombineAmount.html | 168 ++ ...ansactionConsumeData.SubOrderCallback.html | 168 ++ .../CombineTransactionConsumeData.html | 169 ++ .../model/class-use/ConsumeInformation.html | 166 ++ .../model/class-use/CouponAvailableTime.html | 166 ++ .../v3/model/class-use/CouponConsumeData.html | 169 ++ .../class-use/CouponDetailsQueryParams.html | 177 ++ .../v3/model/class-use/CouponUseRule.html | 168 ++ .../wechat/v3/model/class-use/Detail.html | 168 ++ .../wechat/v3/model/class-use/DiscountTo.html | 166 ++ .../v3/model/class-use/FixAvailableTime.html | 168 ++ .../v3/model/class-use/FixedNormalCoupon.html | 166 ++ .../wechat/v3/model/class-use/Goods.html | 168 ++ .../v3/model/class-use/GoodsDetail.html | 166 ++ .../wechat/v3/model/class-use/H5Info.html | 190 ++ .../v3/model/class-use/MchQueryParams.html | 185 ++ .../class-use/NormalCouponInformation.html | 166 ++ .../v3/model/class-use/PatternInfo.html | 168 ++ .../wechat/v3/model/class-use/PayParams.html | 191 ++ .../wechat/v3/model/class-use/Payer.html | 168 ++ .../PromotionDetail.GoodsDetail.html | 168 ++ .../v3/model/class-use/PromotionDetail.html | 168 ++ .../class-use/ResponseSignVerifyParams.html | 196 ++ .../wechat/v3/model/class-use/SceneInfo.html | 174 ++ .../wechat/v3/model/class-use/SettleInfo.html | 168 ++ .../class-use/SingleitemDiscountOff.html | 166 ++ .../v3/model/class-use/StockUseRule.html | 168 ++ .../model/class-use/StocksCreateParams.html | 177 ++ .../v3/model/class-use/StocksQueryParams.html | 177 ++ .../v3/model/class-use/StocksSendParams.html | 177 ++ .../wechat/v3/model/class-use/StoreInfo.html | 168 ++ .../TransactionConsumeData.Amount.html | 168 ++ .../TransactionConsumeData.Payer.html | 168 ++ .../TransactionConsumeData.SceneInfo.html | 168 ++ .../class-use/TransactionConsumeData.html | 169 ++ .../class-use/TransactionQueryParams.html | 179 ++ .../UserCouponsQueryParams.Status.html | 190 ++ .../class-use/UserCouponsQueryParams.html | 177 ++ .../v3/model/combine/CombineAmount.html | 305 ++ .../CombineCloseParams.ClosingSubOrder.html | 325 +++ .../v3/model/combine/CombineCloseParams.html | 338 +++ .../v3/model/combine/CombineH5PayParams.html | 415 +++ .../v3/model/combine/CombineH5SceneInfo.html | 280 ++ .../v3/model/combine/CombinePayParams.html | 415 +++ .../v3/model/combine/CombinePayerInfo.html | 285 ++ .../v3/model/combine/CombineSceneInfo.html | 305 ++ .../wechat/v3/model/combine/SubOrder.html | 385 +++ .../combine/class-use/CombineAmount.html | 168 ++ .../CombineCloseParams.ClosingSubOrder.html | 168 ++ .../combine/class-use/CombineCloseParams.html | 168 ++ .../combine/class-use/CombineH5PayParams.html | 175 ++ .../combine/class-use/CombineH5SceneInfo.html | 168 ++ .../combine/class-use/CombinePayParams.html | 191 ++ .../combine/class-use/CombinePayerInfo.html | 198 ++ .../combine/class-use/CombineSceneInfo.html | 181 ++ .../v3/model/combine/class-use/SubOrder.html | 174 ++ .../v3/model/combine/package-frame.html | 29 + .../v3/model/combine/package-summary.html | 192 ++ .../wechat/v3/model/combine/package-tree.html | 150 + .../wechat/v3/model/combine/package-use.html | 236 ++ .../wechat/v3/model/package-frame.html | 64 + .../wechat/v3/model/package-summary.html | 383 +++ .../payment/wechat/v3/model/package-tree.html | 190 ++ .../payment/wechat/v3/model/package-use.html | 377 +++ .../payment/wechat/v3/package-frame.html | 40 + .../payment/wechat/v3/package-summary.html | 259 ++ .../payment/wechat/v3/package-tree.html | 181 ++ .../felord/payment/wechat/v3/package-use.html | 269 ++ docs/apidocs/constant-values.html | 202 ++ docs/apidocs/deprecated-list.html | 126 + docs/apidocs/help-doc.html | 231 ++ docs/apidocs/index-all.html | 2580 +++++++++++++++++ docs/apidocs/index.html | 76 + docs/apidocs/overview-frame.html | 29 + docs/apidocs/overview-summary.html | 168 ++ docs/apidocs/overview-tree.html | 278 ++ docs/apidocs/package-list | 8 + docs/apidocs/script.js | 30 + docs/apidocs/serialized-form.html | 139 + docs/apidocs/stylesheet.css | 574 ++++ docs/changelog.md | 31 + docs/img/cert_path.png | Bin 0 -> 37607 bytes docs/img/csr.png | Bin 0 -> 54506 bytes docs/img/file_info.png | Bin 0 -> 22482 bytes docs/img/qqun.png | Bin 0 -> 18353 bytes docs/img/set.png | Bin 0 -> 39782 bytes docs/index.html | 40 + docs/quick_start.md | 177 ++ docs/stackoverflow.md | 56 + docs/wechat_v3_api.md | 112 + payment-spring-boot-autoconfigure/pom.xml | 61 + .../java/cn/felord/payment/PayException.java | 45 + .../payment/alipay/AliPayConfiguration.java | 91 + .../payment/alipay/AliPayProperties.java | 89 + .../autoconfigure/EnableMobilePay.java | 34 + .../autoconfigure/PayConfiguration.java | 33 + .../wechat/WechatPayConfiguration.java | 104 + .../wechat/WechatPayConfiguredCondition.java | 64 + .../payment/wechat/WechatPayProperties.java | 78 + .../wechat/WechatPayResponseErrorHandler.java | 36 + .../payment/wechat/enumeration/BankCode.java | 332 +++ .../wechat/enumeration/ContractStatus.java | 45 + .../payment/wechat/enumeration/CountType.java | 35 + .../wechat/enumeration/CouponBgColor.java | 92 + .../wechat/enumeration/CouponStatus.java | 46 + .../enumeration/FundFlowAccountType.java | 38 + .../wechat/enumeration/StockStatus.java | 86 + .../wechat/enumeration/StrategyType.java | 35 + .../payment/wechat/enumeration/TarType.java | 31 + .../wechat/enumeration/TradeBillType.java | 40 + .../wechat/enumeration/TradeState.java | 70 + .../payment/wechat/enumeration/TradeType.java | 64 + .../wechat/enumeration/UnfinishedReason.java | 36 + .../wechat/enumeration/WeChatServer.java | 92 + .../wechat/enumeration/WechatPayV3Type.java | 404 +++ .../felord/payment/wechat/v3/AbstractApi.java | 266 ++ .../v3/ExtensionFormHttpMessageConverter.java | 446 +++ .../payment/wechat/v3/KeyPairFactory.java | 76 + .../payment/wechat/v3/SignatureProvider.java | 271 ++ .../payment/wechat/v3/WechatApiProvider.java | 110 + .../wechat/v3/WechatCombinePayApi.java | 214 ++ .../payment/wechat/v3/WechatDirectPayApi.java | 197 ++ .../wechat/v3/WechatDiscountCardApi.java | 120 + .../wechat/v3/WechatMarketingFavorApi.java | 637 ++++ .../payment/wechat/v3/WechatMetaBean.java | 52 + .../wechat/v3/WechatMetaContainer.java | 76 + .../payment/wechat/v3/WechatPayCallback.java | 381 +++ .../payment/wechat/v3/WechatPayClient.java | 314 ++ .../payment/wechat/v3/WechatPayScoreApi.java | 467 +++ .../wechat/v3/WechatRequestEntity.java | 94 + .../wechat/v3/WechatResponseEntity.java | 126 + .../payment/wechat/v3/model/Amount.java | 39 + .../wechat/v3/model/CallbackParams.java | 84 + .../wechat/v3/model/ConsumeInformation.java | 54 + .../wechat/v3/model/CouponAvailableTime.java | 43 + .../wechat/v3/model/CouponConsumeData.java | 112 + .../v3/model/CouponDetailsQueryParams.java | 41 + .../wechat/v3/model/CouponUseRule.java | 109 + .../payment/wechat/v3/model/Detail.java | 45 + .../payment/wechat/v3/model/DiscountTo.java | 41 + .../wechat/v3/model/FixAvailableTime.java | 47 + .../wechat/v3/model/FixedNormalCoupon.java | 44 + .../wechat/v3/model/FundFlowBillParams.java | 52 + .../felord/payment/wechat/v3/model/Goods.java | 49 + .../payment/wechat/v3/model/GoodsDetail.java | 49 + .../payment/wechat/v3/model/H5Info.java | 51 + .../wechat/v3/model/MchQueryParams.java | 47 + .../v3/model/NormalCouponInformation.java | 41 + .../payment/wechat/v3/model/PatternInfo.java | 54 + .../payment/wechat/v3/model/PayParams.java | 84 + .../felord/payment/wechat/v3/model/Payer.java | 43 + .../wechat/v3/model/PromotionDetail.java | 111 + .../v3/model/ResponseSignVerifyParams.java | 53 + .../payment/wechat/v3/model/SceneInfo.java | 47 + .../payment/wechat/v3/model/SettleInfo.java | 37 + .../v3/model/SingleitemDiscountOff.java | 34 + .../payment/wechat/v3/model/StockUseRule.java | 57 + .../wechat/v3/model/StocksCreateParams.java | 88 + .../wechat/v3/model/StocksQueryParams.java | 65 + .../wechat/v3/model/StocksSendParams.java | 61 + .../payment/wechat/v3/model/StoreInfo.java | 45 + .../wechat/v3/model/TradeBillParams.java | 70 + .../v3/model/TransactionConsumeData.java | 149 + .../v3/model/TransactionQueryParams.java | 31 + .../v3/model/UserCouponsQueryParams.java | 86 + .../v3/model/combine/CombineAmount.java | 46 + .../v3/model/combine/CombineCloseParams.java | 74 + .../v3/model/combine/CombineH5PayParams.java | 77 + .../v3/model/combine/CombineH5SceneInfo.java | 37 + .../v3/model/combine/CombinePayParams.java | 77 + .../v3/model/combine/CombinePayerInfo.java | 36 + .../v3/model/combine/CombineSceneInfo.java | 39 + .../CombineTransactionConsumeData.java | 156 + .../wechat/v3/model/combine/SubOrder.java | 71 + .../DiscountCardAcceptedConsumeData.java | 185 ++ .../DiscountCardAgreementEndConsumeData.java | 194 ++ .../discountcard/DiscountCardConsumer.java | 44 + .../DiscountCardPreRequestParams.java | 50 + .../DiscountCardUserPaidConsumeData.java | 114 + .../ObjectiveCompletionRecord.java | 61 + .../model/discountcard/RewardUsageRecord.java | 70 + .../model/discountcard/UserRecordsParams.java | 49 + .../payscore/CancelServiceOrderParams.java | 47 + .../payscore/CompleteServiceOrderParams.java | 111 + .../DirectCompleteServiceOrderParams.java | 89 + .../wechat/v3/model/payscore/Location.java | 51 + .../payscore/ModifyServiceOrderParams.java | 70 + .../v3/model/payscore/PayScoreConsumer.java | 40 + .../PayScoreUserConfirmConsumeData.java | 98 + .../payscore/PayScoreUserPaidConsumeData.java | 105 + .../PayScoreUserPermissionConsumeData.java | 70 + .../model/payscore/PayServiceOrderParams.java | 48 + .../v3/model/payscore/PaymentCollection.java | 91 + .../payscore/PermissionsAuthCodeParams.java | 47 + .../payscore/PermissionsOpenIdParams.java | 53 + .../v3/model/payscore/PostDiscount.java | 58 + .../wechat/v3/model/payscore/PostPayment.java | 59 + .../v3/model/payscore/PromotionDetail.java | 110 + .../payscore/QueryServiceOrderParams.java | 43 + .../wechat/v3/model/payscore/RiskFund.java | 78 + .../ServiceOrderPermissionParams.java | 51 + .../payscore/SyncServiceOrderParams.java | 82 + .../wechat/v3/model/payscore/TimeRange.java | 83 + .../payscore/UserServiceOrderParams.java | 102 + .../payscore/UserServiceStateParams.java | 42 + payment-spring-boot-starter/pom.xml | 40 + .../src/main/resources/LICENSE | 201 ++ pom.xml | 182 ++ 350 files changed, 70645 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 docs/.nojekyll create mode 100644 docs/README.md create mode 100644 docs/_coverpage.md create mode 100644 docs/_sidebar.md create mode 100644 docs/apidocs/allclasses-frame.html create mode 100644 docs/apidocs/allclasses-noframe.html create mode 100644 docs/apidocs/cn/felord/payment/PayException.html create mode 100644 docs/apidocs/cn/felord/payment/alipay/AliPayConfiguration.html create mode 100644 docs/apidocs/cn/felord/payment/alipay/AliPayProperties.V1.html create mode 100644 docs/apidocs/cn/felord/payment/alipay/AliPayProperties.html create mode 100644 docs/apidocs/cn/felord/payment/alipay/class-use/AliPayConfiguration.html create mode 100644 docs/apidocs/cn/felord/payment/alipay/class-use/AliPayProperties.V1.html create mode 100644 docs/apidocs/cn/felord/payment/alipay/class-use/AliPayProperties.html create mode 100644 docs/apidocs/cn/felord/payment/alipay/package-frame.html create mode 100644 docs/apidocs/cn/felord/payment/alipay/package-summary.html create mode 100644 docs/apidocs/cn/felord/payment/alipay/package-tree.html create mode 100644 docs/apidocs/cn/felord/payment/alipay/package-use.html create mode 100644 docs/apidocs/cn/felord/payment/autoconfigure/EnableMobilePay.html create mode 100644 docs/apidocs/cn/felord/payment/autoconfigure/PayConfiguration.html create mode 100644 docs/apidocs/cn/felord/payment/autoconfigure/class-use/EnableMobilePay.html create mode 100644 docs/apidocs/cn/felord/payment/autoconfigure/class-use/PayConfiguration.html create mode 100644 docs/apidocs/cn/felord/payment/autoconfigure/package-frame.html create mode 100644 docs/apidocs/cn/felord/payment/autoconfigure/package-summary.html create mode 100644 docs/apidocs/cn/felord/payment/autoconfigure/package-tree.html create mode 100644 docs/apidocs/cn/felord/payment/autoconfigure/package-use.html create mode 100644 docs/apidocs/cn/felord/payment/class-use/PayException.html create mode 100644 docs/apidocs/cn/felord/payment/package-frame.html create mode 100644 docs/apidocs/cn/felord/payment/package-summary.html create mode 100644 docs/apidocs/cn/felord/payment/package-tree.html create mode 100644 docs/apidocs/cn/felord/payment/package-use.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/WechatPayConfiguration.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/WechatPayProperties.V3.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/WechatPayProperties.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/WechatPayResponseErrorHandler.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayConfiguration.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayProperties.V3.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayProperties.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayResponseErrorHandler.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/BankCode.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/CouponBgColor.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/CouponStatus.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/StockStatus.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/TradeState.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/TradeType.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/WeChatServer.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/WechatPayV3Type.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/BankCode.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/CouponBgColor.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/CouponStatus.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/StockStatus.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/TradeState.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/TradeType.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/WeChatServer.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/WechatPayV3Type.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/package-frame.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/package-summary.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/package-tree.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/enumeration/package-use.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/package-frame.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/package-summary.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/package-tree.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/package-use.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/AbstractApi.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/ExtensionFormHttpMessageConverter.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/KeyPairFactory.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/SignatureProvider.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatApiProvider.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatCombinePayApi.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatDirectPayApi.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatMetaBean.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatMetaContainer.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatPayCallback.EventType.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatPayCallback.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatPayClient.Executor.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatPayClient.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatRequestEntity.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/WechatResponseEntity.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/AbstractApi.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/ExtensionFormHttpMessageConverter.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/KeyPairFactory.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/SignatureProvider.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatApiProvider.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatCombinePayApi.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatDirectPayApi.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMarketingFavorApi.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMetaBean.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMetaContainer.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayCallback.EventType.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayCallback.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayClient.Executor.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayClient.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatRequestEntity.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatResponseEntity.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/Amount.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/CallbackParams.Resource.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/CallbackParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.CombineAmount.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.SubOrderCallback.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/ConsumeInformation.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/CouponAvailableTime.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/CouponConsumeData.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/CouponDetailsQueryParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/CouponUseRule.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/Detail.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/DiscountTo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/FixAvailableTime.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/FixedNormalCoupon.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/Goods.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/GoodsDetail.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/H5Info.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/MchQueryParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/NormalCouponInformation.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/PatternInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/PayParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/Payer.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/PromotionDetail.GoodsDetail.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/PromotionDetail.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/ResponseSignVerifyParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/SceneInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/SettleInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/SingleitemDiscountOff.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/StockUseRule.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/StocksCreateParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/StocksQueryParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/StocksSendParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/StoreInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.Amount.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.Payer.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.SceneInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionQueryParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.Status.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Amount.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CallbackParams.Resource.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CallbackParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.CombineAmount.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.SubOrderCallback.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/ConsumeInformation.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponAvailableTime.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponConsumeData.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponDetailsQueryParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponUseRule.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Detail.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/DiscountTo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/FixAvailableTime.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/FixedNormalCoupon.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Goods.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/GoodsDetail.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/H5Info.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/MchQueryParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/NormalCouponInformation.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PatternInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PayParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Payer.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PromotionDetail.GoodsDetail.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PromotionDetail.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/ResponseSignVerifyParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SceneInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SettleInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SingleitemDiscountOff.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StockUseRule.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksCreateParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksQueryParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksSendParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StoreInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.Amount.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.Payer.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.SceneInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionQueryParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/UserCouponsQueryParams.Status.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/UserCouponsQueryParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineAmount.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.ClosingSubOrder.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineH5PayParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineH5SceneInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombinePayParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombinePayerInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineSceneInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/SubOrder.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineAmount.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineCloseParams.ClosingSubOrder.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineCloseParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineH5PayParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineH5SceneInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombinePayParams.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombinePayerInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineSceneInfo.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/SubOrder.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-frame.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-summary.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-tree.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-use.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/package-frame.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/package-summary.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/package-tree.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/model/package-use.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/package-frame.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/package-summary.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/package-tree.html create mode 100644 docs/apidocs/cn/felord/payment/wechat/v3/package-use.html create mode 100644 docs/apidocs/constant-values.html create mode 100644 docs/apidocs/deprecated-list.html create mode 100644 docs/apidocs/help-doc.html create mode 100644 docs/apidocs/index-all.html create mode 100644 docs/apidocs/index.html create mode 100644 docs/apidocs/overview-frame.html create mode 100644 docs/apidocs/overview-summary.html create mode 100644 docs/apidocs/overview-tree.html create mode 100644 docs/apidocs/package-list create mode 100644 docs/apidocs/script.js create mode 100644 docs/apidocs/serialized-form.html create mode 100644 docs/apidocs/stylesheet.css create mode 100644 docs/changelog.md create mode 100644 docs/img/cert_path.png create mode 100644 docs/img/csr.png create mode 100644 docs/img/file_info.png create mode 100644 docs/img/qqun.png create mode 100644 docs/img/set.png create mode 100644 docs/index.html create mode 100644 docs/quick_start.md create mode 100644 docs/stackoverflow.md create mode 100644 docs/wechat_v3_api.md create mode 100644 payment-spring-boot-autoconfigure/pom.xml create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/PayException.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/alipay/AliPayConfiguration.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/alipay/AliPayProperties.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/autoconfigure/EnableMobilePay.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/autoconfigure/PayConfiguration.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayConfiguration.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayConfiguredCondition.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayProperties.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayResponseErrorHandler.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/BankCode.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/ContractStatus.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CountType.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CouponBgColor.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CouponStatus.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/FundFlowAccountType.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/StockStatus.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/StrategyType.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TarType.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeBillType.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeState.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeType.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/UnfinishedReason.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WeChatServer.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WechatPayV3Type.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/AbstractApi.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/ExtensionFormHttpMessageConverter.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/KeyPairFactory.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatApiProvider.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatCombinePayApi.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatDirectPayApi.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatDiscountCardApi.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMetaBean.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMetaContainer.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayClient.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatRequestEntity.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatResponseEntity.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Amount.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CallbackParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/ConsumeInformation.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponAvailableTime.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponConsumeData.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponDetailsQueryParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponUseRule.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Detail.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/DiscountTo.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FixAvailableTime.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FixedNormalCoupon.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FundFlowBillParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Goods.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/GoodsDetail.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/H5Info.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/MchQueryParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/NormalCouponInformation.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PatternInfo.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PayParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Payer.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PromotionDetail.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/ResponseSignVerifyParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SceneInfo.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SettleInfo.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SingleitemDiscountOff.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StockUseRule.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksCreateParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksQueryParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksSendParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StoreInfo.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TradeBillParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TransactionConsumeData.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TransactionQueryParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineAmount.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineH5PayParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineH5SceneInfo.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombinePayParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombinePayerInfo.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineSceneInfo.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineTransactionConsumeData.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/SubOrder.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardAcceptedConsumeData.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardAgreementEndConsumeData.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardConsumer.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardPreRequestParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardUserPaidConsumeData.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/ObjectiveCompletionRecord.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/RewardUsageRecord.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/UserRecordsParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/CancelServiceOrderParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/CompleteServiceOrderParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/DirectCompleteServiceOrderParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/Location.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/ModifyServiceOrderParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreConsumer.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserConfirmConsumeData.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserPaidConsumeData.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserPermissionConsumeData.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayServiceOrderParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PaymentCollection.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PermissionsAuthCodeParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PermissionsOpenIdParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PostDiscount.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PostPayment.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PromotionDetail.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/QueryServiceOrderParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/RiskFund.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/ServiceOrderPermissionParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/SyncServiceOrderParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/TimeRange.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/UserServiceOrderParams.java create mode 100644 payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/UserServiceStateParams.java create mode 100644 payment-spring-boot-starter/pom.xml create mode 100644 payment-spring-boot-starter/src/main/resources/LICENSE create mode 100644 pom.xml diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..411a1e5 --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +# 微信支付 Spring Boot 组件 + +为了满足业务中出现app支付、公众号支付、小程序支付等多appid并存的场景,对原有的进行了增强开发出了多租户版本。 + +请给[Payment Spring Boot](https://github.com/NotFound403/payment-spring-boot) **Star**以鼓励,谢谢。 + + +## Maven 最新中央仓库坐标 + +```xml + + cn.felord + payment-spring-boot-starter + 1.0.3.RELEASE + +``` + +## 功能 +- 实现微信支付多商户 +- 集成支付宝SDK、快速接入Spring Boot +- 实现微信支付V3 基础支付 +- 实现微信支付V3 合单支付 +- 实现微信支付V3 代金券 +- 实现微信支付V3 微信支付分 +- 实现微信支付V3 先享卡 + +## 开源协议 +**Apache 2.0** + +## 仓库地址 +- [GitHub](https://github.com/NotFound403/payment-spring-boot) +- [Gitee](https://gitee.com/felord/payment-spring-boot) + +## 文档地址 +- [payment-spring-boot GitHub文档](https://notfound403.github.io/payment-spring-boot) +- [payment-spring-boot Gitee文档](https://felord.gitee.io/payment-spring-boot) + +## QQ交流群 +为了交流解惑,新建QQ群,可通过扫码进入。 + +![QQ交流群](./docs/img/qqun.png) \ No newline at end of file diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..6a5a65e --- /dev/null +++ b/docs/README.md @@ -0,0 +1,48 @@ +## 前言 +大部分的 **Java Web** 项目都会使用 **Spring**,尤其是 **Spring Boot**。所以笔者在开发过程中萌生一种直接构建于Spring依赖之上的支付开发包的想法。由于支付宝已经提供了SDK,所以只要将其初始化委托给 **Spring** 即可。剩下的硬骨头就是微信支付了。 + +## 微信支付V3的优势 + +笔者最开始实现微信支付的时候刚好**微信支付V3**版本的 **API**公布了。相比较于 **V2**版本: + +- [x] 遵循统一的 **Restful** 的设计风格 +- [x] 使用 **JSON** 作为数据交互的格式,不再使用XML +- [x] 使用基于非对称密钥的 **SHA256-RSA** 的数字签名算法,不再使用 **MD5** 或 **HMAC-SHA256** +- [x] 不再要求 **HTTPS** 客户端证书 +- [x] 使用 **AES-256-GCM**,对回调中的关键信息进行加密保护 + +这种开发体验要远远好于之前的 **V2**,因此选择了微信支付V3。 + +## 目前支持的渠道 + +- [x] **微信支付V3** 全量支持,并支持多租户以同时满足移动应用App、公众号、小程序等支付场景 +- [x] **支付宝** 集成SDK,作简单适配 + +## 微信支付V3进度 +- 微信支付营销-代金券 `WechatMarketingFavorApi` 100% +- 微信支付 支付功能-普通支付直连模式 `WechatDirectPayApi` 100% +- 微信合单支付 `WechatCombinePayApi` 100% + +## Maven 中央仓库坐标 +> 推荐使用最新版本 +```xml + + cn.felord + payment-spring-boot-starter + 1.0.3.RELEASE + +``` +## 采用技术 +只依赖了 **Spring**已有的东西,做到了低依赖。 + +- **Spring** +- **Jackson** +- **Ali-pay-sdk** + +## 开源协议 + +本项目采用[Apache2.0](https://www.apache.org/licenses/LICENSE-2.0)开源协议。 + +## **免责声明** + +**本项目涉及到资金交易开发,开发者需要经严格测试后方能用于生产环境,本项目不对使用者的行为负责。** \ No newline at end of file diff --git a/docs/_coverpage.md b/docs/_coverpage.md new file mode 100644 index 0000000..b6d6e26 --- /dev/null +++ b/docs/_coverpage.md @@ -0,0 +1,14 @@ + +# Payment Spring Boot + +> Spring Boot 风格支付开发包 + +- 简单、快捷、融合Spring Boot生态 + + +[GitHub](https://github.com/NotFound403/payment-spring-boot) +[示例项目](https://github.com/NotFound403/payment-spring-boot-samples) +[技术博客](https://felord.cn) +[快速开始](README.md) + +![color](#9ee8bd) \ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md new file mode 100644 index 0000000..6be5292 --- /dev/null +++ b/docs/_sidebar.md @@ -0,0 +1,7 @@ +* [首页](/) +* [项目简介](README.md) +* [快速接入](quick_start.md) +* [JavaDoc](apidocs/index.html ':ignore') +* [微信支付V3接口文档](wechat_v3_api.md) +* [日常踩坑](stackoverflow.md) +* [更新日志](changelog.md) diff --git a/docs/apidocs/allclasses-frame.html b/docs/apidocs/allclasses-frame.html new file mode 100644 index 0000000..8a9ff02 --- /dev/null +++ b/docs/apidocs/allclasses-frame.html @@ -0,0 +1,104 @@ + + + + + + +所有类 (payment-spring-boot 1.0.0.RELEASE API) + + + + + +

所有类

+
+ +
+ + diff --git a/docs/apidocs/allclasses-noframe.html b/docs/apidocs/allclasses-noframe.html new file mode 100644 index 0000000..d943732 --- /dev/null +++ b/docs/apidocs/allclasses-noframe.html @@ -0,0 +1,104 @@ + + + + + + +所有类 (payment-spring-boot 1.0.0.RELEASE API) + + + + + +

所有类

+
+ +
+ + diff --git a/docs/apidocs/cn/felord/payment/PayException.html b/docs/apidocs/cn/felord/payment/PayException.html new file mode 100644 index 0000000..2721956 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/PayException.html @@ -0,0 +1,329 @@ + + + + + + +PayException (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment
+

类 PayException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PayException

        +
        public PayException()
        +
      • +
      + + + +
        +
      • +

        PayException

        +
        public PayException(String message)
        +
      • +
      + + + +
        +
      • +

        PayException

        +
        public PayException(String message,
        +                    Throwable cause)
        +
      • +
      + + + +
        +
      • +

        PayException

        +
        public PayException(Throwable cause)
        +
      • +
      + + + +
        +
      • +

        PayException

        +
        public PayException(String message,
        +                    Throwable cause,
        +                    boolean enableSuppression,
        +                    boolean writableStackTrace)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/alipay/AliPayConfiguration.html b/docs/apidocs/cn/felord/payment/alipay/AliPayConfiguration.html new file mode 100644 index 0000000..85502fd --- /dev/null +++ b/docs/apidocs/cn/felord/payment/alipay/AliPayConfiguration.html @@ -0,0 +1,315 @@ + + + + + + +AliPayConfiguration (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.alipay
+

类 AliPayConfiguration

+
+
+ +
+
    +
  • +
    +
    +
    @Configuration
    + @ConditionalOnProperty(prefix="ali.pay",
    +                       name="v1.app-id")
    + @EnableConfigurationProperties(value=AliPayProperties.class)
    +public class AliPayConfiguration
    +extends Object
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        AliPayConfiguration

        +
        public AliPayConfiguration()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        alipayClient

        +
        @Bean
        +public com.alipay.api.AlipayClient alipayClient(AliPayProperties aliPayProperties)
        +                                                throws com.alipay.api.AlipayApiException
        +
        +
        抛出:
        +
        com.alipay.api.AlipayApiException
        +
        +
      • +
      + + + +
        +
      • +

        getFileAbsolutePath

        +
        private String getFileAbsolutePath(String classPath)
        +
      • +
      + + + +
        +
      • +

        appRSAPrivateKey

        +
        private String appRSAPrivateKey(String classPath)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/alipay/AliPayProperties.V1.html b/docs/apidocs/cn/felord/payment/alipay/AliPayProperties.V1.html new file mode 100644 index 0000000..de9f70f --- /dev/null +++ b/docs/apidocs/cn/felord/payment/alipay/AliPayProperties.V1.html @@ -0,0 +1,417 @@ + + + + + + +AliPayProperties.V1 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.alipay
+

类 AliPayProperties.V1

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    AliPayProperties
    +
    +
    +
    +
    public static class AliPayProperties.V1
    +extends Object
    +
    The type V 1.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        serverUrl

        +
        private String serverUrl
        +
        alipay server
        +
      • +
      + + + +
        +
      • +

        appId

        +
        private String appId
        +
        your app ID
        +
      • +
      + + + +
        +
      • +

        appPrivateKeyPath

        +
        private String appPrivateKeyPath
        +
        your app private key, which must be in a single line
        +
      • +
      + + + +
        +
      • +

        signType

        +
        private String signType
        +
        sign type default RSA2
        +
      • +
      + + + +
        +
      • +

        format

        +
        private String format
        +
        data format only json now
        +
      • +
      + + + +
        +
      • +

        charset

        +
        private String charset
        +
        charset default utf-8
        +
      • +
      + + + +
        +
      • +

        alipayPublicCertPath

        +
        private String alipayPublicCertPath
        +
        alipay public cert path
        +
      • +
      + + + +
        +
      • +

        alipayRootCertPath

        +
        private String alipayRootCertPath
        +
        alipay root cert path
        +
      • +
      + + + +
        +
      • +

        appCertPublicKeyPath

        +
        private String appCertPublicKeyPath
        +
        appCertPublicKey
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        V1

        +
        public V1()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/alipay/AliPayProperties.html b/docs/apidocs/cn/felord/payment/alipay/AliPayProperties.html new file mode 100644 index 0000000..be2fc81 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/alipay/AliPayProperties.html @@ -0,0 +1,308 @@ + + + + + + +AliPayProperties (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.alipay
+

类 AliPayProperties

+
+
+ +
+
    +
  • +
    +
    +
    @ConfigurationProperties(value="ali.pay")
    +public class AliPayProperties
    +extends Object
    +
    The type Ali pay properties.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        v1

        +
        @NestedConfigurationProperty
        +private AliPayProperties.V1 v1
        +
        alipay api version 1.0
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        AliPayProperties

        +
        public AliPayProperties()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/alipay/class-use/AliPayConfiguration.html b/docs/apidocs/cn/felord/payment/alipay/class-use/AliPayConfiguration.html new file mode 100644 index 0000000..af5619d --- /dev/null +++ b/docs/apidocs/cn/felord/payment/alipay/class-use/AliPayConfiguration.html @@ -0,0 +1,126 @@ + + + + + + +类 cn.felord.payment.alipay.AliPayConfiguration的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.alipay.AliPayConfiguration

+
+
没有cn.felord.payment.alipay.AliPayConfiguration的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/alipay/class-use/AliPayProperties.V1.html b/docs/apidocs/cn/felord/payment/alipay/class-use/AliPayProperties.V1.html new file mode 100644 index 0000000..5bc57e1 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/alipay/class-use/AliPayProperties.V1.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.alipay.AliPayProperties.V1的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.alipay.AliPayProperties.V1

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/alipay/class-use/AliPayProperties.html b/docs/apidocs/cn/felord/payment/alipay/class-use/AliPayProperties.html new file mode 100644 index 0000000..78688f0 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/alipay/class-use/AliPayProperties.html @@ -0,0 +1,166 @@ + + + + + + +类 cn.felord.payment.alipay.AliPayProperties的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.alipay.AliPayProperties

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/alipay/package-frame.html b/docs/apidocs/cn/felord/payment/alipay/package-frame.html new file mode 100644 index 0000000..5556faf --- /dev/null +++ b/docs/apidocs/cn/felord/payment/alipay/package-frame.html @@ -0,0 +1,23 @@ + + + + + + +cn.felord.payment.alipay (payment-spring-boot 1.0.0.RELEASE API) + + + + + +

cn.felord.payment.alipay

+
+

+ +
+ + diff --git a/docs/apidocs/cn/felord/payment/alipay/package-summary.html b/docs/apidocs/cn/felord/payment/alipay/package-summary.html new file mode 100644 index 0000000..734cbc4 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/alipay/package-summary.html @@ -0,0 +1,156 @@ + + + + + + +cn.felord.payment.alipay (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包 cn.felord.payment.alipay

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/alipay/package-tree.html b/docs/apidocs/cn/felord/payment/alipay/package-tree.html new file mode 100644 index 0000000..f3fb8b3 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/alipay/package-tree.html @@ -0,0 +1,141 @@ + + + + + + +cn.felord.payment.alipay 类分层结构 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包cn.felord.payment.alipay的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/alipay/package-use.html b/docs/apidocs/cn/felord/payment/alipay/package-use.html new file mode 100644 index 0000000..7e3950e --- /dev/null +++ b/docs/apidocs/cn/felord/payment/alipay/package-use.html @@ -0,0 +1,166 @@ + + + + + + +程序包 cn.felord.payment.alipay的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包的使用
cn.felord.payment.alipay

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/autoconfigure/EnableMobilePay.html b/docs/apidocs/cn/felord/payment/autoconfigure/EnableMobilePay.html new file mode 100644 index 0000000..9eac4b2 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/autoconfigure/EnableMobilePay.html @@ -0,0 +1,175 @@ + + + + + + +EnableMobilePay (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.autoconfigure
+

注释类型 EnableMobilePay

+
+
+
+ +
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/autoconfigure/PayConfiguration.html b/docs/apidocs/cn/felord/payment/autoconfigure/PayConfiguration.html new file mode 100644 index 0000000..1e93a63 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/autoconfigure/PayConfiguration.html @@ -0,0 +1,247 @@ + + + + + + +PayConfiguration (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.autoconfigure
+

类 PayConfiguration

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PayConfiguration

        +
        public PayConfiguration()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/autoconfigure/class-use/EnableMobilePay.html b/docs/apidocs/cn/felord/payment/autoconfigure/class-use/EnableMobilePay.html new file mode 100644 index 0000000..94c22ca --- /dev/null +++ b/docs/apidocs/cn/felord/payment/autoconfigure/class-use/EnableMobilePay.html @@ -0,0 +1,126 @@ + + + + + + +类 cn.felord.payment.autoconfigure.EnableMobilePay的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.autoconfigure.EnableMobilePay

+
+
没有cn.felord.payment.autoconfigure.EnableMobilePay的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/autoconfigure/class-use/PayConfiguration.html b/docs/apidocs/cn/felord/payment/autoconfigure/class-use/PayConfiguration.html new file mode 100644 index 0000000..2f5f405 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/autoconfigure/class-use/PayConfiguration.html @@ -0,0 +1,126 @@ + + + + + + +类 cn.felord.payment.autoconfigure.PayConfiguration的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.autoconfigure.PayConfiguration

+
+
没有cn.felord.payment.autoconfigure.PayConfiguration的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/autoconfigure/package-frame.html b/docs/apidocs/cn/felord/payment/autoconfigure/package-frame.html new file mode 100644 index 0000000..570fefb --- /dev/null +++ b/docs/apidocs/cn/felord/payment/autoconfigure/package-frame.html @@ -0,0 +1,25 @@ + + + + + + +cn.felord.payment.autoconfigure (payment-spring-boot 1.0.0.RELEASE API) + + + + + +

cn.felord.payment.autoconfigure

+
+

+ +

注释类型

+ +
+ + diff --git a/docs/apidocs/cn/felord/payment/autoconfigure/package-summary.html b/docs/apidocs/cn/felord/payment/autoconfigure/package-summary.html new file mode 100644 index 0000000..7c1c73f --- /dev/null +++ b/docs/apidocs/cn/felord/payment/autoconfigure/package-summary.html @@ -0,0 +1,159 @@ + + + + + + +cn.felord.payment.autoconfigure (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包 cn.felord.payment.autoconfigure

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/autoconfigure/package-tree.html b/docs/apidocs/cn/felord/payment/autoconfigure/package-tree.html new file mode 100644 index 0000000..688fad2 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/autoconfigure/package-tree.html @@ -0,0 +1,143 @@ + + + + + + +cn.felord.payment.autoconfigure 类分层结构 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包cn.felord.payment.autoconfigure的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +

注释类型分层结构

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/autoconfigure/package-use.html b/docs/apidocs/cn/felord/payment/autoconfigure/package-use.html new file mode 100644 index 0000000..f5d8685 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/autoconfigure/package-use.html @@ -0,0 +1,126 @@ + + + + + + +程序包 cn.felord.payment.autoconfigure的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包的使用
cn.felord.payment.autoconfigure

+
+
没有cn.felord.payment.autoconfigure的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/class-use/PayException.html b/docs/apidocs/cn/felord/payment/class-use/PayException.html new file mode 100644 index 0000000..39dcc64 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/class-use/PayException.html @@ -0,0 +1,126 @@ + + + + + + +类 cn.felord.payment.PayException的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.PayException

+
+
没有cn.felord.payment.PayException的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/package-frame.html b/docs/apidocs/cn/felord/payment/package-frame.html new file mode 100644 index 0000000..cad14b3 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +cn.felord.payment (payment-spring-boot 1.0.0.RELEASE API) + + + + + +

cn.felord.payment

+
+

异常错误

+ +
+ + diff --git a/docs/apidocs/cn/felord/payment/package-summary.html b/docs/apidocs/cn/felord/payment/package-summary.html new file mode 100644 index 0000000..5e5c60a --- /dev/null +++ b/docs/apidocs/cn/felord/payment/package-summary.html @@ -0,0 +1,144 @@ + + + + + + +cn.felord.payment (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包 cn.felord.payment

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/package-tree.html b/docs/apidocs/cn/felord/payment/package-tree.html new file mode 100644 index 0000000..d11ce66 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/package-tree.html @@ -0,0 +1,151 @@ + + + + + + +cn.felord.payment 类分层结构 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包cn.felord.payment的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/package-use.html b/docs/apidocs/cn/felord/payment/package-use.html new file mode 100644 index 0000000..9f7ca8e --- /dev/null +++ b/docs/apidocs/cn/felord/payment/package-use.html @@ -0,0 +1,126 @@ + + + + + + +程序包 cn.felord.payment的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包的使用
cn.felord.payment

+
+
没有cn.felord.payment的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/WechatPayConfiguration.html b/docs/apidocs/cn/felord/payment/wechat/WechatPayConfiguration.html new file mode 100644 index 0000000..a5931fc --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/WechatPayConfiguration.html @@ -0,0 +1,405 @@ + + + + + + +WechatPayConfiguration (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat
+

类 WechatPayConfiguration

+
+
+ +
+
    +
  • +
    +
    +
    @Configuration
    + @EnableConfigurationProperties(value=WechatPayProperties.class)
    +public class WechatPayConfiguration
    +extends Object
    +
    The type Wechat pay configuration.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        CERT_ALIAS

        +
        private static final String CERT_ALIAS
        +
        The constant CERT_ALIAS.
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatPayConfiguration

        +
        public WechatPayConfiguration()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        wechatMetaContainer

        +
        @Bean
        + @ConditionalOnMissingBean
        +WechatMetaContainer wechatMetaContainer(WechatPayProperties wechatPayProperties)
        +
        微信支付公私钥 以及序列号等元数据.
        +
        +
        参数:
        +
        wechatPayProperties - the wechat pay properties
        +
        返回:
        +
        the wechat cert bean
        +
        +
      • +
      + + + +
        +
      • +

        signatureProvider

        +
        @Bean
        +SignatureProvider signatureProvider(WechatMetaContainer wechatMetaContainer)
        +
        微信支付V3签名工具.
        +
        +
        参数:
        +
        wechatMetaContainer - the wechat meta container
        +
        返回:
        +
        the signature provider
        +
        +
      • +
      + + + +
        +
      • +

        wechatPayClient

        +
        @Bean
        +public WechatPayClient wechatPayClient(SignatureProvider signatureProvider)
        +
        微信支付V3 客户端.
        +
        +
        参数:
        +
        signatureProvider - the signature provider
        +
        返回:
        +
        the wechat pay service
        +
        +
      • +
      + + + +
        +
      • +

        wechatApiProvider

        +
        @Bean
        +public WechatApiProvider wechatApiProvider(WechatPayClient wechatPayClient)
        +
        多租户接口Provider.
        +
        +
        参数:
        +
        wechatPayClient - the wechat pay client
        +
        返回:
        +
        the wechat api provider
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/WechatPayProperties.V3.html b/docs/apidocs/cn/felord/payment/wechat/WechatPayProperties.V3.html new file mode 100644 index 0000000..7a7d43d --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/WechatPayProperties.V3.html @@ -0,0 +1,385 @@ + + + + + + +WechatPayProperties.V3 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat
+

类 WechatPayProperties.V3

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    WechatPayProperties
    +
    +
    +
    +
    public static class WechatPayProperties.V3
    +extends Object
    +
    wechat pay v3 properties.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        appId

        +
        private String appId
        +
        app id for wechat pay is required
        +
      • +
      + + + +
        +
      • +

        appSecret

        +
        private String appSecret
        +
        app secret for wechat pay is required
        +
      • +
      + + + +
        +
      • +

        appV3Secret

        +
        private String appV3Secret
        +
        app V3 secret is required by wechat pay V3
        +
      • +
      + + + +
        +
      • +

        mchId

        +
        private String mchId
        +
        mchId for wechat pay is required
        +
      • +
      + + + +
        +
      • +

        partnerKey

        +
        private String partnerKey
        +
        partnerKey for wechat pay is optional
        +
      • +
      + + + +
        +
      • +

        certPath

        +
        private String certPath
        +
        wechat pay certificate Path
        +
      • +
      + + + +
        +
      • +

        domain

        +
        private String domain
        +
        your pay server domain
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        V3

        +
        public V3()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/WechatPayProperties.html b/docs/apidocs/cn/felord/payment/wechat/WechatPayProperties.html new file mode 100644 index 0000000..5611684 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/WechatPayProperties.html @@ -0,0 +1,307 @@ + + + + + + +WechatPayProperties (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat
+

类 WechatPayProperties

+
+
+ +
+
    +
  • +
    +
    +
    @ConfigurationProperties(value="wechat.pay")
    +public class WechatPayProperties
    +extends Object
    +
    The type Wechat pay properties.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatPayProperties

        +
        public WechatPayProperties()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/WechatPayResponseErrorHandler.html b/docs/apidocs/cn/felord/payment/wechat/WechatPayResponseErrorHandler.html new file mode 100644 index 0000000..71dc9c5 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/WechatPayResponseErrorHandler.html @@ -0,0 +1,311 @@ + + + + + + +WechatPayResponseErrorHandler (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat
+

类 WechatPayResponseErrorHandler

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    org.springframework.web.client.ResponseErrorHandler
    +
    +
    +
    +
    public class WechatPayResponseErrorHandler
    +extends org.springframework.web.client.DefaultResponseErrorHandler
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatPayResponseErrorHandler

        +
        public WechatPayResponseErrorHandler()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        hasError

        +
        public boolean hasError(org.springframework.http.client.ClientHttpResponse response)
        +                 throws IOException
        +
        +
        指定者:
        +
        hasError 在接口中 org.springframework.web.client.ResponseErrorHandler
        +
        覆盖:
        +
        hasError 在类中 org.springframework.web.client.DefaultResponseErrorHandler
        +
        抛出:
        +
        IOException
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayConfiguration.html b/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayConfiguration.html new file mode 100644 index 0000000..00bd3fd --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayConfiguration.html @@ -0,0 +1,126 @@ + + + + + + +类 cn.felord.payment.wechat.WechatPayConfiguration的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.WechatPayConfiguration

+
+
没有cn.felord.payment.wechat.WechatPayConfiguration的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayProperties.V3.html b/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayProperties.V3.html new file mode 100644 index 0000000..d2d18ad --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayProperties.V3.html @@ -0,0 +1,192 @@ + + + + + + +类 cn.felord.payment.wechat.WechatPayProperties.V3的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.WechatPayProperties.V3

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayProperties.html b/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayProperties.html new file mode 100644 index 0000000..983c022 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayProperties.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.WechatPayProperties的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.WechatPayProperties

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayResponseErrorHandler.html b/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayResponseErrorHandler.html new file mode 100644 index 0000000..0fa0cb9 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/class-use/WechatPayResponseErrorHandler.html @@ -0,0 +1,126 @@ + + + + + + +类 cn.felord.payment.wechat.WechatPayResponseErrorHandler的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.WechatPayResponseErrorHandler

+
+
没有cn.felord.payment.wechat.WechatPayResponseErrorHandler的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/BankCode.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/BankCode.html new file mode 100644 index 0000000..07e0a52 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/BankCode.html @@ -0,0 +1,1091 @@ + + + + + + +BankCode (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.enumeration
+

枚举 BankCode

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      枚举常量详细资料

      + + + +
        +
      • +

        BK_1002

        +
        public static final BankCode BK_1002
        +
        工商银行
        +
      • +
      + + + +
        +
      • +

        BK_1005

        +
        public static final BankCode BK_1005
        +
        农业银行
        +
      • +
      + + + +
        +
      • +

        BK_1003

        +
        public static final BankCode BK_1003
        +
        建设银行
        +
      • +
      + + + +
        +
      • +

        BK_1026

        +
        public static final BankCode BK_1026
        +
        中国银行
        +
      • +
      + + + +
        +
      • +

        BK_1020

        +
        public static final BankCode BK_1020
        +
        交通银行
        +
      • +
      + + + +
        +
      • +

        BK_1001

        +
        public static final BankCode BK_1001
        +
        招商银行
        +
      • +
      + + + +
        +
      • +

        BK_1066

        +
        public static final BankCode BK_1066
        +
        邮储银行
        +
      • +
      + + + +
        +
      • +

        BK_1006

        +
        public static final BankCode BK_1006
        +
        民生银行
        +
      • +
      + + + +
        +
      • +

        BK_1010

        +
        public static final BankCode BK_1010
        +
        平安银行
        +
      • +
      + + + +
        +
      • +

        BK_1021

        +
        public static final BankCode BK_1021
        +
        中信银行
        +
      • +
      + + + +
        +
      • +

        BK_1004

        +
        public static final BankCode BK_1004
        +
        浦发银行
        +
      • +
      + + + +
        +
      • +

        BK_1009

        +
        public static final BankCode BK_1009
        +
        兴业银行
        +
      • +
      + + + +
        +
      • +

        BK_1022

        +
        public static final BankCode BK_1022
        +
        光大银行
        +
      • +
      + + + +
        +
      • +

        BK_1027

        +
        public static final BankCode BK_1027
        +
        广发银行
        +
      • +
      + + + +
        +
      • +

        BK_1025

        +
        public static final BankCode BK_1025
        +
        华夏银行
        +
      • +
      + + + +
        +
      • +

        BK_1056

        +
        public static final BankCode BK_1056
        +
        宁波银行
        +
      • +
      + + + +
        +
      • +

        BK_4836

        +
        public static final BankCode BK_4836
        +
        北京银行
        +
      • +
      + + + +
        +
      • +

        BK_1024

        +
        public static final BankCode BK_1024
        +
        上海银行
        +
      • +
      + + + +
        +
      • +

        BK_1054

        +
        public static final BankCode BK_1054
        +
        南京银行
        +
      • +
      + + + +
        +
      • +

        BK_4755

        +
        public static final BankCode BK_4755
        +
        长子县融汇村镇银行
        +
      • +
      + + + +
        +
      • +

        BK_4216

        +
        public static final BankCode BK_4216
        +
        长沙银行
        +
      • +
      + + + +
        +
      • +

        BK_4051

        +
        public static final BankCode BK_4051
        +
        浙江泰隆商业银行
        +
      • +
      + + + +
        +
      • +

        BK_4753

        +
        public static final BankCode BK_4753
        +
        中原银行
        +
      • +
      + + + +
        +
      • +

        BK_4761

        +
        public static final BankCode BK_4761
        +
        企业银行(中国)
        +
      • +
      + + + +
        +
      • +

        BK_4036

        +
        public static final BankCode BK_4036
        +
        顺德农商银行
        +
      • +
      + + + +
        +
      • +

        BK_4752

        +
        public static final BankCode BK_4752
        +
        衡水银行
        +
      • +
      + + + +
        +
      • +

        BK_4756

        +
        public static final BankCode BK_4756
        +
        长治银行
        +
      • +
      + + + +
        +
      • +

        BK_4767

        +
        public static final BankCode BK_4767
        +
        大同银行
        +
      • +
      + + + +
        +
      • +

        BK_4115

        +
        public static final BankCode BK_4115
        +
        河南省农村信用社
        +
      • +
      + + + +
        +
      • +

        BK_4150

        +
        public static final BankCode BK_4150
        +
        宁夏黄河农村商业银行
        +
      • +
      + + + +
        +
      • +

        BK_4156

        +
        public static final BankCode BK_4156
        +
        山西省农村信用社
        +
      • +
      + + + +
        +
      • +

        BK_4166

        +
        public static final BankCode BK_4166
        +
        安徽省农村信用社
        +
      • +
      + + + +
        +
      • +

        BK_4157

        +
        public static final BankCode BK_4157
        +
        甘肃省农村信用社
        +
      • +
      + + + +
        +
      • +

        BK_4153

        +
        public static final BankCode BK_4153
        +
        天津农村商业银行
        +
      • +
      + + + +
        +
      • +

        BK_4113

        +
        public static final BankCode BK_4113
        +
        广西壮族自治区农村信用社
        +
      • +
      + + + +
        +
      • +

        BK_4108

        +
        public static final BankCode BK_4108
        +
        陕西省农村信用社
        +
      • +
      + + + +
        +
      • +

        BK_4076

        +
        public static final BankCode BK_4076
        +
        深圳农村商业银行
        +
      • +
      + + + +
        +
      • +

        BK_4052

        +
        public static final BankCode BK_4052
        +
        宁波鄞州农村商业银行
        +
      • +
      + + + +
        +
      • +

        BK_4764

        +
        public static final BankCode BK_4764
        +
        浙江省农村信用社联合社
        +
      • +
      + + + +
        +
      • +

        BK_4217

        +
        public static final BankCode BK_4217
        +
        江苏省农村信用社联合社
        +
      • +
      + + + +
        +
      • +

        BK_4072

        +
        public static final BankCode BK_4072
        +
        江苏紫金农村商业银行股份有限公司
        +
      • +
      + + + +
        +
      • +

        BK_4769

        +
        public static final BankCode BK_4769
        +
        北京中关村银行股份有限公司
        +
      • +
      + + + +
        +
      • +

        BK_4778

        +
        public static final BankCode BK_4778
        +
        星展银行(中国)有限公司
        +
      • +
      + + + +
        +
      • +

        BK_4766

        +
        public static final BankCode BK_4766
        +
        枣庄银行股份有限公司
        +
      • +
      + + + +
        +
      • +

        BK_4758

        +
        public static final BankCode BK_4758
        +
        海口联合农村商业银行股份有限公司
        +
      • +
      + + + +
        +
      • +

        BK_4763

        +
        public static final BankCode BK_4763
        +
        南洋商业银行(中国)有限公司
        +
      • +
      +
    • +
    + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        code

        +
        private final String code
        +
      • +
      + + + +
        +
      • +

        bankName

        +
        private final String bankName
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        values

        +
        public static BankCode[] values()
        +
        按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。该方法可用于迭代 +常量, 如下所示: +
        +for (BankCode c : BankCode.values())
        +    System.out.println(c);
        +
        +
        +
        返回:
        +
        按照声明该枚举类型的常量的顺序返回的包含这些常量的数组
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static BankCode valueOf(String name)
        +
        返回带有指定名称的该类型的枚举常量。 +字符串必须与用于声明该类型的枚举常量的 +标识符完全匹配。(不允许有多余 +的空格字符。)
        +
        +
        参数:
        +
        name - 要返回的枚举常量的名称。
        +
        返回:
        +
        返回带有指定名称的枚举常量
        +
        抛出:
        +
        IllegalArgumentException - 如果该枚举类型没有带有指定名称的常量
        +
        NullPointerException - 如果参数为空值
        +
        +
      • +
      + + + +
        +
      • +

        code

        +
        public String code()
        +
      • +
      + + + +
        +
      • +

        bankName

        +
        public String bankName()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/CouponBgColor.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/CouponBgColor.html new file mode 100644 index 0000000..195a4ca --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/CouponBgColor.html @@ -0,0 +1,497 @@ + + + + + + +CouponBgColor (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.enumeration
+

枚举 CouponBgColor

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    Serializable, Comparable<CouponBgColor>
    +
    +
    +
    +
    public enum CouponBgColor
    +extends Enum<CouponBgColor>
    +
    优惠券背景色 +

    + https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/convention/chapter3_1.shtml#menu1

    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        color

        +
        private final String color
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        values

        +
        public static CouponBgColor[] values()
        +
        按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。该方法可用于迭代 +常量, 如下所示: +
        +for (CouponBgColor c : CouponBgColor.values())
        +    System.out.println(c);
        +
        +
        +
        返回:
        +
        按照声明该枚举类型的常量的顺序返回的包含这些常量的数组
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static CouponBgColor valueOf(String name)
        +
        返回带有指定名称的该类型的枚举常量。 +字符串必须与用于声明该类型的枚举常量的 +标识符完全匹配。(不允许有多余 +的空格字符。)
        +
        +
        参数:
        +
        name - 要返回的枚举常量的名称。
        +
        返回:
        +
        返回带有指定名称的枚举常量
        +
        抛出:
        +
        IllegalArgumentException - 如果该枚举类型没有带有指定名称的常量
        +
        NullPointerException - 如果参数为空值
        +
        +
      • +
      + + + +
        +
      • +

        color

        +
        public String color()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/CouponStatus.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/CouponStatus.html new file mode 100644 index 0000000..7bf5322 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/CouponStatus.html @@ -0,0 +1,371 @@ + + + + + + +CouponStatus (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.enumeration
+

枚举 CouponStatus

+
+
+ +
+ +
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        values

        +
        public static CouponStatus[] values()
        +
        按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。该方法可用于迭代 +常量, 如下所示: +
        +for (CouponStatus c : CouponStatus.values())
        +    System.out.println(c);
        +
        +
        +
        返回:
        +
        按照声明该枚举类型的常量的顺序返回的包含这些常量的数组
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static CouponStatus valueOf(String name)
        +
        返回带有指定名称的该类型的枚举常量。 +字符串必须与用于声明该类型的枚举常量的 +标识符完全匹配。(不允许有多余 +的空格字符。)
        +
        +
        参数:
        +
        name - 要返回的枚举常量的名称。
        +
        返回:
        +
        返回带有指定名称的枚举常量
        +
        抛出:
        +
        IllegalArgumentException - 如果该枚举类型没有带有指定名称的常量
        +
        NullPointerException - 如果参数为空值
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/StockStatus.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/StockStatus.html new file mode 100644 index 0000000..8ba06e9 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/StockStatus.html @@ -0,0 +1,490 @@ + + + + + + +StockStatus (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.enumeration
+

枚举 StockStatus

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      枚举常量详细资料

      + + + +
        +
      • +

        UNACTIVATED

        +
        public static final StockStatus UNACTIVATED
        +
        Unactivated stock status.
        +
      • +
      + + + +
        +
      • +

        AUDIT

        +
        public static final StockStatus AUDIT
        +
        Audit stock status.
        +
      • +
      + + + +
        +
      • +

        RUNNING

        +
        public static final StockStatus RUNNING
        +
        Running stock status.
        +
      • +
      + + + +
        +
      • +

        STOPED

        +
        public static final StockStatus STOPED
        +
        Stoped stock status.
        +
      • +
      + + + +
        +
      • +

        PAUSED

        +
        public static final StockStatus PAUSED
        +
        Paused stock status.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        value

        +
        private final String value
        +
      • +
      + + + +
        +
      • +

        description

        +
        private final String description
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        values

        +
        public static StockStatus[] values()
        +
        按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。该方法可用于迭代 +常量, 如下所示: +
        +for (StockStatus c : StockStatus.values())
        +    System.out.println(c);
        +
        +
        +
        返回:
        +
        按照声明该枚举类型的常量的顺序返回的包含这些常量的数组
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static StockStatus valueOf(String name)
        +
        返回带有指定名称的该类型的枚举常量。 +字符串必须与用于声明该类型的枚举常量的 +标识符完全匹配。(不允许有多余 +的空格字符。)
        +
        +
        参数:
        +
        name - 要返回的枚举常量的名称。
        +
        返回:
        +
        返回带有指定名称的枚举常量
        +
        抛出:
        +
        IllegalArgumentException - 如果该枚举类型没有带有指定名称的常量
        +
        NullPointerException - 如果参数为空值
        +
        +
      • +
      + + + +
        +
      • +

        value

        +
        public String value()
        +
        Value string.
        +
        +
        返回:
        +
        the string
        +
        +
      • +
      + + + +
        +
      • +

        description

        +
        public String description()
        +
        Description string.
        +
        +
        返回:
        +
        the string
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/TradeState.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/TradeState.html new file mode 100644 index 0000000..740e291 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/TradeState.html @@ -0,0 +1,431 @@ + + + + + + +TradeState (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.enumeration
+

枚举 TradeState

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      枚举常量详细资料

      + + + +
        +
      • +

        SUCCESS

        +
        public static final TradeState SUCCESS
        +
        支付成功
        +
      • +
      + + + +
        +
      • +

        REFUND

        +
        public static final TradeState REFUND
        +
        转入退款
        +
      • +
      + + + +
        +
      • +

        NOTPAY

        +
        public static final TradeState NOTPAY
        +
        未支付
        +
      • +
      + + + +
        +
      • +

        CLOSED

        +
        public static final TradeState CLOSED
        +
        已关闭
        +
      • +
      + + + +
        +
      • +

        REVOKED

        +
        public static final TradeState REVOKED
        +
        已撤销(付款码支付)
        +
      • +
      + + + +
        +
      • +

        USERPAYING

        +
        public static final TradeState USERPAYING
        +
        用户支付中(付款码支付)
        +
      • +
      + + + +
        +
      • +

        PAYERROR

        +
        public static final TradeState PAYERROR
        +
        支付失败(其他原因,如银行返回失败)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        values

        +
        public static TradeState[] values()
        +
        按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。该方法可用于迭代 +常量, 如下所示: +
        +for (TradeState c : TradeState.values())
        +    System.out.println(c);
        +
        +
        +
        返回:
        +
        按照声明该枚举类型的常量的顺序返回的包含这些常量的数组
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static TradeState valueOf(String name)
        +
        返回带有指定名称的该类型的枚举常量。 +字符串必须与用于声明该类型的枚举常量的 +标识符完全匹配。(不允许有多余 +的空格字符。)
        +
        +
        参数:
        +
        name - 要返回的枚举常量的名称。
        +
        返回:
        +
        返回带有指定名称的枚举常量
        +
        抛出:
        +
        IllegalArgumentException - 如果该枚举类型没有带有指定名称的常量
        +
        NullPointerException - 如果参数为空值
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/TradeType.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/TradeType.html new file mode 100644 index 0000000..65f3cae --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/TradeType.html @@ -0,0 +1,416 @@ + + + + + + +TradeType (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.enumeration
+

枚举 TradeType

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      枚举常量详细资料

      + + + +
        +
      • +

        JSAPI

        +
        public static final TradeType JSAPI
        +
        公众号支付
        +
      • +
      + + + +
        +
      • +

        NATIVE

        +
        public static final TradeType NATIVE
        +
        扫码支付
        +
      • +
      + + + +
        +
      • +

        APP

        +
        public static final TradeType APP
        +
        APP支付
        +
      • +
      + + + +
        +
      • +

        MICROPAY

        +
        public static final TradeType MICROPAY
        +
        付款码支付
        +
      • +
      + + + +
        +
      • +

        MWEB

        +
        public static final TradeType MWEB
        +
        H5支付
        +
      • +
      + + + +
        +
      • +

        FACEPAY

        +
        public static final TradeType FACEPAY
        +
        刷脸支付
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        values

        +
        public static TradeType[] values()
        +
        按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。该方法可用于迭代 +常量, 如下所示: +
        +for (TradeType c : TradeType.values())
        +    System.out.println(c);
        +
        +
        +
        返回:
        +
        按照声明该枚举类型的常量的顺序返回的包含这些常量的数组
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static TradeType valueOf(String name)
        +
        返回带有指定名称的该类型的枚举常量。 +字符串必须与用于声明该类型的枚举常量的 +标识符完全匹配。(不允许有多余 +的空格字符。)
        +
        +
        参数:
        +
        name - 要返回的枚举常量的名称。
        +
        返回:
        +
        返回带有指定名称的枚举常量
        +
        抛出:
        +
        IllegalArgumentException - 如果该枚举类型没有带有指定名称的常量
        +
        NullPointerException - 如果参数为空值
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/WeChatServer.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/WeChatServer.html new file mode 100644 index 0000000..205ec03 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/WeChatServer.html @@ -0,0 +1,492 @@ + + + + + + +WeChatServer (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.enumeration
+

枚举 WeChatServer

+
+
+ +
+ +
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        domain

        +
        private final String domain
        +
        域名
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        values

        +
        public static WeChatServer[] values()
        +
        按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。该方法可用于迭代 +常量, 如下所示: +
        +for (WeChatServer c : WeChatServer.values())
        +    System.out.println(c);
        +
        +
        +
        返回:
        +
        按照声明该枚举类型的常量的顺序返回的包含这些常量的数组
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static WeChatServer valueOf(String name)
        +
        返回带有指定名称的该类型的枚举常量。 +字符串必须与用于声明该类型的枚举常量的 +标识符完全匹配。(不允许有多余 +的空格字符。)
        +
        +
        参数:
        +
        name - 要返回的枚举常量的名称。
        +
        返回:
        +
        返回带有指定名称的枚举常量
        +
        抛出:
        +
        IllegalArgumentException - 如果该枚举类型没有带有指定名称的常量
        +
        NullPointerException - 如果参数为空值
        +
        +
      • +
      + + + +
        +
      • +

        domain

        +
        public String domain()
        +
        Gets type.
        +
        +
        返回:
        +
        the type
        +
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/WechatPayV3Type.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/WechatPayV3Type.html new file mode 100644 index 0000000..e3f49c2 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/WechatPayV3Type.html @@ -0,0 +1,878 @@ + + + + + + +WechatPayV3Type (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.enumeration
+

枚举 WechatPayV3Type

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      枚举常量详细资料

      + + + + + + + +
        +
      • +

        FILE_DOWNLOAD

        +
        public static final WechatPayV3Type FILE_DOWNLOAD
        +
        文件下载
        +
      • +
      + + + +
        +
      • +

        JSAPI

        +
        public static final WechatPayV3Type JSAPI
        +
        微信公众号支付或者小程序支付.
        +
      • +
      + + + +
        +
      • +

        NATIVE

        +
        public static final WechatPayV3Type NATIVE
        +
        微信扫码支付.
        +
      • +
      + + + + + + + + + + + + + + + +
        +
      • +

        TRANSACTION_TRANSACTION_ID

        +
        public static final WechatPayV3Type TRANSACTION_TRANSACTION_ID
        +
        微信支付订单号查询.
        +
      • +
      + + + +
        +
      • +

        TRANSACTION_OUT_TRADE_NO

        +
        public static final WechatPayV3Type TRANSACTION_OUT_TRADE_NO
        +
        商户订单号查询.
        +
      • +
      + + + +
        +
      • +

        COMBINE_APP

        +
        public static final WechatPayV3Type COMBINE_APP
        +
        合单下单-APP支付API.
        +
      • +
      + + + +
        +
      • +

        COMBINE_JSAPI

        +
        public static final WechatPayV3Type COMBINE_JSAPI
        +
        合单下单-微信公众号支付或者小程序支付.
        +
      • +
      + + + +
        +
      • +

        COMBINE_MWEB

        +
        public static final WechatPayV3Type COMBINE_MWEB
        +
        合单下单-H5支付API.
        +
      • +
      + + + +
        +
      • +

        COMBINE_NATIVE

        +
        public static final WechatPayV3Type COMBINE_NATIVE
        +
        合单下单-Native支付API. /v3/combine-transactions/out-trade-no/{combine_out_trade_no}
        +
      • +
      + + + +
        +
      • +

        COMBINE_TRANSACTION_OUT_TRADE_NO

        +
        public static final WechatPayV3Type COMBINE_TRANSACTION_OUT_TRADE_NO
        +
        合单查询订单API.
        +
      • +
      + + + +
        +
      • +

        COMBINE_CLOSE

        +
        public static final WechatPayV3Type COMBINE_CLOSE
        +
        合单关闭订单API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_STOCKS_COUPON_STOCKS

        +
        public static final WechatPayV3Type MARKETING_FAVOR_STOCKS_COUPON_STOCKS
        +
        创建代金券批次API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_STOCKS_START

        +
        public static final WechatPayV3Type MARKETING_FAVOR_STOCKS_START
        +
        激活代金券批次API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_STOCKS_PAUSE

        +
        public static final WechatPayV3Type MARKETING_FAVOR_STOCKS_PAUSE
        +
        暂停代金券批次API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_USERS_COUPONS

        +
        public static final WechatPayV3Type MARKETING_FAVOR_USERS_COUPONS
        +
        发放代金券API、根据商户号查用户的券.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_STOCKS_RESTART

        +
        public static final WechatPayV3Type MARKETING_FAVOR_STOCKS_RESTART
        +
        重启代金券API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_STOCKS

        +
        public static final WechatPayV3Type MARKETING_FAVOR_STOCKS
        +
        条件查询批次列表API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_STOCKS_DETAIL

        +
        public static final WechatPayV3Type MARKETING_FAVOR_STOCKS_DETAIL
        +
        查询批次详情API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_USERS_COUPONS_DETAIL

        +
        public static final WechatPayV3Type MARKETING_FAVOR_USERS_COUPONS_DETAIL
        +
        查询代金券详情API
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_STOCKS_MERCHANTS

        +
        public static final WechatPayV3Type MARKETING_FAVOR_STOCKS_MERCHANTS
        +
        查询代金券可用商户API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_STOCKS_ITEMS

        +
        public static final WechatPayV3Type MARKETING_FAVOR_STOCKS_ITEMS
        +
        查询代金券可用单品API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_STOCKS_USE_FLOW

        +
        public static final WechatPayV3Type MARKETING_FAVOR_STOCKS_USE_FLOW
        +
        下载批次核销明细API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_STOCKS_REFUND_FLOW

        +
        public static final WechatPayV3Type MARKETING_FAVOR_STOCKS_REFUND_FLOW
        +
        下载批次退款明细API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_IMAGE_UPLOAD

        +
        public static final WechatPayV3Type MARKETING_IMAGE_UPLOAD
        +
        营销图片上传API.
        +
      • +
      + + + +
        +
      • +

        MARKETING_FAVOR_CALLBACKS

        +
        public static final WechatPayV3Type MARKETING_FAVOR_CALLBACKS
        +
        设置核销回调通知API.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        pattern

        +
        private final String pattern
        +
        The Pattern.
        +
      • +
      + + + +
        +
      • +

        method

        +
        private final org.springframework.http.HttpMethod method
        +
        The Method.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        values

        +
        public static WechatPayV3Type[] values()
        +
        按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。该方法可用于迭代 +常量, 如下所示: +
        +for (WechatPayV3Type c : WechatPayV3Type.values())
        +    System.out.println(c);
        +
        +
        +
        返回:
        +
        按照声明该枚举类型的常量的顺序返回的包含这些常量的数组
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static WechatPayV3Type valueOf(String name)
        +
        返回带有指定名称的该类型的枚举常量。 +字符串必须与用于声明该类型的枚举常量的 +标识符完全匹配。(不允许有多余 +的空格字符。)
        +
        +
        参数:
        +
        name - 要返回的枚举常量的名称。
        +
        返回:
        +
        返回带有指定名称的枚举常量
        +
        抛出:
        +
        IllegalArgumentException - 如果该枚举类型没有带有指定名称的常量
        +
        NullPointerException - 如果参数为空值
        +
        +
      • +
      + + + +
        +
      • +

        method

        +
        public org.springframework.http.HttpMethod method()
        +
        Method string.
        +
        +
        返回:
        +
        the string
        +
        +
      • +
      + + + +
        +
      • +

        pattern

        +
        public String pattern()
        +
        Pattern string.
        +
        +
        返回:
        +
        the string
        +
        +
      • +
      + + + +
        +
      • +

        uri

        +
        public String uri(WeChatServer weChatServer)
        +
        默认支付URI.
        +
        +
        参数:
        +
        weChatServer - the we chat server
        +
        返回:
        +
        the string
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/BankCode.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/BankCode.html new file mode 100644 index 0000000..84e5f60 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/BankCode.html @@ -0,0 +1,175 @@ + + + + + + +类 cn.felord.payment.wechat.enumeration.BankCode的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.enumeration.BankCode

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/CouponBgColor.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/CouponBgColor.html new file mode 100644 index 0000000..3c77c7c --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/CouponBgColor.html @@ -0,0 +1,199 @@ + + + + + + +类 cn.felord.payment.wechat.enumeration.CouponBgColor的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.enumeration.CouponBgColor

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/CouponStatus.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/CouponStatus.html new file mode 100644 index 0000000..65ca370 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/CouponStatus.html @@ -0,0 +1,175 @@ + + + + + + +类 cn.felord.payment.wechat.enumeration.CouponStatus的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.enumeration.CouponStatus

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/StockStatus.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/StockStatus.html new file mode 100644 index 0000000..10e5206 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/StockStatus.html @@ -0,0 +1,201 @@ + + + + + + +类 cn.felord.payment.wechat.enumeration.StockStatus的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.enumeration.StockStatus

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/TradeState.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/TradeState.html new file mode 100644 index 0000000..030ca75 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/TradeState.html @@ -0,0 +1,175 @@ + + + + + + +类 cn.felord.payment.wechat.enumeration.TradeState的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.enumeration.TradeState

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/TradeType.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/TradeType.html new file mode 100644 index 0000000..0c1d49f --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/TradeType.html @@ -0,0 +1,175 @@ + + + + + + +类 cn.felord.payment.wechat.enumeration.TradeType的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.enumeration.TradeType

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/WeChatServer.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/WeChatServer.html new file mode 100644 index 0000000..cfca260 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/WeChatServer.html @@ -0,0 +1,190 @@ + + + + + + +类 cn.felord.payment.wechat.enumeration.WeChatServer的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.enumeration.WeChatServer

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/WechatPayV3Type.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/WechatPayV3Type.html new file mode 100644 index 0000000..f5afafb --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/class-use/WechatPayV3Type.html @@ -0,0 +1,374 @@ + + + + + + +类 cn.felord.payment.wechat.enumeration.WechatPayV3Type的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.enumeration.WechatPayV3Type

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/package-frame.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/package-frame.html new file mode 100644 index 0000000..abf8680 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/package-frame.html @@ -0,0 +1,28 @@ + + + + + + +cn.felord.payment.wechat.enumeration (payment-spring-boot 1.0.0.RELEASE API) + + + + + +

cn.felord.payment.wechat.enumeration

+
+

枚举

+ +
+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/package-summary.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/package-summary.html new file mode 100644 index 0000000..d07f079 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/package-summary.html @@ -0,0 +1,190 @@ + + + + + + +cn.felord.payment.wechat.enumeration (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包 cn.felord.payment.wechat.enumeration

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/package-tree.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/package-tree.html new file mode 100644 index 0000000..949b4c2 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/package-tree.html @@ -0,0 +1,150 @@ + + + + + + +cn.felord.payment.wechat.enumeration 类分层结构 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包cn.felord.payment.wechat.enumeration的分层结构

+程序包分层结构: + +
+
+

枚举分层结构

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/enumeration/package-use.html b/docs/apidocs/cn/felord/payment/wechat/enumeration/package-use.html new file mode 100644 index 0000000..8d958db --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/enumeration/package-use.html @@ -0,0 +1,247 @@ + + + + + + +程序包 cn.felord.payment.wechat.enumeration的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包的使用
cn.felord.payment.wechat.enumeration

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/package-frame.html b/docs/apidocs/cn/felord/payment/wechat/package-frame.html new file mode 100644 index 0000000..d88b0a2 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/package-frame.html @@ -0,0 +1,24 @@ + + + + + + +cn.felord.payment.wechat (payment-spring-boot 1.0.0.RELEASE API) + + + + + +

cn.felord.payment.wechat

+
+

+ +
+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/package-summary.html b/docs/apidocs/cn/felord/payment/wechat/package-summary.html new file mode 100644 index 0000000..2d36d8b --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/package-summary.html @@ -0,0 +1,162 @@ + + + + + + +cn.felord.payment.wechat (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包 cn.felord.payment.wechat

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/package-tree.html b/docs/apidocs/cn/felord/payment/wechat/package-tree.html new file mode 100644 index 0000000..e09df48 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/package-tree.html @@ -0,0 +1,146 @@ + + + + + + +cn.felord.payment.wechat 类分层结构 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包cn.felord.payment.wechat的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/package-use.html b/docs/apidocs/cn/felord/payment/wechat/package-use.html new file mode 100644 index 0000000..1818888 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/package-use.html @@ -0,0 +1,187 @@ + + + + + + +程序包 cn.felord.payment.wechat的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包的使用
cn.felord.payment.wechat

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/AbstractApi.html b/docs/apidocs/cn/felord/payment/wechat/v3/AbstractApi.html new file mode 100644 index 0000000..476ac63 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/AbstractApi.html @@ -0,0 +1,519 @@ + + + + + + +AbstractApi (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 AbstractApi

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        mapper

        +
        private final com.fasterxml.jackson.databind.ObjectMapper mapper
        +
        The Mapper.
        +
      • +
      + + + +
        +
      • +

        wechatPayClient

        +
        private final WechatPayClient wechatPayClient
        +
        The Wechat pay client.
        +
      • +
      + + + +
        +
      • +

        tenantId

        +
        private final String tenantId
        +
        The Tenant id.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        AbstractApi

        +
        public AbstractApi(WechatPayClient wechatPayClient,
        +                   String tenantId)
        +
        Instantiates a new Abstract api.
        +
        +
        参数:
        +
        wechatPayClient - the wechat pay client
        +
        tenantId - the tenant id
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        applyObjectMapper

        +
        private void applyObjectMapper(com.fasterxml.jackson.databind.ObjectMapper mapper)
        +
        Apply object mapper.
        +
        +
        参数:
        +
        mapper - the mapper
        +
        +
      • +
      + + + +
        +
      • +

        getMapper

        +
        public com.fasterxml.jackson.databind.ObjectMapper getMapper()
        +
        Gets mapper.
        +
        +
        返回:
        +
        the mapper
        +
        +
      • +
      + + + +
        +
      • +

        client

        +
        public WechatPayClient client()
        +
        Client wechat pay client.
        +
        +
        返回:
        +
        the wechat pay client
        +
        +
      • +
      + + + +
        +
      • +

        tenantId

        +
        public String tenantId()
        +
        Tenant id string.
        +
        +
        返回:
        +
        the string
        +
        +
      • +
      + + + +
        +
      • +

        container

        +
        public WechatMetaContainer container()
        +
        Container wechat meta container.
        +
        +
        返回:
        +
        the wechat meta container
        +
        +
      • +
      + + + +
        +
      • +

        wechatMetaBean

        +
        public WechatMetaBean wechatMetaBean()
        +
        Wechat meta bean wechat meta bean.
        +
        +
        返回:
        +
        the wechat meta bean
        +
        +
      • +
      + + + +
        +
      • +

        Post

        +
        protected org.springframework.http.RequestEntity<?> Post(URI uri,
        +                                                         Object params)
        +
        Post request entity.
        +
        +
        参数:
        +
        uri - the uri
        +
        params - the params
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        Get

        +
        protected org.springframework.http.RequestEntity<?> Get(URI uri)
        +
        Get request entity.
        +
        +
        参数:
        +
        uri - the uri
        +
        返回:
        +
        the request entity
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage.html b/docs/apidocs/cn/felord/payment/wechat/v3/ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage.html new file mode 100644 index 0000000..ce5d5eb --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage.html @@ -0,0 +1,447 @@ + + + + + + +ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    org.springframework.http.HttpMessage, org.springframework.http.HttpOutputMessage
    +
    +
    +
    封闭类:
    +
    ExtensionFormHttpMessageConverter
    +
    +
    +
    +
    private static class ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage
    +extends Object
    +implements org.springframework.http.HttpOutputMessage
    +
    The type Multipart http output message.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        outputStream

        +
        private final OutputStream outputStream
        +
        The Output stream.
        +
      • +
      + + + +
        +
      • +

        charset

        +
        private final Charset charset
        +
        The Charset.
        +
      • +
      + + + +
        +
      • +

        headers

        +
        private final org.springframework.http.HttpHeaders headers
        +
        The Headers.
        +
      • +
      + + + +
        +
      • +

        headersWritten

        +
        private boolean headersWritten
        +
        The Headers written.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        MultipartHttpOutputMessage

        +
        public MultipartHttpOutputMessage(OutputStream outputStream,
        +                                  Charset charset)
        +
        Instantiates a new Multipart http output message.
        +
        +
        参数:
        +
        outputStream - the output stream
        +
        charset - the charset
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getHeaders

        +
        public org.springframework.http.HttpHeaders getHeaders()
        +
        +
        指定者:
        +
        getHeaders 在接口中 org.springframework.http.HttpMessage
        +
        +
      • +
      + + + +
        +
      • +

        getBody

        +
        public OutputStream getBody()
        +                     throws IOException
        +
        +
        指定者:
        +
        getBody 在接口中 org.springframework.http.HttpOutputMessage
        +
        抛出:
        +
        IOException
        +
        +
      • +
      + + + +
        +
      • +

        writeHeaders

        +
        private void writeHeaders()
        +                   throws IOException
        +
        Write headers.
        +
        +
        抛出:
        +
        IOException - the io exception
        +
        +
      • +
      + + + +
        +
      • +

        getBytes

        +
        private byte[] getBytes(String name)
        +
        Get bytes byte [ ].
        +
        +
        参数:
        +
        name - the name
        +
        返回:
        +
        the byte [ ]
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/ExtensionFormHttpMessageConverter.html b/docs/apidocs/cn/felord/payment/wechat/v3/ExtensionFormHttpMessageConverter.html new file mode 100644 index 0000000..04fba0a --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/ExtensionFormHttpMessageConverter.html @@ -0,0 +1,754 @@ + + + + + + +ExtensionFormHttpMessageConverter (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 ExtensionFormHttpMessageConverter

+
+
+ +
+
    +
  • +
    +
    所有已实现的接口:
    +
    org.springframework.http.converter.HttpMessageConverter<org.springframework.util.MultiValueMap<String,?>>
    +
    +
    +
    +
    final class ExtensionFormHttpMessageConverter
    +extends org.springframework.http.converter.FormHttpMessageConverter
    +
    用于微信支付处理上传的自定义消息转换器.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    另请参阅:
    +
    AllEncompassingFormHttpMessageConverter
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      字段概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      字段 
      限定符和类型字段和说明
      private static StringBOUNDARY +
      The constant BOUNDARY.
      +
      private static booleangsonPresent +
      The constant gsonPresent.
      +
      private static booleanjackson2Present +
      The constant jackson2Present.
      +
      private static booleanjackson2SmilePresent +
      The constant jackson2SmilePresent.
      +
      private static booleanjackson2XmlPresent +
      The constant jackson2XmlPresent.
      +
      private static booleanjaxb2Present +
      The constant jaxb2Present.
      +
      private static booleanjsonbPresent +
      The constant jsonbPresent.
      +
      private List<org.springframework.http.converter.HttpMessageConverter<?>>partConverters +
      The Part converters.
      +
      +
        +
      • + + +

        从类继承的字段 org.springframework.http.converter.FormHttpMessageConverter

        +DEFAULT_CHARSET
      • +
      +
    • +
    + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 静态方法 实例方法 具体方法 
      限定符和类型方法和说明
      private voidapplyDefaultCharset() +
      Apply the configured charset as a default to registered part converters.
      +
      private org.springframework.http.MediaTypegetMediaType(org.springframework.http.MediaType mediaType) +
      Gets media type.
      +
      private booleanisMultipart(org.springframework.util.MultiValueMap<String,?> map, + org.springframework.http.MediaType contentType) +
      Is multipart boolean.
      +
      voidwrite(org.springframework.util.MultiValueMap<String,?> map, + org.springframework.http.MediaType contentType, + org.springframework.http.HttpOutputMessage outputMessage) 
      private voidwriteBoundary(OutputStream os, + byte[] boundary) +
      Write boundary.
      +
      private static voidwriteEnd(OutputStream os, + byte[] boundary) +
      Write end.
      +
      private voidwriteForm(org.springframework.util.MultiValueMap<String,Object> formData, + org.springframework.http.MediaType contentType, + org.springframework.http.HttpOutputMessage outputMessage) +
      Write form.
      +
      private voidwriteMultipart(org.springframework.util.MultiValueMap<String,Object> parts, + org.springframework.http.HttpOutputMessage outputMessage) +
      Write multipart.
      +
      private static voidwriteNewLine(OutputStream os) +
      Write new line.
      +
      private voidwritePart(String name, + org.springframework.http.HttpEntity<?> partEntity, + OutputStream os) +
      Write part.
      +
      private voidwriteParts(OutputStream os, + org.springframework.util.MultiValueMap<String,Object> parts, + byte[] boundary) +
      Write parts.
      +
      +
        +
      • + + +

        从类继承的方法 org.springframework.http.converter.FormHttpMessageConverter

        +addPartConverter, addSupportedMediaTypes, canRead, canWrite, generateMultipartBoundary, getFilename, getFormContentType, getHttpEntity, getPartConverters, getSupportedMediaTypes, read, serializeForm, setCharset, setMultipartCharset, setPartConverters, setSupportedMediaTypes
      • +
      + +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        BOUNDARY

        +
        private static final String BOUNDARY
        +
        The constant BOUNDARY.
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        jaxb2Present

        +
        private static final boolean jaxb2Present
        +
        The constant jaxb2Present.
        +
      • +
      + + + +
        +
      • +

        jackson2Present

        +
        private static final boolean jackson2Present
        +
        The constant jackson2Present.
        +
      • +
      + + + +
        +
      • +

        jackson2XmlPresent

        +
        private static final boolean jackson2XmlPresent
        +
        The constant jackson2XmlPresent.
        +
      • +
      + + + +
        +
      • +

        jackson2SmilePresent

        +
        private static final boolean jackson2SmilePresent
        +
        The constant jackson2SmilePresent.
        +
      • +
      + + + +
        +
      • +

        gsonPresent

        +
        private static final boolean gsonPresent
        +
        The constant gsonPresent.
        +
      • +
      + + + +
        +
      • +

        jsonbPresent

        +
        private static final boolean jsonbPresent
        +
        The constant jsonbPresent.
        +
      • +
      + + + +
        +
      • +

        partConverters

        +
        private final List<org.springframework.http.converter.HttpMessageConverter<?>> partConverters
        +
        The Part converters.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ExtensionFormHttpMessageConverter

        +
        public ExtensionFormHttpMessageConverter()
        +
        Instantiates a new Upload http message converter.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        applyDefaultCharset

        +
        private void applyDefaultCharset()
        +
        Apply the configured charset as a default to registered part converters.
        +
      • +
      + + + +
        +
      • +

        write

        +
        public void write(org.springframework.util.MultiValueMap<String,?> map,
        +                  @Nullable
        +                  org.springframework.http.MediaType contentType,
        +                  org.springframework.http.HttpOutputMessage outputMessage)
        +           throws IOException,
        +                  org.springframework.http.converter.HttpMessageNotWritableException
        +
        +
        指定者:
        +
        write 在接口中 org.springframework.http.converter.HttpMessageConverter<org.springframework.util.MultiValueMap<String,?>>
        +
        覆盖:
        +
        write 在类中 org.springframework.http.converter.FormHttpMessageConverter
        +
        抛出:
        +
        IOException
        +
        org.springframework.http.converter.HttpMessageNotWritableException
        +
        +
      • +
      + + + +
        +
      • +

        isMultipart

        +
        private boolean isMultipart(org.springframework.util.MultiValueMap<String,?> map,
        +                            @Nullable
        +                            org.springframework.http.MediaType contentType)
        +
        Is multipart boolean.
        +
        +
        参数:
        +
        map - the map
        +
        contentType - the content type
        +
        返回:
        +
        the boolean
        +
        +
      • +
      + + + +
        +
      • +

        writeForm

        +
        private void writeForm(org.springframework.util.MultiValueMap<String,Object> formData,
        +                       @Nullable
        +                       org.springframework.http.MediaType contentType,
        +                       org.springframework.http.HttpOutputMessage outputMessage)
        +                throws IOException
        +
        Write form.
        +
        +
        参数:
        +
        formData - the form data
        +
        contentType - the content type
        +
        outputMessage - the output message
        +
        抛出:
        +
        IOException - the io exception
        +
        +
      • +
      + + + +
        +
      • +

        getMediaType

        +
        private org.springframework.http.MediaType getMediaType(@Nullable
        +                                                        org.springframework.http.MediaType mediaType)
        +
        Gets media type.
        +
        +
        参数:
        +
        mediaType - the media type
        +
        返回:
        +
        the media type
        +
        +
      • +
      + + + +
        +
      • +

        writeMultipart

        +
        private void writeMultipart(org.springframework.util.MultiValueMap<String,Object> parts,
        +                            org.springframework.http.HttpOutputMessage outputMessage)
        +                     throws IOException
        +
        Write multipart.
        +
        +
        参数:
        +
        parts - the parts
        +
        outputMessage - the output message
        +
        抛出:
        +
        IOException - the io exception
        +
        +
      • +
      + + + +
        +
      • +

        writeParts

        +
        private void writeParts(OutputStream os,
        +                        org.springframework.util.MultiValueMap<String,Object> parts,
        +                        byte[] boundary)
        +                 throws IOException
        +
        Write parts.
        +
        +
        参数:
        +
        os - the os
        +
        parts - the parts
        +
        boundary - the boundary
        +
        抛出:
        +
        IOException - the io exception
        +
        +
      • +
      + + + +
        +
      • +

        writePart

        +
        private void writePart(String name,
        +                       org.springframework.http.HttpEntity<?> partEntity,
        +                       OutputStream os)
        +                throws IOException
        +
        Write part.
        +
        +
        参数:
        +
        name - the name
        +
        partEntity - the part entity
        +
        os - the os
        +
        抛出:
        +
        IOException - the io exception
        +
        +
      • +
      + + + +
        +
      • +

        writeBoundary

        +
        private void writeBoundary(OutputStream os,
        +                           byte[] boundary)
        +                    throws IOException
        +
        Write boundary.
        +
        +
        参数:
        +
        os - the os
        +
        boundary - the boundary
        +
        抛出:
        +
        IOException - the io exception
        +
        +
      • +
      + + + +
        +
      • +

        writeEnd

        +
        private static void writeEnd(OutputStream os,
        +                             byte[] boundary)
        +                      throws IOException
        +
        Write end.
        +
        +
        参数:
        +
        os - the os
        +
        boundary - the boundary
        +
        抛出:
        +
        IOException - the io exception
        +
        +
      • +
      + + + +
        +
      • +

        writeNewLine

        +
        private static void writeNewLine(OutputStream os)
        +                          throws IOException
        +
        Write new line.
        +
        +
        参数:
        +
        os - the os
        +
        抛出:
        +
        IOException - the io exception
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/KeyPairFactory.html b/docs/apidocs/cn/felord/payment/wechat/v3/KeyPairFactory.html new file mode 100644 index 0000000..9d26ca4 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/KeyPairFactory.html @@ -0,0 +1,344 @@ + + + + + + +KeyPairFactory (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 KeyPairFactory

+
+
+ +
+
    +
  • +
    +
    +
    public class KeyPairFactory
    +extends Object
    +
    证书工具
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        KeyPairFactory

        +
        public KeyPairFactory()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        createPKCS12

        +
        public WechatMetaBean createPKCS12(String keyPath,
        +                                   String keyAlias,
        +                                   String keyPass)
        +
        获取公私钥.
        +
        +
        参数:
        +
        keyPath - the key path
        +
        keyAlias - the key alias
        +
        keyPass - password
        +
        返回:
        +
        the key pair
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/SignatureProvider.html b/docs/apidocs/cn/felord/payment/wechat/v3/SignatureProvider.html new file mode 100644 index 0000000..2aedca9 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/SignatureProvider.html @@ -0,0 +1,553 @@ + + + + + + +SignatureProvider (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 SignatureProvider

+
+
+ +
+
    +
  • +
    +
    +
    public class SignatureProvider
    +extends Object
    +
    签名 加签 验签 +

    + 我方请求微信服务器时,需要根据我方的API证书对参数进行加签;微信服务器会根据我方签名验签以确定请求来自我方服务器; +

    + 然后微信服务器响应我方请求并在响应报文中使用【微信平台证书】加签 我方需要根据规则验签是否响应来自微信支付服务器 +

    + 其中【微信平台证书】定期会进行更新,不受我方管控,我方需要适当的时候获取最新的证书列表。

    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        ID_GENERATOR

        +
        private static final org.springframework.util.IdGenerator ID_GENERATOR
        +
        The constant ID_GENERATOR.
        +
      • +
      + + + +
        +
      • +

        SCHEMA

        +
        private static final String SCHEMA
        +
        The constant SCHEMA.
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        TOKEN_PATTERN

        +
        public static final String TOKEN_PATTERN
        +
        The constant TOKEN_PATTERN.
        +
        +
        另请参阅:
        +
        常量字段值
        +
        +
      • +
      + + + +
        +
      • +

        CERTIFICATE_MAP

        +
        private static final Map<String,Certificate> CERTIFICATE_MAP
        +
        微信平台证书容器 key = 序列号 value = 证书对象
        +
      • +
      + + + +
        +
      • +

        restOperations

        +
        private final org.springframework.web.client.RestOperations restOperations
        +
        The Rest operations.
        +
      • +
      + + + +
        +
      • +

        wechatMetaContainer

        +
        private final WechatMetaContainer wechatMetaContainer
        +
        The Wechat meta container.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        SignatureProvider

        +
        public SignatureProvider(WechatMetaContainer wechatMetaContainer)
        +
        Instantiates a new Signature provider.
        +
        +
        参数:
        +
        wechatMetaContainer - the wechat meta container
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        requestSign

        +
        public String requestSign(String tenantId,
        +                          String method,
        +                          String canonicalUrl,
        +                          String body)
        +
        我方请求时加签,使用API证书.
        +
        +
        参数:
        +
        tenantId - the properties key
        +
        method - the method
        +
        canonicalUrl - the canonical url
        +
        body - the body
        +
        返回:
        +
        the string
        +
        +
      • +
      + + + +
        +
      • +

        responseSignVerify

        +
        public boolean responseSignVerify(ResponseSignVerifyParams params)
        +
        我方对响应验签,和应答签名做比较,使用微信平台证书.
        +
        +
        参数:
        +
        params - the params
        +
        返回:
        +
        the boolean
        +
        +
      • +
      + + + +
        +
      • +

        refreshCertificate

        +
        private void refreshCertificate(String tenantId)
        +
        当我方服务器不存在平台证书或者证书同当前响应报文中的证书序列号不一致时应当刷新 调用/v3/certificates
        +
        +
        参数:
        +
        tenantId - tenantId
        +
        +
      • +
      + + + +
        +
      • +

        decryptResponseBody

        +
        public String decryptResponseBody(String tenantId,
        +                                  String associatedData,
        +                                  String nonce,
        +                                  String ciphertext)
        +
        解密响应体.
        +
        +
        参数:
        +
        tenantId - the properties key
        +
        associatedData - the associated data
        +
        nonce - the nonce
        +
        ciphertext - the ciphertext
        +
        返回:
        +
        the string
        +
        +
      • +
      + + + +
        +
      • +

        wechatMetaContainer

        +
        public WechatMetaContainer wechatMetaContainer()
        +
        Wechat meta container.
        +
        +
        返回:
        +
        the wechat meta container
        +
        +
      • +
      + + + +
        +
      • +

        createSign

        +
        private String createSign(String... components)
        +
        请求时设置签名 组件
        +
        +
        参数:
        +
        components - the components
        +
        返回:
        +
        string string
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatApiProvider.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatApiProvider.html new file mode 100644 index 0000000..0db0562 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatApiProvider.html @@ -0,0 +1,401 @@ + + + + + + +WechatApiProvider (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 WechatApiProvider

+
+
+ +
+
    +
  • +
    +
    +
    public class WechatApiProvider
    +extends Object
    +
    微信支付工具.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        wechatPayClient

        +
        private final WechatPayClient wechatPayClient
        +
        The Wechat pay client.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatApiProvider

        +
        public WechatApiProvider(WechatPayClient wechatPayClient)
        +
        Instantiates a new Wechat api provider.
        +
        +
        参数:
        +
        wechatPayClient - the wechat pay client
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        favorApi

        +
        public WechatMarketingFavorApi favorApi(String tenantId)
        +
        代金券.
        +
        +
        参数:
        +
        tenantId - the tenant id
        +
        返回:
        +
        the wechat marketing favor api
        +
        +
      • +
      + + + +
        +
      • +

        directPayApi

        +
        public WechatDirectPayApi directPayApi(String tenantId)
        +
        普通支付-直连模式.
        +
        +
        参数:
        +
        tenantId - the tenant id
        +
        返回:
        +
        the wechat pay api
        +
        +
      • +
      + + + +
        +
      • +

        combinePayApi

        +
        public WechatCombinePayApi combinePayApi(String tenantId)
        +
        合单支付.
        +
        +
        参数:
        +
        tenantId - the tenant id
        +
        返回:
        +
        the wechat combine pay api
        +
        +
      • +
      + + + +
        +
      • +

        callback

        +
        public WechatPayCallback callback(String tenantId)
        +
        回调.
        +
        +
        参数:
        +
        tenantId - the tenant id
        +
        返回:
        +
        the wechat pay callback
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatCombinePayApi.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatCombinePayApi.html new file mode 100644 index 0000000..2ba35a6 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatCombinePayApi.html @@ -0,0 +1,499 @@ + + + + + + +WechatCombinePayApi (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 WechatCombinePayApi

+
+
+ +
+
    +
  • +
    +
    +
    public class WechatCombinePayApi
    +extends AbstractApi
    +
    微信合单支付.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatCombinePayApi

        +
        public WechatCombinePayApi(WechatPayClient wechatPayClient,
        +                           String tenantId)
        +
        Instantiates a new Abstract api.
        +
        +
        参数:
        +
        wechatPayClient - the wechat pay client
        +
        tenantId - the tenant id
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        appPay

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> appPay(CombinePayParams combinePayParams)
        +
        合单下单-APP支付API +

        + 使用合单支付接口,用户只输入一次密码,即可完成多个订单的支付。目前最多一次可支持50笔订单进行合单支付。 +

        + 注意: + • 订单如果需要进行抽佣等,需要在合单中指定需要进行分账(profit_sharing为true);指定后,交易资金进入二级商户账户,处于冻结状态,可在后续使用分账接口进行分账,利用分账完结进行资金解冻,实现抽佣和对二级商户的账期。

        +
        +
        参数:
        +
        combinePayParams - the combine pay params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        jsPay

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> jsPay(CombinePayParams combinePayParams)
        +
        合单下单-JSAPI支付/小程序支付API +

        + 使用合单支付接口,用户只输入一次密码,即可完成多个订单的支付。目前最多一次可支持50笔订单进行合单支付。 +

        + 注意: + • 订单如果需要进行抽佣等,需要在合单中指定需要进行分账(profit_sharing为true);指定后,交易资金进入二级商户账户,处于冻结状态,可在后续使用分账接口进行分账,利用分账完结进行资金解冻,实现抽佣和对二级商户的账期。

        +
        +
        参数:
        +
        combinePayParams - the combine pay params
        +
        返回:
        +
        wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        combinePayFunction

        +
        private org.springframework.http.RequestEntity<?> combinePayFunction(WechatPayV3Type type,
        +                                                                     CombinePayParams params)
        +
        Combine pay function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        params - the params
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        h5Pay

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> h5Pay(CombineH5PayParams combineH5PayParams)
        +
        合单下单-H5支付API. +

        + 使用合单支付接口,用户只输入一次密码,即可完成多个订单的支付。目前最多一次可支持50笔订单进行合单支付。 +

        + 注意: + • 订单如果需要进行抽佣等,需要在合单中指定需要进行分账(profit_sharing为true);指定后,交易资金进入二级商户账户,处于冻结状态,可在后续使用分账接口进行分账,利用分账完结进行资金解冻,实现抽佣和对二级商户的账期。

        +
        +
        参数:
        +
        combineH5PayParams - the combine h 5 pay params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        combinePayFunction

        +
        private org.springframework.http.RequestEntity<?> combinePayFunction(WechatPayV3Type type,
        +                                                                     CombineH5PayParams params)
        +
        Combine pay function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        params - the params
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        nativePay

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> nativePay(CombinePayParams combinePayParams)
        +
        合单下单-Native支付API. +

        + 使用合单支付接口,用户只输入一次密码,即可完成多个订单的支付。目前最多一次可支持50笔订单进行合单支付。 +

        + 注意: + • 订单如果需要进行抽佣等,需要在合单中指定需要进行分账(profit_sharing为true);指定后,交易资金进入二级商户账户,处于冻结状态,可在后续使用分账接口进行分账,利用分账完结进行资金解冻,实现抽佣和对二级商户的账期。

        +
        +
        参数:
        +
        combinePayParams - the combine pay params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        queryTransactionByOutTradeNo

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> queryTransactionByOutTradeNo(String combineOutTradeNo)
        +
        合单查询订单API.
        +
        +
        参数:
        +
        combineOutTradeNo - the combine out trade no
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        close

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> close(CombineCloseParams combineCloseParams)
        +
        合单关闭订单API. +

        + 合单支付订单只能使用此合单关单api完成关单。 + + 微信服务器返回 204。

        +
        +
        参数:
        +
        combineCloseParams - the combine close params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatDirectPayApi.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatDirectPayApi.html new file mode 100644 index 0000000..0d067dc --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatDirectPayApi.html @@ -0,0 +1,488 @@ + + + + + + +WechatDirectPayApi (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 WechatDirectPayApi

+
+
+ +
+
    +
  • +
    +
    +
    public class WechatDirectPayApi
    +extends AbstractApi
    +
    普通支付-直连模式.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatDirectPayApi

        +
        public WechatDirectPayApi(WechatPayClient wechatPayClient,
        +                          String tenantId)
        +
        Instantiates a new Wechat pay api.
        +
        +
        参数:
        +
        wechatPayClient - the wechat pay client
        +
        tenantId - the tenant id
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        appPay

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> appPay(PayParams payParams)
        +
        APP下单API
        +
        +
        参数:
        +
        payParams - the pay params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        jsPay

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> jsPay(PayParams payParams)
        +
        JSAPI/小程序下单API
        +
        +
        参数:
        +
        payParams - the pay params
        +
        返回:
        +
        wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        nativePay

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> nativePay(PayParams payParams)
        +
        Native下单API
        +
        +
        参数:
        +
        payParams - the pay params
        +
        返回:
        +
        wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        h5Pay

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> h5Pay(PayParams payParams)
        +
        H5下单API
        +
        +
        参数:
        +
        payParams - the pay params
        +
        返回:
        +
        wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        payFunction

        +
        private org.springframework.http.RequestEntity<?> payFunction(WechatPayV3Type type,
        +                                                              PayParams payParams)
        +
      • +
      + + + +
        +
      • +

        queryTransactionById

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> queryTransactionById(TransactionQueryParams params)
        +
        微信支付订单号查询API
        +
        +
        参数:
        +
        params - the params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        queryTransactionByOutTradeNo

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> queryTransactionByOutTradeNo(TransactionQueryParams params)
        +
        商户订单号查询API
        +
        +
        参数:
        +
        params - the params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + + + + + +
        +
      • +

        close

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> close(String outTradeNo)
        +
        关单API
        +
        +
        参数:
        +
        outTradeNo - the out trade no
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        closeByOutTradeNoFunction

        +
        private org.springframework.http.RequestEntity<?> closeByOutTradeNoFunction(WechatPayV3Type type,
        +                                                                            String outTradeNo)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.html new file mode 100644 index 0000000..51b3609 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.html @@ -0,0 +1,1026 @@ + + + + + + +WechatMarketingFavorApi (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 WechatMarketingFavorApi

+
+
+ +
+
    +
  • +
    +
    +
    public class WechatMarketingFavorApi
    +extends AbstractApi
    +
    微信支付营销代金券API
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatMarketingFavorApi

        +
        public WechatMarketingFavorApi(WechatPayClient wechatPayClient,
        +                               String tenantId)
        +
        Instantiates a new Wechat marketing favor api.
        +
        +
        参数:
        +
        wechatPayClient - the wechat pay client
        +
        tenantId - the tenant id
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        createStock

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> createStock(StocksCreateParams params)
        +
        创建代金券批次API +

        + 通过调用此接口可创建代金券批次,包括 预充值免充值 类型。

        +
        +
        参数:
        +
        params - the params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        createStocksFunction

        +
        private org.springframework.http.RequestEntity<?> createStocksFunction(WechatPayV3Type type,
        +                                                                       StocksCreateParams params)
        +
        Create stocks function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        params - the params
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        startStock

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> startStock(String stockId)
        +
        激活代金券批次API +

        + 制券成功后,通过调用此接口激活批次,如果是预充值代金券,激活时会从商户账户余额中锁定本批次的营销资金。

        +
        +
        参数:
        +
        stockId - the stock id
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        sendStock

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> sendStock(StocksSendParams params)
        +
        发放代金券API +

        + 商户侧开发时建议增加发放流水记录。 +

        + 微信支付文档所要求的微信公众号服务号不是必须的,只要你有一个绑定了微信支付商户平台和开放平台的appid即可。 +

        + 流程为: + 1. appid 请求授权微信登录。 + 2. 登录成功后,开发者在商户侧保存用户 对应此appid的openid。 + 3. 通过 appid - openid 进行发券。 +

        + 商户平台/API完成制券后,可使用发放代金券接口发券。通过调用此接口可发放指定批次给指定用户,发券场景可以是小程序、H5、APP等。 +

        + 注意: + • 商户可在H5活动页面、商户小程序、商户APP等自有场景内调用该接口完成发券,商户默认只允许发放本商户号(调用发券接口的商户号)创建的代金券,如需发放其他商户商户创建的代金券,请参考常见问题Q1。

        +
        +
        参数:
        +
        params - the params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        sendStocksFunction

        +
        private org.springframework.http.RequestEntity<?> sendStocksFunction(WechatPayV3Type type,
        +                                                                     StocksSendParams params)
        +
        Send stocks function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        params - the params
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        pauseStock

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> pauseStock(String stockId)
        +
        暂停代金券批次API +

        + 通过此接口可暂停指定代金券批次。暂停后,该代金券批次暂停发放,用户无法通过任何渠道再领取该批次的券。

        +
        +
        参数:
        +
        stockId - the stock id
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        restartStock

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> restartStock(String stockId)
        +
        重启代金券批次API +

        + 通过此接口可重启指定代金券批次。重启后,该代金券批次可以再次发放。

        +
        +
        参数:
        +
        stockId - the stock id
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        startAndRestartAndPauseStockFunction

        +
        private org.springframework.http.RequestEntity<?> startAndRestartAndPauseStockFunction(WechatPayV3Type type,
        +                                                                                       String stockId)
        +
        Start and restart and pause stock function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        stockId - the stock id
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        queryStocksByMch

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> queryStocksByMch(StocksQueryParams params)
        +
        条件查询批次列表API +

        + 通过此接口可查询多个批次的信息,包括批次的配置信息以及批次概况数据。

        +
        +
        参数:
        +
        params - the params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        queryStocksByMchFunction

        +
        private org.springframework.http.RequestEntity<?> queryStocksByMchFunction(WechatPayV3Type type,
        +                                                                           StocksQueryParams params)
        +
        Query stocks function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        params - the params
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        queryStockDetail

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> queryStockDetail(String stockId)
        +
        查询批次详情API +

        + 通过此接口可查询批次信息,包括批次的配置信息以及批次概况数据。

        +
        +
        参数:
        +
        stockId - the stock id
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        stockDetailFunction

        +
        private org.springframework.http.RequestEntity<?> stockDetailFunction(WechatPayV3Type type,
        +                                                                      String stockId)
        +
        Stock detail function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        stockId - the stock id
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        queryCouponDetails

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> queryCouponDetails(CouponDetailsQueryParams params)
        +
        查询代金券详情API +

        + 通过此接口可查询代金券信息,包括代金券的基础信息、状态。如代金券已核销,会包括代金券核销的订单信息(订单号、单品信息等)。

        +
        +
        参数:
        +
        params - the params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        couponDetailFunction

        +
        private org.springframework.http.RequestEntity<?> couponDetailFunction(WechatPayV3Type type,
        +                                                                       CouponDetailsQueryParams params)
        +
        Coupon detail function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        params - the params
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        queryMerchantsByStockId

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> queryMerchantsByStockId(MchQueryParams params)
        +
        查询代金券可用商户API +

        + 通过调用此接口可查询批次的可用商户号,判断券是否在某商户号可用,来决定是否展示。

        +
        +
        参数:
        +
        params - the params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        queryMerchantsByStockIdFunction

        +
        private org.springframework.http.RequestEntity<?> queryMerchantsByStockIdFunction(WechatPayV3Type type,
        +                                                                                  MchQueryParams params)
        +
        Query stocks function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        params - the params
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        queryStockItems

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> queryStockItems(MchQueryParams params)
        +
        查询代金券可用单品API +

        + 通过此接口可查询批次的可用商品编码,判断券是否可用于某些商品,来决定是否展示。

        +
        +
        参数:
        +
        params - the params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        queryUserCouponsByMchId

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> queryUserCouponsByMchId(UserCouponsQueryParams params)
        +
        根据商户号查用户的券API +

        + 可通过该接口查询用户在某商户号可用的全部券,可用于商户的小程序/H5中,用户"我的代金券"或"提交订单页"展示优惠信息。无法查询到微信支付立减金。本接口查不到用户的微信支付立减金(又称“全平台通用券”),即在所有商户都可以使用的券,例如:摇摇乐红包;当按可用商户号查询时,无法查询用户已经核销的券

        +
        +
        参数:
        +
        params - the params
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        queryUserCouponsFunction

        +
        private org.springframework.http.RequestEntity<?> queryUserCouponsFunction(WechatPayV3Type type,
        +                                                                           UserCouponsQueryParams params)
        +
        Query user coupons function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        params - the params
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        downloadStockUseFlow

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> downloadStockUseFlow(String stockId)
        +
        下载批次核销明细API +

        + 数据结果包含在响应体的 csv 字段中 +

        + 可获取到某批次的核销明细数据,包括订单号、单品信息、银行流水号等,用于对账/数据分析。

        +
        +
        参数:
        +
        stockId - the stock id
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        downloadStockRefundFlow

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> downloadStockRefundFlow(String stockId)
        +
        下载批次退款明细API +

        + 数据结果包含在响应体的 csv 字段中 +

        + 可获取到某批次的退款明细数据,包括订单号、单品信息、银行流水号等,用于对账/数据分析。

        +
        +
        参数:
        +
        stockId - the stock id
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        downloadFlowFunction

        +
        private org.springframework.http.RequestEntity<?> downloadFlowFunction(WechatPayV3Type type,
        +                                                                       String stockId)
        +
        Download flow function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        stockId - the stock id
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        marketingImageUpload

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> marketingImageUpload(org.springframework.web.multipart.MultipartFile file)
        +
        营销图片上传API +

        + 媒体图片只支持JPG、BMP、PNG格式,文件大小不能超过2M。 +

        + 通过本接口上传图片后可获得图片url地址。图片url可在微信支付营销相关的API使用,包括商家券、代金券、支付有礼等。

        +
        +
        参数:
        +
        file - the file
        +
        返回:
        +
        the wechat response entity
        +
        +
      • +
      + + + +
        +
      • +

        marketingImageUploadFunction

        +
        private org.springframework.http.RequestEntity<?> marketingImageUploadFunction(WechatPayV3Type type,
        +                                                                               org.springframework.web.multipart.MultipartFile file)
        +
        Marketing image upload function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        file - the file
        +
        返回:
        +
        the request entity
        +
        +
      • +
      + + + +
        +
      • +

        setMarketingFavorCallback

        +
        public WechatResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode> setMarketingFavorCallback(String notifyUrl)
        +
        代金券核销回调通知API。 +

        + 设置核销回调通知的notifyUrl,notifyUrl需要设置应用白名单。开发者应该对代金券的核销结果进行流水记录。

        +
        +
        参数:
        +
        notifyUrl - the notify url
        +
        返回:
        +
        the wechat response entity
        +
        另请参阅:
        +
        核销回调
        +
        +
      • +
      + + + +
        +
      • +

        setMarketingFavorCallbackFunction

        +
        private org.springframework.http.RequestEntity<?> setMarketingFavorCallbackFunction(WechatPayV3Type type,
        +                                                                                    String notifyUrl)
        +
        Sets marketing favor callback function.
        +
        +
        参数:
        +
        type - the type
        +
        notifyUrl - the notify url
        +
        返回:
        +
        the marketing favor callback function
        +
        +
      • +
      + + + + + + + +
        +
      • +

        billDownloadFunction

        +
        private org.springframework.http.RequestEntity<?> billDownloadFunction(WechatPayV3Type type,
        +                                                                       String link)
        +
        Bill download function request entity.
        +
        +
        参数:
        +
        type - the type
        +
        link - the link
        +
        返回:
        +
        the request entity
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatMetaBean.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatMetaBean.html new file mode 100644 index 0000000..3bf9558 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatMetaBean.html @@ -0,0 +1,333 @@ + + + + + + +WechatMetaBean (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 WechatMetaBean

+
+
+ +
+
    +
  • +
    +
    +
    public class WechatMetaBean
    +extends Object
    +
    微信支付元数据Bean.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatMetaBean

        +
        public WechatMetaBean()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatMetaContainer.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatMetaContainer.html new file mode 100644 index 0000000..d723b20 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatMetaContainer.html @@ -0,0 +1,405 @@ + + + + + + +WechatMetaContainer (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 WechatMetaContainer

+
+
+ +
+
    +
  • +
    +
    +
    public class WechatMetaContainer
    +extends Object
    +
    配置容器
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatMetaContainer

        +
        public WechatMetaContainer()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        addWechatMeta

        +
        public WechatMetaBean addWechatMeta(String tenantId,
        +                                    WechatMetaBean wechatMetaBean)
        +
        Add wechat meta boolean.
        +
        +
        参数:
        +
        tenantId - the tenantId
        +
        wechatMetaBean - the wechat meta bean
        +
        返回:
        +
        the boolean
        +
        +
      • +
      + + + +
        +
      • +

        removeWechatMeta

        +
        public WechatMetaBean removeWechatMeta(String tenantId)
        +
        Remove wechat meta wechat meta bean.
        +
        +
        参数:
        +
        tenantId - the tenantId
        +
        返回:
        +
        the wechat meta bean
        +
        +
      • +
      + + + +
        +
      • +

        getWechatMeta

        +
        public WechatMetaBean getWechatMeta(String tenantId)
        +
        Gets wechat meta.
        +
        +
        参数:
        +
        tenantId - the tenantId
        +
        返回:
        +
        the wechat meta
        +
        +
      • +
      + + + +
        +
      • +

        getTenantIds

        +
        public Set<String> getTenantIds()
        +
        Gets properties keys.
        +
        +
        返回:
        +
        the properties keys
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayCallback.EventType.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayCallback.EventType.html new file mode 100644 index 0000000..4acbdc8 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayCallback.EventType.html @@ -0,0 +1,399 @@ + + + + + + +WechatPayCallback.EventType (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

枚举 WechatPayCallback.EventType

+
+
+ +
+ +
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        event

        +
        private final String event
        +
        The Event.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        values

        +
        public static WechatPayCallback.EventType[] values()
        +
        按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。该方法可用于迭代 +常量, 如下所示: +
        +for (WechatPayCallback.EventType c : WechatPayCallback.EventType.values())
        +    System.out.println(c);
        +
        +
        +
        返回:
        +
        按照声明该枚举类型的常量的顺序返回的包含这些常量的数组
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static WechatPayCallback.EventType valueOf(String name)
        +
        返回带有指定名称的该类型的枚举常量。 +字符串必须与用于声明该类型的枚举常量的 +标识符完全匹配。(不允许有多余 +的空格字符。)
        +
        +
        参数:
        +
        name - 要返回的枚举常量的名称。
        +
        返回:
        +
        返回带有指定名称的枚举常量
        +
        抛出:
        +
        IllegalArgumentException - 如果该枚举类型没有带有指定名称的常量
        +
        NullPointerException - 如果参数为空值
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayCallback.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayCallback.html new file mode 100644 index 0000000..10cd097 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayCallback.html @@ -0,0 +1,473 @@ + + + + + + +WechatPayCallback (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 WechatPayCallback

+
+
+ +
+
    +
  • +
    +
    +
    public class WechatPayCallback
    +extends Object
    +
    微信支付回调工具.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        MAPPER

        +
        private static final com.fasterxml.jackson.databind.ObjectMapper MAPPER
        +
        The constant MAPPER.
        +
      • +
      + + + +
        +
      • +

        signatureProvider

        +
        private final SignatureProvider signatureProvider
        +
        The Signature provider.
        +
      • +
      + + + +
        +
      • +

        tenantId

        +
        private final String tenantId
        +
        The Tenant id.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatPayCallback

        +
        public WechatPayCallback(SignatureProvider signatureProvider,
        +                         String tenantId)
        +
        Instantiates a new Wechat pay callback.
        +
        +
        参数:
        +
        signatureProvider - the signature provider
        +
        tenantId - the tenant id
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        couponCallback

        +
        public Map<String,?> couponCallback(ResponseSignVerifyParams params,
        +                                    Consumer<CouponConsumeData> couponConsumeDataConsumer)
        +
        微信支付代金券核销回调.
        +
        +
        参数:
        +
        params - the params
        +
        couponConsumeDataConsumer - the coupon consume data consumer
        +
        返回:
        +
        the map
        +
        +
      • +
      + + + +
        +
      • +

        transactionCallback

        +
        public Map<String,?> transactionCallback(ResponseSignVerifyParams params,
        +                                         Consumer<TransactionConsumeData> transactionConsumeDataConsumer)
        +
        微信支付成功回调. +

        + 无需开发者判断,只有扣款成功微信才会回调此接口

        +
        +
        参数:
        +
        params - the params
        +
        transactionConsumeDataConsumer - the transaction consume data consumer
        +
        返回:
        +
        the map
        +
        +
      • +
      + + + +
        +
      • +

        combineTransactionCallback

        +
        public Map<String,?> combineTransactionCallback(ResponseSignVerifyParams params,
        +                                                Consumer<CombineTransactionConsumeData> combineTransactionConsumeDataConsumer)
        +
        微信合单支付成功回调. +

        + 无需开发者判断,只有扣款成功微信才会回调此接口

        +
        +
        参数:
        +
        params - the params
        +
        combineTransactionConsumeDataConsumer - the combine transaction consume data consumer
        +
        返回:
        +
        the map
        +
        +
      • +
      + + + + +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayClient.Executor.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayClient.Executor.html new file mode 100644 index 0000000..1ff887e --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayClient.Executor.html @@ -0,0 +1,562 @@ + + + + + + +WechatPayClient.Executor (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 WechatPayClient.Executor<M>

+
+
+ +
+
    +
  • +
    +
    类型参数:
    +
    M - the type parameter
    +
    +
    +
    封闭类:
    +
    WechatPayClient
    +
    +
    +
    +
    public static class WechatPayClient.Executor<M>
    +extends Object
    +
    The type Executor.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        wechatPayV3Type

        +
        private final WechatPayV3Type wechatPayV3Type
        +
        The V3 pay type.
        +
      • +
      + + + +
        +
      • +

        restOperations

        +
        private final org.springframework.web.client.RestOperations restOperations
        +
        The Rest operations.
        +
      • +
      + + + +
        +
      • +

        signatureProvider

        +
        private final SignatureProvider signatureProvider
        +
        The Signature provider.
        +
      • +
      + + + +
        +
      • +

        model

        +
        private final M model
        +
        The Model.
        +
      • +
      + + + +
        +
      • +

        requestEntityBiFunction

        +
        private BiFunction<WechatPayV3Type,M,org.springframework.http.RequestEntity<?>> requestEntityBiFunction
        +
        The Request entity bi function.
        +
      • +
      + + + +
        +
      • +

        responseBodyConsumer

        +
        private Consumer<org.springframework.http.ResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode>> responseBodyConsumer
        +
        The Response body consumer.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + + + +
        +
      • +

        Executor

        +
        Executor(WechatPayV3Type wechatPayV3Type,
        +         M model,
        +         SignatureProvider signatureProvider,
        +         org.springframework.web.client.RestOperations restOperations)
        +
        Instantiates a new Executor.
        +
        +
        参数:
        +
        wechatPayV3Type - the v 3 pay type
        +
        model - the model
        +
        signatureProvider - the signature provider
        +
        restOperations - the rest operations
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        function

        +
        public WechatPayClient.Executor<M> function(BiFunction<WechatPayV3Type,M,org.springframework.http.RequestEntity<?>> requestEntityBiFunction)
        +
        Function executor.
        +
        +
        参数:
        +
        requestEntityBiFunction - the request entity bifunction
        +
        返回:
        +
        the executor
        +
        +
      • +
      + + + +
        +
      • +

        consumer

        +
        public WechatPayClient.Executor<M> consumer(Consumer<org.springframework.http.ResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode>> responseBodyConsumer)
        +
        Consumer executor.
        +
        +
        参数:
        +
        responseBodyConsumer - the response body consumer
        +
        返回:
        +
        the executor
        +
        +
      • +
      + + + +
        +
      • +

        request

        +
        public void request()
        +
        Request.
        +
      • +
      + + + +
        +
      • +

        download

        +
        public String download()
        +
        Download string.
        +
        +
        返回:
        +
        the string
        +
        +
      • +
      + + + +
        +
      • +

        header

        +
        private <T> WechatRequestEntity<T> header(WechatRequestEntity<T> requestEntity)
        +
        构造私钥签名.
        +
        +
        类型参数:
        +
        T - the type parameter
        +
        参数:
        +
        requestEntity - the request entity
        +
        返回:
        +
        the wechat request entity
        +
        +
      • +
      + + + +
        +
      • +

        doExecute

        +
        private <T> void doExecute(WechatRequestEntity<T> requestEntity)
        +
        Do execute.
        +
        +
        类型参数:
        +
        T - the type parameter
        +
        参数:
        +
        requestEntity - the request entity
        +
        +
      • +
      + + + +
        +
      • +

        doDownload

        +
        private <T> String doDownload(WechatRequestEntity<T> requestEntity)
        +
        Do download string.
        +
        +
        类型参数:
        +
        T - the type parameter
        +
        参数:
        +
        requestEntity - the request entity
        +
        返回:
        +
        the string
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayClient.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayClient.html new file mode 100644 index 0000000..ab49c74 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatPayClient.html @@ -0,0 +1,415 @@ + + + + + + +WechatPayClient (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 WechatPayClient

+
+
+ +
+
    +
  • +
    +
    +
    public class WechatPayClient
    +extends Object
    +
    The type Wechat pay client.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        signatureProvider

        +
        private final SignatureProvider signatureProvider
        +
        The Signature provider.
        +
      • +
      + + + +
        +
      • +

        restOperations

        +
        private org.springframework.web.client.RestOperations restOperations
        +
        The Rest operations.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatPayClient

        +
        public WechatPayClient(SignatureProvider signatureProvider)
        +
        Instantiates a new Wechat pay service.
        +
        +
        参数:
        +
        signatureProvider - the signature provider
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + + + + + + + +
        +
      • +

        signatureProvider

        +
        public SignatureProvider signatureProvider()
        +
        Signature provider signature provider.
        +
        +
        返回:
        +
        the signature provider
        +
        +
      • +
      + + + +
        +
      • +

        applyDefaultRestTemplate

        +
        private void applyDefaultRestTemplate()
        +
        Apply default rest template.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatRequestEntity.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatRequestEntity.html new file mode 100644 index 0000000..148bb20 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatRequestEntity.html @@ -0,0 +1,427 @@ + + + + + + +WechatRequestEntity (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 WechatRequestEntity<T>

+
+
+ +
+
    +
  • +
    +
    类型参数:
    +
    T - the type parameter
    +
    +
    +
    +
    public class WechatRequestEntity<T>
    +extends org.springframework.http.RequestEntity<T>
    +
    The type Wechat request entity.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      嵌套类概要

      +
        +
      • + + +

        从类继承的嵌套类/接口 org.springframework.http.RequestEntity

        +org.springframework.http.RequestEntity.BodyBuilder, org.springframework.http.RequestEntity.HeadersBuilder<B extends org.springframework.http.RequestEntity.HeadersBuilder<B>>, org.springframework.http.RequestEntity.UriTemplateRequestEntity<T>
      • +
      +
    • +
    + +
      +
    • + + +

      字段概要

      + + + + + + + + + + +
      字段 
      限定符和类型字段和说明
      private Consumer<org.springframework.http.ResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode>>responseBodyConsumer +
      The Response body consumer.
      +
      +
        +
      • + + +

        从类继承的字段 org.springframework.http.HttpEntity

        +EMPTY
      • +
      +
    • +
    + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      WechatRequestEntity(T body, + org.springframework.util.MultiValueMap<String,String> headers, + org.springframework.http.HttpMethod method, + URI url, + Type type, + Consumer<org.springframework.http.ResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode>> responseBodyConsumer) +
      Instantiates a new Wechat request entity.
      +
      +
    • +
    + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + +
      所有方法 静态方法 实例方法 具体方法 
      限定符和类型方法和说明
      WechatRequestEntity<T>headers(org.springframework.http.HttpHeaders httpHeaders) +
      Headers wechat request entity.
      +
      static WechatRequestEntity<?>of(org.springframework.http.RequestEntity<?> requestEntity, + Consumer<org.springframework.http.ResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode>> responseBodyConsumer) +
      Of wechat request entity.
      +
      +
        +
      • + + +

        从类继承的方法 org.springframework.http.RequestEntity

        +delete, delete, equals, get, get, getMethod, getType, getUrl, hashCode, head, head, method, method, method, options, options, patch, patch, post, post, put, put, toString
      • +
      +
        +
      • + + +

        从类继承的方法 org.springframework.http.HttpEntity

        +getBody, getHeaders, hasBody
      • +
      + +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        responseBodyConsumer

        +
        private final Consumer<org.springframework.http.ResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode>> responseBodyConsumer
        +
        The Response body consumer.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + + + +
        +
      • +

        WechatRequestEntity

        +
        public WechatRequestEntity(T body,
        +                           org.springframework.util.MultiValueMap<String,String> headers,
        +                           org.springframework.http.HttpMethod method,
        +                           URI url,
        +                           Type type,
        +                           Consumer<org.springframework.http.ResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode>> responseBodyConsumer)
        +
        Instantiates a new Wechat request entity.
        +
        +
        参数:
        +
        body - the body
        +
        headers - the headers
        +
        method - the method
        +
        url - the url
        +
        type - the type
        +
        responseBodyConsumer - the response body consumer
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        headers

        +
        public WechatRequestEntity<T> headers(org.springframework.http.HttpHeaders httpHeaders)
        +
        Headers wechat request entity.
        +
        +
        参数:
        +
        httpHeaders - the http headers
        +
        返回:
        +
        the wechat request entity
        +
        +
      • +
      + + + +
        +
      • +

        of

        +
        public static WechatRequestEntity<?> of(org.springframework.http.RequestEntity<?> requestEntity,
        +                                        Consumer<org.springframework.http.ResponseEntity<com.fasterxml.jackson.databind.node.ObjectNode>> responseBodyConsumer)
        +
        Of wechat request entity.
        +
        +
        参数:
        +
        requestEntity - the request entity
        +
        responseBodyConsumer - the response body consumer
        +
        返回:
        +
        the wechat request entity
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/WechatResponseEntity.html b/docs/apidocs/cn/felord/payment/wechat/v3/WechatResponseEntity.html new file mode 100644 index 0000000..8b50a87 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/WechatResponseEntity.html @@ -0,0 +1,446 @@ + + + + + + +WechatResponseEntity (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3
+

类 WechatResponseEntity<T>

+
+
+ +
+
    +
  • +
    +
    类型参数:
    +
    T - the type parameter
    +
    +
    +
    +
    public class WechatResponseEntity<T>
    +extends Object
    +
    The type Wechat response entity.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        httpStatus

        +
        private int httpStatus
        +
        The Http status.
        +
      • +
      + + + +
        +
      • +

        body

        +
        private T body
        +
        The Body.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        WechatResponseEntity

        +
        public WechatResponseEntity()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        convert

        +
        public void convert(org.springframework.http.ResponseEntity<T> responseEntity)
        +
        Convert ResponseEntity to WechatResponseEntity.
        +
        +
        参数:
        +
        responseEntity - the response entity
        +
        +
      • +
      + + + +
        +
      • +

        is1xxInformational

        +
        public boolean is1xxInformational()
        +
        Is 1 xx informational boolean.
        +
        +
        返回:
        +
        the boolean
        +
        +
      • +
      + + + +
        +
      • +

        is2xxSuccessful

        +
        public boolean is2xxSuccessful()
        +
        Is 2xx successful boolean.
        +
        +
        返回:
        +
        the boolean
        +
        +
      • +
      + + + +
        +
      • +

        is3xxRedirection

        +
        public boolean is3xxRedirection()
        +
        Is 3xx redirection boolean.
        +
        +
        返回:
        +
        the boolean
        +
        +
      • +
      + + + +
        +
      • +

        is4xxClientError

        +
        public boolean is4xxClientError()
        +
        Is 4xx client error boolean.
        +
        +
        返回:
        +
        the boolean
        +
        +
      • +
      + + + +
        +
      • +

        is5xxServerError

        +
        public boolean is5xxServerError()
        +
        Is 5xx server error boolean.
        +
        +
        返回:
        +
        the boolean
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/AbstractApi.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/AbstractApi.html new file mode 100644 index 0000000..08e3792 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/AbstractApi.html @@ -0,0 +1,180 @@ + + + + + + +类 cn.felord.payment.wechat.v3.AbstractApi的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.AbstractApi

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage.html new file mode 100644 index 0000000..e1ba78c --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage.html @@ -0,0 +1,126 @@ + + + + + + +类 cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage

+
+
没有cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/ExtensionFormHttpMessageConverter.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/ExtensionFormHttpMessageConverter.html new file mode 100644 index 0000000..37e05df --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/ExtensionFormHttpMessageConverter.html @@ -0,0 +1,126 @@ + + + + + + +类 cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter

+
+
没有cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/KeyPairFactory.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/KeyPairFactory.html new file mode 100644 index 0000000..1f7180f --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/KeyPairFactory.html @@ -0,0 +1,126 @@ + + + + + + +类 cn.felord.payment.wechat.v3.KeyPairFactory的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.KeyPairFactory

+
+
没有cn.felord.payment.wechat.v3.KeyPairFactory的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/SignatureProvider.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/SignatureProvider.html new file mode 100644 index 0000000..3869ba3 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/SignatureProvider.html @@ -0,0 +1,261 @@ + + + + + + +类 cn.felord.payment.wechat.v3.SignatureProvider的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.SignatureProvider

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatApiProvider.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatApiProvider.html new file mode 100644 index 0000000..505e74f --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatApiProvider.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatApiProvider的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatApiProvider

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatCombinePayApi.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatCombinePayApi.html new file mode 100644 index 0000000..e3daa48 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatCombinePayApi.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatCombinePayApi的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatCombinePayApi

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatDirectPayApi.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatDirectPayApi.html new file mode 100644 index 0000000..c2c115e --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatDirectPayApi.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatDirectPayApi的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatDirectPayApi

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMarketingFavorApi.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMarketingFavorApi.html new file mode 100644 index 0000000..c4e91a9 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMarketingFavorApi.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatMarketingFavorApi的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatMarketingFavorApi

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMetaBean.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMetaBean.html new file mode 100644 index 0000000..5412cde --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMetaBean.html @@ -0,0 +1,224 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatMetaBean的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatMetaBean

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMetaContainer.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMetaContainer.html new file mode 100644 index 0000000..606dac2 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatMetaContainer.html @@ -0,0 +1,241 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatMetaContainer的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatMetaContainer

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayCallback.EventType.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayCallback.EventType.html new file mode 100644 index 0000000..cec3f65 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayCallback.EventType.html @@ -0,0 +1,191 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatPayCallback.EventType的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatPayCallback.EventType

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayCallback.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayCallback.html new file mode 100644 index 0000000..95f05c7 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayCallback.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatPayCallback的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatPayCallback

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayClient.Executor.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayClient.Executor.html new file mode 100644 index 0000000..e5841c7 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayClient.Executor.html @@ -0,0 +1,181 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatPayClient.Executor的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatPayClient.Executor

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayClient.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayClient.html new file mode 100644 index 0000000..499502e --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatPayClient.html @@ -0,0 +1,265 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatPayClient的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatPayClient

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatRequestEntity.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatRequestEntity.html new file mode 100644 index 0000000..1ee6e12 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatRequestEntity.html @@ -0,0 +1,208 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatRequestEntity的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatRequestEntity

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatResponseEntity.html b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatResponseEntity.html new file mode 100644 index 0000000..9c8c065 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/class-use/WechatResponseEntity.html @@ -0,0 +1,366 @@ + + + + + + +类 cn.felord.payment.wechat.v3.WechatResponseEntity的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.WechatResponseEntity

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/Amount.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/Amount.html new file mode 100644 index 0000000..b8d2edf --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/Amount.html @@ -0,0 +1,301 @@ + + + + + + +Amount (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 Amount

+
+
+ +
+
    +
  • +
    +
    +
    public class Amount
    +extends Object
    +
    支付金额 货币单位【分】默认使用人民币标识CNY
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        total

        +
        private int total
        +
        The Total.
        +
      • +
      + + + +
        +
      • +

        currency

        +
        private String currency
        +
        The Currency.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        Amount

        +
        public Amount()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/CallbackParams.Resource.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/CallbackParams.Resource.html new file mode 100644 index 0000000..b947802 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/CallbackParams.Resource.html @@ -0,0 +1,347 @@ + + + + + + +CallbackParams.Resource (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 CallbackParams.Resource

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    CallbackParams
    +
    +
    +
    +
    public static class CallbackParams.Resource
    +extends Object
    +
    The type Resource.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        algorithm

        +
        private String algorithm
        +
        The Algorithm.
        +
      • +
      + + + +
        +
      • +

        ciphertext

        +
        private String ciphertext
        +
        The Ciphertext.
        +
      • +
      + + + +
        +
      • +

        associatedData

        +
        private String associatedData
        +
        The Associated data.
        +
      • +
      + + + +
        +
      • +

        nonce

        +
        private String nonce
        +
        The Nonce.
        +
      • +
      + + + +
        +
      • +

        originalType

        +
        private String originalType
        +
        The Original type.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        Resource

        +
        public Resource()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/CallbackParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/CallbackParams.html new file mode 100644 index 0000000..b92bdf5 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/CallbackParams.html @@ -0,0 +1,386 @@ + + + + + + +CallbackParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 CallbackParams

+
+
+ +
+
    +
  • +
    +
    +
    public class CallbackParams
    +extends Object
    +
    微信支付回调请求参数.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        id

        +
        private String id
        +
        The Id.
        +
      • +
      + + + +
        +
      • +

        createTime

        +
        private String createTime
        +
        The Create time.
        +
      • +
      + + + +
        +
      • +

        eventType

        +
        private String eventType
        +
        The Event type.
        +
      • +
      + + + +
        +
      • +

        resourceType

        +
        private String resourceType
        +
        The Resource type.
        +
      • +
      + + + +
        +
      • +

        summary

        +
        private String summary
        +
        The Summary.
        +
      • +
      + + + + +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CallbackParams

        +
        public CallbackParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.CombineAmount.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.CombineAmount.html new file mode 100644 index 0000000..c49effd --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.CombineAmount.html @@ -0,0 +1,337 @@ + + + + + + +CombineTransactionConsumeData.CombineAmount (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 CombineTransactionConsumeData.CombineAmount

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    CombineTransactionConsumeData
    +
    +
    +
    +
    public static class CombineTransactionConsumeData.CombineAmount
    +extends Object
    +
    订单金额信息.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        totalAmount

        +
        private Long totalAmount
        +
        标价金额,单位为分.
        +
      • +
      + + + +
        +
      • +

        currency

        +
        private String currency
        +
        标价币种.
        +
      • +
      + + + +
        +
      • +

        payerAmount

        +
        private Long payerAmount
        +
        现金支付金额.
        +
      • +
      + + + +
        +
      • +

        payerCurrency

        +
        private String payerCurrency
        +
        现金支付币种.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CombineAmount

        +
        public CombineAmount()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.SubOrderCallback.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.SubOrderCallback.html new file mode 100644 index 0000000..48946f1 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.SubOrderCallback.html @@ -0,0 +1,433 @@ + + + + + + +CombineTransactionConsumeData.SubOrderCallback (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 CombineTransactionConsumeData.SubOrderCallback

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    CombineTransactionConsumeData
    +
    +
    +
    +
    public static class CombineTransactionConsumeData.SubOrderCallback
    +extends Object
    +
    合单支付回调子订单.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + + + + + +
        +
      • +

        attach

        +
        private String attach
        +
        The Attach.
        +
      • +
      + + + +
        +
      • +

        bankType

        +
        private String bankType
        +
        The Bank type.
        +
      • +
      + + + +
        +
      • +

        mchid

        +
        private String mchid
        +
        The Mchid.
        +
      • +
      + + + +
        +
      • +

        outTradeNo

        +
        private String outTradeNo
        +
        The Out trade no.
        +
      • +
      + + + +
        +
      • +

        subMchid

        +
        private String subMchid
        +
        The Sub mchid.
        +
      • +
      + + + +
        +
      • +

        successTime

        +
        private String successTime
        +
        The Success time.
        +
      • +
      + + + +
        +
      • +

        tradeState

        +
        private String tradeState
        +
        The Trade state.
        +
      • +
      + + + +
        +
      • +

        tradeType

        +
        private String tradeType
        +
        The Trade type.
        +
      • +
      + + + +
        +
      • +

        transactionId

        +
        private String transactionId
        +
        The Transaction id.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        SubOrderCallback

        +
        public SubOrderCallback()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.html new file mode 100644 index 0000000..741c243 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/CombineTransactionConsumeData.html @@ -0,0 +1,392 @@ + + + + + + +CombineTransactionConsumeData (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 CombineTransactionConsumeData

+
+
+ +
+
    +
  • +
    +
    +
    public class CombineTransactionConsumeData
    +extends Object
    +
    合单支付回调解密数据.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CombineTransactionConsumeData

        +
        public CombineTransactionConsumeData()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/ConsumeInformation.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/ConsumeInformation.html new file mode 100644 index 0000000..7a132d5 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/ConsumeInformation.html @@ -0,0 +1,321 @@ + + + + + + +ConsumeInformation (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 ConsumeInformation

+
+
+ +
+
    +
  • +
    +
    +
    public class ConsumeInformation
    +extends Object
    +
    已实扣代金券信息
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        consumeMchid

        +
        private String consumeMchid
        +
      • +
      + + + +
        +
      • +

        consumeTime

        +
        private String consumeTime
        +
      • +
      + + + + + + + +
        +
      • +

        transactionId

        +
        private String transactionId
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ConsumeInformation

        +
        public ConsumeInformation()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponAvailableTime.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponAvailableTime.html new file mode 100644 index 0000000..d70c57d --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponAvailableTime.html @@ -0,0 +1,316 @@ + + + + + + +CouponAvailableTime (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 CouponAvailableTime

+
+
+ +
+
    +
  • +
    +
    +
    public class CouponAvailableTime
    +extends Object
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        availableTimeAfterReceive

        +
        private Long availableTimeAfterReceive
        +
        The Available time after receive.
        +
      • +
      + + + +
        +
      • +

        fixAvailableTime

        +
        private FixAvailableTime fixAvailableTime
        +
        The Fix available time.
        +
      • +
      + + + +
        +
      • +

        secondDayAvailable

        +
        private Boolean secondDayAvailable
        +
        The Second day available.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CouponAvailableTime

        +
        public CouponAvailableTime()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponConsumeData.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponConsumeData.html new file mode 100644 index 0000000..0ef0d6c --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponConsumeData.html @@ -0,0 +1,477 @@ + + + + + + +CouponConsumeData (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 CouponConsumeData

+
+
+ +
+
    +
  • +
    +
    +
    public class CouponConsumeData
    +extends Object
    +
    微信代金券核销通知参数
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        availableBeginTime

        +
        private String availableBeginTime
        +
      • +
      + + + +
        +
      • +

        availableEndTime

        +
        private String availableEndTime
        +
      • +
      + + + + + + + +
        +
      • +

        couponId

        +
        private String couponId
        +
      • +
      + + + +
        +
      • +

        couponName

        +
        private String couponName
        +
      • +
      + + + +
        +
      • +

        couponType

        +
        private String couponType
        +
      • +
      + + + +
        +
      • +

        createTime

        +
        private String createTime
        +
      • +
      + + + +
        +
      • +

        description

        +
        private String description
        +
      • +
      + + + +
        +
      • +

        discountTo

        +
        private DiscountTo discountTo
        +
      • +
      + + + +
        +
      • +

        noCash

        +
        private boolean noCash
        +
      • +
      + + + + + + + +
        +
      • +

        singleitem

        +
        private boolean singleitem
        +
      • +
      + + + + + + + +
        +
      • +

        status

        +
        private String status
        +
      • +
      + + + +
        +
      • +

        stockCreatorMchid

        +
        private String stockCreatorMchid
        +
      • +
      + + + +
        +
      • +

        stockId

        +
        private String stockId
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CouponConsumeData

        +
        public CouponConsumeData()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponDetailsQueryParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponDetailsQueryParams.html new file mode 100644 index 0000000..5a00b58 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponDetailsQueryParams.html @@ -0,0 +1,305 @@ + + + + + + +CouponDetailsQueryParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 CouponDetailsQueryParams

+
+
+ +
+
    +
  • +
    +
    +
    public class CouponDetailsQueryParams
    +extends Object
    +
    查询代金券详情API参数
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        openId

        +
        private String openId
        +
        用户在appid下授权得到的openid +

        + 参考发券

        +
      • +
      + + + +
        +
      • +

        couponId

        +
        private String couponId
        +
        代金券id
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CouponDetailsQueryParams

        +
        public CouponDetailsQueryParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponUseRule.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponUseRule.html new file mode 100644 index 0000000..74ae0ab --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/CouponUseRule.html @@ -0,0 +1,360 @@ + + + + + + +CouponUseRule (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 CouponUseRule

+
+
+ +
+
    +
  • +
    +
    +
    public class CouponUseRule
    +extends Object
    +
    核销规则.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CouponUseRule

        +
        public CouponUseRule()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/Detail.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/Detail.html new file mode 100644 index 0000000..27e8412 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/Detail.html @@ -0,0 +1,316 @@ + + + + + + +Detail (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 Detail

+
+
+ +
+
    +
  • +
    +
    +
    public class Detail
    +extends Object
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        costPrice

        +
        private int costPrice
        +
        订单原价
        +
      • +
      + + + +
        +
      • +

        invoiceId

        +
        private String invoiceId
        +
        商品小票ID
        +
      • +
      + + + +
        +
      • +

        goodsDetail

        +
        private List<Goods> goodsDetail
        +
        单品列表
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        Detail

        +
        public Detail()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/DiscountTo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/DiscountTo.html new file mode 100644 index 0000000..03d82da --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/DiscountTo.html @@ -0,0 +1,295 @@ + + + + + + +DiscountTo (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 DiscountTo

+
+
+ +
+
    +
  • +
    +
    +
    public class DiscountTo
    +extends Object
    +
    减至优惠限定字段,仅减至优惠场景有返回
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        cutToPrice

        +
        private Long cutToPrice
        +
      • +
      + + + +
        +
      • +

        maxPrice

        +
        private Long maxPrice
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        DiscountTo

        +
        public DiscountTo()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/FixAvailableTime.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/FixAvailableTime.html new file mode 100644 index 0000000..5994494 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/FixAvailableTime.html @@ -0,0 +1,317 @@ + + + + + + +FixAvailableTime (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 FixAvailableTime

+
+
+ +
+
    +
  • +
    +
    +
    public class FixAvailableTime
    +extends Object
    +
    The type Fix available time.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        availableWeekDay

        +
        private List<Long> availableWeekDay
        +
        The Available week day.
        +
      • +
      + + + +
        +
      • +

        beginTime

        +
        private Long beginTime
        +
        The Begin time.
        +
      • +
      + + + +
        +
      • +

        endTime

        +
        private Long endTime
        +
        The End time.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        FixAvailableTime

        +
        public FixAvailableTime()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/FixedNormalCoupon.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/FixedNormalCoupon.html new file mode 100644 index 0000000..fce08a2 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/FixedNormalCoupon.html @@ -0,0 +1,303 @@ + + + + + + +FixedNormalCoupon (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 FixedNormalCoupon

+
+
+ +
+
    +
  • +
    +
    +
    public class FixedNormalCoupon
    +extends Object
    +
    固定面额满减券使用规则, stock_type为NORMAL时必填 + + 满transactionMinimum 减少 couponAmount
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        couponAmount

        +
        private Long couponAmount
        +
        面额,单位分
        +
      • +
      + + + +
        +
      • +

        transactionMinimum

        +
        private Long transactionMinimum
        +
        门槛 满M元可用
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        FixedNormalCoupon

        +
        public FixedNormalCoupon()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/Goods.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/Goods.html new file mode 100644 index 0000000..30e9f7c --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/Goods.html @@ -0,0 +1,348 @@ + + + + + + +Goods (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 Goods

+
+
+ +
+
    +
  • +
    +
    +
    public class Goods
    +extends Object
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        merchantGoodsId

        +
        private String merchantGoodsId
        +
        商户侧商品编码
        +
      • +
      + + + +
        +
      • +

        wechatpayGoodsId

        +
        private String wechatpayGoodsId
        +
        微信侧商品编码
        +
      • +
      + + + +
        +
      • +

        goodsName

        +
        private String goodsName
        +
        商品名称
        +
      • +
      + + + +
        +
      • +

        quantity

        +
        private int quantity
        +
        商品数量
        +
      • +
      + + + +
        +
      • +

        unitPrice

        +
        private int unitPrice
        +
        商品单价
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        Goods

        +
        public Goods()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/GoodsDetail.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/GoodsDetail.html new file mode 100644 index 0000000..072c7ec --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/GoodsDetail.html @@ -0,0 +1,321 @@ + + + + + + +GoodsDetail (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 GoodsDetail

+
+
+ +
+
    +
  • +
    +
    +
    public class GoodsDetail
    +extends Object
    +
    商户下单接口传的单品信息
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        discountAmount

        +
        private Long discountAmount
        +
      • +
      + + + +
        +
      • +

        goodsId

        +
        private String goodsId
        +
      • +
      + + + +
        +
      • +

        price

        +
        private Long price
        +
      • +
      + + + +
        +
      • +

        quantity

        +
        private Long quantity
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        GoodsDetail

        +
        public GoodsDetail()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/H5Info.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/H5Info.html new file mode 100644 index 0000000..d540637 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/H5Info.html @@ -0,0 +1,348 @@ + + + + + + +H5Info (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 H5Info

+
+
+ +
+
    +
  • +
    +
    +
    public class H5Info
    +extends Object
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        type

        +
        private String type
        +
        场景类型
        +
      • +
      + + + +
        +
      • +

        appName

        +
        private String appName
        +
        应用名称
        +
      • +
      + + + +
        +
      • +

        appUrl

        +
        private String appUrl
        +
        网站URL
        +
      • +
      + + + +
        +
      • +

        bundleId

        +
        private String bundleId
        +
        IOS 平台 BundleID
        +
      • +
      + + + +
        +
      • +

        packageName

        +
        private String packageName
        +
        Android 平台 PackageName
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        H5Info

        +
        public H5Info()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/MchQueryParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/MchQueryParams.html new file mode 100644 index 0000000..48dbc46 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/MchQueryParams.html @@ -0,0 +1,325 @@ + + + + + + +MchQueryParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 MchQueryParams

+
+
+ +
+
    +
  • +
    +
    +
    public class MchQueryParams
    +extends Object
    +
    查询代金券可用商户.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        offset

        +
        private Integer offset
        +
        必填 + + 查询代金券可用商户API 分页页码,最大1000。
        +
      • +
      + + + +
        +
      • +

        limit

        +
        private Integer limit
        +
        必填 + + 查询代金券可用商户API 最大50。
        +
      • +
      + + + +
        +
      • +

        stockId

        +
        private String stockId
        +
        批次ID
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        MchQueryParams

        +
        public MchQueryParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/NormalCouponInformation.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/NormalCouponInformation.html new file mode 100644 index 0000000..22f65c9 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/NormalCouponInformation.html @@ -0,0 +1,295 @@ + + + + + + +NormalCouponInformation (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 NormalCouponInformation

+
+
+ +
+
    +
  • +
    +
    +
    public class NormalCouponInformation
    +extends Object
    +
    普通满减券面额、门槛信息
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        couponAmount

        +
        private Long couponAmount
        +
      • +
      + + + +
        +
      • +

        transactionMinimum

        +
        private Long transactionMinimum
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        NormalCouponInformation

        +
        public NormalCouponInformation()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/PatternInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/PatternInfo.html new file mode 100644 index 0000000..c876707 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/PatternInfo.html @@ -0,0 +1,349 @@ + + + + + + +PatternInfo (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 PatternInfo

+
+
+ +
+
    +
  • +
    +
    +
    public class PatternInfo
    +extends Object
    +
    优惠券样式
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        backgroundColor

        +
        private CouponBgColor backgroundColor
        +
        背景色
        +
      • +
      + + + +
        +
      • +

        couponImage

        +
        private String couponImage
        +
        券详情图片
        +
      • +
      + + + +
        +
      • +

        description

        +
        private String description
        +
        使用说明
        +
      • +
      + + + +
        +
      • +

        merchantLogo

        +
        private String merchantLogo
        +
        商户logo
        +
      • +
      + + + +
        +
      • +

        merchantName

        +
        private String merchantName
        +
        商户名称
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PatternInfo

        +
        public PatternInfo()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/PayParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/PayParams.html new file mode 100644 index 0000000..bb8b22c --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/PayParams.html @@ -0,0 +1,458 @@ + + + + + + +PayParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 PayParams

+
+
+ +
+
    +
  • +
    +
    +
    public class PayParams
    +extends Object
    +
    支付请求参数.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        appid

        +
        private String appid
        +
      • +
      + + + +
        +
      • +

        mchid

        +
        private String mchid
        +
      • +
      + + + +
        +
      • +

        description

        +
        private String description
        +
        商品描述 + Image形象店-深圳腾大-QQ公仔
        +
      • +
      + + + +
        +
      • +

        outTradeNo

        +
        private String outTradeNo
        +
        商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一,详见【商户订单号】。 + 示例值:1217752501201407033233368018
        +
      • +
      + + + +
        +
      • +

        timeExpire

        +
        private String timeExpire
        +
        订单失效时间 YYYY-MM-DDTHH:mm:ss+TIMEZONE
        +
      • +
      + + + +
        +
      • +

        attach

        +
        private String attach
        +
        附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用
        +
      • +
      + + + +
        +
      • +

        notifyUrl

        +
        private String notifyUrl
        +
        通知URL必须为直接可访问的URL,不允许携带查询串。
        +
      • +
      + + + +
        +
      • +

        goodsTag

        +
        private String goodsTag
        +
        订单优惠标记
        +
      • +
      + + + +
        +
      • +

        amount

        +
        private Amount amount
        +
        支付金额
        +
      • +
      + + + +
        +
      • +

        payer

        +
        private Payer payer
        +
        支付者 JSAPI/小程序下单 必传
        +
      • +
      + + + +
        +
      • +

        detail

        +
        private Detail detail
        +
        优惠功能
        +
      • +
      + + + +
        +
      • +

        sceneInfo

        +
        private SceneInfo sceneInfo
        +
        场景信息
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PayParams

        +
        public PayParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/Payer.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/Payer.html new file mode 100644 index 0000000..a8c7354 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/Payer.html @@ -0,0 +1,316 @@ + + + + + + +Payer (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 Payer

+
+
+ +
+
    +
  • +
    +
    +
    public class Payer
    +extends Object
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        openid

        +
        private String openid
        +
        用户标识
        +
      • +
      + + + +
        +
      • +

        spOpenid

        +
        private String spOpenid
        +
        用户服务标识
        +
      • +
      + + + +
        +
      • +

        subOpenid

        +
        private String subOpenid
        +
        用户子标识
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        Payer

        +
        public Payer()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/PromotionDetail.GoodsDetail.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/PromotionDetail.GoodsDetail.html new file mode 100644 index 0000000..ed11975 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/PromotionDetail.GoodsDetail.html @@ -0,0 +1,353 @@ + + + + + + +PromotionDetail.GoodsDetail (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 PromotionDetail.GoodsDetail

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    PromotionDetail
    +
    +
    +
    +
    public static class PromotionDetail.GoodsDetail
    +extends Object
    +
    The type Goods detail.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        goodsId

        +
        private String goodsId
        +
        The Goods id.
        +
      • +
      + + + +
        +
      • +

        quantity

        +
        private Long quantity
        +
        The Quantity.
        +
      • +
      + + + +
        +
      • +

        unitPrice

        +
        private Long unitPrice
        +
        The Unit price.
        +
      • +
      + + + +
        +
      • +

        discountAmount

        +
        private Long discountAmount
        +
        The Discount amount.
        +
      • +
      + + + +
        +
      • +

        goodsRemark

        +
        private String goodsRemark
        +
        The Goods remark.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        GoodsDetail

        +
        public GoodsDetail()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/PromotionDetail.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/PromotionDetail.html new file mode 100644 index 0000000..4def24e --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/PromotionDetail.html @@ -0,0 +1,466 @@ + + + + + + +PromotionDetail (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 PromotionDetail

+
+
+ +
+
    +
  • +
    +
    +
    public class PromotionDetail
    +extends Object
    +
    The type Promotion detail.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        amount

        +
        private Long amount
        +
        The Amount.
        +
      • +
      + + + +
        +
      • +

        couponId

        +
        private String couponId
        +
        The Coupon id.
        +
      • +
      + + + +
        +
      • +

        currency

        +
        private String currency
        +
        The Currency.
        +
      • +
      + + + + + + + +
        +
      • +

        merchantContribute

        +
        private Long merchantContribute
        +
        The Merchant contribute.
        +
      • +
      + + + +
        +
      • +

        name

        +
        private String name
        +
        The Name.
        +
      • +
      + + + +
        +
      • +

        otherContribute

        +
        private Long otherContribute
        +
        The Other contribute.
        +
      • +
      + + + +
        +
      • +

        scope

        +
        private String scope
        +
        The Scope.
        +
      • +
      + + + +
        +
      • +

        stockId

        +
        private String stockId
        +
        The Stock id.
        +
      • +
      + + + +
        +
      • +

        type

        +
        private String type
        +
        The Type.
        +
      • +
      + + + +
        +
      • +

        wechatpayContribute

        +
        private Long wechatpayContribute
        +
        The Wechatpay contribute.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        PromotionDetail

        +
        public PromotionDetail()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/ResponseSignVerifyParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/ResponseSignVerifyParams.html new file mode 100644 index 0000000..9446d7e --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/ResponseSignVerifyParams.html @@ -0,0 +1,351 @@ + + + + + + +ResponseSignVerifyParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 ResponseSignVerifyParams

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        wechatpaySerial

        +
        private String wechatpaySerial
        +
        response.headers['Wechatpay-Serial'] 当前使用的微信平台证书序列号
        +
      • +
      + + + +
        +
      • +

        wechatpaySignature

        +
        private String wechatpaySignature
        +
        response.headers['Wechatpay-Signature'] 微信平台签名
        +
      • +
      + + + +
        +
      • +

        wechatpayTimestamp

        +
        private String wechatpayTimestamp
        +
        response.headers['Wechatpay-Timestamp'] 微信服务器的时间戳
        +
      • +
      + + + +
        +
      • +

        wechatpayNonce

        +
        private String wechatpayNonce
        +
        response.headers['Wechatpay-Nonce'] 微信服务器提供的随机串
        +
      • +
      + + + +
        +
      • +

        body

        +
        private String body
        +
        response.body 微信服务器的响应体
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ResponseSignVerifyParams

        +
        public ResponseSignVerifyParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/SceneInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/SceneInfo.html new file mode 100644 index 0000000..1852795 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/SceneInfo.html @@ -0,0 +1,333 @@ + + + + + + +SceneInfo (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 SceneInfo

+
+
+ +
+
    +
  • +
    +
    +
    public class SceneInfo
    +extends Object
    +
    场景信息
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        payerClientIp

        +
        private String payerClientIp
        +
        用户终端IP
        +
      • +
      + + + +
        +
      • +

        deviceId

        +
        private String deviceId
        +
        商户端设备号
        +
      • +
      + + + +
        +
      • +

        storeInfo

        +
        private StoreInfo storeInfo
        +
        商户门店信息
        +
      • +
      + + + +
        +
      • +

        h5Info

        +
        private H5Info h5Info
        +
        H5 场景信息
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        SceneInfo

        +
        public SceneInfo()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/SettleInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/SettleInfo.html new file mode 100644 index 0000000..4a454a6 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/SettleInfo.html @@ -0,0 +1,300 @@ + + + + + + +SettleInfo (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 SettleInfo

+
+
+ +
+
    +
  • +
    +
    +
    public class SettleInfo
    +extends Object
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        profitSharing

        +
        private boolean profitSharing
        +
        是否指定分账
        +
      • +
      + + + +
        +
      • +

        subsidyAmount

        +
        private int subsidyAmount
        +
        补差金额
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        SettleInfo

        +
        public SettleInfo()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/SingleitemDiscountOff.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/SingleitemDiscountOff.html new file mode 100644 index 0000000..c5eb3bb --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/SingleitemDiscountOff.html @@ -0,0 +1,282 @@ + + + + + + +SingleitemDiscountOff (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 SingleitemDiscountOff

+
+
+ +
+
    +
  • +
    +
    +
    public class SingleitemDiscountOff
    +extends Object
    +
    单品优惠特定信息
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        singlePriceMax

        +
        private Long singlePriceMax
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        SingleitemDiscountOff

        +
        public SingleitemDiscountOff()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/StockUseRule.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/StockUseRule.html new file mode 100644 index 0000000..843f5bf --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/StockUseRule.html @@ -0,0 +1,366 @@ + + + + + + +StockUseRule (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 StockUseRule

+
+
+ +
+
    +
  • +
    +
    +
    public class StockUseRule
    +extends Object
    +
    批次使用规则
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        maxAmount

        +
        private Long maxAmount
        +
        总消耗金额,单位:分。 + max_amount需要等于coupon_amount(面额) * max_coupons(发放总上限)
        +
      • +
      + + + +
        +
      • +

        maxAmountByDay

        +
        private Long maxAmountByDay
        +
        单天最高消耗金额,单位:分
        +
      • +
      + + + +
        +
      • +

        maxCoupons

        +
        private Long maxCoupons
        +
        最大发券数
        +
      • +
      + + + +
        +
      • +

        maxCouponsPerUser

        +
        private Long maxCouponsPerUser
        +
        单个用户可领个数,每个用户最多60张券
        +
      • +
      + + + +
        +
      • +

        naturalPersonLimit

        +
        private Boolean naturalPersonLimit
        +
        是否开启自然人限制
        +
      • +
      + + + +
        +
      • +

        preventApiAbuse

        +
        private Boolean preventApiAbuse
        +
        api发券防刷
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        StockUseRule

        +
        public StockUseRule()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/StocksCreateParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/StocksCreateParams.html new file mode 100644 index 0000000..4d708e2 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/StocksCreateParams.html @@ -0,0 +1,465 @@ + + + + + + +StocksCreateParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 StocksCreateParams

+
+
+ +
+
    +
  • +
    +
    +
    public class StocksCreateParams
    +extends Object
    +
    创建优惠券批次参数.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        stockName

        +
        private String stockName
        +
        批次名称
        +
      • +
      + + + +
        +
      • +

        comment

        +
        private String comment
        +
        仅配置商户可见,用于自定义信息
        +
      • +
      + + + +
        +
      • +

        belongMerchant

        +
        private String belongMerchant
        +
        批次归属商户号
        +
      • +
      + + + +
        +
      • +

        availableBeginTime

        +
        private OffsetDateTime availableBeginTime
        +
        批次开始时间 rfc 3339 yyyy-mm-ddthh:mm:ss.sss+timezone
        +
      • +
      + + + +
        +
      • +

        availableEndTime

        +
        private OffsetDateTime availableEndTime
        +
        批次结束时间 rfc 3339 YYYY-MM-DDTHH:mm:ss.sss+TIMEZONE
        +
      • +
      + + + +
        +
      • +

        noCash

        +
        private Boolean noCash
        +
        可创建代金券的类型包含预充值和免充值两种类型。此字段用来标识制券 是否无资金流 +

        + ● 预充值代金券适用于第三方出资策划的活动,例如:满100减10. 指订单金额100元,用户实付90元,商户实收100元。设置为Boolean.FALSE +

        + ● 免充值适用于商户策划的活动,例如:满100减10。 指订单金额100元,用户实付90元(用户领券后,在支付中直接核销10元),商户实收90元。设置为Boolean.TRUE

        +
      • +
      + + + +
        +
      • +

        stockType

        +
        private String stockType
        +
        批次类型
        +
      • +
      + + + +
        +
      • +

        outRequestNo

        +
        private String outRequestNo
        +
        商户单据号
        +
      • +
      + + + +
        +
      • +

        ext_info

        +
        private String ext_info
        +
        扩展属性
        +
      • +
      + + + +
        +
      • +

        stockUseRule

        +
        private StockUseRule stockUseRule
        +
        批次使用规则
        +
      • +
      + + + +
        +
      • +

        couponUseRule

        +
        private CouponUseRule couponUseRule
        +
        核销规则
        +
      • +
      + + + +
        +
      • +

        patternInfo

        +
        private PatternInfo patternInfo
        +
        代金券样式
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        StocksCreateParams

        +
        public StocksCreateParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/StocksQueryParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/StocksQueryParams.html new file mode 100644 index 0000000..741cb9f --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/StocksQueryParams.html @@ -0,0 +1,379 @@ + + + + + + +StocksQueryParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 StocksQueryParams

+
+
+ +
+
    +
  • +
    +
    +
    public class StocksQueryParams
    +extends Object
    +
    查询参数,适用以下接口: +

    + 条件查询批次列表API

    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        offset

        +
        private Integer offset
        +
        必填 +

        + 条件查询批次列表API 页码从0开始,默认第0页,传递1可能出错。 +

        + 查询代金券可用商户API 分页页码,最大1000。 +

        + 查询代金券可用单品API 最大500。

        +
      • +
      + + + +
        +
      • +

        limit

        +
        private Integer limit
        +
        必填 +

        + 条件查询批次列表API 分页大小,最大10。 +

        + 查询代金券可用商户API 最大50。 +

        + 查询代金券可用单品API 最大100。

        +
      • +
      + + + +
        +
      • +

        createStartTime

        +
        private OffsetDateTime createStartTime
        +
        选填 +

        + 起始时间 最终满足格式 yyyy-MM-dd'T'HH:mm:ss.SSSXXX

        +
      • +
      + + + +
        +
      • +

        createEndTime

        +
        private OffsetDateTime createEndTime
        +
        选填 +

        + 终止时间 最终满足格式 yyyy-MM-dd'T'HH:mm:ss.SSSXXX

        +
      • +
      + + + +
        +
      • +

        status

        +
        private StockStatus status
        +
        根据API而定 +

        + 批次状态

        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        StocksQueryParams

        +
        public StocksQueryParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/StocksSendParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/StocksSendParams.html new file mode 100644 index 0000000..b5d3572 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/StocksSendParams.html @@ -0,0 +1,383 @@ + + + + + + +StocksSendParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 StocksSendParams

+
+
+ +
+
    +
  • +
    +
    +
    public class StocksSendParams
    +extends Object
    +
    代金券发放接口请求参数
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        stockId

        +
        private String stockId
        +
        批次号 必须为代金券(全场券或单品券)批次号,不支持立减与折扣。
        +
      • +
      + + + +
        +
      • +

        openid

        +
        private String openid
        +
        用户openid 该openid需要与接口传入中的appid有对应关系。
        +
      • +
      + + + +
        +
      • +

        outRequestNo

        +
        private String outRequestNo
        +
        商户单据号
        +
      • +
      + + + +
        +
      • +

        appid

        +
        private String appid
        +
        公众账号ID
        +
      • +
      + + + +
        +
      • +

        stockCreatorMchid

        +
        private String stockCreatorMchid
        +
        创建批次的商户号
        +
      • +
      + + + +
        +
      • +

        couponValue

        +
        private Long couponValue
        +
        指定面额发券场景,券面额,其他场景不需要填,单位:分。 + 校验规则:仅在发券时指定面额及门槛的场景才生效,常规发券场景请勿传入该信息。
        +
      • +
      + + + +
        +
      • +

        couponMinimum

        +
        private Long couponMinimum
        +
        指定面额发券批次门槛,其他场景不需要,单位:分。 + 校验规则:仅在发券时指定面额及门槛的场景才生效,常规发券场景请勿传入该信息。
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        StocksSendParams

        +
        public StocksSendParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/StoreInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/StoreInfo.html new file mode 100644 index 0000000..865a346 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/StoreInfo.html @@ -0,0 +1,332 @@ + + + + + + +StoreInfo (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 StoreInfo

+
+
+ +
+
    +
  • +
    +
    +
    public class StoreInfo
    +extends Object
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        id

        +
        private String id
        +
        门店编号
        +
      • +
      + + + +
        +
      • +

        name

        +
        private String name
        +
        门店名称
        +
      • +
      + + + +
        +
      • +

        areaCode

        +
        private String areaCode
        +
        地区编码
        +
      • +
      + + + +
        +
      • +

        address

        +
        private String address
        +
        详细地址
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        StoreInfo

        +
        public StoreInfo()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.Amount.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.Amount.html new file mode 100644 index 0000000..76e1bb9 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.Amount.html @@ -0,0 +1,337 @@ + + + + + + +TransactionConsumeData.Amount (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 TransactionConsumeData.Amount

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    TransactionConsumeData
    +
    +
    +
    +
    public static class TransactionConsumeData.Amount
    +extends Object
    +
    The type Amount.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        total

        +
        private int total
        +
        The Total.
        +
      • +
      + + + +
        +
      • +

        payerTotal

        +
        private int payerTotal
        +
        The Payer total.
        +
      • +
      + + + +
        +
      • +

        currency

        +
        private String currency
        +
        The Currency.
        +
      • +
      + + + +
        +
      • +

        payerCurrency

        +
        private String payerCurrency
        +
        The Payer currency.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        Amount

        +
        public Amount()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.Payer.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.Payer.html new file mode 100644 index 0000000..115955a --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.Payer.html @@ -0,0 +1,289 @@ + + + + + + +TransactionConsumeData.Payer (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 TransactionConsumeData.Payer

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    TransactionConsumeData
    +
    +
    +
    +
    public static class TransactionConsumeData.Payer
    +extends Object
    +
    The type Payer.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        openid

        +
        private String openid
        +
        The Openid.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        Payer

        +
        public Payer()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.SceneInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.SceneInfo.html new file mode 100644 index 0000000..7a47860 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.SceneInfo.html @@ -0,0 +1,289 @@ + + + + + + +TransactionConsumeData.SceneInfo (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 TransactionConsumeData.SceneInfo

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    TransactionConsumeData
    +
    +
    +
    +
    public static class TransactionConsumeData.SceneInfo
    +extends Object
    +
    The type Scene info.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        deviceId

        +
        private String deviceId
        +
        The Device id.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        SceneInfo

        +
        public SceneInfo()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.html new file mode 100644 index 0000000..b5fae88 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionConsumeData.html @@ -0,0 +1,525 @@ + + + + + + +TransactionConsumeData (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 TransactionConsumeData

+
+
+ +
+
    +
  • +
    +
    +
    public class TransactionConsumeData
    +extends Object
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        TransactionConsumeData

        +
        public TransactionConsumeData()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionQueryParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionQueryParams.html new file mode 100644 index 0000000..9c8d0e0 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/TransactionQueryParams.html @@ -0,0 +1,294 @@ + + + + + + +TransactionQueryParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 TransactionQueryParams

+
+
+ +
+
    +
  • +
    +
    +
    public class TransactionQueryParams
    +extends Object
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        mchId

        +
        private String mchId
        +
      • +
      + + + +
        +
      • +

        transactionIdOrOutTradeNo

        +
        private String transactionIdOrOutTradeNo
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        TransactionQueryParams

        +
        public TransactionQueryParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.Status.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.Status.html new file mode 100644 index 0000000..9ca3077 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.Status.html @@ -0,0 +1,360 @@ + + + + + + +UserCouponsQueryParams.Status (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

枚举 UserCouponsQueryParams.Status

+
+
+ +
+ +
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        values

        +
        public static UserCouponsQueryParams.Status[] values()
        +
        按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。该方法可用于迭代 +常量, 如下所示: +
        +for (UserCouponsQueryParams.Status c : UserCouponsQueryParams.Status.values())
        +    System.out.println(c);
        +
        +
        +
        返回:
        +
        按照声明该枚举类型的常量的顺序返回的包含这些常量的数组
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static UserCouponsQueryParams.Status valueOf(String name)
        +
        返回带有指定名称的该类型的枚举常量。 +字符串必须与用于声明该类型的枚举常量的 +标识符完全匹配。(不允许有多余 +的空格字符。)
        +
        +
        参数:
        +
        name - 要返回的枚举常量的名称。
        +
        返回:
        +
        返回带有指定名称的枚举常量
        +
        抛出:
        +
        IllegalArgumentException - 如果该枚举类型没有带有指定名称的常量
        +
        NullPointerException - 如果参数为空值
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.html new file mode 100644 index 0000000..83e1934 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.html @@ -0,0 +1,434 @@ + + + + + + +UserCouponsQueryParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model
+

类 UserCouponsQueryParams

+
+
+ +
+
    +
  • +
    +
    +
    public class UserCouponsQueryParams
    +extends Object
    +
    The type User coupons query params.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        openId

        +
        private String openId
        +
        用户公众号服务号标识
        +
      • +
      + + + +
        +
      • +

        appId

        +
        private String appId
        +
        公众服务号ID
        +
      • +
      + + + +
        +
      • +

        stockId

        +
        private String stockId
        +
        批次号
        +
      • +
      + + + + + + + +
        +
      • +

        creatorMchId

        +
        private String creatorMchId
        +
        创建批次的商户号
        +
      • +
      + + + +
        +
      • +

        senderMchId

        +
        private String senderMchId
        +
        批次发放商户号
        +
      • +
      + + + +
        +
      • +

        availableMchId

        +
        private String availableMchId
        +
        可用商户号
        +
      • +
      + + + +
        +
      • +

        offset

        +
        private Integer offset
        +
        分页页码
        +
      • +
      + + + +
        +
      • +

        limit

        +
        private Integer limit
        +
        分页大小
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        UserCouponsQueryParams

        +
        public UserCouponsQueryParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Amount.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Amount.html new file mode 100644 index 0000000..e0dfd8b --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Amount.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.Amount的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.Amount

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CallbackParams.Resource.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CallbackParams.Resource.html new file mode 100644 index 0000000..4027efc --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CallbackParams.Resource.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.CallbackParams.Resource的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.CallbackParams.Resource

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CallbackParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CallbackParams.html new file mode 100644 index 0000000..bd663fe --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CallbackParams.html @@ -0,0 +1,126 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.CallbackParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.CallbackParams

+
+
没有cn.felord.payment.wechat.v3.model.CallbackParams的用法
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.CombineAmount.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.CombineAmount.html new file mode 100644 index 0000000..e564ea7 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.CombineAmount.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.combine.CombineTransactionConsumeData.CombineAmount的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.CombineTransactionConsumeData.CombineAmount

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.SubOrderCallback.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.SubOrderCallback.html new file mode 100644 index 0000000..f15718f --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.SubOrderCallback.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.combine.CombineTransactionConsumeData.SubOrderCallback的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.CombineTransactionConsumeData.SubOrderCallback

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.html new file mode 100644 index 0000000..bdf42f2 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CombineTransactionConsumeData.html @@ -0,0 +1,169 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.CombineTransactionConsumeData

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/ConsumeInformation.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/ConsumeInformation.html new file mode 100644 index 0000000..325c0ad --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/ConsumeInformation.html @@ -0,0 +1,166 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.ConsumeInformation的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.ConsumeInformation

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponAvailableTime.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponAvailableTime.html new file mode 100644 index 0000000..10bc55b --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponAvailableTime.html @@ -0,0 +1,166 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.CouponAvailableTime的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.CouponAvailableTime

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponConsumeData.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponConsumeData.html new file mode 100644 index 0000000..6db3eed --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponConsumeData.html @@ -0,0 +1,169 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.CouponConsumeData的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.CouponConsumeData

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponDetailsQueryParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponDetailsQueryParams.html new file mode 100644 index 0000000..c9801be --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponDetailsQueryParams.html @@ -0,0 +1,177 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.CouponDetailsQueryParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.CouponDetailsQueryParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponUseRule.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponUseRule.html new file mode 100644 index 0000000..cab9642 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/CouponUseRule.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.CouponUseRule的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.CouponUseRule

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Detail.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Detail.html new file mode 100644 index 0000000..a68ba76 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Detail.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.Detail的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.Detail

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/DiscountTo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/DiscountTo.html new file mode 100644 index 0000000..8a47b65 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/DiscountTo.html @@ -0,0 +1,166 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.DiscountTo的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.DiscountTo

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/FixAvailableTime.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/FixAvailableTime.html new file mode 100644 index 0000000..b13bead --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/FixAvailableTime.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.FixAvailableTime的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.FixAvailableTime

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/FixedNormalCoupon.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/FixedNormalCoupon.html new file mode 100644 index 0000000..27adf12 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/FixedNormalCoupon.html @@ -0,0 +1,166 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.FixedNormalCoupon的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.FixedNormalCoupon

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Goods.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Goods.html new file mode 100644 index 0000000..6a4bd00 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Goods.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.Goods的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.Goods

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/GoodsDetail.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/GoodsDetail.html new file mode 100644 index 0000000..a8f52b2 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/GoodsDetail.html @@ -0,0 +1,166 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.GoodsDetail的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.GoodsDetail

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/H5Info.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/H5Info.html new file mode 100644 index 0000000..69b4f75 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/H5Info.html @@ -0,0 +1,190 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.H5Info的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.H5Info

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/MchQueryParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/MchQueryParams.html new file mode 100644 index 0000000..f10c3f1 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/MchQueryParams.html @@ -0,0 +1,185 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.MchQueryParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.MchQueryParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/NormalCouponInformation.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/NormalCouponInformation.html new file mode 100644 index 0000000..8831d11 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/NormalCouponInformation.html @@ -0,0 +1,166 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.NormalCouponInformation的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.NormalCouponInformation

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PatternInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PatternInfo.html new file mode 100644 index 0000000..607bb5d --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PatternInfo.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.PatternInfo的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.PatternInfo

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PayParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PayParams.html new file mode 100644 index 0000000..ca449a0 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PayParams.html @@ -0,0 +1,191 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.PayParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.PayParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Payer.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Payer.html new file mode 100644 index 0000000..b14d348 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/Payer.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.Payer的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.Payer

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PromotionDetail.GoodsDetail.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PromotionDetail.GoodsDetail.html new file mode 100644 index 0000000..821703b --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PromotionDetail.GoodsDetail.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.PromotionDetail.GoodsDetail的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.PromotionDetail.GoodsDetail

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PromotionDetail.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PromotionDetail.html new file mode 100644 index 0000000..4350b77 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/PromotionDetail.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.PromotionDetail的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.PromotionDetail

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/ResponseSignVerifyParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/ResponseSignVerifyParams.html new file mode 100644 index 0000000..e8853eb --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/ResponseSignVerifyParams.html @@ -0,0 +1,196 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.ResponseSignVerifyParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.ResponseSignVerifyParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SceneInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SceneInfo.html new file mode 100644 index 0000000..9ef139c --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SceneInfo.html @@ -0,0 +1,174 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.SceneInfo的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.SceneInfo

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SettleInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SettleInfo.html new file mode 100644 index 0000000..627c2fc --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SettleInfo.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.SettleInfo的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.SettleInfo

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SingleitemDiscountOff.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SingleitemDiscountOff.html new file mode 100644 index 0000000..5140781 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/SingleitemDiscountOff.html @@ -0,0 +1,166 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.SingleitemDiscountOff的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.SingleitemDiscountOff

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StockUseRule.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StockUseRule.html new file mode 100644 index 0000000..ba214aa --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StockUseRule.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.StockUseRule的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.StockUseRule

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksCreateParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksCreateParams.html new file mode 100644 index 0000000..996c82e --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksCreateParams.html @@ -0,0 +1,177 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.StocksCreateParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.StocksCreateParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksQueryParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksQueryParams.html new file mode 100644 index 0000000..bb605c5 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksQueryParams.html @@ -0,0 +1,177 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.StocksQueryParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.StocksQueryParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksSendParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksSendParams.html new file mode 100644 index 0000000..d08b5bb --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StocksSendParams.html @@ -0,0 +1,177 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.StocksSendParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.StocksSendParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StoreInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StoreInfo.html new file mode 100644 index 0000000..e767ab3 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/StoreInfo.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.StoreInfo的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.StoreInfo

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.Amount.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.Amount.html new file mode 100644 index 0000000..00f102f --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.Amount.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.TransactionConsumeData.Amount的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.TransactionConsumeData.Amount

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.Payer.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.Payer.html new file mode 100644 index 0000000..77ff422 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.Payer.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.TransactionConsumeData.Payer的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.TransactionConsumeData.Payer

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.SceneInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.SceneInfo.html new file mode 100644 index 0000000..5ccbd81 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.SceneInfo.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.TransactionConsumeData.SceneInfo的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.TransactionConsumeData.SceneInfo

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.html new file mode 100644 index 0000000..acddfc4 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionConsumeData.html @@ -0,0 +1,169 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.TransactionConsumeData的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.TransactionConsumeData

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionQueryParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionQueryParams.html new file mode 100644 index 0000000..f0999f0 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/TransactionQueryParams.html @@ -0,0 +1,179 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.TransactionQueryParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.TransactionQueryParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/UserCouponsQueryParams.Status.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/UserCouponsQueryParams.Status.html new file mode 100644 index 0000000..97dab2b --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/UserCouponsQueryParams.Status.html @@ -0,0 +1,190 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.UserCouponsQueryParams.Status的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.UserCouponsQueryParams.Status

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/UserCouponsQueryParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/UserCouponsQueryParams.html new file mode 100644 index 0000000..8d6688f --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/class-use/UserCouponsQueryParams.html @@ -0,0 +1,177 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.UserCouponsQueryParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.UserCouponsQueryParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineAmount.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineAmount.html new file mode 100644 index 0000000..5ce1570 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineAmount.html @@ -0,0 +1,305 @@ + + + + + + +CombineAmount (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model.combine
+

类 CombineAmount

+
+
+ +
+
    +
  • +
    +
    +
    public class CombineAmount
    +extends Object
    +
    合单支付订单金额信息.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段概要

      + + + + + + + + + + + + + + +
      字段 
      限定符和类型字段和说明
      private Stringcurrency +
      符合ISO 4217标准的三位字母代码,必填,人民币:CNY 。
      +
      private LongtotalAmount +
      子单金额,单位为分,必填 + + 境外场景下,标价金额要超过商户结算币种的最小单位金额,例如结算币种为美元,则标价金额必须大于1美分
      +
      +
    • +
    + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      CombineAmount() 
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        currency

        +
        private String currency
        +
        符合ISO 4217标准的三位字母代码,必填,人民币:CNY 。
        +
      • +
      + + + +
        +
      • +

        totalAmount

        +
        private Long totalAmount
        +
        子单金额,单位为分,必填 +

        + 境外场景下,标价金额要超过商户结算币种的最小单位金额,例如结算币种为美元,则标价金额必须大于1美分

        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CombineAmount

        +
        public CombineAmount()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.ClosingSubOrder.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.ClosingSubOrder.html new file mode 100644 index 0000000..959323f --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.ClosingSubOrder.html @@ -0,0 +1,325 @@ + + + + + + +CombineCloseParams.ClosingSubOrder (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model.combine
+

类 CombineCloseParams.ClosingSubOrder

+
+
+ +
+
    +
  • +
    +
    封闭类:
    +
    CombineCloseParams
    +
    +
    +
    +
    public static class CombineCloseParams.ClosingSubOrder
    +extends Object
    +
    关单-子单信息,最多50单.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段概要

      + + + + + + + + + + + + + + + + + + +
      字段 
      限定符和类型字段和说明
      private Stringmchid +
      子单发起方商户号,必填,必须与发起方appid有绑定关系。
      +
      private StringoutTradeNo +
      子单商户订单号,必填,商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
      +
      private StringsubMchid +
      二级商户商户号,由微信支付生成并下发。
      +
      +
    • +
    + + + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        mchid

        +
        private String mchid
        +
        子单发起方商户号,必填,必须与发起方appid有绑定关系。
        +
      • +
      + + + +
        +
      • +

        outTradeNo

        +
        private String outTradeNo
        +
        子单商户订单号,必填,商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
        +
      • +
      + + + +
        +
      • +

        subMchid

        +
        private String subMchid
        +
        二级商户商户号,由微信支付生成并下发。 +

        + 服务商子商户的商户号,被合单方。 +

        + 直连商户不用传二级商户号。

        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        ClosingSubOrder

        +
        public ClosingSubOrder()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.html new file mode 100644 index 0000000..cb9f6dc --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.html @@ -0,0 +1,338 @@ + + + + + + +CombineCloseParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model.combine
+

类 CombineCloseParams

+
+
+ +
+
    +
  • +
    +
    +
    public class CombineCloseParams
    +extends Object
    +
    合单支付 关单参数.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        combineAppid

        +
        private String combineAppid
        +
        合单商户appid,必填
        +
      • +
      + + + +
        +
      • +

        combineOutTradeNo

        +
        private String combineOutTradeNo
        +
        合单商户订单号,必填,商户侧需要保证同一商户下唯一
        +
      • +
      + + + + +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CombineCloseParams

        +
        public CombineCloseParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineH5PayParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineH5PayParams.html new file mode 100644 index 0000000..df716f3 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineH5PayParams.html @@ -0,0 +1,415 @@ + + + + + + +CombineH5PayParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model.combine
+

类 CombineH5PayParams

+
+
+ +
+
    +
  • +
    +
    +
    public class CombineH5PayParams
    +extends Object
    +
    合单支付 H5支付参数.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        combineAppid

        +
        private String combineAppid
        +
        合单商户appid,必填
        +
      • +
      + + + +
        +
      • +

        combineMchid

        +
        private String combineMchid
        +
        合单商户号,必填
        +
      • +
      + + + +
        +
      • +

        combineOutTradeNo

        +
        private String combineOutTradeNo
        +
        合单商户订单号,必填,商户侧需要保证同一商户下唯一
        +
      • +
      + + + +
        +
      • +

        combinePayerInfo

        +
        private CombinePayerInfo combinePayerInfo
        +
        合单支付者信息,选填
        +
      • +
      + + + +
        +
      • +

        notifyUrl

        +
        private String notifyUrl
        +
        通知地址,必填,接收微信支付异步通知回调地址,通知url必须为直接可访问的URL,不能携带参数。 +

        + 合单支付需要独立的通知地址。

        +
      • +
      + + + +
        +
      • +

        sceneInfo

        +
        private CombineH5SceneInfo sceneInfo
        +
        合单支付场景信息描述,选填
        +
      • +
      + + + +
        +
      • +

        subOrders

        +
        private List<SubOrder> subOrders
        +
        子单信息,必填,最多50单
        +
      • +
      + + + +
        +
      • +

        timeStart

        +
        private OffsetDateTime timeStart
        +
        交易起始时间,选填
        +
      • +
      + + + +
        +
      • +

        timeExpire

        +
        private OffsetDateTime timeExpire
        +
        交易结束时间,选填
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CombineH5PayParams

        +
        public CombineH5PayParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineH5SceneInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineH5SceneInfo.html new file mode 100644 index 0000000..d10db10 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineH5SceneInfo.html @@ -0,0 +1,280 @@ + + + + + + +CombineH5SceneInfo (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model.combine
+

类 CombineH5SceneInfo

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        h5Info

        +
        private H5Info h5Info
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CombineH5SceneInfo

        +
        public CombineH5SceneInfo()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombinePayParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombinePayParams.html new file mode 100644 index 0000000..d4abe57 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombinePayParams.html @@ -0,0 +1,415 @@ + + + + + + +CombinePayParams (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model.combine
+

类 CombinePayParams

+
+
+ +
+
    +
  • +
    +
    +
    public class CombinePayParams
    +extends Object
    +
    合单支付 APP支付、JSAPI支付、小程序支付、Native支付参数.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        combineAppid

        +
        private String combineAppid
        +
        合单商户appid,必填
        +
      • +
      + + + +
        +
      • +

        combineMchid

        +
        private String combineMchid
        +
        合单商户号,必填
        +
      • +
      + + + +
        +
      • +

        combineOutTradeNo

        +
        private String combineOutTradeNo
        +
        合单商户订单号,必填,商户侧需要保证同一商户下唯一
        +
      • +
      + + + +
        +
      • +

        combinePayerInfo

        +
        private CombinePayerInfo combinePayerInfo
        +
        合单支付者信息,选填
        +
      • +
      + + + +
        +
      • +

        notifyUrl

        +
        private String notifyUrl
        +
        通知地址,必填,接收微信支付异步通知回调地址,通知url必须为直接可访问的URL,不能携带参数。 +

        + 合单支付需要独立的通知地址。

        +
      • +
      + + + +
        +
      • +

        sceneInfo

        +
        private CombineSceneInfo sceneInfo
        +
        合单支付场景信息描述,选填
        +
      • +
      + + + +
        +
      • +

        subOrders

        +
        private List<SubOrder> subOrders
        +
        子单信息,必填,最多50单
        +
      • +
      + + + +
        +
      • +

        timeStart

        +
        private OffsetDateTime timeStart
        +
        交易起始时间,选填
        +
      • +
      + + + +
        +
      • +

        timeExpire

        +
        private OffsetDateTime timeExpire
        +
        交易结束时间,选填
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CombinePayParams

        +
        public CombinePayParams()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombinePayerInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombinePayerInfo.html new file mode 100644 index 0000000..62529a1 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombinePayerInfo.html @@ -0,0 +1,285 @@ + + + + + + +CombinePayerInfo (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model.combine
+

类 CombinePayerInfo

+
+
+ +
+
    +
  • +
    +
    +
    public class CombinePayerInfo
    +extends Object
    +
    合单支付,支付者信息.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        openid

        +
        private String openid
        +
        使用合单appid获取的对应用户openid。是用户在商户appid下的唯一标识。
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CombinePayerInfo

        +
        public CombinePayerInfo()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineSceneInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineSceneInfo.html new file mode 100644 index 0000000..17f5d01 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/CombineSceneInfo.html @@ -0,0 +1,305 @@ + + + + + + +CombineSceneInfo (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model.combine
+

类 CombineSceneInfo

+
+
+ +
+
    +
  • +
    +
    直接已知子类:
    +
    CombineH5SceneInfo
    +
    +
    +
    +
    public class CombineSceneInfo
    +extends Object
    +
    合单支付场景信息.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        deviceId

        +
        private String deviceId
        +
        商户设备号,选填。
        +
      • +
      + + + +
        +
      • +

        payerClientIp

        +
        private String payerClientIp
        +
        用户终端ip,必填。
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        CombineSceneInfo

        +
        public CombineSceneInfo()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/SubOrder.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/SubOrder.html new file mode 100644 index 0000000..66e321a --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/SubOrder.html @@ -0,0 +1,385 @@ + + + + + + +SubOrder (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + + +
+
cn.felord.payment.wechat.v3.model.combine
+

类 SubOrder

+
+
+ +
+
    +
  • +
    +
    +
    public class SubOrder
    +extends Object
    +
    子单信息,最多50单.
    +
    +
    从以下版本开始:
    +
    1.0.0.RELEASE
    +
    作者:
    +
    felord.cn
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      字段 
      限定符和类型字段和说明
      private CombineAmountamount +
      合单支付订单金额信息,必填。
      +
      private Stringattach +
      附加数据,必填,在查询API和支付通知中原样返回,可作为自定义参数使用。
      +
      private Stringdescription +
      商品描述,必填,需传入应用市场上的APP名字-实际商品名称,例如:天天爱消除-游戏充值。
      +
      private Stringmchid +
      子单发起方商户号,必填,必须与发起方appid有绑定关系。
      +
      private StringoutTradeNo +
      子单商户订单号,必填,商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
      +
      private SettleInfosettleInfo +
      结算信息,选填
      +
      private StringsubMchid +
      二级商户商户号,由微信支付生成并下发。
      +
      +
    • +
    + +
      +
    • + + +

      构造器概要

      + + + + + + + + +
      构造器 
      构造器和说明
      SubOrder() 
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      字段详细资料

      + + + +
        +
      • +

        amount

        +
        private CombineAmount amount
        +
        合单支付订单金额信息,必填。
        +
      • +
      + + + +
        +
      • +

        attach

        +
        private String attach
        +
        附加数据,必填,在查询API和支付通知中原样返回,可作为自定义参数使用。
        +
      • +
      + + + +
        +
      • +

        description

        +
        private String description
        +
        商品描述,必填,需传入应用市场上的APP名字-实际商品名称,例如:天天爱消除-游戏充值。
        +
      • +
      + + + +
        +
      • +

        mchid

        +
        private String mchid
        +
        子单发起方商户号,必填,必须与发起方appid有绑定关系。
        +
      • +
      + + + +
        +
      • +

        outTradeNo

        +
        private String outTradeNo
        +
        子单商户订单号,必填,商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
        +
      • +
      + + + +
        +
      • +

        subMchid

        +
        private String subMchid
        +
        二级商户商户号,由微信支付生成并下发。 +

        + 服务商子商户的商户号,被合单方。 +

        + 直连商户不用传二级商户号。

        +
      • +
      + + + +
        +
      • +

        settleInfo

        +
        private SettleInfo settleInfo
        +
        结算信息,选填
        +
      • +
      +
    • +
    + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        SubOrder

        +
        public SubOrder()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineAmount.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineAmount.html new file mode 100644 index 0000000..bb87fdf --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineAmount.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.combine.CombineAmount的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.CombineAmount

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineCloseParams.ClosingSubOrder.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineCloseParams.ClosingSubOrder.html new file mode 100644 index 0000000..4c46b8e --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineCloseParams.ClosingSubOrder.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.combine.CombineCloseParams.ClosingSubOrder的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.CombineCloseParams.ClosingSubOrder

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineCloseParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineCloseParams.html new file mode 100644 index 0000000..6064e48 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineCloseParams.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.combine.CombineCloseParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.CombineCloseParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineH5PayParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineH5PayParams.html new file mode 100644 index 0000000..7463a2e --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineH5PayParams.html @@ -0,0 +1,175 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineH5SceneInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineH5SceneInfo.html new file mode 100644 index 0000000..7a628ef --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineH5SceneInfo.html @@ -0,0 +1,168 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.combine.CombineH5SceneInfo的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.CombineH5SceneInfo

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombinePayParams.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombinePayParams.html new file mode 100644 index 0000000..fedc484 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombinePayParams.html @@ -0,0 +1,191 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.combine.CombinePayParams的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.CombinePayParams

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombinePayerInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombinePayerInfo.html new file mode 100644 index 0000000..03ecbda --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombinePayerInfo.html @@ -0,0 +1,198 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.combine.CombinePayerInfo的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.CombinePayerInfo

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineSceneInfo.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineSceneInfo.html new file mode 100644 index 0000000..5b2f46b --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/CombineSceneInfo.html @@ -0,0 +1,181 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.combine.CombineSceneInfo的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.CombineSceneInfo

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/SubOrder.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/SubOrder.html new file mode 100644 index 0000000..a680273 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/class-use/SubOrder.html @@ -0,0 +1,174 @@ + + + + + + +类 cn.felord.payment.wechat.v3.model.combine.SubOrder的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

类的使用
cn.felord.payment.wechat.v3.model.combine.SubOrder

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-frame.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-frame.html new file mode 100644 index 0000000..30bba08 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-frame.html @@ -0,0 +1,29 @@ + + + + + + +cn.felord.payment.wechat.v3.model.combine (payment-spring-boot 1.0.0.RELEASE API) + + + + + +

cn.felord.payment.wechat.v3.model.combine

+
+

+ +
+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-summary.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-summary.html new file mode 100644 index 0000000..60688b3 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-summary.html @@ -0,0 +1,192 @@ + + + + + + +cn.felord.payment.wechat.v3.model.combine (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包 cn.felord.payment.wechat.v3.model.combine

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-tree.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-tree.html new file mode 100644 index 0000000..603513c --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-tree.html @@ -0,0 +1,150 @@ + + + + + + +cn.felord.payment.wechat.v3.model.combine 类分层结构 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包cn.felord.payment.wechat.v3.model.combine的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-use.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-use.html new file mode 100644 index 0000000..bf5f2dc --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/combine/package-use.html @@ -0,0 +1,236 @@ + + + + + + +程序包 cn.felord.payment.wechat.v3.model.combine的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包的使用
cn.felord.payment.wechat.v3.model.combine

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/package-frame.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/package-frame.html new file mode 100644 index 0000000..04d9b0b --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/package-frame.html @@ -0,0 +1,64 @@ + + + + + + +cn.felord.payment.wechat.v3.model (payment-spring-boot 1.0.0.RELEASE API) + + + + + +

cn.felord.payment.wechat.v3.model

+
+

+ +

枚举

+ +
+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/package-summary.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/package-summary.html new file mode 100644 index 0000000..0e3f283 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/package-summary.html @@ -0,0 +1,383 @@ + + + + + + +cn.felord.payment.wechat.v3.model (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包 cn.felord.payment.wechat.v3.model

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/package-tree.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/package-tree.html new file mode 100644 index 0000000..65bd9b5 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/package-tree.html @@ -0,0 +1,190 @@ + + + + + + +cn.felord.payment.wechat.v3.model 类分层结构 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包cn.felord.payment.wechat.v3.model的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +

枚举分层结构

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/model/package-use.html b/docs/apidocs/cn/felord/payment/wechat/v3/model/package-use.html new file mode 100644 index 0000000..33ff09e --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/model/package-use.html @@ -0,0 +1,377 @@ + + + + + + +程序包 cn.felord.payment.wechat.v3.model的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包的使用
cn.felord.payment.wechat.v3.model

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/package-frame.html b/docs/apidocs/cn/felord/payment/wechat/v3/package-frame.html new file mode 100644 index 0000000..835b1ab --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/package-frame.html @@ -0,0 +1,40 @@ + + + + + + +cn.felord.payment.wechat.v3 (payment-spring-boot 1.0.0.RELEASE API) + + + + + +

cn.felord.payment.wechat.v3

+
+

+ +

枚举

+ +
+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/package-summary.html b/docs/apidocs/cn/felord/payment/wechat/v3/package-summary.html new file mode 100644 index 0000000..6ec31c8 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/package-summary.html @@ -0,0 +1,259 @@ + + + + + + +cn.felord.payment.wechat.v3 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包 cn.felord.payment.wechat.v3

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/package-tree.html b/docs/apidocs/cn/felord/payment/wechat/v3/package-tree.html new file mode 100644 index 0000000..8dbbf08 --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/package-tree.html @@ -0,0 +1,181 @@ + + + + + + +cn.felord.payment.wechat.v3 类分层结构 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包cn.felord.payment.wechat.v3的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +

枚举分层结构

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/cn/felord/payment/wechat/v3/package-use.html b/docs/apidocs/cn/felord/payment/wechat/v3/package-use.html new file mode 100644 index 0000000..391032b --- /dev/null +++ b/docs/apidocs/cn/felord/payment/wechat/v3/package-use.html @@ -0,0 +1,269 @@ + + + + + + +程序包 cn.felord.payment.wechat.v3的使用 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

程序包的使用
cn.felord.payment.wechat.v3

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/constant-values.html b/docs/apidocs/constant-values.html new file mode 100644 index 0000000..bb0bacb --- /dev/null +++ b/docs/apidocs/constant-values.html @@ -0,0 +1,202 @@ + + + + + + +常量字段值 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

常量字段值

+

目录

+ +
+
+ + +

cn.felord.*

+ + +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/deprecated-list.html b/docs/apidocs/deprecated-list.html new file mode 100644 index 0000000..4e05f21 --- /dev/null +++ b/docs/apidocs/deprecated-list.html @@ -0,0 +1,126 @@ + + + + + + +已过时的列表 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

已过时的 API

+

目录

+
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/help-doc.html b/docs/apidocs/help-doc.html new file mode 100644 index 0000000..8268256 --- /dev/null +++ b/docs/apidocs/help-doc.html @@ -0,0 +1,231 @@ + + + + + + +API 帮助 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

此 API 文档的组织方式

+
此 API (应用程序编程接口) 文档包含对应于导航栏中的项目的页面, 如下所述。
+
+
+ +此帮助文件适用于使用标准 doclet 生成的 API 文档。
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/index-all.html b/docs/apidocs/index-all.html new file mode 100644 index 0000000..67e575a --- /dev/null +++ b/docs/apidocs/index-all.html @@ -0,0 +1,2580 @@ + + + + + + +索引 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G H I J K L M N O P Q R S T U V W  + + +

A

+
+
AbstractApi - cn.felord.payment.wechat.v3中的类
+
+
The type Abstract api.
+
+
AbstractApi(WechatPayClient, String) - 类 的构造器cn.felord.payment.wechat.v3.AbstractApi
+
+
Instantiates a new Abstract api.
+
+
address - 类 中的变量cn.felord.payment.wechat.v3.model.StoreInfo
+
+
详细地址
+
+
addWechatMeta(String, WechatMetaBean) - 类 中的方法cn.felord.payment.wechat.v3.WechatMetaContainer
+
+
Add wechat meta boolean.
+
+
algorithm - 类 中的变量cn.felord.payment.wechat.v3.model.CallbackParams.Resource
+
+
The Algorithm.
+
+
alipayClient(AliPayProperties) - 类 中的方法cn.felord.payment.alipay.AliPayConfiguration
+
 
+
AliPayConfiguration - cn.felord.payment.alipay中的类
+
 
+
AliPayConfiguration() - 类 的构造器cn.felord.payment.alipay.AliPayConfiguration
+
 
+
AliPayProperties - cn.felord.payment.alipay中的类
+
+
The type Ali pay properties.
+
+
AliPayProperties() - 类 的构造器cn.felord.payment.alipay.AliPayProperties
+
 
+
AliPayProperties.V1 - cn.felord.payment.alipay中的类
+
+
The type V 1.
+
+
alipayPublicCertPath - 类 中的变量cn.felord.payment.alipay.AliPayProperties.V1
+
+
alipay public cert path
+
+
alipayRootCertPath - 类 中的变量cn.felord.payment.alipay.AliPayProperties.V1
+
+
alipay root cert path
+
+
Amount - cn.felord.payment.wechat.v3.model中的类
+
+
支付金额 货币单位【分】默认使用人民币标识CNY
+
+
Amount() - 类 的构造器cn.felord.payment.wechat.v3.model.Amount
+
 
+
amount - 类 中的变量cn.felord.payment.wechat.v3.model.combine.SubOrder
+
+
合单支付订单金额信息,必填。
+
+
amount - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.SubOrderCallback
+
+
The Amount.
+
+
amount - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
+
支付金额
+
+
amount - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail
+
+
The Amount.
+
+
amount - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Amount.
+
+
Amount() - 类 的构造器cn.felord.payment.wechat.v3.model.TransactionConsumeData.Amount
+
 
+
appCertPublicKeyPath - 类 中的变量cn.felord.payment.alipay.AliPayProperties.V1
+
+
appCertPublicKey
+
+
appId - 类 中的变量cn.felord.payment.alipay.AliPayProperties.V1
+
+
your app ID
+
+
appid - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
 
+
appid - 类 中的变量cn.felord.payment.wechat.v3.model.StocksSendParams
+
+
公众账号ID
+
+
appid - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Appid.
+
+
appId - 类 中的变量cn.felord.payment.wechat.v3.model.UserCouponsQueryParams
+
+
公众服务号ID
+
+
appId - 类 中的变量cn.felord.payment.wechat.WechatPayProperties.V3
+
+
app id for wechat pay is required
+
+
applyDefaultCharset() - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
Apply the configured charset as a default to registered part converters.
+
+
applyDefaultRestTemplate() - 类 中的方法cn.felord.payment.wechat.v3.WechatPayClient
+
+
Apply default rest template.
+
+
applyObjectMapper(ObjectMapper) - 类 中的方法cn.felord.payment.wechat.v3.AbstractApi
+
+
Apply object mapper.
+
+
appName - 类 中的变量cn.felord.payment.wechat.v3.model.H5Info
+
+
应用名称
+
+
appPay(CombinePayParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatCombinePayApi
+
+
合单下单-APP支付API + + 使用合单支付接口,用户只输入一次密码,即可完成多个订单的支付。
+
+
appPay(PayParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatDirectPayApi
+
+
APP下单API
+
+
appPrivateKeyPath - 类 中的变量cn.felord.payment.alipay.AliPayProperties.V1
+
+
your app private key, which must be in a single line
+
+
appRSAPrivateKey(String) - 类 中的方法cn.felord.payment.alipay.AliPayConfiguration
+
 
+
appSecret - 类 中的变量cn.felord.payment.wechat.WechatPayProperties.V3
+
+
app secret for wechat pay is required
+
+
appUrl - 类 中的变量cn.felord.payment.wechat.v3.model.H5Info
+
+
网站URL
+
+
appV3Secret - 类 中的变量cn.felord.payment.wechat.WechatPayProperties.V3
+
+
app V3 secret is required by wechat pay V3
+
+
areaCode - 类 中的变量cn.felord.payment.wechat.v3.model.StoreInfo
+
+
地区编码
+
+
associatedData - 类 中的变量cn.felord.payment.wechat.v3.model.CallbackParams.Resource
+
+
The Associated data.
+
+
attach - 类 中的变量cn.felord.payment.wechat.v3.model.combine.SubOrder
+
+
附加数据,必填,在查询API和支付通知中原样返回,可作为自定义参数使用。
+
+
attach - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.SubOrderCallback
+
+
The Attach.
+
+
attach - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
+
附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用
+
+
attach - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Attach.
+
+
availableBeginTime - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
availableBeginTime - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
批次开始时间 rfc 3339 yyyy-mm-ddthh:mm:ss.sss+timezone
+
+
availableEndTime - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
availableEndTime - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
批次结束时间 rfc 3339 YYYY-MM-DDTHH:mm:ss.sss+TIMEZONE
+
+
availableItems - 类 中的变量cn.felord.payment.wechat.v3.model.CouponUseRule
+
 
+
availableMchId - 类 中的变量cn.felord.payment.wechat.v3.model.UserCouponsQueryParams
+
+
可用商户号
+
+
availableMerchants - 类 中的变量cn.felord.payment.wechat.v3.model.CouponUseRule
+
 
+
availableTimeAfterReceive - 类 中的变量cn.felord.payment.wechat.v3.model.CouponAvailableTime
+
+
The Available time after receive.
+
+
availableWeekDay - 类 中的变量cn.felord.payment.wechat.v3.model.FixAvailableTime
+
+
The Available week day.
+
+
+ + + +

B

+
+
backgroundColor - 类 中的变量cn.felord.payment.wechat.v3.model.PatternInfo
+
+
背景色
+
+
BankCode - cn.felord.payment.wechat.enumeration中的枚举
+
+
The enum Bank code.
+
+
BankCode(String, String) - 枚举 的构造器cn.felord.payment.wechat.enumeration.BankCode
+
 
+
bankName - 枚举 中的变量cn.felord.payment.wechat.enumeration.BankCode
+
 
+
bankName() - 枚举 中的方法cn.felord.payment.wechat.enumeration.BankCode
+
 
+
bankType - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.SubOrderCallback
+
+
The Bank type.
+
+
bankType - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Bank type.
+
+
beginTime - 类 中的变量cn.felord.payment.wechat.v3.model.FixAvailableTime
+
+
The Begin time.
+
+
belongMerchant - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
批次归属商户号
+
+
billDownload(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
csv对账单下载。
+
+
billDownloadFunction(WechatPayV3Type, String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Bill download function request entity.
+
+
body - 类 中的变量cn.felord.payment.wechat.v3.model.ResponseSignVerifyParams
+
+
response.body 微信服务器的响应体
+
+
body - 类 中的变量cn.felord.payment.wechat.v3.WechatResponseEntity
+
+
The Body.
+
+
BOUNDARY - 类 中的静态变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
The constant BOUNDARY.
+
+
bundleId - 类 中的变量cn.felord.payment.wechat.v3.model.H5Info
+
+
IOS 平台 BundleID
+
+
+ + + +

C

+
+
callback(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatApiProvider
+
+
回调.
+
+
callback(ResponseSignVerifyParams, WechatPayCallback.EventType) - 类 中的方法cn.felord.payment.wechat.v3.WechatPayCallback
+
+
Callback string.
+
+
CallbackParams - cn.felord.payment.wechat.v3.model中的类
+
+
微信支付回调请求参数.
+
+
CallbackParams() - 类 的构造器cn.felord.payment.wechat.v3.model.CallbackParams
+
 
+
CallbackParams.Resource - cn.felord.payment.wechat.v3.model中的类
+
+
The type Resource.
+
+
CERT_ALIAS - 类 中的静态变量cn.felord.payment.wechat.WechatPayConfiguration
+
+
The constant CERT_ALIAS.
+
+
CERTIFICATE_MAP - 类 中的静态变量cn.felord.payment.wechat.v3.SignatureProvider
+
+
微信平台证书容器 key = 序列号 value = 证书对象
+
+
certPath - 类 中的变量cn.felord.payment.wechat.WechatPayProperties.V3
+
+
wechat pay certificate Path
+
+
charset - 类 中的变量cn.felord.payment.alipay.AliPayProperties.V1
+
+
charset default utf-8
+
+
charset - 类 中的变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage
+
+
The Charset.
+
+
ciphertext - 类 中的变量cn.felord.payment.wechat.v3.model.CallbackParams.Resource
+
+
The Ciphertext.
+
+
client() - 类 中的方法cn.felord.payment.wechat.v3.AbstractApi
+
+
Client wechat pay client.
+
+
close(CombineCloseParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatCombinePayApi
+
+
合单关闭订单API.
+
+
close(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatDirectPayApi
+
+
关单API
+
+
closeByOutTradeNoFunction(WechatPayV3Type, String) - 类 中的方法cn.felord.payment.wechat.v3.WechatDirectPayApi
+
 
+
ClosingSubOrder() - 类 的构造器cn.felord.payment.wechat.v3.model.combine.CombineCloseParams.ClosingSubOrder
+
 
+
cn.felord.payment - 程序包 cn.felord.payment
+
 
+
cn.felord.payment.alipay - 程序包 cn.felord.payment.alipay
+
 
+
cn.felord.payment.autoconfigure - 程序包 cn.felord.payment.autoconfigure
+
 
+
cn.felord.payment.wechat - 程序包 cn.felord.payment.wechat
+
 
+
cn.felord.payment.wechat.enumeration - 程序包 cn.felord.payment.wechat.enumeration
+
 
+
cn.felord.payment.wechat.v3 - 程序包 cn.felord.payment.wechat.v3
+
 
+
cn.felord.payment.wechat.v3.model - 程序包 cn.felord.payment.wechat.v3.model
+
 
+
cn.felord.payment.wechat.v3.model.combine - 程序包 cn.felord.payment.wechat.v3.model.combine
+
 
+
code - 枚举 中的变量cn.felord.payment.wechat.enumeration.BankCode
+
 
+
code() - 枚举 中的方法cn.felord.payment.wechat.enumeration.BankCode
+
 
+
color - 枚举 中的变量cn.felord.payment.wechat.enumeration.CouponBgColor
+
 
+
color() - 枚举 中的方法cn.felord.payment.wechat.enumeration.CouponBgColor
+
 
+
CombineAmount - cn.felord.payment.wechat.v3.model.combine中的类
+
+
合单支付订单金额信息.
+
+
CombineAmount() - 类 的构造器cn.felord.payment.wechat.v3.model.combine.CombineAmount
+
 
+
CombineAmount() - 类 的构造器cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.CombineAmount
+
 
+
combineAppid - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineCloseParams
+
+
合单商户appid,必填
+
+
combineAppid - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams
+
+
合单商户appid,必填
+
+
combineAppid - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombinePayParams
+
+
合单商户appid,必填
+
+
combineAppid - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData
+
+
合单商户appid.
+
+
CombineCloseParams - cn.felord.payment.wechat.v3.model.combine中的类
+
+
合单支付 关单参数.
+
+
CombineCloseParams() - 类 的构造器cn.felord.payment.wechat.v3.model.combine.CombineCloseParams
+
 
+
CombineCloseParams.ClosingSubOrder - cn.felord.payment.wechat.v3.model.combine中的类
+
+
关单-子单信息,最多50单.
+
+
CombineH5PayParams - cn.felord.payment.wechat.v3.model.combine中的类
+
+
合单支付 H5支付参数.
+
+
CombineH5PayParams() - 类 的构造器cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams
+
 
+
CombineH5SceneInfo - cn.felord.payment.wechat.v3.model.combine中的类
+
 
+
CombineH5SceneInfo() - 类 的构造器cn.felord.payment.wechat.v3.model.combine.CombineH5SceneInfo
+
 
+
combineMchid - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams
+
+
合单商户号,必填
+
+
combineMchid - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombinePayParams
+
+
合单商户号,必填
+
+
combineMchid - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData
+
+
合单商户号.
+
+
combineOutTradeNo - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineCloseParams
+
+
合单商户订单号,必填,商户侧需要保证同一商户下唯一
+
+
combineOutTradeNo - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams
+
+
合单商户订单号,必填,商户侧需要保证同一商户下唯一
+
+
combineOutTradeNo - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombinePayParams
+
+
合单商户订单号,必填,商户侧需要保证同一商户下唯一
+
+
combineOutTradeNo - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData
+
+
合单商户订单号.
+
+
combinePayApi(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatApiProvider
+
+
合单支付.
+
+
combinePayerInfo - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams
+
+
合单支付者信息,选填
+
+
CombinePayerInfo - cn.felord.payment.wechat.v3.model.combine中的类
+
+
合单支付,支付者信息.
+
+
CombinePayerInfo() - 类 的构造器cn.felord.payment.wechat.v3.model.combine.CombinePayerInfo
+
 
+
combinePayerInfo - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombinePayParams
+
+
合单支付者信息,选填
+
+
combinePayerInfo - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData
+
+
支付者.
+
+
combinePayFunction(WechatPayV3Type, CombinePayParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatCombinePayApi
+
+
Combine pay function request entity.
+
+
combinePayFunction(WechatPayV3Type, CombineH5PayParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatCombinePayApi
+
+
Combine pay function request entity.
+
+
CombinePayParams - cn.felord.payment.wechat.v3.model.combine中的类
+
+
合单支付 APP支付、JSAPI支付、小程序支付、Native支付参数.
+
+
CombinePayParams() - 类 的构造器cn.felord.payment.wechat.v3.model.combine.CombinePayParams
+
 
+
CombineSceneInfo - cn.felord.payment.wechat.v3.model.combine中的类
+
+
合单支付场景信息.
+
+
CombineSceneInfo() - 类 的构造器cn.felord.payment.wechat.v3.model.combine.CombineSceneInfo
+
 
+
combineTransactionCallback(ResponseSignVerifyParams, Consumer<CombineTransactionConsumeData>) - 类 中的方法cn.felord.payment.wechat.v3.WechatPayCallback
+
+
微信合单支付成功回调.
+
+
CombineTransactionConsumeData - cn.felord.payment.wechat.v3.model中的类
+
+
合单支付回调解密数据.
+
+
CombineTransactionConsumeData() - 类 的构造器cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData
+
 
+
CombineTransactionConsumeData.CombineAmount - cn.felord.payment.wechat.v3.model中的类
+
+
订单金额信息.
+
+
CombineTransactionConsumeData.SubOrderCallback - cn.felord.payment.wechat.v3.model中的类
+
+
合单支付回调子订单.
+
+
combineUse - 类 中的变量cn.felord.payment.wechat.v3.model.CouponUseRule
+
 
+
comment - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
仅配置商户可见,用于自定义信息
+
+
ConsumeInformation - cn.felord.payment.wechat.v3.model中的类
+
+
已实扣代金券信息
+
+
ConsumeInformation() - 类 的构造器cn.felord.payment.wechat.v3.model.ConsumeInformation
+
 
+
consumeInformation - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
consumeMchid - 类 中的变量cn.felord.payment.wechat.v3.model.ConsumeInformation
+
 
+
consumer(Consumer<ResponseEntity<ObjectNode>>) - 类 中的方法cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
Consumer executor.
+
+
consumeTime - 类 中的变量cn.felord.payment.wechat.v3.model.ConsumeInformation
+
 
+
container() - 类 中的方法cn.felord.payment.wechat.v3.AbstractApi
+
+
Container wechat meta container.
+
+
convert(ResponseEntity<T>) - 类 中的方法cn.felord.payment.wechat.v3.WechatResponseEntity
+
+
Convert ResponseEntity to WechatResponseEntity.
+
+
costPrice - 类 中的变量cn.felord.payment.wechat.v3.model.Detail
+
+
订单原价
+
+
couponAmount - 类 中的变量cn.felord.payment.wechat.v3.model.FixedNormalCoupon
+
+
面额,单位分
+
+
couponAmount - 类 中的变量cn.felord.payment.wechat.v3.model.NormalCouponInformation
+
 
+
CouponAvailableTime - cn.felord.payment.wechat.v3.model中的类
+
 
+
CouponAvailableTime() - 类 的构造器cn.felord.payment.wechat.v3.model.CouponAvailableTime
+
 
+
couponAvailableTime - 类 中的变量cn.felord.payment.wechat.v3.model.CouponUseRule
+
 
+
CouponBgColor - cn.felord.payment.wechat.enumeration中的枚举
+
+
优惠券背景色 + + https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/convention/chapter3_1.shtml#menu1
+
+
CouponBgColor(String) - 枚举 的构造器cn.felord.payment.wechat.enumeration.CouponBgColor
+
 
+
couponCallback(ResponseSignVerifyParams, Consumer<CouponConsumeData>) - 类 中的方法cn.felord.payment.wechat.v3.WechatPayCallback
+
+
微信支付代金券核销回调.
+
+
CouponConsumeData - cn.felord.payment.wechat.v3.model中的类
+
+
微信代金券核销通知参数
+
+
CouponConsumeData() - 类 的构造器cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
couponDetailFunction(WechatPayV3Type, CouponDetailsQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Coupon detail function request entity.
+
+
CouponDetailsQueryParams - cn.felord.payment.wechat.v3.model中的类
+
+
查询代金券详情API参数
+
+
CouponDetailsQueryParams() - 类 的构造器cn.felord.payment.wechat.v3.model.CouponDetailsQueryParams
+
 
+
couponId - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
couponId - 类 中的变量cn.felord.payment.wechat.v3.model.CouponDetailsQueryParams
+
+
代金券id
+
+
couponId - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail
+
+
The Coupon id.
+
+
couponImage - 类 中的变量cn.felord.payment.wechat.v3.model.PatternInfo
+
+
券详情图片
+
+
couponMinimum - 类 中的变量cn.felord.payment.wechat.v3.model.StocksSendParams
+
+
指定面额发券批次门槛,其他场景不需要,单位:分。
+
+
couponName - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
CouponStatus - cn.felord.payment.wechat.enumeration中的枚举
+
+
The enum Coupon status.
+
+
CouponStatus() - 枚举 的构造器cn.felord.payment.wechat.enumeration.CouponStatus
+
 
+
couponType - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
CouponUseRule - cn.felord.payment.wechat.v3.model中的类
+
+
核销规则.
+
+
CouponUseRule() - 类 的构造器cn.felord.payment.wechat.v3.model.CouponUseRule
+
 
+
couponUseRule - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
核销规则
+
+
couponValue - 类 中的变量cn.felord.payment.wechat.v3.model.StocksSendParams
+
+
指定面额发券场景,券面额,其他场景不需要填,单位:分。
+
+
createEndTime - 类 中的变量cn.felord.payment.wechat.v3.model.StocksQueryParams
+
+
选填 + + 终止时间 最终满足格式 yyyy-MM-dd'T'HH:mm:ss.SSSXXX
+
+
createPKCS12(String, String, String) - 类 中的方法cn.felord.payment.wechat.v3.KeyPairFactory
+
+
获取公私钥.
+
+
createSign(String...) - 类 中的方法cn.felord.payment.wechat.v3.SignatureProvider
+
+
请求时设置签名 组件
+
+
createStartTime - 类 中的变量cn.felord.payment.wechat.v3.model.StocksQueryParams
+
+
选填 + + 起始时间 最终满足格式 yyyy-MM-dd'T'HH:mm:ss.SSSXXX
+
+
createStock(StocksCreateParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
创建代金券批次API + + 通过调用此接口可创建代金券批次,包括 预充值免充值 类型。
+
+
createStocksFunction(WechatPayV3Type, StocksCreateParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Create stocks function request entity.
+
+
createTime - 类 中的变量cn.felord.payment.wechat.v3.model.CallbackParams
+
+
The Create time.
+
+
createTime - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
creatorMchId - 类 中的变量cn.felord.payment.wechat.v3.model.UserCouponsQueryParams
+
+
创建批次的商户号
+
+
currency - 类 中的变量cn.felord.payment.wechat.v3.model.Amount
+
+
The Currency.
+
+
currency - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineAmount
+
+
符合ISO 4217标准的三位字母代码,必填,人民币:CNY 。
+
+
currency - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.CombineAmount
+
+
标价币种.
+
+
currency - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail
+
+
The Currency.
+
+
currency - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData.Amount
+
+
The Currency.
+
+
cutToPrice - 类 中的变量cn.felord.payment.wechat.v3.model.DiscountTo
+
 
+
+ + + +

D

+
+
decryptResponseBody(String, String, String, String) - 类 中的方法cn.felord.payment.wechat.v3.SignatureProvider
+
+
解密响应体.
+
+
description - 枚举 中的变量cn.felord.payment.wechat.enumeration.StockStatus
+
 
+
description() - 枚举 中的方法cn.felord.payment.wechat.enumeration.StockStatus
+
+
Description string.
+
+
description - 类 中的变量cn.felord.payment.wechat.v3.model.combine.SubOrder
+
+
商品描述,必填,需传入应用市场上的APP名字-实际商品名称,例如:天天爱消除-游戏充值。
+
+
description - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
description - 类 中的变量cn.felord.payment.wechat.v3.model.PatternInfo
+
+
使用说明
+
+
description - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
+
商品描述 + Image形象店-深圳腾大-QQ公仔
+
+
Detail - cn.felord.payment.wechat.v3.model中的类
+
 
+
Detail() - 类 的构造器cn.felord.payment.wechat.v3.model.Detail
+
 
+
detail - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
+
优惠功能
+
+
deviceId - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineSceneInfo
+
+
商户设备号,选填。
+
+
deviceId - 类 中的变量cn.felord.payment.wechat.v3.model.SceneInfo
+
+
商户端设备号
+
+
deviceId - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData.SceneInfo
+
+
The Device id.
+
+
directPayApi(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatApiProvider
+
+
普通支付-直连模式.
+
+
discountAmount - 类 中的变量cn.felord.payment.wechat.v3.model.GoodsDetail
+
 
+
discountAmount - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail.GoodsDetail
+
+
The Discount amount.
+
+
discountTo - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
DiscountTo - cn.felord.payment.wechat.v3.model中的类
+
+
减至优惠限定字段,仅减至优惠场景有返回
+
+
DiscountTo() - 类 的构造器cn.felord.payment.wechat.v3.model.DiscountTo
+
 
+
doDownload(WechatRequestEntity<T>) - 类 中的方法cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
Do download string.
+
+
doExecute(WechatRequestEntity<T>) - 类 中的方法cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
Do execute.
+
+
domain - 枚举 中的变量cn.felord.payment.wechat.enumeration.WeChatServer
+
+
域名
+
+
domain() - 枚举 中的方法cn.felord.payment.wechat.enumeration.WeChatServer
+
+
Gets type.
+
+
domain - 类 中的变量cn.felord.payment.wechat.WechatPayProperties.V3
+
+
your pay server domain
+
+
download() - 类 中的方法cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
Download string.
+
+
downloadFlowFunction(WechatPayV3Type, String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Download flow function request entity.
+
+
downloadStockRefundFlow(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
下载批次退款明细API + + 数据结果包含在响应体的 csv 字段中 + + 可获取到某批次的退款明细数据,包括订单号、单品信息、银行流水号等,用于对账/数据分析。
+
+
downloadStockUseFlow(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
下载批次核销明细API + + 数据结果包含在响应体的 csv 字段中 + + 可获取到某批次的核销明细数据,包括订单号、单品信息、银行流水号等,用于对账/数据分析。
+
+
+ + + +

E

+
+
EnableMobilePay - cn.felord.payment.autoconfigure中的注释类型
+
 
+
endTime - 类 中的变量cn.felord.payment.wechat.v3.model.FixAvailableTime
+
+
The End time.
+
+
event - 枚举 中的变量cn.felord.payment.wechat.v3.WechatPayCallback.EventType
+
+
The Event.
+
+
eventType - 类 中的变量cn.felord.payment.wechat.v3.model.CallbackParams
+
+
The Event type.
+
+
EventType(String) - 枚举 的构造器cn.felord.payment.wechat.v3.WechatPayCallback.EventType
+
+
Instantiates a new Event type.
+
+
Executor(WechatPayV3Type, M, SignatureProvider, RestOperations) - 类 的构造器cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
Instantiates a new Executor.
+
+
ext_info - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
扩展属性
+
+
ExtensionFormHttpMessageConverter - cn.felord.payment.wechat.v3中的类
+
+
用于微信支付处理上传的自定义消息转换器.
+
+
ExtensionFormHttpMessageConverter() - 类 的构造器cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
Instantiates a new Upload http message converter.
+
+
ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage - cn.felord.payment.wechat.v3中的类
+
+
The type Multipart http output message.
+
+
+ + + +

F

+
+
favorApi(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatApiProvider
+
+
代金券.
+
+
fixAvailableTime - 类 中的变量cn.felord.payment.wechat.v3.model.CouponAvailableTime
+
+
The Fix available time.
+
+
FixAvailableTime - cn.felord.payment.wechat.v3.model中的类
+
+
The type Fix available time.
+
+
FixAvailableTime() - 类 的构造器cn.felord.payment.wechat.v3.model.FixAvailableTime
+
 
+
fixedNormalCoupon - 类 中的变量cn.felord.payment.wechat.v3.model.CouponUseRule
+
 
+
FixedNormalCoupon - cn.felord.payment.wechat.v3.model中的类
+
+
固定面额满减券使用规则, stock_type为NORMAL时必填 + + 满transactionMinimum 减少 couponAmount
+
+
FixedNormalCoupon() - 类 的构造器cn.felord.payment.wechat.v3.model.FixedNormalCoupon
+
 
+
format - 类 中的变量cn.felord.payment.alipay.AliPayProperties.V1
+
+
data format only json now
+
+
function(BiFunction<WechatPayV3Type, M, RequestEntity<?>>) - 类 中的方法cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
Function executor.
+
+
+ + + +

G

+
+
Get(URI) - 类 中的方法cn.felord.payment.wechat.v3.AbstractApi
+
+
Get request entity.
+
+
getBody() - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage
+
 
+
getBytes(String) - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage
+
+
Get bytes byte [ ].
+
+
getFileAbsolutePath(String) - 类 中的方法cn.felord.payment.alipay.AliPayConfiguration
+
 
+
getHeaders() - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage
+
 
+
getMapper() - 类 中的方法cn.felord.payment.wechat.v3.AbstractApi
+
+
Gets mapper.
+
+
getMediaType(MediaType) - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
Gets media type.
+
+
getTenantIds() - 类 中的方法cn.felord.payment.wechat.v3.WechatMetaContainer
+
+
Gets properties keys.
+
+
getWechatMeta(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMetaContainer
+
+
Gets wechat meta.
+
+
Goods - cn.felord.payment.wechat.v3.model中的类
+
 
+
Goods() - 类 的构造器cn.felord.payment.wechat.v3.model.Goods
+
 
+
goodsDetail - 类 中的变量cn.felord.payment.wechat.v3.model.ConsumeInformation
+
 
+
goodsDetail - 类 中的变量cn.felord.payment.wechat.v3.model.Detail
+
+
单品列表
+
+
GoodsDetail - cn.felord.payment.wechat.v3.model中的类
+
+
商户下单接口传的单品信息
+
+
GoodsDetail() - 类 的构造器cn.felord.payment.wechat.v3.model.GoodsDetail
+
 
+
goodsDetail - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail
+
+
The Goods detail.
+
+
GoodsDetail() - 类 的构造器cn.felord.payment.wechat.v3.model.PromotionDetail.GoodsDetail
+
 
+
goodsId - 类 中的变量cn.felord.payment.wechat.v3.model.GoodsDetail
+
 
+
goodsId - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail.GoodsDetail
+
+
The Goods id.
+
+
goodsName - 类 中的变量cn.felord.payment.wechat.v3.model.Goods
+
+
商品名称
+
+
goodsRemark - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail.GoodsDetail
+
+
The Goods remark.
+
+
goodsTag - 类 中的变量cn.felord.payment.wechat.v3.model.CouponUseRule
+
 
+
goodsTag - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
+
订单优惠标记
+
+
gsonPresent - 类 中的静态变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
The constant gsonPresent.
+
+
+ + + +

H

+
+
h5Info - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineH5SceneInfo
+
 
+
H5Info - cn.felord.payment.wechat.v3.model中的类
+
 
+
H5Info() - 类 的构造器cn.felord.payment.wechat.v3.model.H5Info
+
 
+
h5Info - 类 中的变量cn.felord.payment.wechat.v3.model.SceneInfo
+
+
H5 场景信息
+
+
h5Pay(CombineH5PayParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatCombinePayApi
+
+
合单下单-H5支付API.
+
+
h5Pay(PayParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatDirectPayApi
+
+
H5下单API
+
+
hasError(ClientHttpResponse) - 类 中的方法cn.felord.payment.wechat.WechatPayResponseErrorHandler
+
 
+
header(WechatRequestEntity<T>) - 类 中的方法cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
构造私钥签名.
+
+
headers - 类 中的变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage
+
+
The Headers.
+
+
headers(HttpHeaders) - 类 中的方法cn.felord.payment.wechat.v3.WechatRequestEntity
+
+
Headers wechat request entity.
+
+
headersWritten - 类 中的变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage
+
+
The Headers written.
+
+
httpStatus - 类 中的变量cn.felord.payment.wechat.v3.WechatResponseEntity
+
+
The Http status.
+
+
+ + + +

I

+
+
id - 类 中的变量cn.felord.payment.wechat.v3.model.CallbackParams
+
+
The Id.
+
+
id - 类 中的变量cn.felord.payment.wechat.v3.model.StoreInfo
+
+
门店编号
+
+
ID_GENERATOR - 类 中的静态变量cn.felord.payment.wechat.v3.SignatureProvider
+
+
The constant ID_GENERATOR.
+
+
invoiceId - 类 中的变量cn.felord.payment.wechat.v3.model.Detail
+
+
商品小票ID
+
+
is1xxInformational() - 类 中的方法cn.felord.payment.wechat.v3.WechatResponseEntity
+
+
Is 1 xx informational boolean.
+
+
is2xxSuccessful() - 类 中的方法cn.felord.payment.wechat.v3.WechatResponseEntity
+
+
Is 2xx successful boolean.
+
+
is3xxRedirection() - 类 中的方法cn.felord.payment.wechat.v3.WechatResponseEntity
+
+
Is 3xx redirection boolean.
+
+
is4xxClientError() - 类 中的方法cn.felord.payment.wechat.v3.WechatResponseEntity
+
+
Is 4xx client error boolean.
+
+
is5xxServerError() - 类 中的方法cn.felord.payment.wechat.v3.WechatResponseEntity
+
+
Is 5xx server error boolean.
+
+
isMultipart(MultiValueMap<String, ?>, MediaType) - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
Is multipart boolean.
+
+
+ + + +

J

+
+
jackson2Present - 类 中的静态变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
The constant jackson2Present.
+
+
jackson2SmilePresent - 类 中的静态变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
The constant jackson2SmilePresent.
+
+
jackson2XmlPresent - 类 中的静态变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
The constant jackson2XmlPresent.
+
+
jaxb2Present - 类 中的静态变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
The constant jaxb2Present.
+
+
jsonbPresent - 类 中的静态变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
The constant jsonbPresent.
+
+
jsPay(CombinePayParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatCombinePayApi
+
+
合单下单-JSAPI支付/小程序支付API + + 使用合单支付接口,用户只输入一次密码,即可完成多个订单的支付。
+
+
jsPay(PayParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatDirectPayApi
+
+
JSAPI/小程序下单API
+
+
+ + + +

K

+
+
keyPair - 类 中的变量cn.felord.payment.wechat.v3.WechatMetaBean
+
+
The Key pair.
+
+
KeyPairFactory - cn.felord.payment.wechat.v3中的类
+
+
证书工具
+
+
KeyPairFactory() - 类 的构造器cn.felord.payment.wechat.v3.KeyPairFactory
+
 
+
+ + + +

L

+
+
limit - 类 中的变量cn.felord.payment.wechat.v3.model.MchQueryParams
+
+
必填 + + 查询代金券可用商户API 最大50。
+
+
limit - 类 中的变量cn.felord.payment.wechat.v3.model.StocksQueryParams
+
+
必填 + + 条件查询批次列表API 分页大小,最大10。
+
+
limit - 类 中的变量cn.felord.payment.wechat.v3.model.UserCouponsQueryParams
+
+
分页大小
+
+
lock - 类 中的变量cn.felord.payment.wechat.v3.KeyPairFactory
+
 
+
+ + + +

M

+
+
mapper - 类 中的变量cn.felord.payment.wechat.v3.AbstractApi
+
+
The Mapper.
+
+
MAPPER - 类 中的静态变量cn.felord.payment.wechat.v3.WechatPayCallback
+
+
The constant MAPPER.
+
+
marketingImageUpload(MultipartFile) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
营销图片上传API + + 媒体图片只支持JPG、BMP、PNG格式,文件大小不能超过2M。
+
+
marketingImageUploadFunction(WechatPayV3Type, MultipartFile) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Marketing image upload function request entity.
+
+
maxAmount - 类 中的变量cn.felord.payment.wechat.v3.model.StockUseRule
+
+
总消耗金额,单位:分。
+
+
maxAmountByDay - 类 中的变量cn.felord.payment.wechat.v3.model.StockUseRule
+
+
单天最高消耗金额,单位:分
+
+
maxCoupons - 类 中的变量cn.felord.payment.wechat.v3.model.StockUseRule
+
+
最大发券数
+
+
maxCouponsPerUser - 类 中的变量cn.felord.payment.wechat.v3.model.StockUseRule
+
+
单个用户可领个数,每个用户最多60张券
+
+
maxPrice - 类 中的变量cn.felord.payment.wechat.v3.model.DiscountTo
+
 
+
mchid - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineCloseParams.ClosingSubOrder
+
+
子单发起方商户号,必填,必须与发起方appid有绑定关系。
+
+
mchid - 类 中的变量cn.felord.payment.wechat.v3.model.combine.SubOrder
+
+
子单发起方商户号,必填,必须与发起方appid有绑定关系。
+
+
mchid - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.SubOrderCallback
+
+
The Mchid.
+
+
mchid - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
 
+
mchid - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Mchid.
+
+
mchId - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionQueryParams
+
 
+
mchId - 类 中的变量cn.felord.payment.wechat.WechatPayProperties.V3
+
+
mchId for wechat pay is required
+
+
MchQueryParams - cn.felord.payment.wechat.v3.model中的类
+
+
查询代金券可用商户.
+
+
MchQueryParams() - 类 的构造器cn.felord.payment.wechat.v3.model.MchQueryParams
+
 
+
merchantContribute - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail
+
+
The Merchant contribute.
+
+
merchantGoodsId - 类 中的变量cn.felord.payment.wechat.v3.model.Goods
+
+
商户侧商品编码
+
+
merchantLogo - 类 中的变量cn.felord.payment.wechat.v3.model.PatternInfo
+
+
商户logo
+
+
merchantName - 类 中的变量cn.felord.payment.wechat.v3.model.PatternInfo
+
+
商户名称
+
+
method - 枚举 中的变量cn.felord.payment.wechat.enumeration.WechatPayV3Type
+
+
The Method.
+
+
method() - 枚举 中的方法cn.felord.payment.wechat.enumeration.WechatPayV3Type
+
+
Method string.
+
+
model - 类 中的变量cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
The Model.
+
+
MultipartHttpOutputMessage(OutputStream, Charset) - 类 的构造器cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage
+
+
Instantiates a new Multipart http output message.
+
+
+ + + +

N

+
+
name - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail
+
+
The Name.
+
+
name - 类 中的变量cn.felord.payment.wechat.v3.model.StoreInfo
+
+
门店名称
+
+
nativePay(CombinePayParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatCombinePayApi
+
+
合单下单-Native支付API.
+
+
nativePay(PayParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatDirectPayApi
+
+
Native下单API
+
+
naturalPersonLimit - 类 中的变量cn.felord.payment.wechat.v3.model.StockUseRule
+
+
是否开启自然人限制
+
+
noCash - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
noCash - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
可创建代金券的类型包含预充值和免充值两种类型。
+
+
nonce - 类 中的变量cn.felord.payment.wechat.v3.model.CallbackParams.Resource
+
+
The Nonce.
+
+
normalCouponInformation - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
NormalCouponInformation - cn.felord.payment.wechat.v3.model中的类
+
+
普通满减券面额、门槛信息
+
+
NormalCouponInformation() - 类 的构造器cn.felord.payment.wechat.v3.model.NormalCouponInformation
+
 
+
notifyUrl - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams
+
+
通知地址,必填,接收微信支付异步通知回调地址,通知url必须为直接可访问的URL,不能携带参数。
+
+
notifyUrl - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombinePayParams
+
+
通知地址,必填,接收微信支付异步通知回调地址,通知url必须为直接可访问的URL,不能携带参数。
+
+
notifyUrl - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
+
通知URL必须为直接可访问的URL,不允许携带查询串。
+
+
+ + + +

O

+
+
of(RequestEntity<?>, Consumer<ResponseEntity<ObjectNode>>) - 类 中的静态方法cn.felord.payment.wechat.v3.WechatRequestEntity
+
+
Of wechat request entity.
+
+
offset - 类 中的变量cn.felord.payment.wechat.v3.model.MchQueryParams
+
+
必填 + + 查询代金券可用商户API 分页页码,最大1000。
+
+
offset - 类 中的变量cn.felord.payment.wechat.v3.model.StocksQueryParams
+
+
必填 + + 条件查询批次列表API 页码从0开始,默认第0页,传递1可能出错。
+
+
offset - 类 中的变量cn.felord.payment.wechat.v3.model.UserCouponsQueryParams
+
+
分页页码
+
+
openid - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombinePayerInfo
+
+
使用合单appid获取的对应用户openid。
+
+
openId - 类 中的变量cn.felord.payment.wechat.v3.model.CouponDetailsQueryParams
+
+
用户在appid下授权得到的openid + + 参考发券
+
+
openid - 类 中的变量cn.felord.payment.wechat.v3.model.Payer
+
+
用户标识
+
+
openid - 类 中的变量cn.felord.payment.wechat.v3.model.StocksSendParams
+
+
用户openid 该openid需要与接口传入中的appid有对应关系。
+
+
openid - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData.Payer
+
+
The Openid.
+
+
openId - 类 中的变量cn.felord.payment.wechat.v3.model.UserCouponsQueryParams
+
+
用户公众号服务号标识
+
+
originalType - 类 中的变量cn.felord.payment.wechat.v3.model.CallbackParams.Resource
+
+
The Original type.
+
+
otherContribute - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail
+
+
The Other contribute.
+
+
outputStream - 类 中的变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage
+
+
The Output stream.
+
+
outRequestNo - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
商户单据号
+
+
outRequestNo - 类 中的变量cn.felord.payment.wechat.v3.model.StocksSendParams
+
+
商户单据号
+
+
outTradeNo - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineCloseParams.ClosingSubOrder
+
+
子单商户订单号,必填,商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
+
+
outTradeNo - 类 中的变量cn.felord.payment.wechat.v3.model.combine.SubOrder
+
+
子单商户订单号,必填,商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
+
+
outTradeNo - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.SubOrderCallback
+
+
The Out trade no.
+
+
outTradeNo - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
+
商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一,详见【商户订单号】。
+
+
outTradeNo - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Out trade no.
+
+
+ + + +

P

+
+
packageName - 类 中的变量cn.felord.payment.wechat.v3.model.H5Info
+
+
Android 平台 PackageName
+
+
partConverters - 类 中的变量cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
The Part converters.
+
+
partnerKey - 类 中的变量cn.felord.payment.wechat.WechatPayProperties.V3
+
+
partnerKey for wechat pay is optional
+
+
pattern - 枚举 中的变量cn.felord.payment.wechat.enumeration.WechatPayV3Type
+
+
The Pattern.
+
+
pattern() - 枚举 中的方法cn.felord.payment.wechat.enumeration.WechatPayV3Type
+
+
Pattern string.
+
+
PatternInfo - cn.felord.payment.wechat.v3.model中的类
+
+
优惠券样式
+
+
PatternInfo() - 类 的构造器cn.felord.payment.wechat.v3.model.PatternInfo
+
 
+
patternInfo - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
代金券样式
+
+
pauseStock(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
暂停代金券批次API + + 通过此接口可暂停指定代金券批次。
+
+
PayConfiguration - cn.felord.payment.autoconfigure中的类
+
 
+
PayConfiguration() - 类 的构造器cn.felord.payment.autoconfigure.PayConfiguration
+
 
+
Payer - cn.felord.payment.wechat.v3.model中的类
+
 
+
Payer() - 类 的构造器cn.felord.payment.wechat.v3.model.Payer
+
 
+
payer - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
+
支付者 JSAPI/小程序下单 必传
+
+
payer - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Payer.
+
+
Payer() - 类 的构造器cn.felord.payment.wechat.v3.model.TransactionConsumeData.Payer
+
 
+
payerAmount - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.CombineAmount
+
+
现金支付金额.
+
+
payerClientIp - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineSceneInfo
+
+
用户终端ip,必填。
+
+
payerClientIp - 类 中的变量cn.felord.payment.wechat.v3.model.SceneInfo
+
+
用户终端IP
+
+
payerCurrency - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.CombineAmount
+
+
现金支付币种.
+
+
payerCurrency - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData.Amount
+
+
The Payer currency.
+
+
payerTotal - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData.Amount
+
+
The Payer total.
+
+
PayException - cn.felord.payment中的异常错误
+
 
+
PayException() - 异常错误 的构造器cn.felord.payment.PayException
+
 
+
PayException(String) - 异常错误 的构造器cn.felord.payment.PayException
+
 
+
PayException(String, Throwable) - 异常错误 的构造器cn.felord.payment.PayException
+
 
+
PayException(Throwable) - 异常错误 的构造器cn.felord.payment.PayException
+
 
+
PayException(String, Throwable, boolean, boolean) - 异常错误 的构造器cn.felord.payment.PayException
+
 
+
payFunction(WechatPayV3Type, PayParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatDirectPayApi
+
 
+
PayParams - cn.felord.payment.wechat.v3.model中的类
+
+
支付请求参数.
+
+
PayParams() - 类 的构造器cn.felord.payment.wechat.v3.model.PayParams
+
 
+
Post(URI, Object) - 类 中的方法cn.felord.payment.wechat.v3.AbstractApi
+
+
Post request entity.
+
+
preventApiAbuse - 类 中的变量cn.felord.payment.wechat.v3.model.StockUseRule
+
+
api发券防刷
+
+
price - 类 中的变量cn.felord.payment.wechat.v3.model.GoodsDetail
+
 
+
profitSharing - 类 中的变量cn.felord.payment.wechat.v3.model.SettleInfo
+
+
是否指定分账
+
+
PromotionDetail - cn.felord.payment.wechat.v3.model中的类
+
+
The type Promotion detail.
+
+
PromotionDetail() - 类 的构造器cn.felord.payment.wechat.v3.model.PromotionDetail
+
 
+
promotionDetail - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Promotion detail.
+
+
PromotionDetail.GoodsDetail - cn.felord.payment.wechat.v3.model中的类
+
+
The type Goods detail.
+
+
+ + + +

Q

+
+
quantity - 类 中的变量cn.felord.payment.wechat.v3.model.Goods
+
+
商品数量
+
+
quantity - 类 中的变量cn.felord.payment.wechat.v3.model.GoodsDetail
+
 
+
quantity - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail.GoodsDetail
+
+
The Quantity.
+
+
queryCouponDetails(CouponDetailsQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
查询代金券详情API + + 通过此接口可查询代金券信息,包括代金券的基础信息、状态。
+
+
queryMerchantsByStockId(MchQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
查询代金券可用商户API + + 通过调用此接口可查询批次的可用商户号,判断券是否在某商户号可用,来决定是否展示。
+
+
queryMerchantsByStockIdFunction(WechatPayV3Type, MchQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Query stocks function request entity.
+
+
queryStockDetail(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
查询批次详情API + + 通过此接口可查询批次信息,包括批次的配置信息以及批次概况数据。
+
+
queryStockItems(MchQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
查询代金券可用单品API + + 通过此接口可查询批次的可用商品编码,判断券是否可用于某些商品,来决定是否展示。
+
+
queryStocksByMch(StocksQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
条件查询批次列表API + + 通过此接口可查询多个批次的信息,包括批次的配置信息以及批次概况数据。
+
+
queryStocksByMchFunction(WechatPayV3Type, StocksQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Query stocks function request entity.
+
+
queryTransactionById(TransactionQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatDirectPayApi
+
+
微信支付订单号查询API
+
+
queryTransactionByOutTradeNo(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatCombinePayApi
+
+
合单查询订单API.
+
+
queryTransactionByOutTradeNo(TransactionQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatDirectPayApi
+
+
商户订单号查询API
+
+
queryTransactionFunction(WechatPayV3Type, TransactionQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatDirectPayApi
+
 
+
queryUserCouponsByMchId(UserCouponsQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
根据商户号查用户的券API + + 可通过该接口查询用户在某商户号可用的全部券,可用于商户的小程序/H5中,用户"我的代金券"或"提交订单页"展示优惠信息。
+
+
queryUserCouponsFunction(WechatPayV3Type, UserCouponsQueryParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Query user coupons function request entity.
+
+
+ + + +

R

+
+
refreshCertificate(String) - 类 中的方法cn.felord.payment.wechat.v3.SignatureProvider
+
+
当我方服务器不存在平台证书或者证书同当前响应报文中的证书序列号不一致时应当刷新 调用/v3/certificates
+
+
removeWechatMeta(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMetaContainer
+
+
Remove wechat meta wechat meta bean.
+
+
request() - 类 中的方法cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
Request.
+
+
requestEntityBiFunction - 类 中的变量cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
The Request entity bi function.
+
+
requestSign(String, String, String, String) - 类 中的方法cn.felord.payment.wechat.v3.SignatureProvider
+
+
我方请求时加签,使用API证书.
+
+
resource - 类 中的变量cn.felord.payment.wechat.v3.model.CallbackParams
+
+
The Resource.
+
+
Resource() - 类 的构造器cn.felord.payment.wechat.v3.model.CallbackParams.Resource
+
 
+
resourceType - 类 中的变量cn.felord.payment.wechat.v3.model.CallbackParams
+
+
The Resource type.
+
+
responseBodyConsumer - 类 中的变量cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
The Response body consumer.
+
+
responseBodyConsumer - 类 中的变量cn.felord.payment.wechat.v3.WechatRequestEntity
+
+
The Response body consumer.
+
+
responseSignVerify(ResponseSignVerifyParams) - 类 中的方法cn.felord.payment.wechat.v3.SignatureProvider
+
+
我方对响应验签,和应答签名做比较,使用微信平台证书.
+
+
ResponseSignVerifyParams - cn.felord.payment.wechat.v3.model中的类
+
+
微信的响应签名校验参数
+
+
ResponseSignVerifyParams() - 类 的构造器cn.felord.payment.wechat.v3.model.ResponseSignVerifyParams
+
 
+
restartStock(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
重启代金券批次API + + 通过此接口可重启指定代金券批次。
+
+
restOperations - 类 中的变量cn.felord.payment.wechat.v3.SignatureProvider
+
+
The Rest operations.
+
+
restOperations - 类 中的变量cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
The Rest operations.
+
+
restOperations - 类 中的变量cn.felord.payment.wechat.v3.WechatPayClient
+
+
The Rest operations.
+
+
+ + + +

S

+
+
sceneInfo - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams
+
+
合单支付场景信息描述,选填
+
+
sceneInfo - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombinePayParams
+
+
合单支付场景信息描述,选填
+
+
sceneInfo - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData
+
+
场景信息,合单支付回调只返回device_id
+
+
sceneInfo - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
+
场景信息
+
+
SceneInfo - cn.felord.payment.wechat.v3.model中的类
+
+
场景信息
+
+
SceneInfo() - 类 的构造器cn.felord.payment.wechat.v3.model.SceneInfo
+
 
+
sceneInfo - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Scene info.
+
+
SceneInfo() - 类 的构造器cn.felord.payment.wechat.v3.model.TransactionConsumeData.SceneInfo
+
 
+
SCHEMA - 类 中的静态变量cn.felord.payment.wechat.v3.SignatureProvider
+
+
The constant SCHEMA.
+
+
scope - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail
+
+
The Scope.
+
+
secondDayAvailable - 类 中的变量cn.felord.payment.wechat.v3.model.CouponAvailableTime
+
+
The Second day available.
+
+
senderMchId - 类 中的变量cn.felord.payment.wechat.v3.model.UserCouponsQueryParams
+
+
批次发放商户号
+
+
sendStock(StocksSendParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
发放代金券API + + 商户侧开发时建议增加发放流水记录。
+
+
sendStocksFunction(WechatPayV3Type, StocksSendParams) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Send stocks function request entity.
+
+
serialNumber - 类 中的变量cn.felord.payment.wechat.v3.WechatMetaBean
+
+
The Serial number.
+
+
serverUrl - 类 中的变量cn.felord.payment.alipay.AliPayProperties.V1
+
+
alipay server
+
+
setMarketingFavorCallback(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
代金券核销回调通知API。
+
+
setMarketingFavorCallbackFunction(WechatPayV3Type, String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Sets marketing favor callback function.
+
+
settleInfo - 类 中的变量cn.felord.payment.wechat.v3.model.combine.SubOrder
+
+
结算信息,选填
+
+
SettleInfo - cn.felord.payment.wechat.v3.model中的类
+
 
+
SettleInfo() - 类 的构造器cn.felord.payment.wechat.v3.model.SettleInfo
+
 
+
SignatureProvider - cn.felord.payment.wechat.v3中的类
+
+
签名 加签 验签 + + 我方请求微信服务器时,需要根据我方的API证书对参数进行加签;微信服务器会根据我方签名验签以确定请求来自我方服务器; + + 然后微信服务器响应我方请求并在响应报文中使用【微信平台证书】加签 我方需要根据规则验签是否响应来自微信支付服务器 + + 其中【微信平台证书】定期会进行更新,不受我方管控,我方需要适当的时候获取最新的证书列表。
+
+
SignatureProvider(WechatMetaContainer) - 类 的构造器cn.felord.payment.wechat.v3.SignatureProvider
+
+
Instantiates a new Signature provider.
+
+
signatureProvider - 类 中的变量cn.felord.payment.wechat.v3.WechatPayCallback
+
+
The Signature provider.
+
+
signatureProvider - 类 中的变量cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
The Signature provider.
+
+
signatureProvider - 类 中的变量cn.felord.payment.wechat.v3.WechatPayClient
+
+
The Signature provider.
+
+
signatureProvider() - 类 中的方法cn.felord.payment.wechat.v3.WechatPayClient
+
+
Signature provider signature provider.
+
+
signatureProvider(WechatMetaContainer) - 类 中的方法cn.felord.payment.wechat.WechatPayConfiguration
+
+
微信支付V3签名工具.
+
+
signType - 类 中的变量cn.felord.payment.alipay.AliPayProperties.V1
+
+
sign type default RSA2
+
+
singleitem - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
singleitemDiscountOff - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
SingleitemDiscountOff - cn.felord.payment.wechat.v3.model中的类
+
+
单品优惠特定信息
+
+
SingleitemDiscountOff() - 类 的构造器cn.felord.payment.wechat.v3.model.SingleitemDiscountOff
+
 
+
singlePriceMax - 类 中的变量cn.felord.payment.wechat.v3.model.SingleitemDiscountOff
+
 
+
spOpenid - 类 中的变量cn.felord.payment.wechat.v3.model.Payer
+
+
用户服务标识
+
+
startAndRestartAndPauseStockFunction(WechatPayV3Type, String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Start and restart and pause stock function request entity.
+
+
startStock(String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
激活代金券批次API + + 制券成功后,通过调用此接口激活批次,如果是预充值代金券,激活时会从商户账户余额中锁定本批次的营销资金。
+
+
status - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
status - 类 中的变量cn.felord.payment.wechat.v3.model.StocksQueryParams
+
+
根据API而定 + + 批次状态
+
+
status - 类 中的变量cn.felord.payment.wechat.v3.model.UserCouponsQueryParams
+
+
券状态 null 不生效
+
+
Status() - 枚举 的构造器cn.felord.payment.wechat.v3.model.UserCouponsQueryParams.Status
+
 
+
stockCreatorMchid - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
stockCreatorMchid - 类 中的变量cn.felord.payment.wechat.v3.model.StocksSendParams
+
+
创建批次的商户号
+
+
stockDetailFunction(WechatPayV3Type, String) - 类 中的方法cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Stock detail function request entity.
+
+
stockId - 类 中的变量cn.felord.payment.wechat.v3.model.CouponConsumeData
+
 
+
stockId - 类 中的变量cn.felord.payment.wechat.v3.model.MchQueryParams
+
+
批次ID
+
+
stockId - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail
+
+
The Stock id.
+
+
stockId - 类 中的变量cn.felord.payment.wechat.v3.model.StocksSendParams
+
+
批次号 必须为代金券(全场券或单品券)批次号,不支持立减与折扣。
+
+
stockId - 类 中的变量cn.felord.payment.wechat.v3.model.UserCouponsQueryParams
+
+
批次号
+
+
stockName - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
批次名称
+
+
StocksCreateParams - cn.felord.payment.wechat.v3.model中的类
+
+
创建优惠券批次参数.
+
+
StocksCreateParams() - 类 的构造器cn.felord.payment.wechat.v3.model.StocksCreateParams
+
 
+
StocksQueryParams - cn.felord.payment.wechat.v3.model中的类
+
+
查询参数,适用以下接口: + + 条件查询批次列表API
+
+
StocksQueryParams() - 类 的构造器cn.felord.payment.wechat.v3.model.StocksQueryParams
+
 
+
StocksSendParams - cn.felord.payment.wechat.v3.model中的类
+
+
代金券发放接口请求参数
+
+
StocksSendParams() - 类 的构造器cn.felord.payment.wechat.v3.model.StocksSendParams
+
 
+
StockStatus - cn.felord.payment.wechat.enumeration中的枚举
+
+
The enum Stock status.
+
+
StockStatus(String, String) - 枚举 的构造器cn.felord.payment.wechat.enumeration.StockStatus
+
 
+
stockType - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
批次类型
+
+
stockUseRule - 类 中的变量cn.felord.payment.wechat.v3.model.StocksCreateParams
+
+
批次使用规则
+
+
StockUseRule - cn.felord.payment.wechat.v3.model中的类
+
+
批次使用规则
+
+
StockUseRule() - 类 的构造器cn.felord.payment.wechat.v3.model.StockUseRule
+
 
+
store - 类 中的变量cn.felord.payment.wechat.v3.KeyPairFactory
+
 
+
storeInfo - 类 中的变量cn.felord.payment.wechat.v3.model.SceneInfo
+
+
商户门店信息
+
+
StoreInfo - cn.felord.payment.wechat.v3.model中的类
+
 
+
StoreInfo() - 类 的构造器cn.felord.payment.wechat.v3.model.StoreInfo
+
 
+
subMchid - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineCloseParams.ClosingSubOrder
+
+
二级商户商户号,由微信支付生成并下发。
+
+
subMchid - 类 中的变量cn.felord.payment.wechat.v3.model.combine.SubOrder
+
+
二级商户商户号,由微信支付生成并下发。
+
+
subMchid - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.SubOrderCallback
+
+
The Sub mchid.
+
+
subOpenid - 类 中的变量cn.felord.payment.wechat.v3.model.Payer
+
+
用户子标识
+
+
SubOrder - cn.felord.payment.wechat.v3.model.combine中的类
+
+
子单信息,最多50单.
+
+
SubOrder() - 类 的构造器cn.felord.payment.wechat.v3.model.combine.SubOrder
+
 
+
SubOrderCallback() - 类 的构造器cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.SubOrderCallback
+
 
+
subOrders - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineCloseParams
+
+
子单信息,必填,最多50单
+
+
subOrders - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams
+
+
子单信息,必填,最多50单
+
+
subOrders - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombinePayParams
+
+
子单信息,必填,最多50单
+
+
subOrders - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData
+
+
合单支付回调子订单.
+
+
subsidyAmount - 类 中的变量cn.felord.payment.wechat.v3.model.SettleInfo
+
+
补差金额
+
+
successTime - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.SubOrderCallback
+
+
The Success time.
+
+
successTime - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Success time.
+
+
summary - 类 中的变量cn.felord.payment.wechat.v3.model.CallbackParams
+
+
The Summary.
+
+
+ + + +

T

+
+
tenantId - 类 中的变量cn.felord.payment.wechat.v3.AbstractApi
+
+
The Tenant id.
+
+
tenantId() - 类 中的方法cn.felord.payment.wechat.v3.AbstractApi
+
+
Tenant id string.
+
+
tenantId - 类 中的变量cn.felord.payment.wechat.v3.WechatMetaBean
+
+
The Tenant id.
+
+
tenantId - 类 中的变量cn.felord.payment.wechat.v3.WechatPayCallback
+
+
The Tenant id.
+
+
tenantIds - 类 中的变量cn.felord.payment.wechat.v3.WechatMetaContainer
+
 
+
timeExpire - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams
+
+
交易结束时间,选填
+
+
timeExpire - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombinePayParams
+
+
交易结束时间,选填
+
+
timeExpire - 类 中的变量cn.felord.payment.wechat.v3.model.PayParams
+
+
订单失效时间 YYYY-MM-DDTHH:mm:ss+TIMEZONE
+
+
timeStart - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineH5PayParams
+
+
交易起始时间,选填
+
+
timeStart - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombinePayParams
+
+
交易起始时间,选填
+
+
TOKEN_PATTERN - 类 中的静态变量cn.felord.payment.wechat.v3.SignatureProvider
+
+
The constant TOKEN_PATTERN.
+
+
toString() - 枚举 中的方法cn.felord.payment.wechat.enumeration.WeChatServer
+
 
+
total - 类 中的变量cn.felord.payment.wechat.v3.model.Amount
+
+
The Total.
+
+
total - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData.Amount
+
+
The Total.
+
+
totalAmount - 类 中的变量cn.felord.payment.wechat.v3.model.combine.CombineAmount
+
+
子单金额,单位为分,必填 + + 境外场景下,标价金额要超过商户结算币种的最小单位金额,例如结算币种为美元,则标价金额必须大于1美分
+
+
totalAmount - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.CombineAmount
+
+
标价金额,单位为分.
+
+
TradeState - cn.felord.payment.wechat.enumeration中的枚举
+
+
微信侧返回交易状态
+
+
TradeState() - 枚举 的构造器cn.felord.payment.wechat.enumeration.TradeState
+
 
+
tradeState - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.SubOrderCallback
+
+
The Trade state.
+
+
tradeState - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Trade state.
+
+
tradeStateDesc - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Trade state desc.
+
+
TradeType - cn.felord.payment.wechat.enumeration中的枚举
+
+
微信侧返回交易类型
+
+
TradeType() - 枚举 的构造器cn.felord.payment.wechat.enumeration.TradeType
+
 
+
tradeType - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.SubOrderCallback
+
+
The Trade type.
+
+
tradeType - 类 中的变量cn.felord.payment.wechat.v3.model.CouponUseRule
+
 
+
tradeType - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Trade type.
+
+
transactionCallback(ResponseSignVerifyParams, Consumer<TransactionConsumeData>) - 类 中的方法cn.felord.payment.wechat.v3.WechatPayCallback
+
+
微信支付成功回调.
+
+
TransactionConsumeData - cn.felord.payment.wechat.v3.model中的类
+
 
+
TransactionConsumeData() - 类 的构造器cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
 
+
TransactionConsumeData.Amount - cn.felord.payment.wechat.v3.model中的类
+
+
The type Amount.
+
+
TransactionConsumeData.Payer - cn.felord.payment.wechat.v3.model中的类
+
+
The type Payer.
+
+
TransactionConsumeData.SceneInfo - cn.felord.payment.wechat.v3.model中的类
+
+
The type Scene info.
+
+
transactionId - 类 中的变量cn.felord.payment.wechat.v3.model.CombineTransactionConsumeData.SubOrderCallback
+
+
The Transaction id.
+
+
transactionId - 类 中的变量cn.felord.payment.wechat.v3.model.ConsumeInformation
+
 
+
transactionId - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionConsumeData
+
+
The Transaction id.
+
+
transactionIdOrOutTradeNo - 类 中的变量cn.felord.payment.wechat.v3.model.TransactionQueryParams
+
 
+
transactionMinimum - 类 中的变量cn.felord.payment.wechat.v3.model.FixedNormalCoupon
+
+
门槛 满M元可用
+
+
transactionMinimum - 类 中的变量cn.felord.payment.wechat.v3.model.NormalCouponInformation
+
 
+
TransactionQueryParams - cn.felord.payment.wechat.v3.model中的类
+
 
+
TransactionQueryParams() - 类 的构造器cn.felord.payment.wechat.v3.model.TransactionQueryParams
+
 
+
type - 类 中的变量cn.felord.payment.wechat.v3.model.H5Info
+
+
场景类型
+
+
type - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail
+
+
The Type.
+
+
+ + + +

U

+
+
unitPrice - 类 中的变量cn.felord.payment.wechat.v3.model.Goods
+
+
商品单价
+
+
unitPrice - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail.GoodsDetail
+
+
The Unit price.
+
+
uri(WeChatServer) - 枚举 中的方法cn.felord.payment.wechat.enumeration.WechatPayV3Type
+
+
默认支付URI.
+
+
UserCouponsQueryParams - cn.felord.payment.wechat.v3.model中的类
+
+
The type User coupons query params.
+
+
UserCouponsQueryParams() - 类 的构造器cn.felord.payment.wechat.v3.model.UserCouponsQueryParams
+
 
+
UserCouponsQueryParams.Status - cn.felord.payment.wechat.v3.model中的枚举
+
+
The enum Status.
+
+
+ + + +

V

+
+
v1 - 类 中的变量cn.felord.payment.alipay.AliPayProperties
+
+
alipay api version 1.0
+
+
V1() - 类 的构造器cn.felord.payment.alipay.AliPayProperties.V1
+
 
+
v3 - 类 中的变量cn.felord.payment.wechat.v3.WechatMetaBean
+
+
The V3.
+
+
v3 - 类 中的变量cn.felord.payment.wechat.WechatPayProperties
+
+
wechat pay V3 properties
+
+
V3() - 类 的构造器cn.felord.payment.wechat.WechatPayProperties.V3
+
 
+
value - 枚举 中的变量cn.felord.payment.wechat.enumeration.StockStatus
+
 
+
value() - 枚举 中的方法cn.felord.payment.wechat.enumeration.StockStatus
+
+
Value string.
+
+
valueOf(String) - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.BankCode
+
+
返回带有指定名称的该类型的枚举常量。
+
+
valueOf(String) - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.CouponBgColor
+
+
返回带有指定名称的该类型的枚举常量。
+
+
valueOf(String) - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.CouponStatus
+
+
返回带有指定名称的该类型的枚举常量。
+
+
valueOf(String) - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.StockStatus
+
+
返回带有指定名称的该类型的枚举常量。
+
+
valueOf(String) - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.TradeState
+
+
返回带有指定名称的该类型的枚举常量。
+
+
valueOf(String) - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.TradeType
+
+
返回带有指定名称的该类型的枚举常量。
+
+
valueOf(String) - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.WechatPayV3Type
+
+
返回带有指定名称的该类型的枚举常量。
+
+
valueOf(String) - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.WeChatServer
+
+
返回带有指定名称的该类型的枚举常量。
+
+
valueOf(String) - 枚举 中的静态方法cn.felord.payment.wechat.v3.model.UserCouponsQueryParams.Status
+
+
返回带有指定名称的该类型的枚举常量。
+
+
valueOf(String) - 枚举 中的静态方法cn.felord.payment.wechat.v3.WechatPayCallback.EventType
+
+
返回带有指定名称的该类型的枚举常量。
+
+
values() - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.BankCode
+
+
按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。
+
+
values() - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.CouponBgColor
+
+
按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。
+
+
values() - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.CouponStatus
+
+
按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。
+
+
values() - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.StockStatus
+
+
按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。
+
+
values() - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.TradeState
+
+
按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。
+
+
values() - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.TradeType
+
+
按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。
+
+
values() - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.WechatPayV3Type
+
+
按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。
+
+
values() - 枚举 中的静态方法cn.felord.payment.wechat.enumeration.WeChatServer
+
+
按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。
+
+
values() - 枚举 中的静态方法cn.felord.payment.wechat.v3.model.UserCouponsQueryParams.Status
+
+
按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。
+
+
values() - 枚举 中的静态方法cn.felord.payment.wechat.v3.WechatPayCallback.EventType
+
+
按照声明该枚举类型的常量的顺序, 返回 +包含这些常量的数组。
+
+
+ + + +

W

+
+
WechatApiProvider - cn.felord.payment.wechat.v3中的类
+
+
微信支付工具.
+
+
WechatApiProvider(WechatPayClient) - 类 的构造器cn.felord.payment.wechat.v3.WechatApiProvider
+
+
Instantiates a new Wechat api provider.
+
+
wechatApiProvider(WechatPayClient) - 类 中的方法cn.felord.payment.wechat.WechatPayConfiguration
+
+
多租户接口Provider.
+
+
WechatCombinePayApi - cn.felord.payment.wechat.v3中的类
+
+
微信合单支付.
+
+
WechatCombinePayApi(WechatPayClient, String) - 类 的构造器cn.felord.payment.wechat.v3.WechatCombinePayApi
+
+
Instantiates a new Abstract api.
+
+
WechatDirectPayApi - cn.felord.payment.wechat.v3中的类
+
+
普通支付-直连模式.
+
+
WechatDirectPayApi(WechatPayClient, String) - 类 的构造器cn.felord.payment.wechat.v3.WechatDirectPayApi
+
+
Instantiates a new Wechat pay api.
+
+
WechatMarketingFavorApi - cn.felord.payment.wechat.v3中的类
+
+
微信支付营销代金券API
+
+
WechatMarketingFavorApi(WechatPayClient, String) - 类 的构造器cn.felord.payment.wechat.v3.WechatMarketingFavorApi
+
+
Instantiates a new Wechat marketing favor api.
+
+
wechatMetaBean() - 类 中的方法cn.felord.payment.wechat.v3.AbstractApi
+
+
Wechat meta bean wechat meta bean.
+
+
WechatMetaBean - cn.felord.payment.wechat.v3中的类
+
+
微信支付元数据Bean.
+
+
WechatMetaBean() - 类 的构造器cn.felord.payment.wechat.v3.WechatMetaBean
+
 
+
wechatMetaBeanMap - 类 中的变量cn.felord.payment.wechat.v3.WechatMetaContainer
+
 
+
wechatMetaContainer - 类 中的变量cn.felord.payment.wechat.v3.SignatureProvider
+
+
The Wechat meta container.
+
+
wechatMetaContainer() - 类 中的方法cn.felord.payment.wechat.v3.SignatureProvider
+
+
Wechat meta container.
+
+
WechatMetaContainer - cn.felord.payment.wechat.v3中的类
+
+
配置容器
+
+
WechatMetaContainer() - 类 的构造器cn.felord.payment.wechat.v3.WechatMetaContainer
+
 
+
wechatMetaContainer(WechatPayProperties) - 类 中的方法cn.felord.payment.wechat.WechatPayConfiguration
+
+
微信支付公私钥 以及序列号等元数据.
+
+
WechatPayCallback - cn.felord.payment.wechat.v3中的类
+
+
微信支付回调工具.
+
+
WechatPayCallback(SignatureProvider, String) - 类 的构造器cn.felord.payment.wechat.v3.WechatPayCallback
+
+
Instantiates a new Wechat pay callback.
+
+
WechatPayCallback.EventType - cn.felord.payment.wechat.v3中的枚举
+
+
事件类型用于处理回调.
+
+
wechatPayClient - 类 中的变量cn.felord.payment.wechat.v3.AbstractApi
+
+
The Wechat pay client.
+
+
wechatPayClient - 类 中的变量cn.felord.payment.wechat.v3.WechatApiProvider
+
+
The Wechat pay client.
+
+
WechatPayClient - cn.felord.payment.wechat.v3中的类
+
+
The type Wechat pay client.
+
+
WechatPayClient(SignatureProvider) - 类 的构造器cn.felord.payment.wechat.v3.WechatPayClient
+
+
Instantiates a new Wechat pay service.
+
+
wechatPayClient(SignatureProvider) - 类 中的方法cn.felord.payment.wechat.WechatPayConfiguration
+
+
微信支付V3 客户端.
+
+
WechatPayClient.Executor<M> - cn.felord.payment.wechat.v3中的类
+
+
The type Executor.
+
+
WechatPayConfiguration - cn.felord.payment.wechat中的类
+
+
The type Wechat pay configuration.
+
+
WechatPayConfiguration() - 类 的构造器cn.felord.payment.wechat.WechatPayConfiguration
+
 
+
wechatpayContribute - 类 中的变量cn.felord.payment.wechat.v3.model.PromotionDetail
+
+
The Wechatpay contribute.
+
+
wechatpayGoodsId - 类 中的变量cn.felord.payment.wechat.v3.model.Goods
+
+
微信侧商品编码
+
+
wechatpayNonce - 类 中的变量cn.felord.payment.wechat.v3.model.ResponseSignVerifyParams
+
+
response.headers['Wechatpay-Nonce'] 微信服务器提供的随机串
+
+
WechatPayProperties - cn.felord.payment.wechat中的类
+
+
The type Wechat pay properties.
+
+
WechatPayProperties() - 类 的构造器cn.felord.payment.wechat.WechatPayProperties
+
 
+
WechatPayProperties.V3 - cn.felord.payment.wechat中的类
+
+
wechat pay v3 properties.
+
+
WechatPayResponseErrorHandler - cn.felord.payment.wechat中的类
+
 
+
WechatPayResponseErrorHandler() - 类 的构造器cn.felord.payment.wechat.WechatPayResponseErrorHandler
+
 
+
wechatpaySerial - 类 中的变量cn.felord.payment.wechat.v3.model.ResponseSignVerifyParams
+
+
response.headers['Wechatpay-Serial'] 当前使用的微信平台证书序列号
+
+
wechatpaySignature - 类 中的变量cn.felord.payment.wechat.v3.model.ResponseSignVerifyParams
+
+
response.headers['Wechatpay-Signature'] 微信平台签名
+
+
wechatpayTimestamp - 类 中的变量cn.felord.payment.wechat.v3.model.ResponseSignVerifyParams
+
+
response.headers['Wechatpay-Timestamp'] 微信服务器的时间戳
+
+
WechatPayV3Type - cn.felord.payment.wechat.enumeration中的枚举
+
+
The Wechat Pay V3 type.
+
+
WechatPayV3Type(HttpMethod, String) - 枚举 的构造器cn.felord.payment.wechat.enumeration.WechatPayV3Type
+
+
Instantiates a new Wechat pay v 3 type.
+
+
wechatPayV3Type - 类 中的变量cn.felord.payment.wechat.v3.WechatPayClient.Executor
+
+
The V3 pay type.
+
+
WechatRequestEntity<T> - cn.felord.payment.wechat.v3中的类
+
+
The type Wechat request entity.
+
+
WechatRequestEntity(T, MultiValueMap<String, String>, HttpMethod, URI, Type, Consumer<ResponseEntity<ObjectNode>>) - 类 的构造器cn.felord.payment.wechat.v3.WechatRequestEntity
+
+
Instantiates a new Wechat request entity.
+
+
WechatResponseEntity<T> - cn.felord.payment.wechat.v3中的类
+
+
The type Wechat response entity.
+
+
WechatResponseEntity() - 类 的构造器cn.felord.payment.wechat.v3.WechatResponseEntity
+
 
+
WeChatServer - cn.felord.payment.wechat.enumeration中的枚举
+
+
The enum We chat server domain.
+
+
WeChatServer(String) - 枚举 的构造器cn.felord.payment.wechat.enumeration.WeChatServer
+
 
+
withType(WechatPayV3Type, M) - 类 中的方法cn.felord.payment.wechat.v3.WechatPayClient
+
+ +
+
write(MultiValueMap<String, ?>, MediaType, HttpOutputMessage) - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
 
+
writeBoundary(OutputStream, byte[]) - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
Write boundary.
+
+
writeEnd(OutputStream, byte[]) - 类 中的静态方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
Write end.
+
+
writeForm(MultiValueMap<String, Object>, MediaType, HttpOutputMessage) - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
Write form.
+
+
writeHeaders() - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter.MultipartHttpOutputMessage
+
+
Write headers.
+
+
writeMultipart(MultiValueMap<String, Object>, HttpOutputMessage) - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
Write multipart.
+
+
writeNewLine(OutputStream) - 类 中的静态方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
Write new line.
+
+
writePart(String, HttpEntity<?>, OutputStream) - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
Write part.
+
+
writeParts(OutputStream, MultiValueMap<String, Object>, byte[]) - 类 中的方法cn.felord.payment.wechat.v3.ExtensionFormHttpMessageConverter
+
+
Write parts.
+
+
+A B C D E F G H I J K L M N O P Q R S T U V W 
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/index.html b/docs/apidocs/index.html new file mode 100644 index 0000000..c22cd0c --- /dev/null +++ b/docs/apidocs/index.html @@ -0,0 +1,76 @@ + + + + + + +payment-spring-boot 1.0.0.RELEASE API + + + + + + + + + +<noscript> +<div>您的浏览器已禁用 JavaScript。</div> +</noscript> +<h2>框架预警</h2> +<p>请使用框架功能查看此文档。如果看到此消息, 则表明您使用的是不支持框架的 Web 客户机。链接到<a href="overview-summary.html">非框架版本</a>。</p> + + + diff --git a/docs/apidocs/overview-frame.html b/docs/apidocs/overview-frame.html new file mode 100644 index 0000000..64c1a34 --- /dev/null +++ b/docs/apidocs/overview-frame.html @@ -0,0 +1,29 @@ + + + + + + +概览列表 (payment-spring-boot 1.0.0.RELEASE API) + + + + + +
所有类
+
+

程序包

+ +
+

 

+ + diff --git a/docs/apidocs/overview-summary.html b/docs/apidocs/overview-summary.html new file mode 100644 index 0000000..442b80a --- /dev/null +++ b/docs/apidocs/overview-summary.html @@ -0,0 +1,168 @@ + + + + + + +概览 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

payment-spring-boot 1.0.0.RELEASE API

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
程序包 
程序包说明
cn.felord.payment 
cn.felord.payment.alipay 
cn.felord.payment.autoconfigure 
cn.felord.payment.wechat 
cn.felord.payment.wechat.enumeration 
cn.felord.payment.wechat.v3 
cn.felord.payment.wechat.v3.model 
cn.felord.payment.wechat.v3.model.combine 
+
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/overview-tree.html b/docs/apidocs/overview-tree.html new file mode 100644 index 0000000..1dcc240 --- /dev/null +++ b/docs/apidocs/overview-tree.html @@ -0,0 +1,278 @@ + + + + + + +类分层结构 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

所有程序包的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +

注释类型分层结构

+ +

枚举分层结构

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/package-list b/docs/apidocs/package-list new file mode 100644 index 0000000..31107b1 --- /dev/null +++ b/docs/apidocs/package-list @@ -0,0 +1,8 @@ +cn.felord.payment +cn.felord.payment.alipay +cn.felord.payment.autoconfigure +cn.felord.payment.wechat +cn.felord.payment.wechat.enumeration +cn.felord.payment.wechat.v3 +cn.felord.payment.wechat.v3.model +cn.felord.payment.wechat.v3.model.combine diff --git a/docs/apidocs/script.js b/docs/apidocs/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/docs/apidocs/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/docs/apidocs/serialized-form.html b/docs/apidocs/serialized-form.html new file mode 100644 index 0000000..561c633 --- /dev/null +++ b/docs/apidocs/serialized-form.html @@ -0,0 +1,139 @@ + + + + + + +序列化表格 (payment-spring-boot 1.0.0.RELEASE API) + + + + + + + + +
+ + + + + + + +
+ + +
+

序列化表格

+
+
+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2020. All rights reserved.

+ + diff --git a/docs/apidocs/stylesheet.css b/docs/apidocs/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/docs/apidocs/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 0000000..95f9bcc --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,31 @@ +## 1.0.3.RELEASE +- 微信支付 + - feat: 完善合单支付账单 + 1. 增加合单支付-申请交易账单API。 + 2. 增加合单支付-申请资金账单API。 + - fix: #I2BCMZ 合单支付url不正确的问题。 + - fix: 微信支付能够正确根据环境条件动态启用了,修复了不配置微信支付时,无法启用支付宝的问题。 + 1. 当配置中存在`wechat.pay.v3`配置时,微信支付启用;否则微信支付不启用,不会再影响支付宝的运行。 + - refactor: 先享卡优化 + +## 1.0.2.RELEASE +- 微信支付 + - feat: 接入微信支付分 + - feat: 接入微信支付先享卡 + - fix: 支付回调参数不全的问题 + +## 1.0.1.RELEASE + +- 微信支付 + - 基础支付-商户直连 bugfix + - 合单支付 + +## 1.0.0.RELEASE + +- 微信支付 + - 基础支付-商户直连 + - 代金券 + - 多租户 +- 支付宝 + - 仅仅引入支付宝SDK,后续维护以支付宝SDK变动为准 + - 支付宝暂时不支持多租户 \ No newline at end of file diff --git a/docs/img/cert_path.png b/docs/img/cert_path.png new file mode 100644 index 0000000000000000000000000000000000000000..2b627b0707fcec8b58cf82a695cdd2d2598630cb GIT binary patch literal 37607 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 + + + + + + + + + + diff --git a/docs/quick_start.md b/docs/quick_start.md new file mode 100644 index 0000000..cd2d15e --- /dev/null +++ b/docs/quick_start.md @@ -0,0 +1,177 @@ +## Maven 中央仓库坐标 + +```xml + + cn.felord + payment-spring-boot-starter + 1.0.3.RELEASE + +``` +> 基于 **Spring Boot 2.4.1** + +## Spring Boot 版本适配 + +需要自行克隆项目,修改根目录下的`pom.xml`以下配置项: +```xml + + + 2.4.0 + +``` +然后安装使用 + +## 自行安装 + +以**Spring Boot Starter**的形式集成到项目中。从[GitHub项目地址](https://github.com/NotFound403/payment-spring-boot)拉取`release`分支到本地后使用以下两种方式之一进行环境集成: + +- `mvn install` 安装到本地 +- `mvn deploy`部署到**Maven**仓库 + + + +然后引用**Maven**坐标,请注意`${payment-spring-boot-starter.version}`要同你安装的一致。 + +```xml + + cn.felord + payment-spring-boot-starter + ${payment-spring-boot-starter.version} + +``` +## 配置 + +### 微信支付 +在Spring Boot项目中的`application.yaml`中配置`wechat.pay.v3`相关参数。 +```yaml +wechat: + pay: + v3: +# 租户id + : +# 应用appId 必填 + app-id: xxxxxxxx +# api 密钥 可不填 + app-secret: xxxxxxxxxxx +# api v3 密钥 必填 + app-v3-secret: xxxxxxxx +# 微信支付商户号 必填 + mch-id: xxxxxxx +# 商户服务器域名 用于回调 需要放开回调接口的安全策略 必填 + domain: https://felord.cn +# 商户 api 证书路径 必填 填写classpath路径 位于 maven项目的resources文件下 + cert-path: apiclient_cert.p12 + +``` +#### 微信支付 tentantID 场景说明 + +当项目中需要同时支持微信App支付、微信公众号支付、微信小程序支付时,上述配置中的`app-id`可能为多个,因此我们需要进行路由标识以区分它们,所以这里需要你定义一个`tentanID`来进行标识。假如我们同时有App支付和微信小程序支付,我们应该这样配置: + +```yaml +wechat: + pay: + v3: + # App租户租户标识为 mobile + mobile: + app-id: wx524534x423234 + app-secret: felord + app-v3-secret: 0e5b123323h12234927e455703ec + mch-id: 1603337223 + domain: https://felord.cn/mobile + cert-path: mobile/apiclient_cert.p12 + # 微信小程序租户标识为 miniapp + miniapp: + app-id: wx344123x3541223 + app-secret: felord + app-v3-secret: 0e5b123323h12234927e455703ec + mch-id: 1603337223 + domain: https://felord.cn/miniapp + cert-path: miniapp/apiclient_cert.p12 +``` + +> ❗注意:在一套系统中需要开发者保证`tentanID`唯一。 + +### 支付宝 + +在Spring Boot项目中的`application.yaml`中配置`ali.pay.v1`相关参数。 +```yaml +ali: + pay: + v1: +# 可以替换为沙箱 + server-url: https://openapi.alipaydev.com/gateway.do +# 蚂蚁开放平台申请并认证的应用appId + app-id: 2016223700762343 + app-private-key-path: META-INF/app_rsa + alipay-public-cert-path: META-INF/alipayCertPublicKey_RSA2.crt + alipay-root-cert-path: META-INF/alipayRootCert.crt + app-cert-public-key-path: META-INF/appCertPublicKey_2016102700769563.crt + charset: utf-8 + format: json + sign-type: RSA2 +``` +> ❗注意:只有`ali.pay.v1.app-id`设置了有效值才能启用支付宝API。 + +## 启用配置 + +配置完毕后需要启用`@EnableMobilePay`注解来开启支付功能: + +```java +@EnableMobilePay +@Configuration +public class PayConfig { +} +``` +## 使用API + +### 微信支付 + +微信支付V3开放接口都是通过`WechatApiProvider`引入的,当[启用配置](/quick_start?id=启用配置)步骤完成后会被初始化并注入了**Spring IoC**,可通过如下形式引入: +```java + @Autowired + WechatApiProvider wechatApiProvider; +``` +`WechatApiProvider`需要开发者明确租户ID[tenantID](quick_start?id=微信支付-tentantid-场景说明)以初始化具体场景的**Api**。例如查询终端用户在租户`mobile`下的优惠券: + +```java + // 查询商户下的优惠券 + @Test + public void v3MchStocks() { + // 配置文件中对应的tenantID: + String tenantId =“mobile”; + StocksQueryParams params = new StocksQueryParams(); + params.setOffset(0); + params.setLimit(10); + WechatResponseEntity objectNodeWechatResponseEntity = wechatApiProvider.favorApi(tenantId).queryStocksByMch(params); + System.out.println("objectNodeWechatResponseEntity = " + objectNodeWechatResponseEntity); + } +``` + + +### 支付宝 +当[启用配置](/quick_start?id=启用配置)步骤完成后会初始化支付宝支付客户端接口`AlipayClient`并注入**Spring IoC**,可通过以下形式引入: +```java + @Autowired + AlipayClient alipayClient; +``` +调用,以现金红包为例: +```java + @SneakyThrows + public void campaignCash() { + AlipayMarketingCampaignCashCreateRequest request = new AlipayMarketingCampaignCashCreateRequest(); + request.setBizContent("{" + + "\"coupon_name\":\"XXX周年庆红包\"," + + "\"prize_type\":\"random\"," + + "\"total_money\":\"10000.00\"," + + "\"total_num\":\"1000\"," + + "\"prize_msg\":\"XXX送您大红包\"," + + "\"start_time\":\"2020-11-02 22:48:30\"," + + "\"end_time\":\"2020-12-01 22:48:30\"," + + "\"merchant_link\":\"http://www.weibo.com\"," + + "\"send_freqency\":\"D3|L10\"" + + " }"); + + AlipayMarketingCampaignCashCreateResponse execute = alipayClient.certificateExecute(request); + + System.out.println("execute = " + execute.getBody()); + } +``` \ No newline at end of file diff --git a/docs/stackoverflow.md b/docs/stackoverflow.md new file mode 100644 index 0000000..8982758 --- /dev/null +++ b/docs/stackoverflow.md @@ -0,0 +1,56 @@ +## 微信 +### 微信支付技术分享 +- [Java中的微信支付(1):API V3版本签名详解](https://mp.weixin.qq.com/s/iiTCr57FgbAb6s0P0hT-9Q) +- [Java中的微信支付(2):API V3 微信平台证书的获取与刷新](https://mp.weixin.qq.com/s/O_YcnIRcl2MltElBupm3Hg) +- [Java中的微信支付(3):API V3对微信服务器响应进行签名验证](https://mp.weixin.qq.com/s/cb2eTTRjHifNYUGpQETMCQ) +### 微信支付V3中的坑 +#### 代金券 +- 代金券制券后不能修改,所以一定要注意 +- 已激活的代金券批次被停用后不影响该批次已发放代金券的核销 +- 代金券激活券和制券要有一定的间隔时间,官方说是1分钟 +- 发券不需要靠微信服务号,官方的描述是错误的,有一个支持微信登录的appid就行了 +- 制券 返回`403`,报文`{"code":"REQUEST_BLOCKED","message":"活动未开始或已结束\n"}`检查规则是否符合: + ``` + 1.stock_name:最多可填写9个字 + 2.max_coupons_per_user:单天发放个数上限不能为0 + 3. coupon_amount:10<=coupon_amount<=100000 + 4.available_time_after_receive:可用时间:相对时间,按分钟设置,是否1min<=分钟范围<=1440min + 5.transaction_minimum校验规则: + a、使用门槛-券面额>=0.01(门槛要大于面额) + b、0.1元<=门槛<=100000 + 6.stock_type:目前只支持NORMAL + 7.out_request_no:校验规则:不可以重复 + 8.活动时间不可以大于90天 + ``` +#### 微信支付分 +- 微信支付分`service_id`相关 +``` + 1. 在微信支付分功能申请成功后,联系运营那边配置 service_id。 + 2. service_id 是微信支付商户属性 + 3. 一个 service_id 可以对应多个 mchid + 4. 更多的就要联系微信支付BD了 +``` + +!> 不要过分相信微信文档,微信文档不一定是真的,要问就问他们客服 + +## 支付宝 + +### 支付宝证书 + +请注意因为未来**SHA1withRSA**将被淘汰,因此采用最新的**SHA256withRSA**证书,旧的模式将不提供支持。步骤如下: + +1.使用支付宝开发助手申请CSR文件 + +![先申请密钥对,再申请csr](./img/csr.png) +申请成功后看文件说明: + +![](./img/file_info.png) + +2.上传CSR设置证书 + +![](./img/set.png) + +上传成功后需要下载证书,和配置的对应关系为: + +![](./img/cert_path.png) + diff --git a/docs/wechat_v3_api.md b/docs/wechat_v3_api.md new file mode 100644 index 0000000..da4b6e0 --- /dev/null +++ b/docs/wechat_v3_api.md @@ -0,0 +1,112 @@ +## 入口类 + +`WechatApiProvider`是本项目微信支付的入口类,已被注入**Spring IoC**。它目前包含以下几个**API**(后续会增加)。 + +### 代金券API + +`WechatMarketingFavorApi`是微信支付营销工具-[代金券相关API](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/convention.shtml)的封装。 + +#### 创建代金券批次API + +`WechatResponseEntity createStock(StocksCreateParams params)` + +#### 激活代金券批次API + + `WechatResponseEntity startStock(String stockId)` + +#### 发放代金券API + +`WechatResponseEntity sendStock(StocksSendParams params)` + +#### 暂停代金券批次API + +`WechatResponseEntity pauseStock(String stockId)` + +#### 重启代金券批次API + +`WechatResponseEntity restartStock(String stockId)` + +#### 条件查询批次列表API +通过此接口可查询多个批次的信息,包括批次的配置信息以及批次概况数据。 + +`WechatResponseEntity queryStocksByMch(StocksQueryParams params)` + +#### 查询批次详情API + +`WechatResponseEntity queryStockDetail(String stockId)` + +#### 查询代金券详情API + +`WechatResponseEntity queryCouponDetails(CouponDetailsQueryParams params)` + +#### 查询代金券可用商户API + +`WechatResponseEntity queryMerchantsByStockId(StocksQueryParams params)` + +#### 查询代金券可用单品API + +`WechatResponseEntity queryStockItems(StocksQueryParams params)` + +#### 根据商户号查用户的券API + +`WechatResponseEntity queryUserCouponsByMchId(UserCouponsQueryParams params)` + +#### 下载批次核销明细API + +`WechatResponseEntity downloadStockUseFlow(String stockId)` + +#### 下载批次退款明细API + +`WechatResponseEntity downloadStockRefundFlow(String stockId)` + +#### 营销图片上传API + +`WechatResponseEntity marketingImageUpload(MultipartFile file)` + +#### 代金券核销回调通知API + +`WechatResponseEntity setMarketingFavorCallback(String notifyUrl)` + +### 普通支付-直连模式API + +`WechatDirectPayApi`是微信基础支付工具-[普通支付-直连模式API](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/transactions.shtml)的封装。 + +#### APP下单API + +`WechatResponseEntity appPay(PayParams payParams)` + +#### JSAPI/小程序下单API + +`WechatResponseEntity jsPay(PayParams payParams)` + +#### Native下单API + +`WechatResponseEntity nativePay(PayParams payParams)` + +#### H5下单API + +`WechatResponseEntity h5Pay(PayParams payParams)` + +#### 微信支付订单号查询API + +`WechatResponseEntity queryTransactionById(TransactionQueryParams params)` + +#### 商户订单号查询API + +`WechatResponseEntity queryTransactionByOutTradeNo(TransactionQueryParams params)` + +#### 关单API + +`WechatResponseEntity close(String outTradeNo)` + +### 回调API + +所有需要回调处理的微信支付业务通过`WechatPayCallback`来进行处理。 + +#### 微信支付代金券核销回调API + +`Map couponCallback(ResponseSignVerifyParams params, Consumer couponConsumeDataConsumer)` + +#### 微信支付普通支付回调API + +`Map transactionCallback(ResponseSignVerifyParams params, Consumer couponConsumeDataConsumer)` \ No newline at end of file diff --git a/payment-spring-boot-autoconfigure/pom.xml b/payment-spring-boot-autoconfigure/pom.xml new file mode 100644 index 0000000..6c96d52 --- /dev/null +++ b/payment-spring-boot-autoconfigure/pom.xml @@ -0,0 +1,61 @@ + + + + cn.felord + payment-spring-boot + 1.0.3.RELEASE + + + payment-spring-boot-autoconfigure + 1.0.3.RELEASE + jar + 4.0.0 + + + 1.8 + 1.8 + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-autoconfigure + true + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.projectlombok + lombok + compile + + + org.springframework.boot + spring-boot-starter-logging + provided + + + org.springframework.boot + spring-boot-starter-web + provided + + + org.bouncycastle + bcprov-jdk15to18 + true + + + com.alipay.sdk + alipay-sdk-java + + + + \ No newline at end of file diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/PayException.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/PayException.java new file mode 100644 index 0000000..8d605ec --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/PayException.java @@ -0,0 +1,45 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment; + +/** + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public class PayException extends RuntimeException { + + public PayException() { + } + + public PayException(String message) { + super(message); + } + + public PayException(String message, Throwable cause) { + super(message, cause); + } + + public PayException(Throwable cause) { + super(cause); + } + + public PayException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/alipay/AliPayConfiguration.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/alipay/AliPayConfiguration.java new file mode 100644 index 0000000..110f64c --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/alipay/AliPayConfiguration.java @@ -0,0 +1,91 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.alipay; + + +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.CertAlipayRequest; +import com.alipay.api.DefaultAlipayClient; +import cn.felord.payment.PayException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.context.properties.PropertyMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.ClassPathResource; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; + +/** + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Slf4j +@Configuration +@ConditionalOnProperty(prefix = "ali.pay", name = "v1.app-id") +@EnableConfigurationProperties(AliPayProperties.class) +public class AliPayConfiguration { + + @Bean + public AlipayClient alipayClient(AliPayProperties aliPayProperties) throws AlipayApiException { + + PropertyMapper propertyMapper = PropertyMapper.get().alwaysApplyingWhenNonNull(); + + AliPayProperties.V1 v1 = aliPayProperties.getV1(); + CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); + propertyMapper.from(v1::getServerUrl).to(certAlipayRequest::setServerUrl); + propertyMapper.from(v1::getAppId).to(certAlipayRequest::setAppId); + propertyMapper.from(v1::getAppPrivateKeyPath).as(this::appRSAPrivateKey).to(certAlipayRequest::setPrivateKey); + propertyMapper.from(v1::getFormat).to(certAlipayRequest::setFormat); + propertyMapper.from(v1::getCharset).to(certAlipayRequest::setCharset); + propertyMapper.from(v1::getSignType).to(certAlipayRequest::setSignType); + propertyMapper.from(v1::getAppCertPublicKeyPath).as(this::getFileAbsolutePath).to(certAlipayRequest::setCertPath); + propertyMapper.from(v1::getAlipayPublicCertPath).as(this::getFileAbsolutePath).to(certAlipayRequest::setAlipayPublicCertPath); + propertyMapper.from(v1::getAlipayRootCertPath).as(this::getFileAbsolutePath).to(certAlipayRequest::setRootCertPath); + return new DefaultAlipayClient(certAlipayRequest); + } + + private String getFileAbsolutePath(String classPath) { + try { + return new ClassPathResource(classPath).getFile().getAbsolutePath(); + } catch (IOException e) { + log.error("ali pay cert path is not exist ,{}", e.getMessage()); + throw new PayException("ali pay cert path is not exist"); + } + + } + + + private String appRSAPrivateKey(String classPath) { + try { + File file = new ClassPathResource(classPath).getFile(); + return new BufferedReader(new FileReader(file)).readLine(); + } catch (IOException e) { + log.error("ali pay app private key is required ,{}", e.getMessage()); + throw new PayException("ali pay app private key is required"); + } + } + + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/alipay/AliPayProperties.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/alipay/AliPayProperties.java new file mode 100644 index 0000000..f19b5de --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/alipay/AliPayProperties.java @@ -0,0 +1,89 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.alipay; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; + +/** + * The type Ali pay properties. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +@ConfigurationProperties("ali.pay") +public class AliPayProperties { + /** + * alipay api version 1.0 + */ + @NestedConfigurationProperty + private V1 v1; + + + /** + * The type V 1. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ + @Data + public static class V1 { + /** + * alipay server + */ + private String serverUrl = "https://openapi.alipay.com/gateway.do"; + /** + * your app ID + */ + private String appId; + /** + * your app private key, which must be in a single line + */ + private String appPrivateKeyPath; + /** + * sign type default RSA2 + */ + private String signType = "RSA2"; + /** + * data format only json now + */ + private String format = "json"; + /** + * charset default utf-8 + */ + private String charset = "utf-8"; + /** + * alipay public cert path + */ + private String alipayPublicCertPath; + /** + * alipay root cert path + */ + private String alipayRootCertPath; + /** + * appCertPublicKey + */ + private String appCertPublicKeyPath; + + } + + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/autoconfigure/EnableMobilePay.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/autoconfigure/EnableMobilePay.java new file mode 100644 index 0000000..a9298a9 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/autoconfigure/EnableMobilePay.java @@ -0,0 +1,34 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.autoconfigure; + +import org.springframework.context.annotation.Import; + +import java.lang.annotation.*; + +/** + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Import(PayConfiguration.class) +public @interface EnableMobilePay { +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/autoconfigure/PayConfiguration.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/autoconfigure/PayConfiguration.java new file mode 100644 index 0000000..90943b3 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/autoconfigure/PayConfiguration.java @@ -0,0 +1,33 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.autoconfigure; + +import cn.felord.payment.alipay.AliPayConfiguration; +import cn.felord.payment.wechat.WechatPayConfiguration; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +/** + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Configuration +@Import({WechatPayConfiguration.class, AliPayConfiguration.class}) +public class PayConfiguration { +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayConfiguration.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayConfiguration.java new file mode 100644 index 0000000..9878264 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayConfiguration.java @@ -0,0 +1,104 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat; + + +import cn.felord.payment.wechat.v3.*; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Configuration; + +import java.util.Map; + +/** + * The type Wechat pay configuration. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Configuration +@Conditional(WechatPayConfiguredCondition.class) +@EnableConfigurationProperties(WechatPayProperties.class) +public class WechatPayConfiguration { + /** + * The constant CERT_ALIAS. + */ + private static final String CERT_ALIAS = "Tenpay Certificate"; + + /** + * 微信支付公私钥 以及序列号等元数据. + * + * @param wechatPayProperties the wechat pay properties + * @return the wechat cert bean + */ + @Bean + @ConditionalOnMissingBean + WechatMetaContainer wechatMetaContainer(WechatPayProperties wechatPayProperties) { + + Map v3Map = wechatPayProperties.getV3(); + WechatMetaContainer container = new WechatMetaContainer(); + KeyPairFactory keyPairFactory = new KeyPairFactory(); + v3Map.keySet().forEach(tenantId -> { + WechatPayProperties.V3 v3 = v3Map.get(tenantId); + String certPath = v3.getCertPath(); + String mchId = v3.getMchId(); + WechatMetaBean wechatMetaBean = keyPairFactory.createPKCS12(certPath, CERT_ALIAS, mchId); + wechatMetaBean.setV3(v3); + wechatMetaBean.setTenantId(tenantId); + container.addWechatMeta(tenantId, wechatMetaBean); + }); + return container; + } + + /** + * 微信支付V3签名工具. + * + * @param wechatMetaContainer the wechat meta container + * @return the signature provider + */ + @Bean + SignatureProvider signatureProvider(WechatMetaContainer wechatMetaContainer) { + return new SignatureProvider(wechatMetaContainer); + } + + + /** + * 微信支付V3 客户端. + * + * @param signatureProvider the signature provider + * @return the wechat pay service + */ + @Bean + public WechatPayClient wechatPayClient(SignatureProvider signatureProvider) { + return new WechatPayClient(signatureProvider); + } + + /** + * 多租户接口Provider. + * + * @param wechatPayClient the wechat pay client + * @return the wechat api provider + */ + @Bean + public WechatApiProvider wechatApiProvider(WechatPayClient wechatPayClient) { + return new WechatApiProvider(wechatPayClient); + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayConfiguredCondition.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayConfiguredCondition.java new file mode 100644 index 0000000..bb624a8 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayConfiguredCondition.java @@ -0,0 +1,64 @@ +/* + * + * Copyright 2019-2021 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat; + +import org.springframework.boot.autoconfigure.condition.ConditionMessage; +import org.springframework.boot.autoconfigure.condition.ConditionOutcome; +import org.springframework.boot.autoconfigure.condition.SpringBootCondition; +import org.springframework.boot.context.properties.bind.Bindable; +import org.springframework.boot.context.properties.bind.Binder; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.env.Environment; +import org.springframework.core.type.AnnotatedTypeMetadata; + +import java.util.Collections; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * The type Wechat pay configured condition. + * + * @author felord.cn + * @since 1.0.3.RELEASE + */ +public class WechatPayConfiguredCondition extends SpringBootCondition { + + /** + * The constant STRING_WECHAT_V3_MAP. + */ + private static final Bindable> STRING_WECHAT_V3_MAP = Bindable + .mapOf(String.class, WechatPayProperties.V3.class); + + @Override + public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { + ConditionMessage.Builder message = ConditionMessage.forCondition("Wechat Pay V3 Configured Condition"); + Map v3 = getV3(context.getEnvironment()); + if (!v3.isEmpty()) { + return ConditionOutcome.match(message.foundExactly("registered wechat mchIds " + v3.values().stream() + .map(WechatPayProperties.V3::getMchId).collect(Collectors.joining(", ")))); + } + return ConditionOutcome.noMatch(message.notAvailable("registered wechat pay configs")); + } + + private Map getV3(Environment environment) { + return Binder.get(environment).bind("wechat.pay.v3", STRING_WECHAT_V3_MAP) + .orElse(Collections.emptyMap()); + } + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayProperties.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayProperties.java new file mode 100644 index 0000000..9c1022c --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayProperties.java @@ -0,0 +1,78 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.HashMap; +import java.util.Map; + +/** + * The type Wechat pay properties. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +@ConfigurationProperties("wechat.pay") +public class WechatPayProperties { + /** + * wechat pay V3 properties + */ + private Map v3 = new HashMap<>(); + + /** + * wechat pay v3 properties. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ + @Data + public static class V3 { + /** + * app id for wechat pay is required + */ + private String appId; + /** + * app secret for wechat pay is required + */ + private String appSecret; + /** + * app V3 secret is required by wechat pay V3 + */ + private String appV3Secret; + /** + * mchId for wechat pay is required + */ + private String mchId; + /** + * partnerKey for wechat pay is optional + */ + private String partnerKey; + /** + * wechat pay certificate Path + */ + private String certPath; + /** + * your pay server domain + */ + private String domain; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayResponseErrorHandler.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayResponseErrorHandler.java new file mode 100644 index 0000000..6290c5b --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/WechatPayResponseErrorHandler.java @@ -0,0 +1,36 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat; + +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.web.client.DefaultResponseErrorHandler; + +import java.io.IOException; + +/** + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public class WechatPayResponseErrorHandler extends DefaultResponseErrorHandler { + + @Override + public boolean hasError(ClientHttpResponse response) throws IOException { + return false; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/BankCode.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/BankCode.java new file mode 100644 index 0000000..176a892 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/BankCode.java @@ -0,0 +1,332 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.enumeration; + + +/** + * 银行代码. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public enum BankCode { + /** + * 工商银行 + * + * @since 1.0.0.RELEASE + */ + BK_1002("1002", "工商银行"), + /** + * 农业银行 + * + * @since 1.0.0.RELEASE + */ + BK_1005("1005", "农业银行"), + /** + * 建设银行 + * + * @since 1.0.0.RELEASE + */ + BK_1003("1003", "建设银行"), + /** + * 中国银行 + * + * @since 1.0.0.RELEASE + */ + BK_1026("1026", "中国银行"), + /** + * 交通银行 + * + * @since 1.0.0.RELEASE + */ + BK_1020("1020", "交通银行"), + /** + * 招商银行 + * + * @since 1.0.0.RELEASE + */ + BK_1001("1001", "招商银行"), + /** + * 邮储银行 + * + * @since 1.0.0.RELEASE + */ + BK_1066("1066", "邮储银行"), + /** + * 民生银行 + * + * @since 1.0.0.RELEASE + */ + BK_1006("1006", "民生银行"), + /** + * 平安银行 + * + * @since 1.0.0.RELEASE + */ + BK_1010("1010", "平安银行"), + /** + * 中信银行 + * + * @since 1.0.0.RELEASE + */ + BK_1021("1021", "中信银行"), + /** + * 浦发银行 + * + * @since 1.0.0.RELEASE + */ + BK_1004("1004", "浦发银行"), + /** + * 兴业银行 + * + * @since 1.0.0.RELEASE + */ + BK_1009("1009", "兴业银行"), + /** + * 光大银行 + * + * @since 1.0.0.RELEASE + */ + BK_1022("1022", "光大银行"), + /** + * 广发银行 + * + * @since 1.0.0.RELEASE + */ + BK_1027("1027", "广发银行"), + /** + * 华夏银行 + * + * @since 1.0.0.RELEASE + */ + BK_1025("1025", "华夏银行"), + /** + * 宁波银行 + * + * @since 1.0.0.RELEASE + */ + BK_1056("1056", "宁波银行"), + /** + * 北京银行 + * + * @since 1.0.0.RELEASE + */ + BK_4836("4836", "北京银行"), + /** + * 上海银行 + * + * @since 1.0.0.RELEASE + */ + BK_1024("1024", "上海银行"), + /** + * 南京银行 + * + * @since 1.0.0.RELEASE + */ + BK_1054("1054", "南京银行"), + /** + * 长子县融汇村镇银行 + * + * @since 1.0.0.RELEASE + */ + BK_4755("4755", "长子县融汇村镇银行"), + /** + * 长沙银行 + * + * @since 1.0.0.RELEASE + */ + BK_4216("4216", "长沙银行"), + /** + * 浙江泰隆商业银行 + * + * @since 1.0.0.RELEASE + */ + BK_4051("4051", "浙江泰隆商业银行"), + /** + * 中原银行 + * + * @since 1.0.0.RELEASE + */ + BK_4753("4753", "中原银行"), + /** + * 企业银行(中国) + * + * @since 1.0.0.RELEASE + */ + BK_4761("4761", "企业银行(中国)"), + /** + * 顺德农商银行 + * + * @since 1.0.0.RELEASE + */ + BK_4036("4036", "顺德农商银行"), + /** + * 衡水银行 + * + * @since 1.0.0.RELEASE + */ + BK_4752("4752", "衡水银行"), + /** + * 长治银行 + * + * @since 1.0.0.RELEASE + */ + BK_4756("4756", "长治银行"), + /** + * 大同银行 + * + * @since 1.0.0.RELEASE + */ + BK_4767("4767", "大同银行"), + /** + * 河南省农村信用社 + * + * @since 1.0.0.RELEASE + */ + BK_4115("4115", "河南省农村信用社"), + /** + * 宁夏黄河农村商业银行 + * + * @since 1.0.0.RELEASE + */ + BK_4150("4150", "宁夏黄河农村商业银行"), + /** + * 山西省农村信用社 + * + * @since 1.0.0.RELEASE + */ + BK_4156("4156", "山西省农村信用社"), + /** + * 安徽省农村信用社 + * + * @since 1.0.0.RELEASE + */ + BK_4166("4166", "安徽省农村信用社"), + /** + * 甘肃省农村信用社 + * + * @since 1.0.0.RELEASE + */ + BK_4157("4157", "甘肃省农村信用社"), + /** + * 天津农村商业银行 + * + * @since 1.0.0.RELEASE + */ + BK_4153("4153", "天津农村商业银行"), + /** + * 广西壮族自治区农村信用社 + * + * @since 1.0.0.RELEASE + */ + BK_4113("4113", "广西壮族自治区农村信用社"), + /** + * 陕西省农村信用社 + * + * @since 1.0.0.RELEASE + */ + BK_4108("4108", "陕西省农村信用社"), + /** + * 深圳农村商业银行 + * + * @since 1.0.0.RELEASE + */ + BK_4076("4076", "深圳农村商业银行"), + /** + * 宁波鄞州农村商业银行 + * + * @since 1.0.0.RELEASE + */ + BK_4052("4052", "宁波鄞州农村商业银行"), + /** + * 浙江省农村信用社联合社 + * + * @since 1.0.0.RELEASE + */ + BK_4764("4764", "浙江省农村信用社联合社"), + /** + * 江苏省农村信用社联合社 + * + * @since 1.0.0.RELEASE + */ + BK_4217("4217", "江苏省农村信用社联合社"), + /** + * 江苏紫金农村商业银行股份有限公司 + * + * @since 1.0.0.RELEASE + */ + BK_4072("4072", "江苏紫金农村商业银行"), + /** + * 北京中关村银行股份有限公司 + * + * @since 1.0.0.RELEASE + */ + BK_4769("4769", "北京中关村银行"), + /** + * 星展银行(中国)有限公司 + * + * @since 1.0.0.RELEASE + */ + BK_4778("4778", "星展银行(中国)"), + /** + * 枣庄银行股份有限公司 + * + * @since 1.0.0.RELEASE + */ + BK_4766("4766", "枣庄银行"), + /** + * 海口联合农村商业银行股份有限公司 + * + * @since 1.0.0.RELEASE + */ + BK_4758("4758", "海口联合农村商业银行"), + /** + * 南洋商业银行(中国)有限公司 + * + * @since 1.0.0.RELEASE + */ + BK_4763("4763", "南洋商业银行(中国)"); + + + private final String code; + private final String bankName; + + BankCode(String code, String bankName) { + this.code = code; + this.bankName = bankName; + } + + /** + * Code string. + * + * @return the string + */ + public String code() { + return this.code; + } + + /** + * Bank name string. + * + * @return the string + */ + public String bankName() { + return this.bankName; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/ContractStatus.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/ContractStatus.java new file mode 100644 index 0000000..f3fc108 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/ContractStatus.java @@ -0,0 +1,45 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 微信先享卡的守约状态 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +public enum ContractStatus { + /** + * 约定进行中,表示用户在约定有效期内,尚未完成所有目标时,守约状态为约定进行中。 + */ + ONGOING, + + /** + * 约定到期核对中,在约定有效期结束后的一段时间,商户可对卡记录进行校对并做必要调整,守约状态为约定到期核对调整中。 + */ + SETTLING, + /** + * 已完成约定,表示用户在约定有效期内,已完成所有目标,守约状态为已完成约定。 + */ + FINISHED, + + /** + * 未完成约定,表示用户在约定有效期到期后,最终未完成所有约定目标,或用户提前退出约定,守约状态为未完成约定。 + */ + UNFINISHED +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CountType.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CountType.java new file mode 100644 index 0000000..216ca86 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CountType.java @@ -0,0 +1,35 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 优惠数量的类型标识 + * + * @author felord.cn + * @since 1.0.3.RELEASE + */ +public enum CountType { + /** + * 不限数量 + */ + COUNT_UNLIMITED, + /** + * 有限数量 + */ + COUNT_LIMIT +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CouponBgColor.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CouponBgColor.java new file mode 100644 index 0000000..1cb4b7b --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CouponBgColor.java @@ -0,0 +1,92 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 优惠券背景色 + *

+ * 当订单守约状态为{@link ContractStatus#UNFINISHED},返回此字段 + * + * @since 1.0.3.RELEASE + */ +public enum UnfinishedReason { + /** + * 到期未完成约 + */ + DUE_TO_QUIT, + /** + * 提前退出约定 + */ + EARLY_QUIT +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WeChatServer.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WeChatServer.java new file mode 100644 index 0000000..5430865 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WeChatServer.java @@ -0,0 +1,92 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.enumeration; + + +/** + * The enum We chat server domain. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public enum WeChatServer { + /** + * 中国 + * + * @since 1.0.0.RELEASE + */ + CHINA("https://api.mch.weixin.qq.com"), + /** + * 中国国内(备用域名) + * + * @since 1.0.0.RELEASE + */ + CHINA2("https://api2.mch.weixin.qq.com"), + /** + * 香港 + * + * @since 1.0.0.RELEASE + */ + HK("https://apihk.mch.weixin.qq.com"), + /** + * 美国 + * + * @since 1.0.0.RELEASE + */ + US("https://apius.mch.weixin.qq.com"), + /** + * 获取公钥 + * + * @since 1.0.0.RELEASE + */ + FRAUD("https://fraud.mch.weixin.qq.com"), + /** + * 活动 + * + * @since 1.0.0.RELEASE + */ + ACTION("https://action.weixin.qq.com"); + + + /** + * 域名 + * + * @since 1.0.0.RELEASE + */ + private final String domain; + + WeChatServer(String domain) { + this.domain = domain; + } + + /** + * Gets type. + * + * @return the type + * @since 1.0.0.RELEASE + */ + public String domain() { + return domain; + } + + @Override + public String toString() { + return domain; + } +} 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 new file mode 100644 index 0000000..59bb9d1 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WechatPayV3Type.java @@ -0,0 +1,404 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.enumeration; + +import org.springframework.http.HttpMethod; + +/** + * 微信支付类型. + * + * @author felord.cn + * @see cn.felord.payment.wechat.v3.WechatPayClient + * @since 1.0.0.RELEASE + */ +public enum WechatPayV3Type { + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + /** + * 获取证书. + * + * @since 1.0.0.RELEASE + */ + CERT(HttpMethod.GET, "%s/v3/certificates"), + + /** + * 文件下载 + * + * @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"), + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + /** + * 微信公众号支付或者小程序支付. + * + * @since 1.0.0.RELEASE + */ + JSAPI(HttpMethod.POST, "%s/v3/pay/transactions/jsapi"), + + /** + * 微信扫码支付. + * + * @since 1.0.0.RELEASE + */ + NATIVE(HttpMethod.POST, "%s/v3/pay/transactions/native"), + + /** + * 微信APP支付. + * + * @since 1.0.0.RELEASE + */ + APP(HttpMethod.POST, "%s/v3/pay/transactions/app"), + + /** + * H5支付. + * + * @since 1.0.0.RELEASE + */ + MWEB(HttpMethod.POST, "%s/v3/pay/transactions/h5"), + /** + * 关闭订单. + * + * @since 1.0.0.RELEASE + */ + CLOSE(HttpMethod.POST, "%s/v3/pay/transactions/out-trade-no/{out_trade_no}/close"), + /** + * 微信支付订单号查询. + * + * @since 1.0.0.RELEASE + */ + TRANSACTION_TRANSACTION_ID(HttpMethod.GET, "%s/v3/pay/transactions/id/{transaction_id}"), + /** + * 商户订单号查询. + * + * @since 1.0.0.RELEASE + */ + TRANSACTION_OUT_TRADE_NO(HttpMethod.GET, "%s/v3/pay/transactions/out-trade-no/{out_trade_no}"), + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + /** + * 合单下单-APP支付API. + * + * @since 1.0.0.RELEASE + */ + COMBINE_APP(HttpMethod.POST, "%s/v3/combine-transactions/app"), + + /** + * 合单下单-微信公众号支付或者小程序支付. + * + * @since 1.0.0.RELEASE + */ + COMBINE_JSAPI(HttpMethod.POST, "%s/v3/combine-transactions/jsapi"), + /** + * 合单下单-H5支付API. + * + * @since 1.0.0.RELEASE + */ + COMBINE_MWEB(HttpMethod.POST, "%s/v3/combine-transactions/h5"), + /** + * 合单下单-Native支付API. + * + * @since 1.0.0.RELEASE + */ + COMBINE_NATIVE(HttpMethod.POST, "%s/v3/combine-transactions/native"), + /** + * 合单查询订单API. + * + * @since 1.0.0.RELEASE + */ + COMBINE_TRANSACTION_OUT_TRADE_NO(HttpMethod.GET, "%s/v3/combine-transactions/out-trade-no/{combine_out_trade_no}"), + + /** + * 合单关闭订单API. + * + * @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.2.RELEASE + */ + PAY_SCORE_PERMISSIONS(HttpMethod.POST, "%s/v3/payscore/permissions"), + /** + * 创单结单合并API. + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_DIRECT_COMPLETE(HttpMethod.POST, "%s/payscore/serviceorder/direct-complete"), + /** + * 查询与用户授权记录(授权协议号)API. + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_PERMISSIONS_AUTH_CODE(HttpMethod.GET, "%s/v3/payscore/permissions/authorization-code/{authorization_code}"), + /** + * 解除用户授权关系(授权协议号)API. + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_TERMINATE_PERMISSIONS_AUTH_CODE(HttpMethod.POST, "%s/v3/payscore/permissions/authorization-code/{authorization_code}/terminate"), + /** + * 查询与用户授权记录(openid)API. + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_PERMISSIONS_OPENID(HttpMethod.GET, "%s/v3/payscore/permissions/openid/{openid}"), + /** + * 解除用户授权关系(openid)API. + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_TERMINATE_PERMISSIONS_OPENID(HttpMethod.POST, "%s/v3/payscore/permissions/openid/{openid}/terminate"), + /** + * 查询用户授权状态API. + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_USER_SERVICE_STATE(HttpMethod.GET, "%s/v3/payscore/user-service-state?service_id={service_id}&appid={appid}&openid={openid}"), + /** + * 创建支付分订单API + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_CREATE_USER_SERVICE_ORDER(HttpMethod.POST, "%s/v3/payscore/serviceorder"), + /** + * 查询支付分订单API + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_QUERY_USER_SERVICE_ORDER(HttpMethod.GET, "%s/v3/payscore/serviceorder"), + /** + * 取消支付分订单API + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_CANCEL_USER_SERVICE_ORDER(HttpMethod.POST, "%s/v3/payscore/serviceorder/{out_order_no}/cancel"), + /** + * 修改订单金额API + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_MODIFY_USER_SERVICE_ORDER(HttpMethod.POST, "%s/v3/payscore/serviceorder/{out_order_no}/modify"), + /** + * 完结支付分订单API + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_COMPLETE_USER_SERVICE_ORDER(HttpMethod.POST, "%s/v3/payscore/serviceorder/{out_order_no}/complete"), + /** + * 商户发起催收扣款API + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_PAY_USER_SERVICE_ORDER(HttpMethod.POST, "%s/v3/payscore/serviceorder/{out_order_no}/pay"), + /** + * 同步服务订单信息API + * + * @since 1.0.2.RELEASE + */ + PAY_SCORE_SYNC_USER_SERVICE_ORDER(HttpMethod.POST, "%s/v3/payscore/serviceorder/{out_order_no}/sync"), + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + /** + * 微信先享卡预受理领卡请求API. + * + * @since 1.0.2.RELEASE + */ + DISCOUNT_CARD_PRE_REQUEST(HttpMethod.POST, "%s/v3/discount-card/cards"), + /** + * 微信先享卡增加用户记录API. + * + * @since 1.0.2.RELEASE + */ + DISCOUNT_CARD_ADD_USER_RECORDS(HttpMethod.POST, "%s/v3/discount-card/cards/{out_card_code}/add-user-records"), + /** + * 微信先享卡查询先享卡订单API. + * + * @since 1.0.2.RELEASE + */ + DISCOUNT_CARD_INFO(HttpMethod.POST, "%s/v3/discount-card/cards/{out_card_code}"), + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + /** + * 创建代金券批次API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_STOCKS_COUPON_STOCKS(HttpMethod.POST, "%s/v3/marketing/favor/coupon-stocks"), + /** + * 激活代金券批次API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_STOCKS_START(HttpMethod.POST, "%s/v3/marketing/favor/stocks/{stock_id}/start"), + /** + * 暂停代金券批次API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_STOCKS_PAUSE(HttpMethod.POST, "%s/v3/marketing/favor/stocks/{stock_id}/pause"), + + /** + * 发放代金券API、根据商户号查用户的券. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_USERS_COUPONS(HttpMethod.POST, "%s/v3/marketing/favor/users/{openid}/coupons"), + /** + * 重启代金券API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_STOCKS_RESTART(HttpMethod.POST, "%s/v3/marketing/favor/stocks/{stock_id}/restart"), + /** + * 条件查询批次列表API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_STOCKS(HttpMethod.GET, "%s/v3/marketing/favor/stocks"), + /** + * 查询批次详情API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_STOCKS_DETAIL(HttpMethod.GET, "%s/v3/marketing/favor/stocks/{stock_id}"), + /** + * 查询代金券详情API + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_USERS_COUPONS_DETAIL(HttpMethod.GET, "%s/v3/marketing/favor/users/{openid}/coupons/{coupon_id}"), + /** + * 查询代金券可用商户API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_STOCKS_MERCHANTS(HttpMethod.GET, "%s/v3/marketing/favor/stocks/{stock_id}/merchants"), + /** + * 查询代金券可用单品API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_STOCKS_ITEMS(HttpMethod.GET, "%s/v3/marketing/favor/stocks/{stock_id}/items"), + /** + * 下载批次核销明细API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_STOCKS_USE_FLOW(HttpMethod.GET, "%s/v3/marketing/favor/stocks/{stock_id}/use-flow"), + /** + * 下载批次退款明细API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_STOCKS_REFUND_FLOW(HttpMethod.GET, "%s/v3/marketing/favor/stocks/{stock_id}/refund-flow"), + /** + * 营销图片上传API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_IMAGE_UPLOAD(HttpMethod.POST, "%s/v3/marketing/favor/media/image-upload"), + /** + * 设置核销回调通知API. + * + * @since 1.0.0.RELEASE + */ + MARKETING_FAVOR_CALLBACKS(HttpMethod.POST, "%s/v3/marketing/favor/callbacks"); + + + /** + * The Pattern. + * + * @since 1.0.0.RELEASE + */ + private final String pattern; + /** + * The Method. + * + * @since 1.0.0.RELEASE + */ + private final HttpMethod method; + + /** + * Instantiates a new Wechat pay v 3 type. + * + * @param method the method + * @param pattern the pattern + * @since 1.0.0.RELEASE + */ + WechatPayV3Type(HttpMethod method, String pattern) { + this.method = method; + this.pattern = pattern; + } + + /** + * Method string. + * + * @return the string + * @since 1.0.0.RELEASE + */ + public HttpMethod method() { + return this.method; + } + + /** + * Pattern string. + * + * @return the string + * @since 1.0.0.RELEASE + */ + public String pattern() { + return this.pattern; + } + + + /** + * 默认支付URI. + * + * @param weChatServer the we chat server + * @return the string + * @since 1.0.0.RELEASE + */ + public String uri(WeChatServer weChatServer) { + return String.format(this.pattern, weChatServer.domain()); + } + +} 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 new file mode 100644 index 0000000..ff27c9b --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/AbstractApi.java @@ -0,0 +1,266 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + +import cn.felord.payment.PayException; +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; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +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. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public abstract class AbstractApi { + /** + * The Mapper. + */ + private final ObjectMapper mapper; + /** + * The Wechat pay client. + */ + private final WechatPayClient wechatPayClient; + /** + * The Tenant id. + */ + private final String tenantId; + + + /** + * Instantiates a new Abstract api. + * + * @param wechatPayClient the wechat pay client + * @param tenantId the tenant id + */ + public AbstractApi(WechatPayClient wechatPayClient, String tenantId) { + this.mapper = new ObjectMapper(); + applyObjectMapper(this.mapper); + this.wechatPayClient = wechatPayClient; + Assert.hasText(tenantId, "tenantId is required"); + if (!container().getTenantIds().contains(tenantId)) { + throw new PayException("tenantId is not in wechatMetaContainer"); + } + this.tenantId = tenantId; + } + + /** + * Apply object mapper. + * + * @param mapper the mapper + */ + private void applyObjectMapper(ObjectMapper mapper) { + mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + SimpleModule module = new JavaTimeModule(); + mapper.registerModule(module); + } + + + /** + * Gets mapper. + * + * @return the mapper + */ + public ObjectMapper getMapper() { + return mapper; + } + + /** + * Client wechat pay client. + * + * @return the wechat pay client + */ + public WechatPayClient client() { + return wechatPayClient; + } + + /** + * Tenant id string. + * + * @return the string + */ + public String tenantId() { + return tenantId; + } + + /** + * Container wechat meta container. + * + * @return the wechat meta container + */ + public WechatMetaContainer container() { + return wechatPayClient.signatureProvider().wechatMetaContainer(); + } + + /** + * Wechat meta bean wechat meta bean. + * + * @return the wechat meta bean + */ + public WechatMetaBean wechatMetaBean() { + return container().getWechatMeta(tenantId); + } + + /** + * 构建Post请求对象. + * + * @param uri the uri + * @param params the params + * @return the request entity + */ + protected RequestEntity Post(URI uri, Object params) { + try { + return RequestEntity.post(uri).header("Pay-TenantId", tenantId) + .body(mapper.writeValueAsString(params)); + } catch (JsonProcessingException e) { + throw new PayException("wechat app pay json failed"); + } + } + + /** + * 构建Get请求对象. + * + * @param uri the uri + * @return the request entity + */ + protected RequestEntity Get(URI uri) { + return RequestEntity.get(uri).header("Pay-TenantId", tenantId) + .build(); + } + + + /** + * 对账单下载。 + * + * @param link the link + * @return 对账单内容,有可能为空字符 “” + */ + protected String billDownload(String link) { + return this.client().withType(WechatPayV3Type.FILE_DOWNLOAD, link) + .function((type, downloadUrl) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(downloadUrl) + .build() + .toUri(); + return Get(uri); + }) + .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/ExtensionFormHttpMessageConverter.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/ExtensionFormHttpMessageConverter.java new file mode 100644 index 0000000..930d435 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/ExtensionFormHttpMessageConverter.java @@ -0,0 +1,446 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + +import org.springframework.http.*; +import org.springframework.http.converter.*; +import org.springframework.http.converter.json.GsonHttpMessageConverter; +import org.springframework.http.converter.json.JsonbHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.smile.MappingJackson2SmileHttpMessageConverter; +import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; +import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter; +import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter; +import org.springframework.http.converter.xml.SourceHttpMessageConverter; +import org.springframework.lang.Nullable; +import org.springframework.util.Assert; +import org.springframework.util.ClassUtils; +import org.springframework.util.MultiValueMap; +import org.springframework.util.StreamUtils; + +import java.io.IOException; +import java.io.OutputStream; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * 用于微信支付处理上传的自定义消息转换器. + * + * @author felord.cn + * @see AllEncompassingFormHttpMessageConverter + * @since 1.0.0.RELEASE + */ +final class ExtensionFormHttpMessageConverter extends FormHttpMessageConverter { + /** + * The constant BOUNDARY. + */ + private static final String BOUNDARY = "boundary"; + + + /** + * The constant jaxb2Present. + */ + private static final boolean jaxb2Present; + + /** + * The constant jackson2Present. + */ + private static final boolean jackson2Present; + + /** + * The constant jackson2XmlPresent. + */ + private static final boolean jackson2XmlPresent; + + /** + * The constant jackson2SmilePresent. + */ + private static final boolean jackson2SmilePresent; + + /** + * The constant gsonPresent. + */ + private static final boolean gsonPresent; + + /** + * The constant jsonbPresent. + */ + private static final boolean jsonbPresent; + + /** + * The Part converters. + */ + private final List> partConverters = new ArrayList<>(); + + static { + ClassLoader classLoader = AllEncompassingFormHttpMessageConverter.class.getClassLoader(); + jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader); + jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) && + ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader); + jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader); + jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader); + gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader); + jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader); + } + + /** + * Instantiates a new Upload http message converter. + */ + public ExtensionFormHttpMessageConverter() { + StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); + stringHttpMessageConverter.setWriteAcceptCharset(false); // see SPR-7316 + + this.partConverters.add(new ByteArrayHttpMessageConverter()); + this.partConverters.add(stringHttpMessageConverter); + this.partConverters.add(new ResourceHttpMessageConverter()); + try { + this.partConverters.add(new SourceHttpMessageConverter<>()); + } catch (Error err) { + // Ignore when no TransformerFactory implementation is available + } + + if (jaxb2Present && !jackson2XmlPresent) { + this.partConverters.add(new Jaxb2RootElementHttpMessageConverter()); + } + + if (jackson2Present) { + this.partConverters.add(new MappingJackson2HttpMessageConverter()); + } else if (gsonPresent) { + this.partConverters.add(new GsonHttpMessageConverter()); + } else if (jsonbPresent) { + this.partConverters.add(new JsonbHttpMessageConverter()); + } + + if (jackson2XmlPresent) { + this.partConverters.add(new MappingJackson2XmlHttpMessageConverter()); + } + + if (jackson2SmilePresent) { + this.partConverters.add(new MappingJackson2SmileHttpMessageConverter()); + } + this.setPartConverters(this.partConverters); + applyDefaultCharset(); + } + + + /** + * Apply the configured charset as a default to registered part converters. + */ + private void applyDefaultCharset() { + for (HttpMessageConverter candidate : this.partConverters) { + if (candidate instanceof AbstractHttpMessageConverter) { + AbstractHttpMessageConverter converter = (AbstractHttpMessageConverter) candidate; + // Only override default charset if the converter operates with a charset to begin with... + if (converter.getDefaultCharset() != null) { + converter.setDefaultCharset(DEFAULT_CHARSET); + } + } + } + } + + @Override + @SuppressWarnings("unchecked") + public void write(MultiValueMap map, @Nullable MediaType contentType, HttpOutputMessage outputMessage) + throws IOException, HttpMessageNotWritableException { + + if (!isMultipart(map, contentType)) { + writeForm((MultiValueMap) map, contentType, outputMessage); + } else { + writeMultipart((MultiValueMap) map, outputMessage); + } + } + + /** + * Is multipart boolean. + * + * @param map the map + * @param contentType the content type + * @return the boolean + */ + private boolean isMultipart(MultiValueMap map, @Nullable MediaType contentType) { + if (contentType != null) { + return MediaType.MULTIPART_FORM_DATA.includes(contentType); + } + for (List values : map.values()) { + for (Object value : values) { + if (value != null && !(value instanceof String)) { + return true; + } + } + } + return false; + } + + /** + * Write form. + * + * @param formData the form data + * @param contentType the content type + * @param outputMessage the output message + * @throws IOException the io exception + */ + private void writeForm(MultiValueMap formData, @Nullable MediaType contentType, + HttpOutputMessage outputMessage) throws IOException { + + contentType = getMediaType(contentType); + outputMessage.getHeaders().setContentType(contentType); + + Charset charset = contentType.getCharset(); + Assert.notNull(charset, "No charset"); // should never occur + + final byte[] bytes = serializeForm(formData, charset).getBytes(charset); + outputMessage.getHeaders().setContentLength(bytes.length); + + if (outputMessage instanceof StreamingHttpOutputMessage) { + StreamingHttpOutputMessage streamingOutputMessage = (StreamingHttpOutputMessage) outputMessage; + streamingOutputMessage.setBody(outputStream -> StreamUtils.copy(bytes, outputStream)); + } else { + StreamUtils.copy(bytes, outputMessage.getBody()); + } + } + + /** + * Gets media type. + * + * @param mediaType the media type + * @return the media type + */ + private MediaType getMediaType(@Nullable MediaType mediaType) { + if (mediaType == null) { + return new MediaType(MediaType.APPLICATION_FORM_URLENCODED, DEFAULT_CHARSET); + } else if (mediaType.getCharset() == null) { + return new MediaType(mediaType, DEFAULT_CHARSET); + } else { + return mediaType; + } + } + + /** + * Write multipart. + * + * @param parts the parts + * @param outputMessage the output message + * @throws IOException the io exception + */ + private void writeMultipart(final MultiValueMap parts, HttpOutputMessage outputMessage) + throws IOException { + + + Map parameters = new LinkedHashMap<>(1); + + parameters.put(BOUNDARY, BOUNDARY); + + MediaType contentType = new MediaType(MediaType.MULTIPART_FORM_DATA, parameters); + HttpHeaders headers = outputMessage.getHeaders(); + headers.setContentType(contentType); + + byte[] boundaryBytes = BOUNDARY.getBytes(); + if (outputMessage instanceof StreamingHttpOutputMessage) { + StreamingHttpOutputMessage streamingOutputMessage = (StreamingHttpOutputMessage) outputMessage; + streamingOutputMessage.setBody(outputStream -> { + writeParts(outputStream, parts, boundaryBytes); + writeEnd(outputStream, boundaryBytes); + }); + } else { + writeParts(outputMessage.getBody(), parts, boundaryBytes); + writeEnd(outputMessage.getBody(), boundaryBytes); + } + } + + /** + * Write parts. + * + * @param os the os + * @param parts the parts + * @param boundary the boundary + * @throws IOException the io exception + */ + private void writeParts(OutputStream os, MultiValueMap parts, byte[] boundary) throws IOException { + for (Map.Entry> entry : parts.entrySet()) { + String name = entry.getKey(); + for (Object part : entry.getValue()) { + if (part != null) { + writeBoundary(os, boundary); + writePart(name, getHttpEntity(part), os); + writeNewLine(os); + } + } + } + } + + /** + * Write part. + * + * @param name the name + * @param partEntity the part entity + * @param os the os + * @throws IOException the io exception + */ + @SuppressWarnings("unchecked") + private void writePart(String name, HttpEntity partEntity, OutputStream os) throws IOException { + Object partBody = partEntity.getBody(); + if (partBody == null) { + throw new IllegalStateException("Empty body for part '" + name + "': " + partEntity); + } + Class partType = partBody.getClass(); + HttpHeaders partHeaders = partEntity.getHeaders(); + MediaType partContentType = partHeaders.getContentType(); + for (HttpMessageConverter messageConverter : this.partConverters) { + if (messageConverter.canWrite(partType, partContentType)) { + + HttpOutputMessage multipartMessage = new MultipartHttpOutputMessage(os, DEFAULT_CHARSET); + multipartMessage.getHeaders().setContentDispositionFormData(name, getFilename(partBody)); + if (!partHeaders.isEmpty()) { + multipartMessage.getHeaders().putAll(partHeaders); + } + ((HttpMessageConverter) messageConverter).write(partBody, partContentType, multipartMessage); + return; + } + } + throw new HttpMessageNotWritableException("Could not write request: no suitable HttpMessageConverter " + + "found for request type [" + partType.getName() + "]"); + } + + + /** + * Write boundary. + * + * @param os the os + * @param boundary the boundary + * @throws IOException the io exception + */ + private void writeBoundary(OutputStream os, byte[] boundary) throws IOException { + os.write('-'); + os.write('-'); + os.write(boundary); + writeNewLine(os); + } + + /** + * Write end. + * + * @param os the os + * @param boundary the boundary + * @throws IOException the io exception + */ + private static void writeEnd(OutputStream os, byte[] boundary) throws IOException { + os.write('-'); + os.write('-'); + os.write(boundary); + os.write('-'); + os.write('-'); + writeNewLine(os); + } + + /** + * Write new line. + * + * @param os the os + * @throws IOException the io exception + */ + private static void writeNewLine(OutputStream os) throws IOException { + os.write('\r'); + os.write('\n'); + } + + /** + * The type Multipart http output message. + */ + private static class MultipartHttpOutputMessage implements HttpOutputMessage { + + /** + * The Output stream. + */ + private final OutputStream outputStream; + + /** + * The Charset. + */ + private final Charset charset; + + /** + * The Headers. + */ + private final HttpHeaders headers = new HttpHeaders(); + + /** + * The Headers written. + */ + private boolean headersWritten = false; + + /** + * Instantiates a new Multipart http output message. + * + * @param outputStream the output stream + * @param charset the charset + */ + public MultipartHttpOutputMessage(OutputStream outputStream, Charset charset) { + this.outputStream = outputStream; + this.charset = charset; + } + + @Override + public HttpHeaders getHeaders() { + return (this.headersWritten ? HttpHeaders.readOnlyHttpHeaders(this.headers) : this.headers); + } + + @Override + public OutputStream getBody() throws IOException { + writeHeaders(); + return this.outputStream; + } + + /** + * Write headers. + * + * @throws IOException the io exception + */ + private void writeHeaders() throws IOException { + if (!this.headersWritten) { + for (Map.Entry> entry : this.headers.entrySet()) { + byte[] headerName = getBytes(entry.getKey()); + for (String headerValueString : entry.getValue()) { + byte[] headerValue = getBytes(headerValueString); + this.outputStream.write(headerName); + this.outputStream.write(':'); + this.outputStream.write(' '); + this.outputStream.write(headerValue); + writeNewLine(this.outputStream); + } + } + writeNewLine(this.outputStream); + this.headersWritten = true; + } + } + + /** + * Get bytes byte [ ]. + * + * @param name the name + * @return the byte [ ] + */ + private byte[] getBytes(String name) { + return name.getBytes(this.charset); + } + } + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/KeyPairFactory.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/KeyPairFactory.java new file mode 100644 index 0000000..839245f --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/KeyPairFactory.java @@ -0,0 +1,76 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + + +import cn.felord.payment.PayException; +import org.springframework.core.io.ClassPathResource; + +import java.security.KeyPair; +import java.security.KeyStore; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.cert.X509Certificate; + +/** + * 证书工具 + * + * @author felord.cn + * @since 1.0.0.RELEASE + **/ +public class KeyPairFactory { + + private KeyStore store; + + private final Object lock = new Object(); + + /** + * 获取公私钥. + * + * @param keyPath the key path + * @param keyAlias the key alias + * @param keyPass password + * @return the key pair + */ + public WechatMetaBean createPKCS12(String keyPath, String keyAlias, String keyPass) { + ClassPathResource resource = new ClassPathResource(keyPath); + char[] pem = keyPass.toCharArray(); + try { + synchronized (lock) { + if (store == null) { + synchronized (lock) { + store = KeyStore.getInstance("PKCS12"); + store.load(resource.getInputStream(), pem); + } + } + } + X509Certificate certificate = (X509Certificate) store.getCertificate(keyAlias); + certificate.checkValidity(); + String serialNumber = certificate.getSerialNumber().toString(16).toUpperCase(); + PublicKey publicKey = certificate.getPublicKey(); + PrivateKey storeKey = (PrivateKey) store.getKey(keyAlias, pem); + WechatMetaBean wechatMetaBean = new WechatMetaBean(); + wechatMetaBean.setKeyPair(new KeyPair(publicKey, storeKey)); + wechatMetaBean.setSerialNumber(serialNumber); + return wechatMetaBean; + } catch (Exception e) { + throw new PayException("Cannot load keys from store: " + resource, e); + } + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java new file mode 100644 index 0000000..7611470 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java @@ -0,0 +1,271 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + + +import cn.felord.payment.wechat.enumeration.WeChatServer; +import cn.felord.payment.wechat.enumeration.WechatPayV3Type; +import cn.felord.payment.wechat.v3.model.ResponseSignVerifyParams; +import cn.felord.payment.PayException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import lombok.SneakyThrows; +import org.springframework.http.*; +import org.springframework.util.AlternativeJdkIdGenerator; +import org.springframework.util.Base64Utils; +import org.springframework.util.IdGenerator; +import org.springframework.web.client.RestOperations; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponents; +import org.springframework.web.util.UriComponentsBuilder; + +import javax.crypto.Cipher; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.util.Arrays; +import java.util.Collections; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +/** + * 签名 加签 验签 + *

+ * 我方请求微信服务器时,需要根据我方的API证书对参数进行加签;微信服务器会根据我方签名验签以确定请求来自我方服务器; + *

+ * 然后微信服务器响应我方请求并在响应报文中使用【微信平台证书】加签 我方需要根据规则验签是否响应来自微信支付服务器 + *

+ * 其中【微信平台证书】定期会进行更新,不受我方管控,我方需要适当的时候获取最新的证书列表。 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public class SignatureProvider { + + /** + * The constant ID_GENERATOR. + */ + private static final IdGenerator ID_GENERATOR = new AlternativeJdkIdGenerator(); + /** + * The constant SCHEMA. + */ + private static final String SCHEMA = "WECHATPAY2-SHA256-RSA2048 "; + /** + * The constant TOKEN_PATTERN. + */ + public static final String TOKEN_PATTERN = "mchid=\"%s\",nonce_str=\"%s\",timestamp=\"%d\",serial_no=\"%s\",signature=\"%s\""; + /** + * 微信平台证书容器 key = 序列号 value = 证书对象 + */ + private static final Map CERTIFICATE_MAP = new ConcurrentHashMap<>(); + /** + * The Rest operations. + */ + private final RestOperations restOperations = new RestTemplate(); + /** + * The Wechat meta container. + */ + private final WechatMetaContainer wechatMetaContainer; + + /** + * Instantiates a new Signature provider. + * + * @param wechatMetaContainer the wechat meta container + */ + public SignatureProvider(WechatMetaContainer wechatMetaContainer) { + this.wechatMetaContainer = wechatMetaContainer; + wechatMetaContainer.getTenantIds().forEach(this::refreshCertificate); + } + + + /** + * 我方请求前用 SHA256withRSA 加签,使用API证书. + * + * @param tenantId the properties key + * @param method the method + * @param canonicalUrl the canonical url + * @param body the body + * @return the string + */ + @SneakyThrows + public String requestSign(String tenantId, String method, String canonicalUrl, String body) { + Signature signer = Signature.getInstance("SHA256withRSA"); + WechatMetaBean wechatMetaBean = wechatMetaContainer.getWechatMeta(tenantId); + signer.initSign(wechatMetaBean.getKeyPair().getPrivate()); + + long timestamp = System.currentTimeMillis() / 1000; + String nonceStr = ID_GENERATOR.generateId() + .toString() + .replaceAll("-", ""); + final String signatureStr = createSign(method, canonicalUrl, String.valueOf(timestamp), nonceStr, body); + signer.update(signatureStr.getBytes(StandardCharsets.UTF_8)); + String encode = Base64Utils.encodeToString(signer.sign()); + + // 序列号 + String serialNo = wechatMetaBean.getSerialNumber(); + // 生成token + String token = String.format(TOKEN_PATTERN, + wechatMetaBean.getV3().getMchId(), + nonceStr, timestamp, serialNo, encode); + return SCHEMA.concat(token); + } + + /** + * 我方对响应验签,和应答签名做比较,使用微信平台证书. + * + * @param params the params + * @return the boolean + */ + @SneakyThrows + public boolean responseSignVerify(ResponseSignVerifyParams params) { + + String wechatpaySerial = params.getWechatpaySerial(); + if (CERTIFICATE_MAP.isEmpty() || !CERTIFICATE_MAP.containsKey(wechatpaySerial)) { + wechatMetaContainer.getTenantIds().forEach(this::refreshCertificate); + } + Certificate certificate = CERTIFICATE_MAP.get(wechatpaySerial); + + final String signatureStr = createSign(params.getWechatpayTimestamp(), params.getWechatpayNonce(), params.getBody()); + Signature signer = Signature.getInstance("SHA256withRSA"); + signer.initVerify(certificate); + signer.update(signatureStr.getBytes(StandardCharsets.UTF_8)); + + return signer.verify(Base64Utils.decodeFromString(params.getWechatpaySignature())); + } + + + /** + * 当我方服务器不存在平台证书或者证书同当前响应报文中的证书序列号不一致时应当刷新 调用/v3/certificates + * + * @param tenantId tenantId + */ + @SneakyThrows + private synchronized void refreshCertificate(String tenantId) { + String url = WechatPayV3Type.CERT.uri(WeChatServer.CHINA); + + UriComponents uri = UriComponentsBuilder.fromHttpUrl(url).build(); + + String canonicalUrl = uri.getPath(); + String encodedQuery = uri.getQuery(); + + if (encodedQuery != null) { + canonicalUrl += "?" + encodedQuery; + } + // 签名 + HttpMethod httpMethod = WechatPayV3Type.CERT.method(); + String authorization = requestSign(tenantId, httpMethod.name(), canonicalUrl, ""); + + HttpHeaders headers = new HttpHeaders(); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.add("Authorization", authorization); + headers.add("User-Agent", "X-Pay-Service"); + RequestEntity requestEntity = new RequestEntity<>(headers, httpMethod, uri.toUri()); + ResponseEntity responseEntity = restOperations.exchange(requestEntity, ObjectNode.class); + ObjectNode bodyObjectNode = responseEntity.getBody(); + + if (Objects.isNull(bodyObjectNode)) { + throw new PayException("cant obtain the response body"); + } + ArrayNode certificates = bodyObjectNode.withArray("data"); + if (certificates.isArray() && certificates.size() > 0) { + CERTIFICATE_MAP.clear(); + final CertificateFactory certificateFactory = CertificateFactory.getInstance("X509"); + certificates.forEach(objectNode -> { + JsonNode encryptCertificate = objectNode.get("encrypt_certificate"); + String associatedData = encryptCertificate.get("associated_data").asText(); + String nonce = encryptCertificate.get("nonce").asText(); + String ciphertext = encryptCertificate.get("ciphertext").asText(); + String publicKey = decryptResponseBody(tenantId, associatedData, nonce, ciphertext); + + ByteArrayInputStream inputStream = new ByteArrayInputStream(publicKey.getBytes(StandardCharsets.UTF_8)); + + try { + Certificate certificate = certificateFactory.generateCertificate(inputStream); + String responseSerialNo = objectNode.get("serial_no").asText(); + CERTIFICATE_MAP.put(responseSerialNo, certificate); + } catch (CertificateException e) { + throw new PayException("An error occurred while generating the wechat v3 certificate, reason : " + e.getMessage()); + } + }); + } + } + + /** + * 解密响应体. + * + * @param tenantId the properties key + * @param associatedData the associated data + * @param nonce the nonce + * @param ciphertext the ciphertext + * @return the string + */ + public String decryptResponseBody(String tenantId, String associatedData, String nonce, String ciphertext) { + try { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + String apiV3Key = wechatMetaContainer.getWechatMeta(tenantId).getV3().getAppV3Secret(); + SecretKeySpec key = new SecretKeySpec(apiV3Key.getBytes(StandardCharsets.UTF_8), "AES"); + GCMParameterSpec spec = new GCMParameterSpec(128, nonce.getBytes(StandardCharsets.UTF_8)); + + cipher.init(Cipher.DECRYPT_MODE, key, spec); + cipher.updateAAD(associatedData.getBytes(StandardCharsets.UTF_8)); + + byte[] bytes; + try { + bytes = cipher.doFinal(Base64Utils.decodeFromString(ciphertext)); + } catch (GeneralSecurityException e) { + throw new PayException(e); + } + return new String(bytes, StandardCharsets.UTF_8); + } catch (NoSuchAlgorithmException | NoSuchPaddingException | + InvalidKeyException | InvalidAlgorithmParameterException e) { + throw new PayException(e); + } + } + + /** + * Wechat meta container. + * + * @return the wechat meta container + */ + public WechatMetaContainer wechatMetaContainer() { + return wechatMetaContainer; + } + + /** + * 请求时设置签名 组件 + * + * @param components the components + * @return string string + */ + private static String createSign(String... components) { + return Arrays.stream(components) + .collect(Collectors.joining("\n", "", "\n")); + } + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatApiProvider.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatApiProvider.java new file mode 100644 index 0000000..b245a96 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatApiProvider.java @@ -0,0 +1,110 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + +/** + * 微信支付工具. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public class WechatApiProvider { + /** + * The Wechat pay client. + */ + private final WechatPayClient wechatPayClient; + + /** + * Instantiates a new Wechat api provider. + * + * @param wechatPayClient the wechat pay client + */ + public WechatApiProvider(WechatPayClient wechatPayClient) { + this.wechatPayClient = wechatPayClient; + } + + /** + * 代金券. + * + * @param tenantId the tenant id + * @return the wechat marketing favor api + * @since 1.0.0.RELEASE + */ + public WechatMarketingFavorApi favorApi(String tenantId) { + return new WechatMarketingFavorApi(this.wechatPayClient, tenantId); + } + + /** + * 普通支付-直连模式. + * + * @param tenantId the tenant id + * @return the wechat pay api + * @since 1.0.0.RELEASE + */ + public WechatDirectPayApi directPayApi(String tenantId) { + return new WechatDirectPayApi(wechatPayClient, tenantId); + } + + /** + * 合单支付. + * + * @param tenantId the tenant id + * @return the wechat combine pay api + * @since 1.0.1.RELEASE + */ + public WechatCombinePayApi combinePayApi(String tenantId) { + return new WechatCombinePayApi(wechatPayClient, tenantId); + } + + /** + * 微信支付分. + * + * @param tenantId the tenant id + * @return the wechat pay score api + * @since 1.0.2.RELEASE + */ + public WechatPayScoreApi payScoreApi(String tenantId) { + return new WechatPayScoreApi(wechatPayClient, tenantId); + } + + /** + * 微信支付先享卡. + * + * @param tenantId the tenant id + * @return the wechat discount card api + * @since 1.0.2.RELEASE + */ + public WechatDiscountCardApi discountCardApi(String tenantId) { + return new WechatDiscountCardApi(wechatPayClient, tenantId); + } + + /** + * 回调. + *

+ * 需要处理白名单、幂等性问题。 + * + * @param tenantId the tenant id + * @return the wechat pay callback + * @since 1.0.0.RELEASE + */ + public WechatPayCallback callback(String tenantId) { + return new WechatPayCallback(wechatPayClient.signatureProvider(), tenantId); + } + +} 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 new file mode 100644 index 0000000..9c62786 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatCombinePayApi.java @@ -0,0 +1,214 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + +import cn.felord.payment.wechat.WechatPayProperties; +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.web.util.UriComponentsBuilder; + +import java.net.URI; + +/** + * 微信合单支付. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public class WechatCombinePayApi extends AbstractApi { + /** + * Instantiates a new Abstract api. + * + * @param wechatPayClient the wechat pay client + * @param tenantId the tenant id + */ + public WechatCombinePayApi(WechatPayClient wechatPayClient, String tenantId) { + super(wechatPayClient, tenantId); + } + + /** + * 合单下单-APP支付API + *

+ * 使用合单支付接口,用户只输入一次密码,即可完成多个订单的支付。目前最多一次可支持50笔订单进行合单支付。 + *

+ * 注意: + * • 订单如果需要进行抽佣等,需要在合单中指定需要进行分账(profit_sharing为true);指定后,交易资金进入二级商户账户,处于冻结状态,可在后续使用分账接口进行分账,利用分账完结进行资金解冻,实现抽佣和对二级商户的账期。 + * + * @param combinePayParams the combine pay params + * @return the wechat response entity + */ + public WechatResponseEntity appPay(CombinePayParams combinePayParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.COMBINE_APP, combinePayParams) + .function(this::combinePayFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + + /** + * 合单下单-JSAPI支付/小程序支付API + *

+ * 使用合单支付接口,用户只输入一次密码,即可完成多个订单的支付。目前最多一次可支持50笔订单进行合单支付。 + *

+ * 注意: + * • 订单如果需要进行抽佣等,需要在合单中指定需要进行分账(profit_sharing为true);指定后,交易资金进入二级商户账户,处于冻结状态,可在后续使用分账接口进行分账,利用分账完结进行资金解冻,实现抽佣和对二级商户的账期。 + * + * @param combinePayParams the combine pay params + * @return wechat response entity + */ + public WechatResponseEntity jsPay(CombinePayParams combinePayParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.COMBINE_JSAPI, combinePayParams) + .function(this::combinePayFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * Combine pay function request entity. + * + * @param type the type + * @param params the params + * @return the request entity + */ + private RequestEntity combinePayFunction(WechatPayV3Type type, CombinePayParams params) { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + params.setCombineAppid(v3.getAppId()); + params.setCombineMchid(v3.getMchId()); + + String notifyUrl = v3.getDomain().concat(params.getNotifyUrl()); + params.setNotifyUrl(notifyUrl); + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + return Post(uri, params); + } + + /** + * 合单下单-H5支付API. + *

+ * 使用合单支付接口,用户只输入一次密码,即可完成多个订单的支付。目前最多一次可支持50笔订单进行合单支付。 + *

+ * 注意: + * • 订单如果需要进行抽佣等,需要在合单中指定需要进行分账(profit_sharing为true);指定后,交易资金进入二级商户账户,处于冻结状态,可在后续使用分账接口进行分账,利用分账完结进行资金解冻,实现抽佣和对二级商户的账期。 + * + * @param combineH5PayParams the combine h 5 pay params + * @return the wechat response entity + */ + public WechatResponseEntity h5Pay(CombineH5PayParams combineH5PayParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.COMBINE_MWEB, combineH5PayParams) + .function(this::combinePayFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * Combine pay function request entity. + * + * @param type the type + * @param params the params + * @return the request entity + */ + private RequestEntity combinePayFunction(WechatPayV3Type type, CombineH5PayParams params) { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + params.setCombineAppid(v3.getAppId()); + params.setCombineMchid(v3.getMchId()); + + String notifyUrl = v3.getDomain().concat(params.getNotifyUrl()); + params.setNotifyUrl(notifyUrl); + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + return Post(uri, params); + } + + /** + * 合单下单-Native支付API. + *

+ * 使用合单支付接口,用户只输入一次密码,即可完成多个订单的支付。目前最多一次可支持50笔订单进行合单支付。 + *

+ * 注意: + * • 订单如果需要进行抽佣等,需要在合单中指定需要进行分账(profit_sharing为true);指定后,交易资金进入二级商户账户,处于冻结状态,可在后续使用分账接口进行分账,利用分账完结进行资金解冻,实现抽佣和对二级商户的账期。 + * + * @param combinePayParams the combine pay params + * @return the wechat response entity + */ + public WechatResponseEntity nativePay(CombinePayParams combinePayParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.COMBINE_NATIVE, combinePayParams) + .function(this::combinePayFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 合单查询订单API. + * + * @param combineOutTradeNo the combine out trade no + * @return the wechat response entity + */ + public WechatResponseEntity queryTransactionByOutTradeNo(String combineOutTradeNo) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.COMBINE_TRANSACTION_OUT_TRADE_NO, combineOutTradeNo) + .function((wechatPayV3Type, outTradeNo) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(outTradeNo) + .toUri(); + return Get(uri); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 合单关闭订单API. + *

+ * 合单支付订单只能使用此合单关单api完成关单。 + *

+ * 微信服务器返回 204。 + * + * @param combineCloseParams the combine close params + * @return the wechat response entity + */ + public WechatResponseEntity close(CombineCloseParams combineCloseParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.COMBINE_CLOSE, combineCloseParams) + .function((wechatPayV3Type, params) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build().toUri(); + return Post(uri, params); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatDirectPayApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatDirectPayApi.java new file mode 100644 index 0000000..101264c --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatDirectPayApi.java @@ -0,0 +1,197 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + +import cn.felord.payment.wechat.enumeration.WeChatServer; +import cn.felord.payment.wechat.WechatPayProperties; +import cn.felord.payment.wechat.enumeration.WechatPayV3Type; +import cn.felord.payment.wechat.v3.model.PayParams; +import cn.felord.payment.wechat.v3.model.TransactionQueryParams; +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.web.util.UriComponentsBuilder; + +import java.net.URI; + +/** + * 普通支付-直连模式. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public class WechatDirectPayApi extends AbstractApi { + + /** + * Instantiates a new Wechat pay api. + * + * @param wechatPayClient the wechat pay client + * @param tenantId the tenant id + */ + public WechatDirectPayApi(WechatPayClient wechatPayClient, String tenantId) { + super(wechatPayClient, tenantId); + } + + /** + * APP下单API + * + * @param payParams the pay params + * @return the wechat response entity + */ + public WechatResponseEntity appPay(PayParams payParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.APP, payParams) + .function(this::payFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * JSAPI/小程序下单API + * + * @param payParams the pay params + * @return wechat response entity + */ + public WechatResponseEntity jsPay(PayParams payParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.JSAPI, payParams) + .function(this::payFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * Native下单API + * + * @param payParams the pay params + * @return wechat response entity + */ + public WechatResponseEntity nativePay(PayParams payParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.NATIVE, payParams) + .function(this::payFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * H5下单API + * + * @param payParams the pay params + * @return wechat response entity + */ + public WechatResponseEntity h5Pay(PayParams payParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MWEB, payParams) + .function(this::payFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + private RequestEntity payFunction(WechatPayV3Type type, PayParams payParams) { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + payParams.setAppid(v3.getAppId()); + payParams.setMchid(v3.getMchId()); + String notifyUrl = v3.getDomain().concat(payParams.getNotifyUrl()); + payParams.setNotifyUrl(notifyUrl); + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + return Post(uri, payParams); + } + + /** + * 微信支付订单号查询API + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity queryTransactionById(TransactionQueryParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.TRANSACTION_TRANSACTION_ID, params) + .function(this::queryTransactionFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 商户订单号查询API + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity queryTransactionByOutTradeNo(TransactionQueryParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.TRANSACTION_OUT_TRADE_NO, params) + .function(this::queryTransactionFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + private RequestEntity queryTransactionFunction(WechatPayV3Type type, TransactionQueryParams params) { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + + MultiValueMap queryParams = new LinkedMultiValueMap<>(); + queryParams.add("mchid", v3.getMchId()); + + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .queryParams(queryParams) + .build() + .expand(params.getTransactionIdOrOutTradeNo()) + .toUri(); + return Get(uri); + } + + /** + * 关单API + * + * @param outTradeNo the out trade no + * @return the wechat response entity + */ + public WechatResponseEntity close(String outTradeNo) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.CLOSE, outTradeNo) + .function(this::closeByOutTradeNoFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + private RequestEntity closeByOutTradeNoFunction(WechatPayV3Type type, String outTradeNo) { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + + MultiValueMap queryParams = new LinkedMultiValueMap<>(); + queryParams.add("mchid", v3.getMchId()); + + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .queryParams(queryParams) + .build() + .expand(outTradeNo) + .toUri(); + return Post(uri, queryParams); + } + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatDiscountCardApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatDiscountCardApi.java new file mode 100644 index 0000000..96a4a8d --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatDiscountCardApi.java @@ -0,0 +1,120 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + +import cn.felord.payment.wechat.WechatPayProperties; +import cn.felord.payment.wechat.enumeration.WeChatServer; +import cn.felord.payment.wechat.enumeration.WechatPayV3Type; +import cn.felord.payment.wechat.v3.model.discountcard.DiscountCardPreRequestParams; +import cn.felord.payment.wechat.v3.model.discountcard.UserRecordsParams; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.springframework.web.util.UriComponentsBuilder; + +import java.net.URI; + +/** + * 微信支付先享卡. + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +public class WechatDiscountCardApi extends AbstractApi { + /** + * Instantiates a new Abstract api. + * + * @param wechatPayClient the wechat pay client + * @param tenantId the tenant id + */ + public WechatDiscountCardApi(WechatPayClient wechatPayClient, String tenantId) { + super(wechatPayClient, tenantId); + } + + /** + * 预受理领卡请求API + *

+ * 商户在引导用户跳转先享卡领卡前,需要请求先享卡预受理领卡请求接口,再根据返回数据引导用户跳转领卡。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity preRequest(DiscountCardPreRequestParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.DISCOUNT_CARD_PRE_REQUEST, params) + .function((wechatPayV3Type, requestParams) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + requestParams.setAppid(v3.getAppId()); + requestParams.setNotifyUrl(v3.getDomain().concat(requestParams.getNotifyUrl())); + return Post(uri, requestParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 增加用户记录API + *

+ * 当用户在商户侧消费时,用户完成了微信先享卡的目标或者获取使用优惠时,商户需要把这个信息同步给微信先享卡平台,用于在微信先享卡小程序展示及先享卡到期后的用户结算。 + * + * @param params the params + * @return 返回http状态码 204 处理成功,应答无内容 + */ + public WechatResponseEntity addUserRecords(UserRecordsParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.DISCOUNT_CARD_ADD_USER_RECORDS, params) + .function((wechatPayV3Type, recordsParams) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(recordsParams.getOutCardCode()) + .toUri(); + recordsParams.setOutCardCode(null); + return Post(uri, recordsParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 查询先享卡订单API + *

+ * 商户可以通过商户领卡号查询指定的先享卡,可用于对账或者界面展示。 + * + * @param outCardCode 商户领卡号 + * @return the wechat response entity + */ + public WechatResponseEntity addUserRecords(String outCardCode) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.DISCOUNT_CARD_INFO, outCardCode) + .function((wechatPayV3Type, cardCode) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(cardCode) + .toUri(); + return Get(uri); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.java new file mode 100644 index 0000000..2209320 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.java @@ -0,0 +1,637 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3; + +import cn.felord.payment.wechat.WechatPayProperties; +import cn.felord.payment.wechat.enumeration.StockStatus; +import cn.felord.payment.wechat.enumeration.WeChatServer; +import cn.felord.payment.wechat.enumeration.WechatPayV3Type; +import cn.felord.payment.wechat.v3.model.*; +import com.fasterxml.jackson.databind.node.ObjectNode; +import lombok.SneakyThrows; +import org.bouncycastle.jcajce.provider.digest.SHA256; +import org.bouncycastle.util.encoders.Hex; +import org.springframework.http.MediaType; +import org.springframework.http.RequestEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.util.UriComponentsBuilder; + +import java.net.URI; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; +import java.util.function.Consumer; + +/** + * 微信支付营销代金券API + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public class WechatMarketingFavorApi extends AbstractApi { + + + /** + * Instantiates a new Wechat marketing favor api. + * + * @param wechatPayClient the wechat pay client + * @param tenantId the tenant id + */ + public WechatMarketingFavorApi(WechatPayClient wechatPayClient, String tenantId) { + super(wechatPayClient, tenantId); + } + + + /** + * 创建代金券批次API + *

+ * 通过调用此接口可创建代金券批次,包括 预充值免充值 类型。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity createStock(StocksCreateParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_COUPON_STOCKS, params) + .function(this::createStocksFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * Create stocks function request entity. + * + * @param type the type + * @param params the params + * @return the request entity + */ + private RequestEntity createStocksFunction(WechatPayV3Type type, StocksCreateParams params) { + + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + String mchId = v3.getMchId(); + params.setBelongMerchant(mchId); + return Post(uri, params); + } + + /** + * 激活代金券批次API + *

+ * 制券成功后,通过调用此接口激活批次,如果是预充值代金券,激活时会从商户账户余额中锁定本批次的营销资金。 + * + * @param stockId the stock id + * @return the wechat response entity + */ + public WechatResponseEntity startStock(String stockId) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_START, stockId) + .function(this::startAndRestartAndPauseStockFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + + /** + * 发放代金券API + *

+ * 商户侧开发时建议增加发放流水记录。 + *

+ * 微信支付文档所要求的微信公众号服务号不是必须的,只要你有一个绑定了微信支付商户平台和开放平台的appid即可。 + *

+ * 流程为: + * 1. appid 请求授权微信登录。 + * 2. 登录成功后,开发者在商户侧保存用户 对应此appid的openid。 + * 3. 通过 appid - openid 进行发券。 + *

+ * 商户平台/API完成制券后,可使用发放代金券接口发券。通过调用此接口可发放指定批次给指定用户,发券场景可以是小程序、H5、APP等。 + *

+ * 注意: + * • 商户可在H5活动页面、商户小程序、商户APP等自有场景内调用该接口完成发券,商户默认只允许发放本商户号(调用发券接口的商户号)创建的代金券,如需发放其他商户商户创建的代金券,请参考常见问题Q1。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity sendStock(StocksSendParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_USERS_COUPONS, params) + .function(this::sendStocksFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + + /** + * Send stocks function request entity. + * + * @param type the type + * @param params the params + * @return the request entity + */ + private RequestEntity sendStocksFunction(WechatPayV3Type type, StocksSendParams params) { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + + params.setAppid(v3.getAppId()); + params.setStockCreatorMchid(v3.getMchId()); + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .build() + .expand(params.getOpenid()) + .toUri(); + params.setOpenid(null); + return Post(uri, params); + } + + /** + * 暂停代金券批次API + *

+ * 通过此接口可暂停指定代金券批次。暂停后,该代金券批次暂停发放,用户无法通过任何渠道再领取该批次的券。 + * + * @param stockId the stock id + * @return the wechat response entity + */ + public WechatResponseEntity pauseStock(String stockId) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_PAUSE, stockId) + .function(this::startAndRestartAndPauseStockFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 重启代金券批次API + *

+ * 通过此接口可重启指定代金券批次。重启后,该代金券批次可以再次发放。 + * + * @param stockId the stock id + * @return the wechat response entity + */ + public WechatResponseEntity restartStock(String stockId) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_RESTART, stockId) + .function(this::startAndRestartAndPauseStockFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * Start and restart and pause stock function request entity. + * + * @param type the type + * @param stockId the stock id + * @return the request entity + */ + private RequestEntity startAndRestartAndPauseStockFunction(WechatPayV3Type type, String stockId) { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + String mchId = v3.getMchId(); + Map body = new HashMap<>(1); + body.put("stock_creator_mchid", mchId); + + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .build() + .expand(stockId) + .toUri(); + return Post(uri, body); + } + + /** + * 条件查询批次列表API + *

+ * 通过此接口可查询多个批次的信息,包括批次的配置信息以及批次概况数据。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity queryStocksByMch(StocksQueryParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS, params) + .function(this::queryStocksByMchFunction) + .consumer(wechatResponseEntity::convert) + .request(); + + return wechatResponseEntity; + } + + /** + * Query stocks function request entity. + * + * @param type the type + * @param params the params + * @return the request entity + */ + private RequestEntity queryStocksByMchFunction(WechatPayV3Type type, StocksQueryParams params) { + + MultiValueMap queryParams = new LinkedMultiValueMap<>(); + queryParams.add("offset", String.valueOf(params.getOffset())); + queryParams.add("limit", String.valueOf(params.getLimit())); + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + + queryParams.add("stock_creator_mchid", v3.getMchId()); + OffsetDateTime createStartTime = params.getCreateStartTime(); + if (Objects.nonNull(createStartTime)) { + //rfc 3339 YYYY-MM-DDTHH:mm:ss.sss+TIMEZONE + queryParams.add("create_start_time", createStartTime + .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); + } + OffsetDateTime createEndTime = params.getCreateEndTime(); + if (Objects.nonNull(createEndTime)) { + //rfc 3339 YYYY-MM-DDTHH:mm:ss.sss+TIMEZONE + queryParams.add("create_end_time", createEndTime + .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); + } + StockStatus status = params.getStatus(); + if (Objects.nonNull(status)) { + queryParams.add("status", status.value()); + } + + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .queryParams(queryParams) + .build().toUri(); + return Get(uri); + } + + + /** + * 查询批次详情API + *

+ * 通过此接口可查询批次信息,包括批次的配置信息以及批次概况数据。 + * + * @param stockId the stock id + * @return the wechat response entity + */ + public WechatResponseEntity queryStockDetail(String stockId) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_DETAIL, stockId) + .function(this::stockDetailFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + + /** + * Stock detail function request entity. + * + * @param type the type + * @param stockId the stock id + * @return the request entity + */ + private RequestEntity stockDetailFunction(WechatPayV3Type type, String stockId) { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + + MultiValueMap queryParams = new LinkedMultiValueMap<>(); + queryParams.add("stock_creator_mchid", v3.getMchId()); + + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .queryParams(queryParams) + .build() + .expand(stockId) + .toUri(); + return Get(uri); + + } + + /** + * 查询代金券详情API + *

+ * 通过此接口可查询代金券信息,包括代金券的基础信息、状态。如代金券已核销,会包括代金券核销的订单信息(订单号、单品信息等)。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity queryCouponDetails(CouponDetailsQueryParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_USERS_COUPONS_DETAIL, params) + .function(this::couponDetailFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + + /** + * Coupon detail function request entity. + * + * @param type the type + * @param params the params + * @return the request entity + */ + private RequestEntity couponDetailFunction(WechatPayV3Type type, CouponDetailsQueryParams params) { + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + + MultiValueMap queryParams = new LinkedMultiValueMap<>(); + queryParams.add("appid", v3.getAppId()); + + MultiValueMap pathParams = new LinkedMultiValueMap<>(); + pathParams.add("openid", params.getOpenId()); + pathParams.add("coupon_id", params.getCouponId()); + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .queryParams(queryParams) + .build() + .expand(pathParams) + .toUri(); + return Get(uri); + + } + + /** + * 查询代金券可用商户API + *

+ * 通过调用此接口可查询批次的可用商户号,判断券是否在某商户号可用,来决定是否展示。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity queryMerchantsByStockId(MchQueryParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_MERCHANTS, params) + .function(this::queryMerchantsByStockIdFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * Query stocks function request entity. + * + * @param type the type + * @param params the params + * @return the request entity + */ + private RequestEntity queryMerchantsByStockIdFunction(WechatPayV3Type type, MchQueryParams params) { + MultiValueMap queryParams = new LinkedMultiValueMap<>(); + queryParams.add("offset", String.valueOf(params.getOffset())); + queryParams.add("limit", String.valueOf(params.getLimit())); + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + queryParams.add("stock_creator_mchid", v3.getMchId()); + String stockId = params.getStockId(); + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .queryParams(queryParams) + .build() + .expand(stockId) + .toUri(); + return Get(uri); + } + + /** + * 查询代金券可用单品API + *

+ * 通过此接口可查询批次的可用商品编码,判断券是否可用于某些商品,来决定是否展示。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity queryStockItems(MchQueryParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_ITEMS, params) + .function(this::queryMerchantsByStockIdFunction) + .consumer(wechatResponseEntity::convert) + .request(); + + return wechatResponseEntity; + } + + /** + * 根据商户号查用户的券API + *

+ * 可通过该接口查询用户在某商户号可用的全部券,可用于商户的小程序/H5中,用户"我的代金券"或"提交订单页"展示优惠信息。无法查询到微信支付立减金。本接口查不到用户的微信支付立减金(又称“全平台通用券”),即在所有商户都可以使用的券,例如:摇摇乐红包;当按可用商户号查询时,无法查询用户已经核销的券 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity queryUserCouponsByMchId(UserCouponsQueryParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_USERS_COUPONS, params) + .function(this::queryUserCouponsFunction) + .consumer(wechatResponseEntity::convert) + .request(); + + return wechatResponseEntity; + } + + /** + * Query user coupons function request entity. + * + * @param type the type + * @param params the params + * @return the request entity + */ + private RequestEntity queryUserCouponsFunction(WechatPayV3Type type, UserCouponsQueryParams params) { + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + + MultiValueMap queryParams = new LinkedMultiValueMap<>(); + queryParams.add("appid", v3.getAppId()); + queryParams.add("creator_mchid", v3.getMchId()); + String senderMchId = params.getSenderMchId(); + if (StringUtils.hasText(senderMchId)) { + queryParams.add("sender_mchid", senderMchId); + } + String availableMchId = params.getAvailableMchId(); + if (StringUtils.hasText(availableMchId)) { + queryParams.add("available_mchid", availableMchId); + } else { + String offset = Objects.isNull(params.getOffset()) ? null : params.getOffset().toString(); + queryParams.add("offset", offset); + String limit = Objects.isNull(params.getLimit()) ? null : params.getLimit().toString(); + queryParams.add("limit", limit); + String status = Objects.nonNull(params.getStatus()) ? params.getStatus().name() : null; + queryParams.add("status", status); + String stockId = params.getStockId(); + if (StringUtils.hasText(stockId)) { + queryParams.add("stock_id", stockId); + } + } + + + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .queryParams(queryParams) + .build() + .expand(params.getOpenId()) + .toUri(); + return Get(uri); + + } + + /** + * 下载批次核销明细API + *

+ * 数据结果包含在响应体的 csv 字段中 + *

+ * 可获取到某批次的核销明细数据,包括订单号、单品信息、银行流水号等,用于对账/数据分析。 + * + * @param stockId the stock id + * @return the wechat response entity + * @see AbstractApi#billDownload(String) 对账单下载api + */ + public WechatResponseEntity downloadStockUseFlow(String stockId) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_USE_FLOW, stockId) + .function(this::downloadFlowFunction) + .consumer(wechatResponseEntity::convert) + .request(); + String csv = this.billDownload(wechatResponseEntity.getBody().get("url").asText()); + wechatResponseEntity.getBody().put("csv", csv); + return wechatResponseEntity; + } + + /** + * 下载批次退款明细API + *

+ * 数据结果包含在响应体的 csv 字段中 + *

+ * 可获取到某批次的退款明细数据,包括订单号、单品信息、银行流水号等,用于对账/数据分析。 + * + * @param stockId the stock id + * @return the wechat response entity + * @see AbstractApi#billDownload(String) 对账单下载api + */ + public WechatResponseEntity downloadStockRefundFlow(String stockId) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_REFUND_FLOW, stockId) + .function(this::downloadFlowFunction) + .consumer(wechatResponseEntity::convert) + .request(); + String csv = this.billDownload(wechatResponseEntity.getBody().get("url").asText()); + wechatResponseEntity.getBody().put("csv", csv); + return wechatResponseEntity; + } + + /** + * Download flow function request entity. + * + * @param type the type + * @param stockId the stock id + * @return the request entity + */ + private RequestEntity downloadFlowFunction(WechatPayV3Type type, String stockId) { + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .build() + .expand(stockId) + .toUri(); + return Get(uri); + } + + /** + * 营销图片上传API + *

+ * 媒体图片只支持JPG、BMP、PNG格式,文件大小不能超过2M。 + *

+ * 通过本接口上传图片后可获得图片url地址。图片url可在微信支付营销相关的API使用,包括商家券、代金券、支付有礼等。 + * + * @param file the file + * @return the wechat response entity + */ + public WechatResponseEntity marketingImageUpload(MultipartFile file) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_IMAGE_UPLOAD, file) + .function(this::marketingImageUploadFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + + /** + * Marketing image upload function request entity. + * + * @param type the type + * @param file the file + * @return the request entity + */ + @SneakyThrows + private RequestEntity marketingImageUploadFunction(WechatPayV3Type type, MultipartFile file) { + + Map meta = new LinkedHashMap<>(2); + + String originalFilename = file.getOriginalFilename(); + String filename = StringUtils.hasText(originalFilename) ? originalFilename : file.getName(); + meta.put("filename", filename); + + byte[] digest = SHA256.Digest.getInstance("SHA-256").digest(file.getBytes()); + meta.put("sha256", Hex.toHexString(digest)); + MultiValueMap body = new LinkedMultiValueMap<>(); + body.add("meta", meta); + body.add("file", file.getResource()); + // 签名 + String metaStr = this.getMapper().writeValueAsString(meta); + + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + return RequestEntity.post(uri) + .header("Content-Type", MediaType.MULTIPART_FORM_DATA_VALUE) + .header("Meta-Info", metaStr) + .header("Pay-TenantId", tenantId()) + .body(body); + } + + /** + * 代金券核销回调通知API。 + *

+ * 设置核销回调通知的{@code notifyUrl},{@code notifyUrl}需要设置应用白名单。开发者应该对代金券的核销结果进行流水记录。 + * + * @param notifyUrl the notify url + * @return the wechat response entity + * @see WechatPayCallback#couponCallback(ResponseSignVerifyParams, Consumer) 核销回调 + */ + public WechatResponseEntity setMarketingFavorCallback(String notifyUrl) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.MARKETING_FAVOR_CALLBACKS, notifyUrl) + .function(this::setMarketingFavorCallbackFunction) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * Sets marketing favor callback function. + * + * @param type the type + * @param notifyUrl the notify url + * @return the marketing favor callback function + */ + private RequestEntity setMarketingFavorCallbackFunction(WechatPayV3Type type, String notifyUrl) { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + + Map body = new HashMap<>(3); + body.put("mchid", v3.getMchId()); + body.put("notify_url", notifyUrl); + body.put("switch", true); + URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + return Post(uri, body); + } +} + + + diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMetaBean.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMetaBean.java new file mode 100644 index 0000000..11dad68 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMetaBean.java @@ -0,0 +1,52 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + + +import cn.felord.payment.wechat.WechatPayProperties; +import lombok.Data; + +import java.security.KeyPair; + +/** + * 微信支付元数据Bean. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class WechatMetaBean { + /** + * The Key pair. + */ + private KeyPair keyPair; + /** + * The Serial number. + */ + private String serialNumber; + /** + * The Tenant id. + */ + private String tenantId; + /** + * The V3. + */ + private WechatPayProperties.V3 v3; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMetaContainer.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMetaContainer.java new file mode 100644 index 0000000..22f6b11 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMetaContainer.java @@ -0,0 +1,76 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + + +import java.util.*; + +/** + * 配置容器 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public class WechatMetaContainer { + private final Map wechatMetaBeanMap = new HashMap<>(); + private final Set tenantIds = new HashSet<>(); + + + /** + * Add wechat meta boolean. + * + * @param tenantId the tenantId + * @param wechatMetaBean the wechat meta bean + * @return the boolean + */ + public WechatMetaBean addWechatMeta(String tenantId, WechatMetaBean wechatMetaBean) { + tenantIds.add(tenantId); + return this.wechatMetaBeanMap.put(tenantId, wechatMetaBean); + } + + /** + * Remove wechat meta wechat meta bean. + * + * @param tenantId the tenantId + * @return the wechat meta bean + */ + public WechatMetaBean removeWechatMeta(String tenantId) { + tenantIds.remove(tenantId); + return this.wechatMetaBeanMap.remove(tenantId); + } + + /** + * Gets wechat meta. + * + * @param tenantId the tenantId + * @return the wechat meta + */ + public WechatMetaBean getWechatMeta(String tenantId) { + return Objects.requireNonNull(this.wechatMetaBeanMap.get(tenantId)); + } + + /** + * Gets properties keys. + * + * @return the properties keys + */ + public Set getTenantIds() { + return tenantIds; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java new file mode 100644 index 0000000..9a0ae13 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java @@ -0,0 +1,381 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3; + +import cn.felord.payment.PayException; +import cn.felord.payment.wechat.v3.model.CallbackParams; +import cn.felord.payment.wechat.v3.model.CouponConsumeData; +import cn.felord.payment.wechat.v3.model.ResponseSignVerifyParams; +import cn.felord.payment.wechat.v3.model.TransactionConsumeData; +import cn.felord.payment.wechat.v3.model.combine.CombineTransactionConsumeData; +import cn.felord.payment.wechat.v3.model.discountcard.*; +import cn.felord.payment.wechat.v3.model.payscore.PayScoreConsumer; +import cn.felord.payment.wechat.v3.model.payscore.PayScoreUserConfirmConsumeData; +import cn.felord.payment.wechat.v3.model.payscore.PayScoreUserPaidConsumeData; +import cn.felord.payment.wechat.v3.model.payscore.PayScoreUserPermissionConsumeData; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.Assert; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.function.Consumer; + +/** + * 微信支付回调工具. + *

+ * 注意:开发者应该保证回调调用的幂等性 + *

+ * 支付通知http应答码为200或204才会当作正常接收,当回调处理异常时,应答的HTTP状态码应为500,或者4xx。 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Slf4j +public class WechatPayCallback { + /** + * The constant MAPPER. + */ + private static final ObjectMapper MAPPER = new ObjectMapper(); + /** + * The Signature provider. + */ + private final SignatureProvider signatureProvider; + /** + * The Tenant id. + */ + private final String tenantId; + + static { + MAPPER.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); + MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL); + } + + /** + * Instantiates a new Wechat pay callback. + * + * @param signatureProvider the signature provider + * @param tenantId the tenant id + */ + public WechatPayCallback(SignatureProvider signatureProvider, String tenantId) { + this.signatureProvider = signatureProvider; + Assert.hasText(tenantId, "tenantId is required"); + this.tenantId = tenantId; + } + + + /** + * 微信支付代金券核销回调. + * + * @param params the params + * @param consumeDataConsumer the consume data consumer + * @return the map + * @since 1.0.0.RELEASE + */ + @SneakyThrows + public Map couponCallback(ResponseSignVerifyParams params, Consumer consumeDataConsumer) { + String data = this.callback(params, EventType.COUPON); + CouponConsumeData consumeData = MAPPER.readValue(data, CouponConsumeData.class); + consumeDataConsumer.accept(consumeData); + Map responseBody = new HashMap<>(2); + responseBody.put("code", 200); + responseBody.put("message", "SUCCESS"); + return responseBody; + + } + + /** + * 微信支付成功回调. + *

+ * 无需开发者判断,只有扣款成功微信才会回调此接口 + * + * @param params the params + * @param consumeDataConsumer the consume data consumer + * @return the map + * @since 1.0.0.RELEASE + */ + @SneakyThrows + public Map transactionCallback(ResponseSignVerifyParams params, Consumer consumeDataConsumer) { + String data = this.callback(params, EventType.TRANSACTION); + TransactionConsumeData consumeData = MAPPER.readValue(data, TransactionConsumeData.class); + consumeDataConsumer.accept(consumeData); + return Collections.singletonMap("code", "SUCCESS"); + + } + + /** + * 微信合单支付成功回调. + *

+ * 无需开发者判断,只有扣款成功微信才会回调此接口 + * + * @param params the params + * @param consumeDataConsumer the consume data consumer + * @return the map + * @since 1.0.0.RELEASE + */ + @SneakyThrows + public Map combineTransactionCallback(ResponseSignVerifyParams params, Consumer consumeDataConsumer) { + String data = this.callback(params, EventType.TRANSACTION); + CombineTransactionConsumeData consumeData = MAPPER.readValue(data, CombineTransactionConsumeData.class); + consumeDataConsumer.accept(consumeData); + return Collections.singletonMap("code", "SUCCESS"); + + } + + /** + * 微信支付分确认订单、支付成功回调通知. + *

+ * 该链接是通过商户 创建支付分订单 提交notify_url参数,必须为https协议。如果链接无法访问,商户将无法接收到微信通知。 通知url必须为直接可访问的url,不能携带参数。示例: “https://pay.weixin.qq.com/wxpay/pay.action” + * + * @param params the params + * @param payScoreConsumer the pay score consumer + * @return the map + * @since 1.0.2.RELEASE + */ + @SneakyThrows + public Map payscoreUserOrderCallback(ResponseSignVerifyParams params, PayScoreConsumer payScoreConsumer) { + CallbackParams callbackParams = resolve(params); + String eventType = callbackParams.getEventType(); + + if (Objects.equals(eventType, EventType.PAYSCORE_USER_CONFIRM.event)) { + String data = this.decrypt(callbackParams); + PayScoreUserConfirmConsumeData confirmConsumeData = MAPPER.readValue(data, PayScoreUserConfirmConsumeData.class); + payScoreConsumer.getConfirmConsumeDataConsumer().accept(confirmConsumeData); + } else if (Objects.equals(eventType, EventType.PAYSCORE_USER_PAID.event)) { + String data = this.decrypt(callbackParams); + PayScoreUserPaidConsumeData paidConsumeData = MAPPER.readValue(data, PayScoreUserPaidConsumeData.class); + payScoreConsumer.getPaidConsumeDataConsumer().accept(paidConsumeData); + } else { + log.error("wechat pay event type is not matched, callbackParams {}", callbackParams); + throw new PayException(" wechat pay event type is not matched"); + } + + return Collections.singletonMap("code", "SUCCESS"); + } + + /** + * 授权/解除授权服务回调通知API. + *

+ * 微信支付分通过授权/解除授权服务通知接口将用户过授权/解除授权服务消息通知给商户 + *

+ * 普通授权模式是通过[商户入驻配置申请表]提交service_notify_url设置,预授权模式是通过[商户预授权]提交的notify_url设置,必须为https协议。如果链接无法访问,商户将无法接收到微信通知。 通知url必须为直接可访问的url,不能携带参数。示例: “https://pay.weixin.qq.com/wxpay/pay.action” + * + * @param params the params + * @param consumeDataConsumer the consume data consumer + * @return the map + */ + @SneakyThrows + public Map permissionCallback(ResponseSignVerifyParams params, Consumer consumeDataConsumer) { + CallbackParams callbackParams = resolve(params); + String eventType = callbackParams.getEventType(); + boolean closed; + if (Objects.equals(eventType, EventType.PAYSCORE_USER_OPEN.event)) { + closed = false; + } else if (Objects.equals(eventType, EventType.PAYSCORE_USER_CLOSE.event)) { + closed = true; + } else { + log.error("wechat pay event type is not matched, callbackParams {}", callbackParams); + throw new PayException(" wechat pay event type is not matched"); + } + String data = this.decrypt(callbackParams); + PayScoreUserPermissionConsumeData consumeData = MAPPER.readValue(data, PayScoreUserPermissionConsumeData.class); + consumeData.setClosed(closed); + consumeDataConsumer.accept(consumeData); + return Collections.singletonMap("code", "SUCCESS"); + } + + /** + * 用户领卡、守约状态变化、扣费状态变化通知API + *

+ * 用户领取优惠卡后或者用户守约状态发生变更后或扣费状态变化后,微信会把对应信息发送给商户。 + *

+ * 该链接是通过商户预受理领卡请求中提交notify_url参数,必须为https协议。如果链接无法访问,商户将无法接收到微信通知。 通知url必须为直接可访问的url,不能携带参数。示例: “https://pay.weixin.qq.com/wxpay/pay.action” + * + * @param params the params + * @param discountCardConsumer the discount card consumer + * @return the map + */ + @SneakyThrows + public Map discountCardCallback(ResponseSignVerifyParams params, DiscountCardConsumer discountCardConsumer) { + + CallbackParams callbackParams = resolve(params); + String eventType = callbackParams.getEventType(); + + if (Objects.equals(eventType, EventType.DISCOUNT_CARD_AGREEMENT_ENDED.event)) { + String data = this.decrypt(callbackParams); + DiscountCardAgreementEndConsumeData agreementEndConsumeData = MAPPER.readValue(data, DiscountCardAgreementEndConsumeData.class); + discountCardConsumer.getAgreementEndConsumeDataConsumer().accept(agreementEndConsumeData); + } else if (Objects.equals(eventType, EventType.DISCOUNT_CARD_USER_ACCEPTED.event)) { + String data = this.decrypt(callbackParams); + DiscountCardAcceptedConsumeData acceptedConsumeData = MAPPER.readValue(data, DiscountCardAcceptedConsumeData.class); + discountCardConsumer.getAcceptedConsumeDataConsumer().accept(acceptedConsumeData); + } else if (Objects.equals(eventType, EventType.DISCOUNT_CARD_USER_PAID.event)) { + String data = this.decrypt(callbackParams); + DiscountCardUserPaidConsumeData paidConsumeData = MAPPER.readValue(data, DiscountCardUserPaidConsumeData.class); + discountCardConsumer.getCardUserPaidConsumeDataConsumer().accept(paidConsumeData); + } else { + log.error("wechat pay event type is not matched, callbackParams {}", callbackParams); + throw new PayException(" wechat pay event type is not matched"); + } + return Collections.singletonMap("code", "SUCCESS"); + } + + + /** + * Callback. + * + * @param params the params + * @param eventType the event type + * @return the string + */ + @SneakyThrows + private String callback(ResponseSignVerifyParams params, EventType eventType) { + CallbackParams callbackParams = this.resolve(params); + + if (!Objects.equals(callbackParams.getEventType(), eventType.event)) { + log.error("wechat pay event type is not matched, callbackParams {}", callbackParams); + throw new PayException(" wechat pay event type is not matched"); + } + return this.decrypt(callbackParams); + } + + /** + * Resolve callback params. + * + * @param params the params + * @return the callback params + * @throws JsonProcessingException the json processing exception + * @since 1.0.2.RELEASE + */ + private CallbackParams resolve(ResponseSignVerifyParams params) throws JsonProcessingException { + if (signatureProvider.responseSignVerify(params)) { + return MAPPER.readValue(params.getBody(), CallbackParams.class); + } + throw new PayException("invalid wechat pay callback"); + } + + /** + * Decrypt. + * + * @param callbackParams the callback params + * @return the string + * @since 1.0.2.RELEASE + */ + private String decrypt(CallbackParams callbackParams) { + CallbackParams.Resource resource = callbackParams.getResource(); + String associatedData = resource.getAssociatedData(); + String nonce = resource.getNonce(); + String ciphertext = resource.getCiphertext(); + String data = signatureProvider.decryptResponseBody(tenantId, associatedData, nonce, ciphertext); + Assert.hasText(data, "decryptData is required"); + return data; + } + + + /** + * 事件类型用于处理回调. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ + enum EventType { + + /** + * 微信支付分确认订单事件. + * + * @since 1.0.2.RELEASE + */ + PAYSCORE_USER_CONFIRM("PAYSCORE.USER_CONFIRM"), + + /** + * 微信支付分用户支付成功订单事件. + * + * @since 1.0.2.RELEASE + */ + PAYSCORE_USER_PAID("PAYSCORE.USER_PAID"), + + /** + * 微信支付分授权事件. + * + * @since 1.0.2.RELEASE + */ + PAYSCORE_USER_OPEN("PAYSCORE.USER_OPEN_SERVICE"), + + /** + * 微信支付分解除授权事件. + * + * @since 1.0.2.RELEASE + */ + PAYSCORE_USER_CLOSE("PAYSCORE.USER_CLOSE_SERVICE"), + + /** + * 用户领取微信先享卡事件. + * + * @since 1.0.2.RELEASE + */ + DISCOUNT_CARD_USER_ACCEPTED("DISCOUNT_CARD.USER_ACCEPTED"), + + /** + * 微信先享卡守约状态变化事件. + * + * @since 1.0.2.RELEASE + */ + DISCOUNT_CARD_AGREEMENT_ENDED("DISCOUNT_CARD.AGREEMENT_ENDED"), + + /** + * 微信先享卡扣费状态变化事件. + * + * @since 1.0.2.RELEASE + */ + DISCOUNT_CARD_USER_PAID("DISCOUNT_CARD.USER_PAID"), + + /** + * 优惠券核销事件. + * + * @since 1.0.0.RELEASE + */ + COUPON("COUPON.USE"), + /** + * 支付成功事件. + * + * @since 1.0.0.RELEASE + */ + TRANSACTION("TRANSACTION.SUCCESS"); + + /** + * The Event. + */ + private final String event; + + /** + * Instantiates a new Event type. + * + * @param event the event + */ + EventType(String event) { + this.event = event; + } + } + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayClient.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayClient.java new file mode 100644 index 0000000..e2011f0 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayClient.java @@ -0,0 +1,314 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + + +import cn.felord.payment.PayException; +import cn.felord.payment.wechat.WechatPayResponseErrorHandler; +import cn.felord.payment.wechat.enumeration.WechatPayV3Type; +import cn.felord.payment.wechat.v3.model.ResponseSignVerifyParams; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.springframework.http.*; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; +import org.springframework.util.Assert; +import org.springframework.web.client.DefaultResponseErrorHandler; +import org.springframework.web.client.RestOperations; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponents; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.function.BiFunction; +import java.util.function.Consumer; + +/** + * The type Wechat pay client. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public class WechatPayClient { + /** + * The Signature provider. + */ + private final SignatureProvider signatureProvider; + /** + * The Rest operations. + */ + private RestOperations restOperations; + + /** + * Instantiates a new Wechat pay service. + * + * @param signatureProvider the signature provider + */ + public WechatPayClient(SignatureProvider signatureProvider) { + this.signatureProvider = signatureProvider; + applyDefaultRestTemplate(); + } + + + /** + * 构造 {@link WechatRequestEntity}. + * + * @param the type parameter + * @param wechatPayV3Type the v 3 pay type + * @param m the m + * @return the executor + */ + public Executor withType(WechatPayV3Type wechatPayV3Type, M m) { + return new Executor<>(wechatPayV3Type, m, this.signatureProvider, this.restOperations); + } + + + /** + * The type Executor. + * + * @param the type parameter + * @author felord.cn + * @since 1.0.0.RELEASE + */ + public static class Executor { + /** + * The V3 pay type. + */ + private final WechatPayV3Type wechatPayV3Type; + /** + * The Rest operations. + */ + private final RestOperations restOperations; + /** + * The Signature provider. + */ + private final SignatureProvider signatureProvider; + /** + * The Model. + */ + private final M model; + + /** + * The Request entity bi function. + */ + private BiFunction> requestEntityBiFunction; + + /** + * The Response body consumer. + */ + private Consumer> responseBodyConsumer; + + /** + * Instantiates a new Executor. + * + * @param wechatPayV3Type the v 3 pay type + * @param model the model + * @param signatureProvider the signature provider + * @param restOperations the rest operations + */ + Executor(WechatPayV3Type wechatPayV3Type, + M model, + SignatureProvider signatureProvider, RestOperations restOperations) { + this.wechatPayV3Type = wechatPayV3Type; + this.model = model; + this.signatureProvider = signatureProvider; + this.restOperations = restOperations; + } + + /** + * Function executor. + * + * @param requestEntityBiFunction the request entity bifunction + * @return the executor + */ + public Executor function(BiFunction> requestEntityBiFunction) { + this.requestEntityBiFunction = requestEntityBiFunction; + return this; + } + + /** + * Consumer executor. + * + * @param responseBodyConsumer the response body consumer + * @return the executor + */ + public Executor consumer(Consumer> responseBodyConsumer) { + this.responseBodyConsumer = responseBodyConsumer; + return this; + } + + + /** + * Request. + */ + public void request() { + RequestEntity requestEntity = this.requestEntityBiFunction.apply(this.wechatPayV3Type, this.model); + WechatRequestEntity wechatRequestEntity = WechatRequestEntity.of(requestEntity, this.responseBodyConsumer); + this.doExecute(this.header(wechatRequestEntity)); + } + + + /** + * Download string. + * + * @return the string + */ + public String download() { + RequestEntity requestEntity = this.requestEntityBiFunction.apply(this.wechatPayV3Type, this.model); + WechatRequestEntity wechatRequestEntity = WechatRequestEntity.of(requestEntity, this.responseBodyConsumer); + return this.doDownload(this.header(wechatRequestEntity)); + } + + + /** + * 构造私钥签名. + * + * @param the type parameter + * @param requestEntity the request entity + * @return the wechat request entity + */ + private WechatRequestEntity header(WechatRequestEntity requestEntity) { + + UriComponents uri = UriComponentsBuilder.fromUri(requestEntity.getUrl()).build(); + String canonicalUrl = uri.getPath(); + String encodedQuery = uri.getQuery(); + Assert.notNull(canonicalUrl, "canonicalUrl is required"); + if (encodedQuery != null) { + canonicalUrl += "?" + encodedQuery; + } + // 签名 + HttpMethod httpMethod = requestEntity.getMethod(); + + Assert.notNull(httpMethod, "httpMethod is required"); + HttpHeaders headers = requestEntity.getHeaders(); + + String body = requestEntity.hasBody() ? Objects.requireNonNull(requestEntity.getBody()).toString() : ""; + if (WechatPayV3Type.MARKETING_IMAGE_UPLOAD.pattern().contains(canonicalUrl)) { + body = Objects.requireNonNull(headers.get("Meta-Info")).get(0); + } + + String tenantId = Objects.requireNonNull(headers.get("Pay-TenantId")).get(0); + String authorization = signatureProvider.requestSign(tenantId, httpMethod.name(), canonicalUrl, body); + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.addAll(headers); + httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + // for upload + if (Objects.isNull(httpHeaders.getContentType())) { + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + } + httpHeaders.add("Authorization", authorization); + httpHeaders.add("User-Agent", "X-Pay-Service"); + httpHeaders.remove("Meta-Info"); + httpHeaders.remove("Pay-TenantId"); + return requestEntity.headers(httpHeaders); + + } + + + /** + * Do execute. + * + * @param the type parameter + * @param requestEntity the request entity + */ + private void doExecute(WechatRequestEntity requestEntity) { + + ResponseEntity responseEntity = restOperations.exchange(requestEntity, ObjectNode.class); + HttpHeaders headers = responseEntity.getHeaders(); + ObjectNode body = responseEntity.getBody(); + HttpStatus statusCode = responseEntity.getStatusCode(); + // 微信请求id + String requestId = headers.getFirst("Request-ID"); + if (!statusCode.is2xxSuccessful()) { + throw new PayException("wechat pay server error, Request-ID " + requestId + " , statusCode " + statusCode + ",result : " + body); + } + + ResponseSignVerifyParams params = new ResponseSignVerifyParams(); + // 微信平台证书序列号 用来取微信平台证书 + params.setWechatpaySerial(headers.getFirst("Wechatpay-Serial")); + //获取应答签名 + params.setWechatpaySignature(headers.getFirst("Wechatpay-Signature")); + //构造验签名串 + params.setWechatpayTimestamp(headers.getFirst("Wechatpay-Timestamp")); + params.setWechatpayNonce(headers.getFirst("Wechatpay-Nonce")); + + String content = Objects.isNull(body) ? "" : body.toString(); + params.setBody(content); + + // 验证微信服务器签名 + if (signatureProvider.responseSignVerify(params)) { + Consumer> responseConsumer = requestEntity.getResponseBodyConsumer(); + if (Objects.nonNull(responseConsumer)) { + // 验证通过消费 + responseConsumer.accept(responseEntity); + } + } else { + throw new PayException("wechat pay signature failed, Request-ID " + requestId); + } + } + + /** + * Do download string. + * + * @param the type parameter + * @param requestEntity the request entity + * @return the string + */ + private String doDownload(WechatRequestEntity requestEntity) { + + ResponseEntity responseEntity = restOperations.exchange(requestEntity, String.class); + + HttpStatus statusCode = responseEntity.getStatusCode(); + // 微信请求id + String requestId = requestEntity.getHeaders().getFirst("Request-ID"); + if (!statusCode.is2xxSuccessful()) { + throw new PayException("wechat pay server error, Request-ID " + requestId + " , statusCode " + statusCode + ",result : " + responseEntity); + } + return Optional.ofNullable(responseEntity.getBody()).orElse(""); + } + + } + + /** + * Signature provider signature provider. + * + * @return the signature provider + */ + public SignatureProvider signatureProvider() { + return signatureProvider; + } + + /** + * Apply default rest template. + */ + private void applyDefaultRestTemplate() { + RestTemplate restTemplate = new RestTemplate(); + DefaultResponseErrorHandler errorHandler = new WechatPayResponseErrorHandler(); + restTemplate.setErrorHandler(errorHandler); + List> messageConverters = restTemplate.getMessageConverters(); + + messageConverters.removeIf(httpMessageConverter -> httpMessageConverter instanceof AllEncompassingFormHttpMessageConverter); + messageConverters.add(new ExtensionFormHttpMessageConverter()); + restTemplate.setMessageConverters(messageConverters); + this.restOperations = restTemplate; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java new file mode 100644 index 0000000..86068ae --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java @@ -0,0 +1,467 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + +import cn.felord.payment.wechat.WechatPayProperties; +import cn.felord.payment.wechat.enumeration.WeChatServer; +import cn.felord.payment.wechat.enumeration.WechatPayV3Type; +import cn.felord.payment.wechat.v3.model.payscore.*; +import com.fasterxml.jackson.databind.node.ObjectNode; +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; + +/** + * 微信支付分API. + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +public class WechatPayScoreApi extends AbstractApi { + /** + * Instantiates a new Abstract api. + * + * @param wechatPayClient the wechat pay client + * @param tenantId the tenant id + */ + public WechatPayScoreApi(WechatPayClient wechatPayClient, String tenantId) { + super(wechatPayClient, tenantId); + } + + /** + * 微信支付分-查询用户授权状态API. + *

+ * 免确认订单起始接口,【免确认订单模式】是高级接口权限,参见:业务流程说明 + *

+ * 用户申请使用服务时,商户可通过此接口查询用户是否“已授权”本服务。在“已授权”状态下的服务,用户才可以申请使用。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity userServiceState(UserServiceStateParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_USER_SERVICE_STATE, params) + .function((wechatPayV3Type, userServiceStateParams) -> { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + + MultiValueMap expandParams = new LinkedMultiValueMap<>(); + expandParams.add("appid", v3.getAppId()); + expandParams.add("service_id", params.getServiceId()); + expandParams.add("openid", params.getOpenId()); + + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(expandParams) + .toUri(); + return Get(uri); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 创建支付分订单API + *

+ * 用户申请使用服务时,商户可通过此接口申请创建微信支付分订单。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity createServiceOrder(UserServiceOrderParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_CREATE_USER_SERVICE_ORDER, params) + .function((wechatPayV3Type, orderParams) -> { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + + orderParams.setAppid(v3.getAppId()); + orderParams.setNotifyUrl(v3.getDomain().concat(orderParams.getNotifyUrl())); + + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + return Post(uri, orderParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 查询支付分订单API + *

+ * 用于查询单笔微信支付分订单详细信息。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity queryServiceOrder(QueryServiceOrderParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_QUERY_USER_SERVICE_ORDER, params) + .function((wechatPayV3Type, orderParams) -> { + MultiValueMap queryParams = new LinkedMultiValueMap<>(); + + String outOrderNo = orderParams.getOutOrderNo(); + if (StringUtils.hasText(outOrderNo)) { + queryParams.add("out_order_no", outOrderNo); + } + + String queryId = orderParams.getQueryId(); + if (StringUtils.hasText(queryId)) { + queryParams.add("query_id", queryId); + } + queryParams.add("service_id", orderParams.getServiceId()); + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + queryParams.add("appid", v3.getAppId()); + + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .queryParams(queryParams) + .build() + .toUri(); + return Get(uri); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 取消支付分订单API + *

+ * 微信支付分订单创建之后,由于某些原因导致订单不能正常支付时,可使用此接口取消订单。 + *

+ * 订单为以下状态时可以取消订单:CREATED(已创单)、DOING(进行中)(包括商户完结支付分订单后,且支付分订单收款状态为待支付USER_PAYING) + *

+ * 注意: + * • DOING状态包含了订单用户确认、已完结-待支付(USER_PAYING)的状态,因此这种状态下订单也是可以被取消的,请确认当前操作是否正确,防止误操作将完结后需要支付分收款的单据取消。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity cancelServiceOrder(CancelServiceOrderParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_CANCEL_USER_SERVICE_ORDER, params) + .function((wechatPayV3Type, orderParams) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(orderParams.getOutOrderNo()) + .toUri(); + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + orderParams.setAppid(v3.getAppId()); + orderParams.setOutOrderNo(null); + return Post(uri, orderParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 修改订单金额API + *

+ * 完结订单总金额与实际金额不符时,可通过该接口修改订单金额。 + * 例如:充电宝场景,由于机器计费问题导致商户完结订单时扣除用户99元,用户客诉成功后,商户需要按照实际的消费金额(如10元)扣费,当服务订单支付状态处于“待支付”时,商户可使用此能力修改订单金额。 + *

+ * 注意: + * • 若此笔订单已收款成功,商户直接使用退款能力,将差价退回用户即可。 + *

+ * • 修改次数>=1,第n次修改后金额 <第n-1次修改后金额 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity modifyServiceOrder(ModifyServiceOrderParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_MODIFY_USER_SERVICE_ORDER, params) + .function((wechatPayV3Type, orderParams) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(orderParams.getOutOrderNo()) + .toUri(); + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + orderParams.setAppid(v3.getAppId()); + orderParams.setOutOrderNo(null); + return Post(uri, orderParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 完结支付分订单API + *

+ * 前置条件:服务订单状态为“进行中”且订单状态说明需为[USER_CONFIRM:用户确认] + *

+ * 完结微信支付分订单。用户使用服务完成后,商户可通过此接口完结订单。 + *

+ * 特别说明: + * • 完结接口调用成功后,微信支付将自动发起免密代扣。 若扣款失败,微信支付将自动再次发起免密代扣(按照一定频次),直到扣成功为止。 + * + * @param params the params + * @return wechat response entity + */ + public WechatResponseEntity completeServiceOrder(CompleteServiceOrderParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_COMPLETE_USER_SERVICE_ORDER, params) + .function((wechatPayV3Type, orderParams) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(orderParams.getOutOrderNo()) + .toUri(); + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + orderParams.setAppid(v3.getAppId()); + orderParams.setOutOrderNo(null); + return Post(uri, orderParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 商户发起催收扣款API + *

+ * 前置条件:服务订单支付状态处于“待支付”状态 + *

+ * 当微信支付分订单支付状态处于“待支付”时,商户可使用该接口向用户发起收款。 + *

+ * 注意: + * • 此能力不影响微信支付分代商户向用户发起收款的策略。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity payServiceOrder(PayServiceOrderParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_PAY_USER_SERVICE_ORDER, params) + .function((wechatPayV3Type, orderParams) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(orderParams.getOutOrderNo()) + .toUri(); + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + orderParams.setAppid(v3.getAppId()); + orderParams.setOutOrderNo(null); + return Post(uri, orderParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 同步服务订单信息API + *

+ * 前提条件:同步商户渠道收款成功信息时,即场景类型=“Order_Paid”,订单的状态需为[MCH_COMPLETE:商户完结订单] + *

+ * 由于收款商户进行的某些“线下操作”会导致微信支付侧的订单状态与实际情况不符。例如,用户通过线下付款的方式已经完成支付,而微信支付侧并未支付成功,此时可能导致用户重复支付。因此商户需要通过订单同步接口将订单状态同步给微信支付,修改订单在微信支付系统中的状态。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity syncServiceOrder(SyncServiceOrderParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_SYNC_USER_SERVICE_ORDER, params) + .function((wechatPayV3Type, orderParams) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(orderParams.getOutOrderNo()) + .toUri(); + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + orderParams.setAppid(v3.getAppId()); + orderParams.setOutOrderNo(null); + return Post(uri, orderParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 创单结单合并API + *

+ * 相对需确认模式,免确认模式减少了用户确认授权这步操作,因此在免确认模式下商户无法获取用户的授权状态,为了解决商户的困扰,我们为免确认模式特别提供了查询授权状态和调起授权页面的api接口,这些接口仅在免确认模式下需要调用,且必须调用。 + *

+ * 该接口适用于无需微信支付分做订单风控判断的业务场景,在服务完成后,通过该接口对用户进行免密代扣。 + *

+ * 注意: + * • 限制条件:【免确认订单模式】,用户已授权状态下,可调用该接口。 + *

+ * 特别提醒:创单结单合并接口暂未对外开放,如有需要请咨询对接的微信支付运营人员,申请开通调用权限。 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity directCompleteServiceOrder(DirectCompleteServiceOrderParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_DIRECT_COMPLETE, params) + .function((wechatPayV3Type, orderParams) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + orderParams.setAppid(v3.getAppId()); + String notifyUrl = orderParams.getNotifyUrl(); + if (StringUtils.hasText(notifyUrl)) { + orderParams.setNotifyUrl(v3.getDomain().concat(notifyUrl)); + } + return Post(uri, orderParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 商户预授权API + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity permissions(ServiceOrderPermissionParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_PERMISSIONS, params) + .function((wechatPayV3Type, orderParams) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + String notifyUrl = orderParams.getNotifyUrl(); + orderParams.setAppid(v3.getAppId()); + if (StringUtils.hasText(notifyUrl)) { + orderParams.setNotifyUrl(v3.getDomain().concat(notifyUrl)); + } + return Post(uri, orderParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + + /** + * 查询与用户授权记录(授权协议号)API + *

+ * 通过authorization_code,商户查询与用户授权关系 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity queryPermissionsByAuthCode(PermissionsAuthCodeParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_PERMISSIONS_AUTH_CODE, params) + .function((wechatPayV3Type, orderParams) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .queryParam("service_id", orderParams.getServiceId()) + .build() + .expand(orderParams.getAuthorizationCode()) + .toUri(); + + return Get(uri); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 解除用户授权关系(授权协议号)API + *

+ * 通过authorization_code,商户解除用户授权关系 + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity terminatePermissionsByAuthCode(PermissionsAuthCodeParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_TERMINATE_PERMISSIONS_AUTH_CODE, params) + .function((wechatPayV3Type, orderParams) -> { + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(orderParams.getAuthorizationCode()) + .toUri(); + orderParams.setAuthorizationCode(null); + return Post(uri, orderParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 查询与用户授权记录(openid)API + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity queryPermissionsByOpenId(PermissionsOpenIdParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_PERMISSIONS_OPENID, params) + .function((wechatPayV3Type, orderParams) -> { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .queryParam("appid", v3.getAppId()) + .queryParam("service_id", orderParams.getServiceId()) + .build() + .expand(orderParams.getOpenid()) + .toUri(); + return Get(uri); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 解除用户授权关系(openid)API + * + * @param params the params + * @return the wechat response entity + */ + public WechatResponseEntity terminatePermissionsByOpenId(PermissionsOpenIdParams params) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PAY_SCORE_TERMINATE_PERMISSIONS_OPENID, params) + .function((wechatPayV3Type, orderParams) -> { + + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(orderParams.getOpenid()) + .toUri(); + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + orderParams.setAppid(v3.getAppId()); + orderParams.setOpenid(null); + return Post(uri, orderParams); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatRequestEntity.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatRequestEntity.java new file mode 100644 index 0000000..223282a --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatRequestEntity.java @@ -0,0 +1,94 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + +import com.fasterxml.jackson.databind.node.ObjectNode; +import lombok.Getter; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.util.MultiValueMap; + +import java.lang.reflect.Type; +import java.net.URI; +import java.util.function.Consumer; + +/** + * The type Wechat request entity. + * + * @param the type parameter + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Getter +public class WechatRequestEntity extends RequestEntity { + + /** + * The Response body consumer. + */ + private final Consumer> responseBodyConsumer; + + /** + * Instantiates a new Wechat request entity. + * + * @param body the body + * @param headers the headers + * @param method the method + * @param url the url + * @param type the type + * @param responseBodyConsumer the response body consumer + */ + public WechatRequestEntity(T body, MultiValueMap headers, HttpMethod method, URI url, Type type, Consumer> responseBodyConsumer) { + super(body, headers, method, url, type); + this.responseBodyConsumer = responseBodyConsumer; + } + + /** + * Headers wechat request entity. + * + * @param httpHeaders the http headers + * @return the wechat request entity + */ + public WechatRequestEntity headers(HttpHeaders httpHeaders) { + return new WechatRequestEntity<>(this.getBody(), + httpHeaders, + this.getMethod(), + this.getUrl(), + this.getType(), + this.responseBodyConsumer); + } + + + /** + * Of wechat request entity. + * + * @param requestEntity the request entity + * @param responseBodyConsumer the response body consumer + * @return the wechat request entity + */ + public static WechatRequestEntity of(RequestEntity requestEntity, Consumer> responseBodyConsumer) { + return new WechatRequestEntity<>(requestEntity.getBody(), + requestEntity.getHeaders(), + requestEntity.getMethod(), + requestEntity.getUrl(), + requestEntity.getType(), + responseBodyConsumer); + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatResponseEntity.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatResponseEntity.java new file mode 100644 index 0000000..c95a846 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatResponseEntity.java @@ -0,0 +1,126 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import java.util.Objects; + +/** + * The type Wechat response entity. + * + * @param the type parameter + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Slf4j +@Data +public class WechatResponseEntity { + /** + * The Http status. + */ + private int httpStatus; + /** + * The Body. + */ + private T body; + + + /** + * Convert {@link ResponseEntity} to {@link WechatResponseEntity}. + * + * @param responseEntity the response entity + */ + public void convert(ResponseEntity responseEntity) { + if (log.isDebugEnabled()) { + log.debug("wechat response {}", responseEntity); + } + if (Objects.nonNull(responseEntity)) { + this.httpStatus = responseEntity.getStatusCodeValue(); + this.body = responseEntity.getBody(); + } else { + this.httpStatus = HttpStatus.REQUEST_TIMEOUT.value(); + this.body = null; + } + } + + + /** + * Is 1 xx informational boolean. + * + * @return the boolean + */ + public boolean is1xxInformational() { + if (log.isDebugEnabled()) { + log.debug("wechat httpStatus {}", this.httpStatus); + } + return HttpStatus.valueOf(this.httpStatus).is1xxInformational(); + } + + /** + * Is 2xx successful boolean. + * + * @return the boolean + */ + public boolean is2xxSuccessful() { + if (log.isDebugEnabled()) { + log.debug("wechat httpStatus {}", this.httpStatus); + } + return HttpStatus.valueOf(this.httpStatus).is2xxSuccessful(); + } + + /** + * Is 3xx redirection boolean. + * + * @return the boolean + */ + public boolean is3xxRedirection() { + if (log.isDebugEnabled()) { + log.debug("wechat httpStatus {}", this.httpStatus); + } + return HttpStatus.valueOf(this.httpStatus).is3xxRedirection(); + } + + /** + * Is 4xx client error boolean. + * + * @return the boolean + */ + public boolean is4xxClientError() { + if (log.isDebugEnabled()) { + log.debug("wechat httpStatus {}", this.httpStatus); + } + return HttpStatus.valueOf(this.httpStatus).is4xxClientError(); + } + + /** + * Is 5xx server error boolean. + * + * @return the boolean + */ + public boolean is5xxServerError() { + if (log.isDebugEnabled()) { + log.debug("wechat httpStatus {}", this.httpStatus); + } + return HttpStatus.valueOf(this.httpStatus).is5xxServerError(); + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Amount.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Amount.java new file mode 100644 index 0000000..621b14f --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Amount.java @@ -0,0 +1,39 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 支付金额 货币单位【分】默认使用人民币标识CNY + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class Amount { + /** + * The Total. + */ + private int total; + /** + * The Currency. + */ + private String currency = "CNY"; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CallbackParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CallbackParams.java new file mode 100644 index 0000000..65ec281 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CallbackParams.java @@ -0,0 +1,84 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 微信支付回调请求参数. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CallbackParams { + /** + * The Id. + */ + private String id; + /** + * The Create time. + */ + private String createTime; + /** + * The Event type. + */ + private String eventType; + /** + * The Resource type. + */ + private String resourceType; + /** + * The Summary. + */ + private String summary; + /** + * The Resource. + */ + private Resource resource; + + + /** + * The type Resource. + */ + @Data + public static class Resource { + /** + * The Algorithm. + */ + private String algorithm; + /** + * The Ciphertext. + */ + private String ciphertext; + /** + * The Associated data. + */ + private String associatedData; + /** + * The Nonce. + */ + private String nonce; + /** + * The Original type. + */ + private String originalType; + } + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/ConsumeInformation.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/ConsumeInformation.java new file mode 100644 index 0000000..f172d1b --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/ConsumeInformation.java @@ -0,0 +1,54 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +import java.util.List; + +/** + * 已实扣代金券信息 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class ConsumeInformation { + + /** + * The Consume mchid. + */ + private String consumeMchid; + + /** + * The Consume time. + */ + private String consumeTime; + + /** + * The Goods detail. + */ + private List goodsDetail; + + /** + * The Transaction id. + */ + private String transactionId; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponAvailableTime.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponAvailableTime.java new file mode 100644 index 0000000..dff3444 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponAvailableTime.java @@ -0,0 +1,43 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * The type Coupon available time. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CouponAvailableTime { + /** + * The Available time after receive. + */ + private Long availableTimeAfterReceive; + /** + * The Fix available time. + */ + private FixAvailableTime fixAvailableTime; + /** + * The Second day available. + */ + private Boolean secondDayAvailable; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponConsumeData.java new file mode 100644 index 0000000..ed11112 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponConsumeData.java @@ -0,0 +1,112 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 微信代金券核销通知参数 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CouponConsumeData { + + /** + * The Available begin time. + */ + private String availableBeginTime; + /** + * The Available end time. + */ + private String availableEndTime; + /** + * The Consume information. + */ + private ConsumeInformation consumeInformation; + /** + * The Coupon id. + */ + private String couponId; + /** + * The Coupon name. + */ + private String couponName; + /** + * The Coupon type. + */ + private CouponType couponType; + /** + * The Create time. + */ + private String createTime; + /** + * The Description. + */ + private String description; + /** + * The Discount to. + */ + private DiscountTo discountTo; + /** + * The No cash. + */ + private Boolean noCash; + /** + * The Normal coupon information. + */ + private NormalCouponInformation normalCouponInformation; + /** + * The Singleitem. + */ + private Boolean singleitem; + /** + * The Singleitem discount off. + */ + private SingleitemDiscountOff singleitemDiscountOff; + /** + * The Status. + */ + private String status; + /** + * The Stock creator mchid. + */ + private String stockCreatorMchid; + /** + * The Stock id. + */ + private String stockId; + + /** + * 券类型 + * + * @since 1.0.2.RELEASE + */ + public enum CouponType{ + /** + * 满减券 + */ + NORMAL, + /** + * 减至券 + */ + CUT_TO + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponDetailsQueryParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponDetailsQueryParams.java new file mode 100644 index 0000000..2e6f5ff --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponDetailsQueryParams.java @@ -0,0 +1,41 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 查询代金券详情API参数 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CouponDetailsQueryParams { + /** + * 用户在appid下授权得到的openid + *

+ * 参考发券 + */ + private String openId; + /** + * 代金券id + */ + private String couponId; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponUseRule.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponUseRule.java new file mode 100644 index 0000000..a3f13c5 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/CouponUseRule.java @@ -0,0 +1,109 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +import java.util.List; + +/** + * 核销规则. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CouponUseRule { + + + /** + * 可核销商品编码 + */ + private List availableItems; + + /** + * 可用商户 + */ + private List availableMerchants; + + /** + * 是否可以叠加使用 + */ + private Boolean combineUse; + + /** + * 券生效时间 + */ + private CouponAvailableTime couponAvailableTime; + + /** + * 固定面额满减券使用规则 + */ + private FixedNormalCoupon fixedNormalCoupon; + + /** + * 订单优惠标记 + */ + private List goodsTag; + /** + * 指定支付方式 + */ + private List limitPay; + /** + * 指定银行卡BIN + */ + private LimitCard limitCard; + + /** + * 支付方式,枚举值: + * + *

    + *
  • MICROAPP:小程序支付
  • + *
  • APPPAY:APP支付
  • + *
  • PPAY:免密支付
  • + *
  • CARD:刷卡支付
  • + *
  • FACE:人脸支付
  • + *
  • OTHER:其他支付
  • + *
+ */ + private String tradeType; + + + /** + * 指定银行卡BIN + *

+ * 限定该批次核销的指定银行卡BIN,当批次限定了指定银行卡时方可生效 + */ + @Data + public static class LimitCard { + /** + * 银行卡名称 + *

+ * 将在微信支付收银台向用户展示,最多4个中文字 + */ + private String name; + /** + * 指定卡BIN + *

+ * 使用指定卡BIN的银行卡支付方可享受优惠,按json格式 + * 特殊规则:单个卡BIN的字符长度为【6,9】,条目个数限制为【1,10】。 + * 示例值:['62123456','62123457'] + */ + private List bin; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Detail.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Detail.java new file mode 100644 index 0000000..2c2381f --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Detail.java @@ -0,0 +1,45 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +import java.util.List; + +/** + * The type Detail. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class Detail { + /** + * 订单原价 + */ + private int costPrice; + /** + * 商品小票ID + */ + private String invoiceId; + /** + * 单品列表 + */ + private List goodsDetail; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/DiscountTo.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/DiscountTo.java new file mode 100644 index 0000000..2b07faf --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/DiscountTo.java @@ -0,0 +1,41 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 减至优惠限定字段,仅减至优惠场景有返回 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class DiscountTo { + + /** + * The Cut to price. + */ + private Long cutToPrice; + /** + * The Max price. + */ + private Long maxPrice; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FixAvailableTime.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FixAvailableTime.java new file mode 100644 index 0000000..ae6ba94 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FixAvailableTime.java @@ -0,0 +1,47 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +import java.util.List; + +/** + * The type Fix available time. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class FixAvailableTime { + + /** + * The Available week day. + */ + private List availableWeekDay; + /** + * The Begin time. + */ + private Long beginTime; + /** + * The End time. + */ + private Long endTime; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FixedNormalCoupon.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FixedNormalCoupon.java new file mode 100644 index 0000000..ccc15c4 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FixedNormalCoupon.java @@ -0,0 +1,44 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + + +/** + * 固定面额满减券使用规则, stock_type为NORMAL时必填 + *

+ * 满transactionMinimum 减少 couponAmount + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class FixedNormalCoupon { + + /** + * 面额,单位分 + */ + private Long couponAmount; + /** + * 门槛 满M元可用 + */ + private Long transactionMinimum; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FundFlowBillParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FundFlowBillParams.java new file mode 100644 index 0000000..b4ad6af --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/FundFlowBillParams.java @@ -0,0 +1,52 @@ +/* + * + * Copyright 2019-2021 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model; + +import cn.felord.payment.wechat.enumeration.FundFlowAccountType; +import cn.felord.payment.wechat.enumeration.TarType; +import lombok.Data; + +import java.time.LocalDate; + +/** + * 申请资金账单请求参数 + * + * @author felord.cn + * @since 1.0.3.RELEASE + */ +@Data +public class FundFlowBillParams { + /** + * 账单日期,必传。 + *

+ * 格式YYYY-MM-DD,仅支持三个月内的账单下载申请。 + */ + private LocalDate billDate; + /** + * 资金账户类型,不填则默认值为{@link FundFlowAccountType#BASIC} + * + * @see FundFlowAccountType + */ + private FundFlowAccountType accountType; + /** + * 压缩类型,不填默认值为数据流 + * + * @see TarType + */ + private TarType tarType; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Goods.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Goods.java new file mode 100644 index 0000000..1fd46f9 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Goods.java @@ -0,0 +1,49 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class Goods { + /** + * 商户侧商品编码 + */ + private String merchantGoodsId; + /** + * 微信侧商品编码 + */ + private String wechatpayGoodsId; + /** + * 商品名称 + */ + private String goodsName; + /** + * 商品数量 + */ + private int quantity; + /** + * 商品单价 + */ + private int unitPrice; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/GoodsDetail.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/GoodsDetail.java new file mode 100644 index 0000000..2093391 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/GoodsDetail.java @@ -0,0 +1,49 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 商户下单接口传的单品信息 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class GoodsDetail { + + /** + * The Discount amount. + */ + private Long discountAmount; + /** + * The Goods id. + */ + private String goodsId; + /** + * The Price. + */ + private Long price; + /** + * The Quantity. + */ + private Long quantity; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/H5Info.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/H5Info.java new file mode 100644 index 0000000..ef47f41 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/H5Info.java @@ -0,0 +1,51 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * H5 信息 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class H5Info { + /** + * 场景类型 + */ + private String type; + /** + * 应用名称 + */ + private String appName; + /** + * 网站URL + */ + private String appUrl; + /** + * IOS 平台 BundleID + */ + private String bundleId; + /** + * Android 平台 PackageName + */ + private String packageName; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/MchQueryParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/MchQueryParams.java new file mode 100644 index 0000000..fb34284 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/MchQueryParams.java @@ -0,0 +1,47 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 查询代金券可用商户. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class MchQueryParams { + /** + * 必填 + *

+ * 查询代金券可用商户API 分页页码,最大1000。 + */ + private Integer offset = 0; + /** + * 必填 + *

+ * 查询代金券可用商户API 最大50。 + */ + private Integer limit = 10; + /** + * 批次ID + */ + private String stockId; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/NormalCouponInformation.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/NormalCouponInformation.java new file mode 100644 index 0000000..bb87836 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/NormalCouponInformation.java @@ -0,0 +1,41 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 普通满减券面额、门槛信息 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class NormalCouponInformation { + + /** + * The Coupon amount. + */ + private Long couponAmount; + /** + * The Transaction minimum. + */ + private Long transactionMinimum; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PatternInfo.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PatternInfo.java new file mode 100644 index 0000000..e93c1e8 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PatternInfo.java @@ -0,0 +1,54 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + + +import cn.felord.payment.wechat.enumeration.CouponBgColor; +import lombok.Data; + +/** + * 优惠券样式 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class PatternInfo { + /** + * 背景色 + */ + private CouponBgColor backgroundColor; + /** + * 券详情图片 + */ + private String couponImage; + /** + * 使用说明 + */ + private String description; + /** + * 商户logo + */ + private String merchantLogo; + /** + * 商户名称 + */ + private String merchantName; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PayParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PayParams.java new file mode 100644 index 0000000..25a7e21 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PayParams.java @@ -0,0 +1,84 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + + +import lombok.Data; + +/** + * 支付请求参数. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class PayParams { + /** + * The Appid. + */ + private String appid; + /** + * The Mchid. + */ + private String mchid; + /** + * 商品描述 + * Image形象店-深圳腾大-QQ公仔 + */ + private String description; + /** + * 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一,详见【商户订单号】。 + * 示例值:1217752501201407033233368018 + */ + private String outTradeNo; + /** + * 订单失效时间 YYYY-MM-DDTHH:mm:ss+TIMEZONE + */ + private String timeExpire; + /** + * 附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用 + */ + private String attach; + /** + * 通知URL必须为直接可访问的URL,不允许携带查询串。 + */ + private String notifyUrl; + /** + * 订单优惠标记 + */ + private String goodsTag; + /** + * 支付金额 + */ + private Amount amount; + /** + * 支付者 JSAPI/小程序下单 必传 + */ + private Payer payer; + /** + * 优惠功能 + */ + private Detail detail; + /** + * 场景信息 + */ + private SceneInfo sceneInfo; + + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Payer.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Payer.java new file mode 100644 index 0000000..5802b6e --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/Payer.java @@ -0,0 +1,43 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * The type Payer. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class Payer { + /** + * 用户标识 + */ + private String openid; + /** + * 用户服务标识 + */ + private String spOpenid; + /** + * 用户子标识 + */ + private String subOpenid; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PromotionDetail.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PromotionDetail.java new file mode 100644 index 0000000..a932d47 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/PromotionDetail.java @@ -0,0 +1,111 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +import java.util.List; + +/** + * The type Promotion detail. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class PromotionDetail { + + /** + * The Amount. + */ + private Long amount; + /** + * The Coupon id. + */ + private String couponId; + /** + * The Currency. + */ + private String currency; + /** + * The Goods detail. + */ + private List goodsDetail; + /** + * The Merchant contribute. + */ + private Long merchantContribute; + /** + * The Name. + */ + private String name; + /** + * The Other contribute. + */ + private Long otherContribute; + /** + * The Scope. + */ + private String scope; + /** + * The Stock id. + */ + private String stockId; + /** + * The Type. + */ + private String type; + /** + * The Wechatpay contribute. + */ + private Long wechatpayContribute; + + /** + * The type Goods detail. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ + @Data + public static class GoodsDetail { + + /** + * The Goods id. + */ + private String goodsId; + /** + * The Quantity. + */ + private Long quantity; + /** + * The Unit price. + */ + private Long unitPrice; + /** + * The Discount amount. + */ + private Long discountAmount; + /** + * The Goods remark. + */ + private String goodsRemark; + + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/ResponseSignVerifyParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/ResponseSignVerifyParams.java new file mode 100644 index 0000000..74be136 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/ResponseSignVerifyParams.java @@ -0,0 +1,53 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import cn.felord.payment.wechat.v3.SignatureProvider; +import lombok.Data; + +/** + * 微信的响应签名校验参数 + * + * @author felord.cn + * @see SignatureProvider#responseSignVerify(ResponseSignVerifyParams) SignatureProvider#responseSignVerify(ResponseSignVerifyParams)SignatureProvider#responseSignVerify(ResponseSignVerifyParams) + * @since 1.0.0.RELEASE + */ +@Data +public class ResponseSignVerifyParams { + /** + * response.headers['Wechatpay-Serial'] 当前使用的微信平台证书序列号 + */ + private String wechatpaySerial; + /** + * response.headers['Wechatpay-Signature'] 微信平台签名 + */ + private String wechatpaySignature; + /** + * response.headers['Wechatpay-Timestamp'] 微信服务器的时间戳 + */ + private String wechatpayTimestamp; + /** + * response.headers['Wechatpay-Nonce'] 微信服务器提供的随机串 + */ + private String wechatpayNonce; + /** + * response.body 微信服务器的响应体 + */ + private String body; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SceneInfo.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SceneInfo.java new file mode 100644 index 0000000..3cc6f5c --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SceneInfo.java @@ -0,0 +1,47 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 场景信息 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class SceneInfo { + /** + * 用户终端IP + */ + private String payerClientIp; + /** + * 商户端设备号 + */ + private String deviceId; + /** + * 商户门店信息 + */ + private StoreInfo storeInfo; + /** + * H5 场景信息 + */ + private H5Info h5Info; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SettleInfo.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SettleInfo.java new file mode 100644 index 0000000..960564c --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SettleInfo.java @@ -0,0 +1,37 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class SettleInfo { + /** + * 是否指定分账 + */ + private Boolean profitSharing; + /** + * 补差金额 + */ + private Integer subsidyAmount; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SingleitemDiscountOff.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SingleitemDiscountOff.java new file mode 100644 index 0000000..0f556d4 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/SingleitemDiscountOff.java @@ -0,0 +1,34 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 单品优惠特定信息 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class SingleitemDiscountOff { + + private Long singlePriceMax; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StockUseRule.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StockUseRule.java new file mode 100644 index 0000000..42c1c07 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StockUseRule.java @@ -0,0 +1,57 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 批次使用规则 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class StockUseRule { + + /** + * 总消耗金额,单位:分。 + * max_amount需要等于coupon_amount(面额) * max_coupons(发放总上限) + */ + private Long maxAmount; + /** + * 单天最高消耗金额,单位:分 + */ + private Long maxAmountByDay; + /** + * 最大发券数 + */ + private Long maxCoupons; + /** + * 单个用户可领个数,每个用户最多60张券 + */ + private Long maxCouponsPerUser; + /** + * 是否开启自然人限制 + */ + private Boolean naturalPersonLimit; + /** + * api发券防刷 + */ + private Boolean preventApiAbuse; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksCreateParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksCreateParams.java new file mode 100644 index 0000000..dae859b --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksCreateParams.java @@ -0,0 +1,88 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.time.OffsetDateTime; + +/** + * 创建优惠券批次参数. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class StocksCreateParams { + /** + * 批次名称 + */ + private String stockName; + /** + * 仅配置商户可见,用于自定义信息 + */ + private String comment; + /** + * 批次归属商户号 + */ + private String belongMerchant; + /** + * 批次开始时间 rfc 3339 yyyy-mm-ddthh:mm:ss.sss+timezone + */ + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "GMT+8") + private OffsetDateTime availableBeginTime; + /** + * 批次结束时间 rfc 3339 YYYY-MM-DDTHH:mm:ss.sss+TIMEZONE + */ + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "GMT+8") + private OffsetDateTime availableEndTime; + /** + * 可创建代金券的类型包含预充值和免充值两种类型。此字段用来标识制券 是否无资金流 + *

+ * ● 预充值代金券适用于第三方出资策划的活动,例如:满100减10. 指订单金额100元,用户实付90元,商户实收100元。设置为{@link Boolean#FALSE} + *

+ * ● 免充值适用于商户策划的活动,例如:满100减10。 指订单金额100元,用户实付90元(用户领券后,在支付中直接核销10元),商户实收90元。设置为{@link Boolean#TRUE} + */ + private Boolean noCash; + /** + * 批次类型 + */ + private String stockType = "NORMAL"; + /** + * 商户单据号 + */ + private String outRequestNo; + /** + * 扩展属性 + */ + private String extInfo; + /** + * 批次使用规则 + */ + private StockUseRule stockUseRule; + /** + * 核销规则 + */ + private CouponUseRule couponUseRule; + /** + * 代金券样式 + */ + private PatternInfo patternInfo; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksQueryParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksQueryParams.java new file mode 100644 index 0000000..35f8a20 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksQueryParams.java @@ -0,0 +1,65 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model; + +import cn.felord.payment.wechat.enumeration.StockStatus; +import lombok.Data; + +import java.time.OffsetDateTime; + +/** + * 查询参数,适用以下接口: + *

+ * 条件查询批次列表API + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class StocksQueryParams { + /** + * 必填 + *

+ * 条件查询批次列表API 页码从0开始,默认第0页,传递1可能出错。 + */ + private Integer offset = 0; + /** + * 必填 + *

+ * 条件查询批次列表API 分页大小,最大10。 + */ + private Integer limit = 10; + /** + * 选填 + *

+ * 起始时间 最终满足格式 {@code yyyy-MM-dd'T'HH:mm:ss.SSSXXX} + */ + private OffsetDateTime createStartTime; + /** + * 选填 + *

+ * 终止时间 最终满足格式 {@code yyyy-MM-dd'T'HH:mm:ss.SSSXXX} + */ + private OffsetDateTime createEndTime; + /** + * 根据API而定 + *

+ * 批次状态 + */ + private StockStatus status; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksSendParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksSendParams.java new file mode 100644 index 0000000..f814c2c --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StocksSendParams.java @@ -0,0 +1,61 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * 代金券发放接口请求参数 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class StocksSendParams { + /** + * 批次号 必须为代金券(全场券或单品券)批次号,不支持立减与折扣。 + */ + private String stockId; + /** + * 用户openid 该openid需要与接口传入中的appid有对应关系。 + */ + private String openid; + /** + * 商户单据号 + */ + private String outRequestNo; + /** + * 公众账号ID + */ + private String appid; + /** + * 创建批次的商户号 + */ + private String stockCreatorMchid; + /** + * 指定面额发券场景,券面额,其他场景不需要填,单位:分。 + * 校验规则:仅在发券时指定面额及门槛的场景才生效,常规发券场景请勿传入该信息。 + */ + private Long couponValue; + /** + * 指定面额发券批次门槛,其他场景不需要,单位:分。 + * 校验规则:仅在发券时指定面额及门槛的场景才生效,常规发券场景请勿传入该信息。 + */ + private Long couponMinimum; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StoreInfo.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StoreInfo.java new file mode 100644 index 0000000..83ef02a --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/StoreInfo.java @@ -0,0 +1,45 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class StoreInfo { + /** + * 门店编号 + */ + private String id; + /** + * 门店名称 + */ + private String name; + /** + * 地区编码 + */ + private String areaCode; + /** + * 详细地址 + */ + private String address; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TradeBillParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TradeBillParams.java new file mode 100644 index 0000000..b44e0b3 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TradeBillParams.java @@ -0,0 +1,70 @@ +/* + * + * Copyright 2019-2021 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model; + +import cn.felord.payment.wechat.enumeration.TarType; +import cn.felord.payment.wechat.enumeration.TradeBillType; +import lombok.Data; + +import java.time.LocalDate; + +/** + * 申请交易账单请求参数 + * + * @author felord.cn + * @since 1.0.3.RELEASE + */ +@Data +public class TradeBillParams { + /** + * 账单日期,必传。 + *

+ * 格式YYYY-MM-DD,仅支持三个月内的账单下载申请。 + */ + private LocalDate billDate; + /** + * 二级商户号,选填。 + * + *

    + *
  1. 若商户是直连商户:无需填写该字段。
  2. + *
  3. 若商户是服务商: + *
      + *
    • 不填则默认返回服务商下的交易或退款数据。
    • + *
    • 如需下载某个子商户下的交易或退款数据,则该字段必填。
    • + *
    + *
  4. + *
+ *

+ * 特殊规则:最小字符长度为8 + *

+ * 注意:仅适用于电商平台 服务商 + */ + private String subMchid; + /** + * 账单类型,不填则默认值为{@link TradeBillType#ALL} + * + * @see TradeBillType + */ + private TradeBillType billType; + /** + * 压缩类型,不填默认值为数据流 + * + * @see TarType + */ + private TarType tarType; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TransactionConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TransactionConsumeData.java new file mode 100644 index 0000000..cf9ee6d --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TransactionConsumeData.java @@ -0,0 +1,149 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import cn.felord.payment.wechat.enumeration.TradeState; +import cn.felord.payment.wechat.enumeration.TradeType; +import lombok.Data; + +import java.util.List; + +/** + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class TransactionConsumeData { + + /** + * The Amount. + */ + private Amount amount; + /** + * The Appid. + */ + private String appid; + /** + * The Attach. + */ + private String attach; + /** + * The Bank type. + */ + private String bankType; + /** + * The Mchid. + */ + private String mchid; + /** + * The Out trade no. + */ + private String outTradeNo; + /** + * The Payer. + */ + private Payer payer; + /** + * The Promotion detail. + */ + private List promotionDetail; + /** + * The Scene info. + */ + private SceneInfo sceneInfo; + /** + * The Success time. + */ + private String successTime; + /** + * 在 1.0.0.RELEASE 直接返回了枚举字符串,1.0.2.RELEASE 中变更为枚举 + * @since 1.0.0.RELEASE + */ + private TradeState tradeState; + /** + * The Trade state desc. + */ + private String tradeStateDesc; + /** + * 在 1.0.0.RELEASE 直接返回了枚举字符串,1.0.2.RELEASE 中变更为枚举 + * @since 1.0.0.RELEASE + */ + private TradeType tradeType; + /** + * The Transaction id. + */ + private String transactionId; + + + /** + * The type Payer. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ + @Data + public static class Payer { + /** + * The Openid. + */ + private String openid; + } + + /** + * The type Scene info. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ + @Data + public static class SceneInfo { + /** + * The Device id. + */ + private String deviceId; + } + + /** + * The type Amount. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ + @Data + public static class Amount { + /** + * The Total. + */ + private Integer total; + /** + * The Payer total. + */ + private Integer payerTotal; + /** + * The Currency. + */ + private String currency; + /** + * The Payer currency. + */ + private String payerCurrency; + } + + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TransactionQueryParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TransactionQueryParams.java new file mode 100644 index 0000000..05096c1 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/TransactionQueryParams.java @@ -0,0 +1,31 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class TransactionQueryParams { + private String mchId; + private String transactionIdOrOutTradeNo; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.java new file mode 100644 index 0000000..b0f152e --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/UserCouponsQueryParams.java @@ -0,0 +1,86 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model; + +import lombok.Data; + +/** + * The type User coupons query params. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class UserCouponsQueryParams { + /** + * 用户公众号服务号标识 + */ + private String openId; + /** + * 公众服务号ID + */ + private String appId; + /** + * 批次号 + */ + private String stockId; + /** + * 券状态 null 不生效 + */ + private Status status; + /** + * 创建批次的商户号 + */ + private String creatorMchId; + /** + * 批次发放商户号 + */ + private String senderMchId; + /** + * 可用商户号 + */ + private String availableMchId; + /** + * 分页页码 + */ + private Integer offset = 0; + /** + * 分页大小 + */ + private Integer limit = 20; + + + /** + * The enum Status. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ + public enum Status { + /** + * Sended status. + */ + SENDED, + /** + * Used status. + */ + USED + } + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineAmount.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineAmount.java new file mode 100644 index 0000000..f0f1474 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineAmount.java @@ -0,0 +1,46 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.combine; + + +import lombok.Data; + +/** + * 合单支付订单金额信息. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CombineAmount { + /** + * 符合ISO 4217标准的三位字母代码,必填,人民币:CNY 。 + * + * @since 1.0.0.RELEASE + */ + private String currency = "CNY"; + /** + * 子单金额,单位为分,必填 + *

+ * 境外场景下,标价金额要超过商户结算币种的最小单位金额,例如结算币种为美元,则标价金额必须大于1美分 + * + * @since 1.0.0.RELEASE + */ + private Long totalAmount; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.java new file mode 100644 index 0000000..1f41c56 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineCloseParams.java @@ -0,0 +1,74 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.combine; + +import lombok.Data; + +import java.util.List; + +/** + * 合单支付 关单参数. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CombineCloseParams { + /** + * 合单商户appid,必填 + */ + private String combineAppid; + /** + * 合单商户订单号,必填,商户侧需要保证同一商户下唯一 + */ + private String combineOutTradeNo; + /** + * 子单信息,必填,最多50单 + */ + private List subOrders; + + /** + * 关单-子单信息,最多50单. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ + @Data + public static class ClosingSubOrder { + /** + * 子单发起方商户号,必填,必须与发起方appid有绑定关系。 + */ + private String mchid; + + /** + * 子单商户订单号,必填,商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。 + */ + private String outTradeNo; + + /** + * 二级商户商户号,由微信支付生成并下发。 + *

+ * 服务商子商户的商户号,被合单方。 + *

+ * 直连商户不用传二级商户号。 + */ + private String subMchid; + + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineH5PayParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineH5PayParams.java new file mode 100644 index 0000000..2d131fb --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineH5PayParams.java @@ -0,0 +1,77 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.combine; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; + +/** + * 合单支付 H5支付参数. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CombineH5PayParams { + + /** + * 合单商户appid,必填 + */ + private String combineAppid; + /** + * 合单商户号,必填 + */ + private String combineMchid; + /** + * 合单商户订单号,必填,商户侧需要保证同一商户下唯一 + */ + private String combineOutTradeNo; + /** + * 合单支付者信息,选填 + */ + private CombinePayerInfo combinePayerInfo; + /** + * 通知地址,必填,接收微信支付异步通知回调地址,通知url必须为直接可访问的URL,不能携带参数。 + *

+ * 合单支付需要独立的通知地址。 + */ + private String notifyUrl; + /** + * 合单支付场景信息描述,选填 + */ + private CombineH5SceneInfo sceneInfo; + /** + * 子单信息,必填,最多50单 + */ + private List subOrders; + /** + * 交易起始时间,选填 + */ + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "GMT+8") + private OffsetDateTime timeStart; + /** + * 交易结束时间,选填 + */ + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "GMT+8") + private OffsetDateTime timeExpire; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineH5SceneInfo.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineH5SceneInfo.java new file mode 100644 index 0000000..c13f5b0 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineH5SceneInfo.java @@ -0,0 +1,37 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model.combine; + +import cn.felord.payment.wechat.v3.model.H5Info; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 合单支付 H5场景信息. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class CombineH5SceneInfo extends CombineSceneInfo { + /** + * H5 支付信息. + */ + private H5Info h5Info; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombinePayParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombinePayParams.java new file mode 100644 index 0000000..9f6ad3c --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombinePayParams.java @@ -0,0 +1,77 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.combine; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; + +/** + * 合单支付 APP支付、JSAPI支付、小程序支付、Native支付参数. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CombinePayParams { + + /** + * 合单商户appid,必填 + */ + private String combineAppid; + /** + * 合单商户号,必填 + */ + private String combineMchid; + /** + * 合单商户订单号,必填,商户侧需要保证同一商户下唯一 + */ + private String combineOutTradeNo; + /** + * 合单支付者信息,选填 + */ + private CombinePayerInfo combinePayerInfo; + /** + * 通知地址,必填,接收微信支付异步通知回调地址,通知url必须为直接可访问的URL,不能携带参数。 + *

+ * 合单支付需要独立的通知地址。 + */ + private String notifyUrl; + /** + * 合单支付场景信息描述,选填 + */ + private CombineSceneInfo sceneInfo; + /** + * 子单信息,必填,最多50单 + */ + private List subOrders; + /** + * 交易起始时间,选填 + */ + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "GMT+8") + private OffsetDateTime timeStart; + /** + * 交易结束时间,选填 + */ + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "GMT+8") + private OffsetDateTime timeExpire; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombinePayerInfo.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombinePayerInfo.java new file mode 100644 index 0000000..638b68e --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombinePayerInfo.java @@ -0,0 +1,36 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.combine; + + +import lombok.Data; + +/** + * 合单支付,支付者信息. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CombinePayerInfo { + /** + * 使用合单appid获取的对应用户openid。是用户在商户appid下的唯一标识。 + */ + private String openid; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineSceneInfo.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineSceneInfo.java new file mode 100644 index 0000000..b28e9c3 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineSceneInfo.java @@ -0,0 +1,39 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.combine; + +import lombok.Data; + +/** + * 合单支付场景信息. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CombineSceneInfo { + /** + * 商户设备号,选填。 + */ + private String deviceId; + /** + * 用户终端ip,必填。 + */ + private String payerClientIp; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineTransactionConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineTransactionConsumeData.java new file mode 100644 index 0000000..38682ce --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/CombineTransactionConsumeData.java @@ -0,0 +1,156 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model.combine; + +import cn.felord.payment.wechat.enumeration.TradeState; +import cn.felord.payment.wechat.enumeration.TradeType; +import cn.felord.payment.wechat.v3.model.SceneInfo; +import lombok.Data; + +import java.util.List; + + +/** + * 合单支付回调解密数据. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class CombineTransactionConsumeData { + + /** + * 合单商户appid,即合单发起方的appid + */ + private String combineAppid; + + /** + * 合单商户号. + */ + private String combineMchid; + + /** + * 合单商户订单号. + */ + private String combineOutTradeNo; + + /** + * 支付者. + */ + private CombinePayerInfo combinePayerInfo; + + /** + * 场景信息,合单支付回调只返回device_id + */ + private SceneInfo sceneInfo; + + /** + * 合单支付回调子订单. + */ + private List subOrders; + + /** + * 合单支付回调子订单. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ + @Data + public static class SubOrderCallback { + + + /** + * 订单金额信息 + */ + private CombineAmount amount; + + /** + * 附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用。 + */ + private String attach; + + /** + * 付款银行类型,参见开户银行对照表 + */ + private String bankType; + + /** + * 子单发起方商户号,必须与发起方Appid有绑定关系。(即电商平台mchid) + */ + private String mchid; + + /** + * 子单商户侧订单号 + */ + private String outTradeNo; + + /** + * 二级商户商户号,由微信支付生成并下发。 + * 服务商子商户的商户号,被合单方。直连商户不用传二级商户号。 + */ + private String subMchid; + + /** + * 支付完成时间 + */ + private String successTime; + + /** + * 交易状态 + */ + private TradeState tradeState; + + /** + * 交易类型 + */ + private TradeType tradeType; + + /** + * 微信支付侧订单号 + */ + private String transactionId; + + } + + /** + * 订单金额信息. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ + @Data + public static class CombineAmount { + /** + * 标价金额,单位为分. + */ + private Long totalAmount; + /** + * 标价币种. + */ + private String currency; + /** + * 现金支付金额. + */ + private Long payerAmount; + /** + * 现金支付币种. + */ + private String payerCurrency; + } + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/SubOrder.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/SubOrder.java new file mode 100644 index 0000000..011061d --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/combine/SubOrder.java @@ -0,0 +1,71 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.combine; + +import cn.felord.payment.wechat.v3.model.SettleInfo; +import lombok.Data; + +/** + * 子单信息,最多50单. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +@Data +public class SubOrder { + /** + * 合单支付订单金额信息,必填。 + */ + private CombineAmount amount; + + /** + * 附加数据,必填,在查询API和支付通知中原样返回,可作为自定义参数使用。 + */ + private String attach; + + /** + * 商品描述,必填,需传入应用市场上的APP名字-实际商品名称,例如:天天爱消除-游戏充值。 + */ + private String description; + + /** + * 子单发起方商户号,必填,必须与发起方appid有绑定关系。 + */ + private String mchid; + + /** + * 子单商户订单号,必填,商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。 + */ + private String outTradeNo; + + /** + * 二级商户商户号,由微信支付生成并下发。 + *

+ * 服务商子商户的商户号,被合单方。 + *

+ * 直连商户不用传二级商户号。 + */ + private String subMchid; + + /** + * 结算信息,选填 + */ + private SettleInfo settleInfo; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardAcceptedConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardAcceptedConsumeData.java new file mode 100644 index 0000000..f649370 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardAcceptedConsumeData.java @@ -0,0 +1,185 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model.discountcard; + +import cn.felord.payment.wechat.enumeration.ContractStatus; +import cn.felord.payment.wechat.enumeration.CountType; +import lombok.Data; + +import java.util.List; + +/** + * 用户领取微信先享卡通知解密 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class DiscountCardAcceptedConsumeData { + + /** + * 应用appid需要绑定微信商户平台 + */ + private String appid; + /** + * 先享卡ID,唯一标识一个先享卡 + */ + private String cardId; + /** + * 先享卡模板ID,唯一定义此资源的标识。创建模板后可获得 + */ + private String cardTemplateId; + /** + * 创建先享卡的时间 + */ + private String createTime; + /** + * 商户号 + */ + private String mchid; + /** + * 用户先享卡目标列表 + */ + private List objectives; + /** + * 用户标识,用户在{@code appid}下的唯一标识 + */ + private String openid; + /** + * 商户领卡号,商户在请求领卡预受理接口时传入的领卡请求号,同一个商户号下必须唯一,要求32个字符内,只能是数字、大小写字母_-|* + */ + private String outCardCode; + /** + * 用户先享卡优惠列表 + */ + private List rewards; + /** + * 邀请者用户标识 + *

+ * 微信用户在商户对应appid下的唯一标识。 + * 仅当此卡是通过“邀请有礼”渠道领卡时,会返回此字段;指此先享卡是通过此[邀请者]邀请领卡成功的。当此先享卡完成约定时,商户可给此[邀请者]下发应邀请有礼的奖励 + */ + private String sharerOpenid; + /** + * 先享卡的守约状态 + */ + private ContractStatus state; + /** + * 约定时间期限 + */ + private TimeRange timeRange; + + /** + * 用户先享卡目标列表 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ + @Data + public static class Objective { + + /** + * 目标数量 + *

+ * 履约目标需要完成的数量,必须大于0。 + */ + private Long count; + /** + * 目标描述 + */ + private String description; + /** + * 目标名称 + */ + private String name; + /** + * 目标id + */ + private String objectiveId; + /** + * 目标单位 + *

+ * 示例值:次 + */ + private String unit; + + } + + /** + * 用户先享卡优惠列表 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ + @Data + public static class Reward { + + /** + * 优惠金额 + *

+ * 1、优惠金额,此项优惠对应的优惠总金额,单位:分,必须大于0。 + * 2、此项优惠已享累计金额≤创建模板时配置的此项奖励的奖励金额, + * 例如:优惠为【满10元减3元优惠券4张】时,用户一次消费使用了2张优惠券,优惠金额为本次优惠总金额6元,优惠数量为本次使用优惠的优惠券数量2张 + */ + private Long amount; + /** + * 优惠数量 + */ + private Long count; + /** + * 优惠数量类型 + */ + private CountType countType; + /** + * 优惠描述 + */ + private String description; + /** + * 优惠名称 + */ + private String name; + /** + * 优惠ID + */ + private String rewardId; + /** + * 优惠单位,例如 “个” + */ + private String unit; + + } + + /** + * 先享卡约定时间期限 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ + @Data + public static class TimeRange { + /** + * 开始时间 + */ + private String betinTime; + /** + * 结束时间 + */ + private String endTime; + } + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardAgreementEndConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardAgreementEndConsumeData.java new file mode 100644 index 0000000..f185b9d --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardAgreementEndConsumeData.java @@ -0,0 +1,194 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model.discountcard; + +import cn.felord.payment.wechat.enumeration.ContractStatus; +import cn.felord.payment.wechat.enumeration.CountType; +import cn.felord.payment.wechat.enumeration.UnfinishedReason; +import lombok.Data; + +import java.util.List; + +/** + * 微信支付先享卡用户守约状态变化通知解密 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class DiscountCardAgreementEndConsumeData { + /** + * 应用appid需要绑定微信商户平台 + */ + private String appid; + /** + * 先享卡ID,唯一标识一个先享卡 + */ + private String cardId; + /** + * 先享卡模板ID,唯一定义此资源的标识。创建模板后可获得 + */ + private String cardTemplateId; + /** + * 创建先享卡的时间 + */ + private String createTime; + /** + * 商户号 + */ + private String mchid; + /** + * 用户先享卡目标列表 + */ + private List objectives; + /** + * 用户标识,用户在{@code appid}下的唯一标识 + */ + private String openid; + /** + * 商户领卡号,商户在请求领卡预受理接口时传入的领卡请求号,同一个商户号下必须唯一,要求32个字符内,只能是数字、大小写字母_-|* + */ + private String outCardCode; + /** + * 用户先享卡优惠列表 + */ + private List rewards; + /** + * 先享卡的守约状态 + */ + private ContractStatus state; + /** + * 先享卡约定时间期限 + */ + private TimeRange timeRange; + /** + * 享受优惠总金额,单位为 “分” + */ + private Long totalAmount; + /** + * 未完成约定原因 + */ + private UnfinishedReason unfinishedReason; + + /** + * 目标列表属性 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ + @Data + public static class Objective { + + /** + * 目标数量 + *

+ * 履约目标需要完成的数量,必须大于0。 + */ + private Long count; + /** + * 目标描述 + */ + private String description; + /** + * 目标名称 + */ + private String name; + /** + * 用户先享卡目标完成纪录 + */ + private List objectiveCompletionRecords; + /** + * 目标id + */ + private String objectiveId; + /** + * 目标单位 + *

+ * 示例值:次 + */ + private String unit; + + } + + /** + * 先享卡约定时间期限 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ + @Data + public static class TimeRange { + /** + * 开始时间 + */ + private String betinTime; + /** + * 结束时间 + */ + private String endTime; + } + + /** + * 优惠列表属性 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ + @Data + public static class Reward { + + /** + * 优惠金额 + *

+ * 1、优惠金额,此项优惠对应的优惠总金额,单位:分,必须大于0。 + * 2、此项优惠已享累计金额≤创建模板时配置的此项奖励的奖励金额, + * 例如:优惠为【满10元减3元优惠券4张】时,用户一次消费使用了2张优惠券,优惠金额为本次优惠总金额6元,优惠数量为本次使用优惠的优惠券数量2张 + */ + private Long amount; + /** + * 优惠数量 + */ + private Long count; + /** + * 优惠数量类型 + */ + private CountType countType; + /** + * 优惠描述 + */ + private String description; + /** + * 优惠名称 + */ + private String name; + /** + * 优惠ID + */ + private String rewardId; + /** + * 优惠单位,例如 “个” + */ + private String unit; + /** + * 优惠使用记录列表 + */ + private List rewardUsageRecords; + + } + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardConsumer.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardConsumer.java new file mode 100644 index 0000000..c4ad7c9 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardConsumer.java @@ -0,0 +1,44 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model.discountcard; + +import lombok.Data; + +import java.util.function.Consumer; + +/** + * 先享卡回调消费复合消费器 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class DiscountCardConsumer { + /** + * 用户领取微信先享卡通知解密 + */ + private Consumer acceptedConsumeDataConsumer; + /** + * 微信支付先享卡用户守约状态变化通知解密 + */ + private Consumer agreementEndConsumeDataConsumer; + /** + * 先享卡扣费状态变化通知解密 + */ + private Consumer cardUserPaidConsumeDataConsumer; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardPreRequestParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardPreRequestParams.java new file mode 100644 index 0000000..9029879 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardPreRequestParams.java @@ -0,0 +1,50 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.discountcard; + + +import lombok.Data; + +/** + * 预受理领卡请求参数 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class DiscountCardPreRequestParams { + + /** + * 商户领卡号,必传 + */ + private String outCardCode; + /** + * 先享卡模板ID,必传 + */ + private String cardTemplateId; + /** + * APPID,必传,自动从配置中注入 + */ + private String appid; + /** + * 通知商户URL,必传 + */ + private String notifyUrl; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardUserPaidConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardUserPaidConsumeData.java new file mode 100644 index 0000000..a1a31d2 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/DiscountCardUserPaidConsumeData.java @@ -0,0 +1,114 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model.discountcard; + +import cn.felord.payment.wechat.enumeration.ContractStatus; +import cn.felord.payment.wechat.enumeration.UnfinishedReason; +import lombok.Data; + +/** + * 先享卡扣费状态变化通知解密 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class DiscountCardUserPaidConsumeData { + + /** + * 应用appid需要绑定微信商户平台 + */ + private String appid; + /** + * 先享卡ID,唯一标识一个先享卡 + */ + private String cardId; + /** + * 先享卡模板ID,唯一定义此资源的标识。创建模板后可获得 + */ + private String cardTemplateId; + /** + * 商户号 + */ + private String mchid; + /** + * 用户标识,用户在{@code appid}下的唯一标识 + */ + private String openid; + /** + * 商户领卡号,商户在请求领卡预受理接口时传入的领卡请求号,同一个商户号下必须唯一,要求32个字符内,只能是数字、大小写字母_-|* + */ + private String outCardCode; + /** + * 先享卡的守约状态 + */ + private ContractStatus state; + /** + * 享受优惠总金额,单位为 “分” + */ + private Long totalAmount; + /** + * 未完成约定原因 + */ + private UnfinishedReason unfinishedReason; + /** + * 用户退回优惠的付款信息 + */ + private PayInformation payInformation; + + /** + * 用户退回优惠的付款信息 + *

+ * 当状态为{@link ContractStatus#UNFINISHED}(用户未完成约定)时,且需要退回已享受的优惠金额时,返回此字段; + */ + @Data + public static class PayInformation { + + /** + * 付款金额,用户需要退回优惠而付款的金额,单位为:分; + */ + private Long payAmount; + /** + * 用户付款状态, + */ + private PayState payState; + /** + * 付款时间 + */ + private String payTime; + /** + * 微信支付订单号,仅在订单成功收款时才返回 + */ + private String transactionId; + } + + /** + * 付款状态 + * @since 1.0.3.RELEASE + */ + public enum PayState { + /** + * 付款中 + */ + PAYING, + /** + * 已付款 + */ + PAID + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/ObjectiveCompletionRecord.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/ObjectiveCompletionRecord.java new file mode 100644 index 0000000..08a449b --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/ObjectiveCompletionRecord.java @@ -0,0 +1,61 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model.discountcard; + +import cn.felord.payment.wechat.enumeration.StrategyType; +import lombok.Data; + +/** + * 微信先享卡目标完成纪录 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class ObjectiveCompletionRecord { + + /** + * 目标完成数量 + */ + private Long completionCount; + /** + * 目标完成时间 + */ + private String completionTime; + /** + * 目标完成类型 + */ + private StrategyType completionType; + /** + * 目标完成描述 + */ + private String description; + /** + * 目标完成流水号 + */ + private String objectiveCompletionSerialNo; + /** + * 目标id + */ + private String objectiveId; + /** + * 备注说明 + */ + private String remark; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/RewardUsageRecord.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/RewardUsageRecord.java new file mode 100644 index 0000000..d247874 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/RewardUsageRecord.java @@ -0,0 +1,70 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model.discountcard; + +import cn.felord.payment.wechat.enumeration.StrategyType; +import lombok.Data; + +/** + * 优惠使用纪录列表对象 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class RewardUsageRecord { + + /** + * 优惠金额 + * + *

    + *
  1. 优惠金额,用户此项本次享受的优惠对应的优惠总金额,单位:分,必须大于0。
  2. + *
  3. 子优惠已享金额累计≤创建模板时配置的此子优惠的价值金额 例如:优惠为【满10元减3元优惠券4张】时,用户一次消费使用了2张优惠券,优惠金额为本次优惠总金额6元,优惠数量为本次使用优惠的优惠券数量2张
  4. + *
+ */ + private Long amount; + /** + * 优惠使用描述 + */ + private String description; + /** + * 备注说明 + */ + private String remark; + /** + * 优惠Id + */ + private String rewardId; + /** + * 优惠使用纪录流水号 + */ + private String rewardUsageSerialNo; + /** + * 优惠使用数量 + */ + private Long usageCount; + /** + * 优惠使用时间 + */ + private String usageTime; + /** + * 优惠使用类型 + */ + private StrategyType usageType; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/UserRecordsParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/UserRecordsParams.java new file mode 100644 index 0000000..78a95a0 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/discountcard/UserRecordsParams.java @@ -0,0 +1,49 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model.discountcard; + +import lombok.Data; + +import java.util.List; + +/** + * 增加用户记录请求参数 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class UserRecordsParams { + /** + * 商户领卡号,商户在请求领卡预受理接口时传入的领卡请求号,同一个商户号下必须唯一,要求32个字符内,只能是数字、大小写字母_-|* + */ + private String outCardCode; + /** + * 先享卡模板ID,唯一定义此资源的标识。创建模板后可获得 + */ + private String cardTemplateId; + /** + * 微信先享卡目标完成纪录 + */ + private List objectiveCompletionRecords; + /** + * 优惠使用纪录 + */ + private List rewardUsageRecords; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/CancelServiceOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/CancelServiceOrderParams.java new file mode 100644 index 0000000..6849c1c --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/CancelServiceOrderParams.java @@ -0,0 +1,47 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 取消支付分订单请求参数 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class CancelServiceOrderParams { + /** + * 商户服务订单号,必填 + */ + private String outOrderNo; + /** + * 与传入的商户号建立了支付绑定关系的appid,必填 + */ + private String appid; + /** + * 服务ID,必填 + */ + private String serviceId; + /** + * 取消原因,最长50个字符,必填 + */ + private String reason; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/CompleteServiceOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/CompleteServiceOrderParams.java new file mode 100644 index 0000000..b37d697 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/CompleteServiceOrderParams.java @@ -0,0 +1,111 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +import java.util.List; + +/** + * 完结支付分订单请求参数 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class CompleteServiceOrderParams { + + /** + * 商户服务订单号,必填 + *

+ * 商户系统内部服务订单号(不是交易单号),要求此参数只能由数字、大小写字母_-|*组成,且在同一个商户号下唯一。详见[商户订单号]。 + */ + private String outOrderNo; + /** + * 与传入的商户号建立了支付绑定关系的appid,必填 + */ + private String appid; + /** + * 服务ID,必填 + *

+ * 该服务ID有本接口对应产品的权限。 + */ + private String serviceId; + /** + * 后付费项目,必填 + */ + private List postPayments; + /** + * 后付费商户优惠,选填 + */ + private List postDiscounts; + /** + * 总金额,单位分,必填 + *

+ * 不能超过完结订单时候的总金额,只能为整数,详见 支付金额。此参数需满足:总金额 =(修改后付费项目1…+修改后完结付费项目n)-(修改 后付费商户优惠项目1…+修改后付费商户优惠项目n) + */ + private Long totalAmount; + /** + * 服务时间段,条件选填 + *

+ * 服务时间范围,创建订单未填写服务结束时间,则完结的时候,服务结束时间必填 + * 如果传入,用户侧则显示此参数。 + */ + private TimeRange timeRange; + /** + * 服务位置,选填 + */ + private CompleteLocation location; + /** + * 微信支付服务分账标记,选填 + *

+ * 完结订单分账接口标记。分账开通流程,详见 分账 + * false:不分账,默认:false + * true:分账。 + */ + private Boolean profitSharing = Boolean.TRUE; + /** + * 订单优惠标记,选填 + *

+ * 代金券或立减金优惠的参数,说明详见代金券或立减金优惠 + */ + private String goodsTag; + + + /** + * 服务位置信息 + *

+ * 如果传入,用户侧则显示此参数。 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ + @Data + public static class CompleteLocation { + + /** + * 预计服务结束地点,条件选填。 + *

+ * 结束使用服务的地点,不超过50个字符,超出报错处理 。 创建订单传入了【服务开始地点】,此项才能填写 + * 【建议】 + * 1、预计结束地点为空时,实际结束地点与开始地点相同,不填写 + * 2、预计结束地点不为空时,实际结束地点与预计结束地点相同,不填写 + */ + private String endLocation; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/DirectCompleteServiceOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/DirectCompleteServiceOrderParams.java new file mode 100644 index 0000000..30739f1 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/DirectCompleteServiceOrderParams.java @@ -0,0 +1,89 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +import java.util.List; + +/** + * 创单结单合并API请求参数 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class DirectCompleteServiceOrderParams { + /** + * The Appid. + */ + private String appid; + /** + * The Attach. + */ + private String attach; + /** + * The Goods tag. + */ + private String goodsTag; + /** + * The Location. + */ + private Location location; + /** + * The Notify url. + */ + private String notifyUrl; + /** + * The Openid. + */ + private String openid; + /** + * The Out order no. + */ + private String outOrderNo; + /** + * The Post discounts. + */ + private List postDiscounts; + /** + * The Post payments. + */ + private List postPayments; + /** + * The Profit sharing. + */ + private Boolean profitSharing; + /** + * The Service id. + */ + private String serviceId; + /** + * The Service introduction. + */ + private String serviceIntroduction; + /** + * The Time range. + */ + private TimeRange timeRange; + /** + * The Total amount. + */ + private Long totalAmount; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/Location.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/Location.java new file mode 100644 index 0000000..0db88c9 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/Location.java @@ -0,0 +1,51 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 服务位置信息 + *

+ * 如果传入,用户侧则显示此参数。 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class Location { + + /** + * 服务开始地点,选填。 + *

+ * 开始使用服务的地点,不超过50个字符,超出报错处理。 + * 【建议】 + * 1、用户下单时【未确定】服务结束地点,不填写。 + * 2、服务在同一地点开始和结束,不填写。 + * 3、用户下单时【已确定】服务结束地点,填写。 + */ + private String startLocation; + /** + * 预计服务结束地点,有开始地点时为必填。 + * + * 1、结束使用服务的地点,不超过50个字符,超出报错处理 。 + * 2、填写了服务开始地点,才能填写服务结束地点。 + */ + private String endLocation; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/ModifyServiceOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/ModifyServiceOrderParams.java new file mode 100644 index 0000000..d5356e9 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/ModifyServiceOrderParams.java @@ -0,0 +1,70 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + + +import lombok.Data; + +import java.util.List; + +/** + * 修改微信支付分订单金额请求参数. + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class ModifyServiceOrderParams { + + /** + * 商户服务订单号,必填 + *

+ * 商户系统内部服务订单号(不是交易单号),要求此参数只能由数字、大小写字母_-|*组成,且在同一个商户号下唯一。详见[商户订单号]。 + */ + private String outOrderNo; + /** + * 与传入的商户号建立了支付绑定关系的appid,必填 + */ + private String appid; + /** + * 服务ID,必填 + *

+ * 该服务ID有本接口对应产品的权限。需要与创建订单时保持一致。 + */ + private String serviceId; + /** + * 后付费项目,必填 + */ + private List postPayments; + /** + * 后付费商户优惠,选填 + */ + private List postDiscounts; + /** + * 总金额,单位分,必填 + * + * 不能超过完结订单时候的总金额,只能为整数,详见 支付金额。此参数需满足:总金额 =(修改后付费项目1…+修改后完结付费项目n)-(修改 后付费商户优惠项目1…+修改后付费商户优惠项目n) + */ + private Long totalAmount; + /** + * 取消原因,最长50个字符,必填 + */ + private String reason; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreConsumer.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreConsumer.java new file mode 100644 index 0000000..e5e971b --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreConsumer.java @@ -0,0 +1,40 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +import java.util.function.Consumer; + +/** + * 支付分回调复合消费器 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class PayScoreConsumer { + /** + * 用户确认回调消费接口 + */ + private Consumer confirmConsumeDataConsumer; + /** + * 用户支付回调消费接口 + */ + private Consumer paidConsumeDataConsumer; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserConfirmConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserConfirmConsumeData.java new file mode 100644 index 0000000..0f3dc99 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserConfirmConsumeData.java @@ -0,0 +1,98 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +import java.util.List; + +/** + * 微信支付分用户确认订单回调解密. + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class PayScoreUserConfirmConsumeData { + + /** + * The Appid. + */ + private String appid; + /** + * The Attach. + */ + private String attach; + /** + * The Location. + */ + private Location location; + /** + * The Mchid. + */ + private String mchid; + /** + * The Openid. + */ + private String openid; + /** + * The Order id. + */ + private String orderId; + /** + * The Out order no. + */ + private String outOrderNo; + /** + * The Post discounts. + */ + private List postDiscounts; + /** + * The Post payments. + */ + private List postPayments; + /** + * The Risk fund. + */ + private RiskFund riskFund; + /** + * The Service id. + */ + private String serviceId; + /** + * The Service introduction. + */ + private String serviceIntroduction; + /** + * The State. + */ + private String state; + /** + * The State description. + */ + private String stateDescription; + /** + * The Time range. + */ + private TimeRange timeRange; + /** + * The Total amount. + */ + private String totalAmount; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserPaidConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserPaidConsumeData.java new file mode 100644 index 0000000..6dc6f85 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserPaidConsumeData.java @@ -0,0 +1,105 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +import java.util.List; + +/** + * 微信支付分支付成功回调解密 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class PayScoreUserPaidConsumeData { + /** + * The Appid. + */ + private String appid; + /** + * The Attach. + */ + private String attach; + /** + * The Collection. + */ + private PaymentCollection collection; + /** + * The Location. + */ + private Location location; + /** + * The Mchid. + */ + private String mchid; + /** + * The Need collection. + */ + private Boolean needCollection; + /** + * The Notify url. + */ + private String notifyUrl; + /** + * The Openid. + */ + private String openid; + /** + * The Order id. + */ + private String orderId; + /** + * The Out order no. + */ + private String outOrderNo; + /** + * The Post discounts. + */ + private List postDiscounts; + /** + * The Post payments. + */ + private List postPayments; + /** + * The Risk fund. + */ + private RiskFund riskFund; + /** + * The Service id. + */ + private String serviceId; + /** + * The Service introduction. + */ + private String serviceIntroduction; + /** + * The State. + */ + private String state; + /** + * The Time range. + */ + private TimeRange timeRange; + /** + * The Total amount. + */ + private String totalAmount; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserPermissionConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserPermissionConsumeData.java new file mode 100644 index 0000000..f70e445 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserPermissionConsumeData.java @@ -0,0 +1,70 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + + +import lombok.Data; + +/** + * 授权、解除授权服务回调解密. + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class PayScoreUserPermissionConsumeData { + + /** + * 是否是解除授权,此参数并非微信返回参数 + * + * 是:true,不是:false + * + * 用来判断是授权还是解除授权 + */ + private boolean closed; + /** + * The Appid. + */ + private String appid; + /** + * The Mchid. + */ + private String mchid; + /** + * The Openid. + */ + private String openid; + /** + * The Openorclose time. + */ + private String openorcloseTime; + /** + * 只在 微信支付分授权回调中返回 + */ + private String outRequestNo; + /** + * The Service id. + */ + private String serviceId; + /** + * The User service status. + */ + private String userServiceStatus; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayServiceOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayServiceOrderParams.java new file mode 100644 index 0000000..a66bc58 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayServiceOrderParams.java @@ -0,0 +1,48 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 商户发起催收扣款请求参数. + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class PayServiceOrderParams { + + /** + * 商户服务订单号,必填 + *

+ * 商户系统内部服务订单号(不是交易单号),要求此参数只能由数字、大小写字母_-|*组成,且在同一个商户号下唯一。详见[商户订单号]。 + */ + private String outOrderNo; + /** + * 与传入的商户号建立了支付绑定关系的appid,必填 + */ + private String appid; + /** + * 服务ID,必填 + *

+ * 该服务ID有本接口对应产品的权限。 + */ + private String serviceId; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PaymentCollection.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PaymentCollection.java new file mode 100644 index 0000000..a612b6a --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PaymentCollection.java @@ -0,0 +1,91 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + + +import lombok.Data; + +import java.util.List; + +/** + * 微信支付分支付成功回调,收款信息,非0元完结后返回 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class PaymentCollection { + + /** + * The Details. + */ + private List details; + /** + * The Paid amount. + */ + private Long paidAmount; + /** + * The Paying amount. + */ + private Long payingAmount; + /** + * The State. + */ + private String state; + /** + * The Total amount. + */ + private Long totalAmount; + + /** + * 收款明细列表 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ + @Data + public static class Detail { + + /** + * The Amount. + */ + private Long amount; + /** + * The Paid time. + */ + private String paidTime; + /** + * The Paid type. + */ + private String paidType; + /** + * The Promotion detail. + */ + private List promotionDetail; + /** + * The Seq. + */ + private Long seq; + /** + * The Transaction id. + */ + private String transactionId; + + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PermissionsAuthCodeParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PermissionsAuthCodeParams.java new file mode 100644 index 0000000..110cc08 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PermissionsAuthCodeParams.java @@ -0,0 +1,47 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 适用于以下API: + *

+ * 查询与用户授权记录(授权协议号)API + *

+ * 解除用户授权关系(授权协议号)API + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class PermissionsAuthCodeParams { + /** + * 服务ID,必填 + */ + private String serviceId; + /** + * 授权协议号,必填 + */ + private String authorizationCode; + /** + * 仅仅适用于解除用户授权关系(授权协议号)API + */ + private String reason; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PermissionsOpenIdParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PermissionsOpenIdParams.java new file mode 100644 index 0000000..3b46616 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PermissionsOpenIdParams.java @@ -0,0 +1,53 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 适用于以下API: + *

+ * 查询与用户授权记录(openid)API + *

+ * 解除用户授权关系(openid)API + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class PermissionsOpenIdParams { + /** + * openid,必填 + */ + private String openid; + /** + * 仅仅适用于解除用户授权关系(openid)API + */ + private String appid; + /** + * 服务ID,必填 + *

+ * 该服务ID有本接口对应产品的权限。 + */ + private String serviceId; + /** + * 仅仅适用于解除用户授权关系(openid)API + */ + private String reason; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PostDiscount.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PostDiscount.java new file mode 100644 index 0000000..bc05013 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PostDiscount.java @@ -0,0 +1,58 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 后付费商户优惠,选填 + *

+ * 最多包含30条商户优惠。如果传入,用户侧则显示此参数。 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class PostDiscount { + + /** + * 优惠名称,条件选填 + * + * 优惠名称说明;name和description若填写,则必须同时填写,优惠名称不可重复描述。 + */ + private String name; + /** + * 优惠说明,条件选填 + * + * 优惠使用条件说明。{@link PostDiscount#name}若填写,则必须同时填写。 + */ + private String description; + /** + * 总金额,单位分,必填 + * todo 新增没有此字段,修改必填,感觉不太符合常理 + */ + private Long amount; + /** + * 优惠数量,选填。 + *

+ * 优惠的数量。 + * 特殊规则:数量限制100,不填时默认1。 + */ + private Long count = 1L; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PostPayment.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PostPayment.java new file mode 100644 index 0000000..4b38060 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PostPayment.java @@ -0,0 +1,59 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 后付费项目,选填 + *

+ * 最多包含100条付费项目。如果传入,用户侧则显示此参数。 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class PostPayment { + /** + * 付费项目名称,选填。 修改订单必填 + *

+ * 相同订单号下不能出现相同的付费项目名称,当参数长度超过20个字符时,报错处理。 + */ + private String name; + /** + * 金额,条件选填。修改订单必填 + *

+ * 此付费项目总金额,大于等于0,单位为分,等于0时代表不需要扣费,只能为整数,详见支付金额。如果填写了“付费项目名称”,则amount或description必须填写其一,或都填。 + */ + private Long amount; + /** + * 计费说明,条件选填。 + *

+ * 描述计费规则,不超过30个字符,超出报错处理。如果填写了“付费项目名称”,则amount或description必须填写其一,或都填。 + */ + private String description; + /** + * 付费数量,选填。 + *

+ * 付费项目的数量。 + * 特殊规则:数量限制100,不填时默认1。 + */ + private Long count = 1L; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PromotionDetail.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PromotionDetail.java new file mode 100644 index 0000000..d6c573e --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PromotionDetail.java @@ -0,0 +1,110 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + + +import lombok.Data; + +import java.util.List; + +/** + * 微信支付分支付成功回调,优惠功能 + * + * 注:针对2020年5月27日10:00:00以后完结的订单生效 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class PromotionDetail { + + /** + * The Amount. + */ + private Long amount; + /** + * The Coupon id. + */ + private String couponId; + /** + * The Currency. + */ + private String currency; + /** + * The Goods detail. + */ + private List goodsDetail; + /** + * The Merchant contribute. + */ + private Long merchantContribute; + /** + * The Name. + */ + private String name; + /** + * The Other contribute. + */ + private Long otherContribute; + /** + * The Scope. + */ + private String scope; + /** + * The Stock id. + */ + private String stockId; + /** + * The Type. + */ + private String type; + /** + * The Wechatpay contribute. + */ + private Long wechatpayContribute; + + /** + * The type Goods detail. + */ + @Data + public static class GoodsDetail { + + /** + * The Discount amount. + */ + private Long discountAmount; + /** + * The Goods id. + */ + private String goodsId; + /** + * The Goods remark. + */ + private String goodsRemark; + /** + * The Quantity. + */ + private Long quantity; + /** + * The Unit price. + */ + private Long unitPrice; + + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/QueryServiceOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/QueryServiceOrderParams.java new file mode 100644 index 0000000..c424e69 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/QueryServiceOrderParams.java @@ -0,0 +1,43 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 查询支付分订单请求参数 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class QueryServiceOrderParams { + /** + * 商户服务订单号,同{@link QueryServiceOrderParams#queryId} 二选一,而且不能同时为null + */ + private String outOrderNo; + /** + * 回跳查询ID,同{@link QueryServiceOrderParams#outOrderNo} 二选一,而且不能同时为null + */ + private String queryId; + /** + * 服务ID,必填 + */ + private String serviceId; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/RiskFund.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/RiskFund.java new file mode 100644 index 0000000..12935e8 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/RiskFund.java @@ -0,0 +1,78 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 订单风险金信息,必填 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class RiskFund { + + /** + * 风险金名称,必填 + */ + private Type name; + /** + * 风险金额,必填 + *

+ * 1、数字,必须>0(单位分)。 + * 2、风险金额>=每个服务ID的风险金额上限。 + * 3、当商户优惠字段为空时,付费项目总金额≤服务ID的风险金额上限 (未填写金额的付费项目,视为该付费项目金额为0)。 + * 4、完结金额可大于、小于或等于风险金额。详细可见QA 关于订单风险金额问题 + */ + private Long amount; + /** + * 风险说明,选填 + *

+ * 文字,不超过30个字。 + */ + private String description; + + + /** + * 风险金类型 + */ + public enum Type { + /** + * 押金 + */ + DEPOSIT, + /** + * 预付款 + */ + ADVANCE, + /** + * 保证金 + */ + CASH_DEPOSIT, + /** + * 预估订单费用 + *

+ * 【先享模式】(评估不通过不可使用服务) + */ + ESTIMATE_ORDER_COST + } + + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/ServiceOrderPermissionParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/ServiceOrderPermissionParams.java new file mode 100644 index 0000000..591cf9c --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/ServiceOrderPermissionParams.java @@ -0,0 +1,51 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 商户预授权API请求参数 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class ServiceOrderPermissionParams { + + /** + * 服务id,必填 + */ + private String serviceId; + /** + * 服务商申请的公众号或移动应用APPID,必填 + */ + private String appid; + /** + * 授权协议号,必填 + *

+ * 预授权成功时的授权协议号,要求此参数只能由数字、大小写字母_-*组成,且在同一个商户号下唯一。详见[商户订单号]。 + */ + private String authorizationCode; + /** + * 商户接收授权回调通知的地址,选填 + */ + private String notifyUrl; + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/SyncServiceOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/SyncServiceOrderParams.java new file mode 100644 index 0000000..0f30231 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/SyncServiceOrderParams.java @@ -0,0 +1,82 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 同步服务订单信息请求参数. + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class SyncServiceOrderParams { + + /** + * 商户服务订单号,必填 + *

+ * 商户系统内部服务订单号(不是交易单号),要求此参数只能由数字、大小写字母_-|*组成,且在同一个商户号下唯一。详见[商户订单号]。 + */ + private String outOrderNo; + /** + * 与传入的商户号建立了支付绑定关系的appid,必填 + */ + private String appid; + /** + * 服务ID,必填 + *

+ * 该服务ID有本接口对应产品的权限。与订单要保持一致。 + */ + private String serviceId; + /** + * 场景类型,必填,场景类型为“Order_Paid”,字符串表示“订单收款成功” 。 + */ + private String type = "Order_Paid"; + + /** + * 内容信息详情,场景类型为Order_Paid时,为必填项。 + */ + private SyncDetail detail; + + + /** + * 内容信息详情 + */ + @Data + public static class SyncDetail{ + /** + * 收款成功时间 + *

+ * 支付成功时间,支持两种格式:yyyyMMddHHmmss和yyyyMMdd + * ● 传入20091225091010表示2009年12月25日9点10分10秒。 + * ● 传入20091225默认认为时间为2009年12月25日0点0分0秒。 + * 用户通过其他方式付款成功的实际时间需满足条件:服务开始时间<调用商户完结订单接口的时间<用户通过其他方式付款成功的实际时间≤商户调用支付分订单同步接口的时间。 + * 【服务开始时间】 + * 1、当完结订单有填写【实际服务开始时间】时,【服务开始时间】=完结订单【实际服务开始时间】。 + * 2、当完结订单未填写【实际服务开始时间】时,【服务开始时间】=创建订单【服务开始时间】 + * 场景类型为Order_Paid时,必填。 + * 支持两种格式:yyyyMMddHHmmss和yyyyMMdd + * ● 传入20091225091010表示2009年12月25日9点10分10秒。 + * ● 传入20091225表示时间为2009年12月25日23点59分59秒。 + * 注意:微信支付分会根据此时间更新用户侧的守约记录、负面记录信息;因此请务必如实填写用户实际付款成功时间,以免造成不必要的客诉。 + */ + private String paidTime; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/TimeRange.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/TimeRange.java new file mode 100644 index 0000000..3166400 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/TimeRange.java @@ -0,0 +1,83 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 服务时间段,必填 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class TimeRange { + /** + * 服务开始时间 + *

+ * 用户端展示用途。 + * 用户下单时确认的服务开始时间(比如用户今天下单,明天开始接受服务,这里指的是明天的服务开始时间)。 + *

+ * 支持三种格式:yyyyMMddHHmmss、yyyyMMdd和 OnAccept + *

+ * ● 传入20091225091010表示2009年12月25日9点10分10秒。 + *

+ * ● 传入20091225默认认为时间为2009年12月25日 + *

+ * ● 传入OnAccept表示用户确认订单成功时间为【服务开始时间】。 + *

+ * 根据传入时间精准度进行校验 + *

+ * 1)若传入时间精准到秒,则校验精准到秒:【服务开始时间】>【商户调用创建订单接口时间 + *

+ * 2)若传入时间精准到日,则校验精准到日:【服务开始时间】>=【商户调用创建订单接口时间】 + */ + private String startTime; + /** + * 服务开始时间备注说明,服务开始时间有填时,可填写服务开始时间备注,不超过20个字符,超出报错处理。 + */ + private String startTimeRemark; + /** + * 用户端展示用途,支持两种格式:yyyyMMddHHmmss和yyyyMMdd + * ● 传入20091225091010表示2009年12月25日9点10分10秒。 + *

+ * ● 传入20091225默认认为时间为2009年12月25日 + * 根据传入时间精准度进行校验 + *

+ * 1、若传入时间精准到秒,则校验精准到秒: + *

+ * 1)【预计服务结束时间】>【服务开始时间】 + *

+ * 2)【预计服务结束时间】>【商户调用接口时间+1分钟】 + *

+ * 2、若传入时间精准到日,则校验精准到日: + *

+ * 1)【预计服务结束时间】>=【服务开始时间】 + *

+ * 2)【预计服务结束时间】>=【商户调用接口时间】 + * 【建议】 + * 1、用户下单时【未确定】服务结束时间,不填写。 + * 2、用户下单时【已确定】服务结束时间,填写。 + */ + private String endTime; + /** + * 预计服务结束时间备注说明,预计服务结束时间有填时,可填写预计服务结束时间备注,不超过20个字符,超出报错处理。 + */ + private String endTimeRemark; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/UserServiceOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/UserServiceOrderParams.java new file mode 100644 index 0000000..69b9c52 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/UserServiceOrderParams.java @@ -0,0 +1,102 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + + +import lombok.Data; + +import java.util.List; + +/** + * 创建支付分订单请求参数. + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class UserServiceOrderParams { + + /** + * 商户服务订单号,必填 + *

+ * 商户系统内部服务订单号(不是交易单号),要求此参数只能由数字、大小写字母_-|*组成,且在同一个商户号下唯一。详见[商户订单号]。 + */ + private String outOrderNo; + /** + * 与传入的商户号建立了支付绑定关系的appid,必填 + */ + private String appid; + /** + * 服务ID,必填 + *

+ * 该服务ID有本接口对应产品的权限。 + */ + private String serviceId; + /** + * 服务信息,必填 + *

+ * 用于介绍本订单所提供的服务 ,当参数长度超过20个字符时,报错处理。 + */ + private String serviceIntroduction; + /** + * 后付费项目,选填 + */ + private List postPayments; + /** + * 后付费商户优惠,选填 + */ + private List postDiscounts; + /** + * 服务时间段,必填 + */ + private TimeRange timeRange; + /** + * 服务位置,选填 + */ + private Location location; + /** + * 订单风险金,必填 + */ + private RiskFund riskFund; + /** + * 商户数据包,选填 + *

+ * 商户数据包可存放本订单所需信息,需要先urlencode后传入。 当商户数据包总长度超出256字符时,报错处理。 + */ + private String attach; + /** + * 商户回调地址,必填 + */ + private String notifyUrl; + /** + * 微信用户在商户对应appid下的唯一标识,条件选填 + *

+ * 免确认订单:必填 + * 需确认订单:不填 + */ + private String openid; + /** + * 是否需要用户确认,选填 + *

+ * false:免确认订单 + * true:需确认订单 + * 默认值true + */ + private Boolean needUserConfirm = Boolean.TRUE; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/UserServiceStateParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/UserServiceStateParams.java new file mode 100644 index 0000000..fd35b5f --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/UserServiceStateParams.java @@ -0,0 +1,42 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.v3.model.payscore; + +import lombok.Data; + +/** + * 查询用户授权状态参数. + *

+ * {@code appid} 从对应租户的配置中自动注入。 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +@Data +public class UserServiceStateParams { + /** + * 微信支付分 服务ID , 需要微信侧运营操作绑定到商户。 + */ + private String serviceId; + /** + * 微信用户在商户对应appid下的唯一标识。 + */ + private String openId; + +} diff --git a/payment-spring-boot-starter/pom.xml b/payment-spring-boot-starter/pom.xml new file mode 100644 index 0000000..116f47e --- /dev/null +++ b/payment-spring-boot-starter/pom.xml @@ -0,0 +1,40 @@ + + + + cn.felord + payment-spring-boot + 1.0.3.RELEASE + + + payment-spring-boot-starter + 1.0.3.RELEASE + jar + 4.0.0 + + + + 1.8 + 1.8 + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter + + + cn.felord + payment-spring-boot-autoconfigure + + + org.bouncycastle + bcprov-jdk15to18 + + + + \ No newline at end of file diff --git a/payment-spring-boot-starter/src/main/resources/LICENSE b/payment-spring-boot-starter/src/main/resources/LICENSE new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/payment-spring-boot-starter/src/main/resources/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..31ddea9 --- /dev/null +++ b/pom.xml @@ -0,0 +1,182 @@ + + + cn.felord + payment-spring-boot + 1.0.3.RELEASE + pom + 4.0.0 + + payment-spring-boot + wechat-pay and alipay sdk + https://github.com/NotFound403/payment-spring-boot + + + + Apache License, Version 2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt + repo + A business-friendly OSS license + + + + + + felord + felord@qq.com + felord.cn + + + + + payment-spring-boot-1.0.0.RELEASE + https://github.com/NotFound403/payment-spring-boot + scm:git:https://github.com/NotFound403/payment-spring-boot.git + scm:git:https://github.com/NotFound403/payment-spring-boot.git + + + + + payment-spring-boot-autoconfigure + payment-spring-boot-starter + + + + 1.8 + 1.8 + UTF-8 + UTF-8 + 1.8 + 2.4.1 + 4.10.167.ALL + 1.0.0.RELEASE + 1.18.12 + 2.9.10 + 1.66 + + + + + sonatype-nexus-staging + Nexus Release Repository + https://oss.sonatype.org/service/local/staging/deploy/maven2 + + + sonatype-nexus-snapshots + Nexus Snapshot Repository + https://oss.sonatype.org/content/repositories/snapshots + + + + + + + org.springframework.boot + spring-boot-starter + ${spring-boot.version} + + + org.springframework.boot + spring-boot-autoconfigure + ${spring-boot.version} + + + org.springframework.boot + spring-boot-configuration-processor + ${spring-boot.version} + + + org.springframework.boot + spring-boot-starter-logging + ${spring-boot.version} + + + org.springframework.boot + spring-boot-starter-web + ${spring-boot.version} + + + com.alipay.sdk + alipay-sdk-java + ${aliy-pay-sdk.version} + + + org.projectlombok + lombok + ${lombok.verison} + + + org.bouncycastle + bcprov-jdk15to18 + ${bcprov.version} + + + cn.felord + payment-spring-boot-autoconfigure + ${project.version} + + + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.1.0 + + + package + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + private + true + UTF-8 + UTF-8 + UTF-8 + + + + compile + + jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + verify + + sign + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + sonatype-nexus-staging + https://oss.sonatype.org/ + + + + + \ No newline at end of file

+ * 详见优惠券背景色参考 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public enum CouponBgColor { + /** + * Color 010 coupon bg color. + */ + COLOR010("#63B359"), + /** + * Color 020 coupon bg color. + */ + COLOR020("#2C9F67"), + /** + * Color 030 coupon bg color. + */ + COLOR030("#509FC9"), + /** + * Color 040 coupon bg color. + */ + COLOR040("#5885CF"), + /** + * Color 050 coupon bg color. + */ + COLOR050("#9062C0"), + /** + * Color 060 coupon bg color. + */ + COLOR060("#D09A45"), + /** + * Color 070 coupon bg color. + */ + COLOR070("#E4B138"), + /** + * Color 080 coupon bg color. + */ + COLOR080("#EE903C"), + /** + * Color 090 coupon bg color. + */ + COLOR090("#DD6549"), + /** + * Color 100 coupon bg color. + */ + COLOR100("#CC463D"); + + /** + * The Color. + */ + private final String color; + + /** + * Instantiates a new Coupon bg color. + * + * @param color the color + */ + CouponBgColor(String color) { + this.color = color; + } + + /** + * Color string. + * + * @return the string + */ + public String color() { + return this.color; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CouponStatus.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CouponStatus.java new file mode 100644 index 0000000..0c534c0 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/CouponStatus.java @@ -0,0 +1,46 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 代金券状态. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public enum CouponStatus { + /** + * 可用. + * + * @since 1.0.0.RELEASE + */ + SENDED, + /** + * 已实扣. + * + * @since 1.0.0.RELEASE + */ + USED, + /** + * 已过期. + * + * @since 1.0.0.RELEASE + */ + EXPIRED +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/FundFlowAccountType.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/FundFlowAccountType.java new file mode 100644 index 0000000..effbbf8 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/FundFlowAccountType.java @@ -0,0 +1,38 @@ +/* + * + * Copyright 2019-2021 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 申请资金账单账户类型. + * + * @since 1.0.3.RELEASE + */ +public enum FundFlowAccountType { + /** + * 基本账户 + */ + BASIC, + /** + * 运营账户 + */ + OPERATION, + /** + * 手续费账户 + */ + FEES +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/StockStatus.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/StockStatus.java new file mode 100644 index 0000000..426bfa6 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/StockStatus.java @@ -0,0 +1,86 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 代金券批次状态. + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public enum StockStatus { + /** + * Unactivated stock status. + * + * @since 1.0.0.RELEASE + */ + UNACTIVATED("unactivated", "未激活"), + /** + * Audit stock status. + * + * @since 1.0.0.RELEASE + */ + AUDIT("audit", "审核中"), + /** + * Running stock status. + * + * @since 1.0.0.RELEASE + */ + RUNNING("running", "运行中"), + /** + * Stoped stock status. + * + * @since 1.0.0.RELEASE + */ + STOPED("stoped", "已停止"), + /** + * Paused stock status. + * + * @since 1.0.0.RELEASE + */ + PAUSED("paused", "暂停发放"); + + private final String value; + private final String description; + + StockStatus(String value, String description) { + this.value = value; + this.description = description; + } + + /** + * Value string. + * + * @return the string + * @since 1.0.0.RELEASE + */ + public String value() { + return this.value; + } + + /** + * Description string. + * + * @return the string + * @since 1.0.0.RELEASE + */ + public String description() { + return this.description; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/StrategyType.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/StrategyType.java new file mode 100644 index 0000000..6322c47 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/StrategyType.java @@ -0,0 +1,35 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 目标完成类型、优惠使用类型 + * + * @author felord.cn + * @since 1.0.2.RELEASE + */ +public enum StrategyType { + /** + * 增加数量,表示用户发生了履约行为 + */ + INCREASE, + /** + * 减少数量,表示取消用户的履约行为(例如用户取消购买、退货退款等) + */ + DECREASE +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TarType.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TarType.java new file mode 100644 index 0000000..5d0c90d --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TarType.java @@ -0,0 +1,31 @@ +/* + * + * Copyright 2019-2021 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 账单压缩类型 + * + * @author felord.cn + * @since 1.0.3.RELEASE + */ +public enum TarType { + /** + * 格式为{@code .gzip}的压缩包账单 + */ + GZIP +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeBillType.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeBillType.java new file mode 100644 index 0000000..8f7473d --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeBillType.java @@ -0,0 +1,40 @@ +/* + * + * Copyright 2019-2021 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 交易账单类型 + * + * @author felord.cn + * @since 1.0.3.RELEASE + */ +public enum TradeBillType { + /** + * 返回当日所有订单信息(不含充值退款订单) + */ + ALL, + /** + * 返回当日成功支付的订单(不含充值退款订单) + */ + SUCCESS, + /** + * 返回当日退款订单(不含充值退款订单) + */ + REFUND + +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeState.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeState.java new file mode 100644 index 0000000..786e9d8 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeState.java @@ -0,0 +1,70 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 微信侧返回交易状态 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public enum TradeState { + /** + * 支付成功 + * + * @since 1.0.0.RELEASE + */ + SUCCESS, + /** + * 转入退款 + * + * @since 1.0.0.RELEASE + */ + REFUND, + /** + * 未支付 + * + * @since 1.0.0.RELEASE + */ + NOTPAY, + /** + * 已关闭 + * + * @since 1.0.0.RELEASE + */ + CLOSED, + /** + * 已撤销(付款码支付) + * + * @since 1.0.0.RELEASE + */ + REVOKED, + /** + * 用户支付中(付款码支付) + * + * @since 1.0.0.RELEASE + */ + USERPAYING, + /** + * 支付失败(其他原因,如银行返回失败) + * + * @since 1.0.0.RELEASE + */ + PAYERROR, +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeType.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeType.java new file mode 100644 index 0000000..d9a6c9e --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/TradeType.java @@ -0,0 +1,64 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 微信侧返回交易类型 + * + * @author felord.cn + * @since 1.0.0.RELEASE + */ +public enum TradeType { + /** + * 公众号支付 + * + * @since 1.0.0.RELEASE + */ + JSAPI, + /** + * 扫码支付 + * + * @since 1.0.0.RELEASE + */ + NATIVE, + /** + * APP支付 + * + * @since 1.0.0.RELEASE + */ + APP, + /** + * 付款码支付 + * + * @since 1.0.0.RELEASE + */ + MICROPAY, + /** + * H5支付 + * + * @since 1.0.0.RELEASE + */ + MWEB, + /** + * 刷脸支付 + * + * @since 1.0.0.RELEASE + */ + FACEPAY, +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/UnfinishedReason.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/UnfinishedReason.java new file mode 100644 index 0000000..f705629 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/UnfinishedReason.java @@ -0,0 +1,36 @@ +/* + * + * Copyright 2019-2020 felord.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * Website: + * https://felord.cn + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.felord.payment.wechat.enumeration; + +/** + * 未完成约定原因 + *

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 literal 0 HcmV?d00001 diff --git a/docs/img/csr.png b/docs/img/csr.png new file mode 100644 index 0000000000000000000000000000000000000000..d13c90ed88d2b5759fe2c81ec1b59c660813226a GIT binary patch literal 54506 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 literal 0 HcmV?d00001 diff --git a/docs/img/file_info.png b/docs/img/file_info.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6e4cc308a4411ad7e89f36207f3880c5414d8f GIT binary patch literal 22482 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 literal 0 HcmV?d00001 diff --git a/docs/img/qqun.png b/docs/img/qqun.png new file mode 100644 index 0000000000000000000000000000000000000000..90b1f49fad3ab783c4af981b5f2b47c0642a9d8a GIT binary patch literal 18353 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 Ea`z_z2_Xh96XoJ6WDkagcDf=aFcoTB~qk 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 F69Cy4T9E(% literal 0 HcmV?d00001 diff --git a/docs/img/set.png b/docs/img/set.png new file mode 100644 index 0000000000000000000000000000000000000000..506b44bfb565e044d5f44ef9f4d7c834e283c0ca GIT binary patch literal 39782 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 literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..af648f0 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,40 @@ + + + + + Document + + + + + + + +