From f4ce28627438a5b65a4a86a9020da4f4954c405f Mon Sep 17 00:00:00 2001 From: bootx Date: Mon, 12 Feb 2024 12:52:28 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=89=8B=E6=9C=BA=E6=94=B6=E9=93=B6?= =?UTF-8?q?=E5=8F=B0=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/controller/CashierController.java | 20 +++++++ .../daxpay/demo/result/WxJsapiSignResult.java | 2 + .../daxpay/demo/service/AggregateService.java | 4 +- .../daxpay/demo/service/CashierService.java | 55 +++++++++++++++++-- .../param/assist/WxJsapiPrePayParam.java | 24 -------- 5 files changed, 73 insertions(+), 32 deletions(-) delete mode 100644 daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/param/assist/WxJsapiPrePayParam.java diff --git a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/controller/CashierController.java b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/controller/CashierController.java index dca25e458..50292bc2a 100644 --- a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/controller/CashierController.java +++ b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/controller/CashierController.java @@ -11,6 +11,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; /** * 结算台演示 @@ -44,4 +45,23 @@ public class CashierController { public ResResult getPayEnv(@RequestHeader("User-Agent") String ua){ return Res.ok(cashierService.getPayEnv(ua)); } + + @Operation(summary = "获取手机收银台链接") + @GetMapping("/getUniCashierUrl") + public ResResult getUniCashierUrl(){ + return Res.ok(cashierService.getUniCashierUrl()); + } + + @Operation(summary = "获取微信授权链接") + @GetMapping("getWxAuthUrl") + public ResResult getWxAuthUrl(){ + return Res.ok(cashierService.getWxAuthUrl()); + } + + @Operation(summary = "微信授权回调页面") + @GetMapping("/wxAuthCallback") + public ModelAndView wxAuthCallback(@RequestParam("code") String code){ + return new ModelAndView("redirect:" + cashierService.wxAuthCallback(code)); + } + } diff --git a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/result/WxJsapiSignResult.java b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/result/WxJsapiSignResult.java index 118e60e4f..543a11710 100644 --- a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/result/WxJsapiSignResult.java +++ b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/result/WxJsapiSignResult.java @@ -1,6 +1,7 @@ package cn.bootx.platform.daxpay.demo.result; import cn.hutool.core.annotation.Alias; +import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -21,6 +22,7 @@ public class WxJsapiSignResult { @Schema(description = "随机串") private String nonceStr; @Alias("package") + @JsonProperty("package") @Schema(description = "预支付ID, 已经是 prepay_id=xxx 格式") private String prePayId; @Schema(description = "签名类型") diff --git a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/AggregateService.java b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/AggregateService.java index d92630898..74daa4f4c 100644 --- a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/AggregateService.java +++ b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/AggregateService.java @@ -91,7 +91,7 @@ public class AggregateService { } else if (ua.contains(AggregatePayEnum.UA_WECHAT_PAY.getCode())) { // 微信重定向到中间页, 因为微信需要授权后才能发起支付 - return this.wxJsapiAuth(code); + return this.wxJsapiAuthPage(code); } else { // 跳转到异常页 @@ -102,7 +102,7 @@ public class AggregateService { /** * 微信jsapi支付 - 跳转到授权页面 */ - private String wxJsapiAuth(String code) { + private String wxJsapiAuthPage(String code) { // 回调地址为 结算台微信jsapi支付的回调地址 WxAuthUrlParam wxAuthUrlParam = new WxAuthUrlParam(); wxAuthUrlParam.setState(code); diff --git a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/CashierService.java b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/CashierService.java index 940fa5949..18aaf674e 100644 --- a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/CashierService.java +++ b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/CashierService.java @@ -9,9 +9,13 @@ import cn.bootx.platform.daxpay.sdk.code.AggregatePayEnum; import cn.bootx.platform.daxpay.sdk.code.PayChannelEnum; import cn.bootx.platform.daxpay.sdk.code.PayStatusEnum; import cn.bootx.platform.daxpay.sdk.code.PayWayEnum; +import cn.bootx.platform.daxpay.sdk.model.assist.WxAccessTokenModel; +import cn.bootx.platform.daxpay.sdk.model.assist.WxAuthUrlModel; import cn.bootx.platform.daxpay.sdk.model.pay.PayOrderModel; import cn.bootx.platform.daxpay.sdk.model.pay.QueryPayOrderModel; import cn.bootx.platform.daxpay.sdk.net.DaxPayKit; +import cn.bootx.platform.daxpay.sdk.param.assist.WxAccessTokenParam; +import cn.bootx.platform.daxpay.sdk.param.assist.WxAuthUrlParam; import cn.bootx.platform.daxpay.sdk.param.channel.AliPayParam; import cn.bootx.platform.daxpay.sdk.param.channel.WeChatPayParam; import cn.bootx.platform.daxpay.sdk.param.pay.QueryPayOrderParam; @@ -147,10 +151,49 @@ public class CashierService { } } -// /** -// * 手机收银台演示 -// */ -// public PayOrderResult h5SimplePay(){ -// -// } + /** + * 获取手机收银台链接 + */ + public String getUniCashierUrl() { + return StrUtil.format("{}/cashier/uniCashier", daxPayDemoProperties.getFrontUrl()); + } + + /** + * 微信jsapi支付 - 跳转到授权页面 + */ + public String getWxAuthUrl() { + // 回调地址为 结算台微信jsapi支付的回调地址 + WxAuthUrlParam wxAuthUrlParam = new WxAuthUrlParam(); + String url = StrUtil.format("{}/demo/cashier/wxAuthCallback", daxPayDemoProperties.getServerUrl()); + wxAuthUrlParam.setUrl(url); + DaxPayResult execute = DaxPayKit.execute(wxAuthUrlParam); + if (execute.getCode() != 0){ + throw new BizException(execute.getMsg()); + } + // 微信授权页面链接 + return execute.getData().getUrl(); + } + + /** + * 微信授权回调页面, 然后重定向到统一收银台中, 携带openid + */ + public String wxAuthCallback(String code) { + return StrUtil.format("{}/cashier/uniCashier?source=redirect&openId={}", daxPayDemoProperties.getFrontUrl(), this.getOpenId(code)); + } + + /** + * 获取微信OpenId + */ + private String getOpenId(String authCode) { + // 获取OpenId + WxAccessTokenParam param = new WxAccessTokenParam(); + param.setCode(authCode); + + DaxPayResult result = DaxPayKit.execute(param); + // 判断是否支付成功 + if (result.getCode() != 0){ + throw new BizException(result.getMsg()); + } + return result.getData().getOpenId(); + } } diff --git a/daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/param/assist/WxJsapiPrePayParam.java b/daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/param/assist/WxJsapiPrePayParam.java deleted file mode 100644 index 5e182606f..000000000 --- a/daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/param/assist/WxJsapiPrePayParam.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.bootx.platform.daxpay.param.assist; - -import cn.bootx.platform.daxpay.param.PaymentCommonParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 预付订单再次签名参数 - * @author xxm - * @since 2024/2/10 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "预付订单再次签名") -public class WxJsapiPrePayParam extends PaymentCommonParam { - - @Schema(description = "预付订单ID") - private String prepayId; - - -}