From 0b035a604ea7eae33f8f0773838a55bd3564c30c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=B7=E8=A8=80?= <2439534736@qq.com> Date: Wed, 22 Oct 2025 18:20:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9Dapp=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E4=B8=8B=E5=8D=95=E6=96=B9=E5=BC=8F=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/pay/AliPayConfigProperties.java | 10 +++++ .../business/PayOrderController.java | 9 ++++- .../cn/xf/basedemo/service/OrderService.java | 2 + .../service/impl/OrderServiceImpl.java | 38 +++++++++++++++++++ 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/main/java/cn/xf/basedemo/config/pay/AliPayConfigProperties.java b/src/main/java/cn/xf/basedemo/config/pay/AliPayConfigProperties.java index b6d5624..247fe72 100644 --- a/src/main/java/cn/xf/basedemo/config/pay/AliPayConfigProperties.java +++ b/src/main/java/cn/xf/basedemo/config/pay/AliPayConfigProperties.java @@ -42,6 +42,16 @@ public class AliPayConfigProperties { */ private String gatewayUrl; + /** + * 异步回调地址 + */ + private String notifyUrl; + + /** + * 支付成功跳转地址 + */ + private String returnUrl; + // 签名方式 private String sign_type = "RSA2"; // 字符编码格式 diff --git a/src/main/java/cn/xf/basedemo/controller/business/PayOrderController.java b/src/main/java/cn/xf/basedemo/controller/business/PayOrderController.java index 5b9775c..ab49ff1 100644 --- a/src/main/java/cn/xf/basedemo/controller/business/PayOrderController.java +++ b/src/main/java/cn/xf/basedemo/controller/business/PayOrderController.java @@ -26,13 +26,20 @@ public class PayOrderController { @Resource private OrderService orderService; - @Operation(summary = "支付宝支付下单", description = "支付宝支付下单") + @Operation(summary = "支付宝PC/H5支付下单", description = "支付宝PC/H5支付下单") @PostMapping("/ali/createOrder") public RetObj aliCreateOrder(@RequestBody PayOrderFrom from) { return orderService.aliCreateOrder(from); } + @Operation(summary = "支付宝app支付下单", description = "支付宝app支付下单") + @PostMapping("/ali/app/createOrder") + public RetObj aliAppCreateOrder(@RequestBody PayOrderFrom from) { + + return orderService.aliAppCreateOrder(from); + } + //掉单查询支付宝支付订单状态 @Operation(summary = "掉单查询支付宝支付订单状态", description = "掉单查询支付宝支付订单状态") @GetMapping("/ali/queryOrderStatus") diff --git a/src/main/java/cn/xf/basedemo/service/OrderService.java b/src/main/java/cn/xf/basedemo/service/OrderService.java index c5a1696..6da43ef 100644 --- a/src/main/java/cn/xf/basedemo/service/OrderService.java +++ b/src/main/java/cn/xf/basedemo/service/OrderService.java @@ -9,6 +9,8 @@ public interface OrderService { RetObj aliCreateOrder(PayOrderFrom from); + RetObj aliAppCreateOrder(PayOrderFrom from); + String aliCallback(HttpServletRequest request); String queryAlipayOrderStatus(String orderNo); diff --git a/src/main/java/cn/xf/basedemo/service/impl/OrderServiceImpl.java b/src/main/java/cn/xf/basedemo/service/impl/OrderServiceImpl.java index 22710d7..c6cdec3 100644 --- a/src/main/java/cn/xf/basedemo/service/impl/OrderServiceImpl.java +++ b/src/main/java/cn/xf/basedemo/service/impl/OrderServiceImpl.java @@ -7,8 +7,10 @@ import cn.xf.basedemo.model.res.PayOrderRes; import cn.xf.basedemo.service.OrderService; import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayClient; +import com.alipay.api.domain.AlipayTradeAppPayModel; import com.alipay.api.domain.AlipayTradeQueryModel; import com.alipay.api.internal.util.AlipaySignature; +import com.alipay.api.request.AlipayTradeAppPayRequest; import com.alipay.api.request.AlipayTradePagePayRequest; import com.alipay.api.request.AlipayTradeQueryRequest; import com.alipay.api.response.AlipayTradePagePayResponse; @@ -68,6 +70,27 @@ public class OrderServiceImpl implements OrderService { return null; } + @Override + public RetObj aliAppCreateOrder(PayOrderFrom from) { + //校验 + //... + String orderNo = "O" + System.currentTimeMillis(); + AlipayTradeAppPayRequest request = getAlipayTradeAppPayRequest(from, orderNo); + try { + String body = alipayClient.sdkExecute(request).getBody(); + PayOrderRes res = new PayOrderRes(); + res.setOrderNo(orderNo); + //返回给前端调起本机支付宝APP支付 + res.setFrom(body); + //创建订单 + //... + return RetObj.success(res); + }catch (Exception e){ + log.error("APP创建订单失败", e); + } + return null; + } + @Override public String aliCallback(HttpServletRequest request) { try { @@ -150,4 +173,19 @@ public class OrderServiceImpl implements OrderService { request.setBizContent(bizContent.toJSONString()); return request; } + + @NotNull + private AlipayTradeAppPayRequest getAlipayTradeAppPayRequest(PayOrderFrom from, String orderNo) { + AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); + request.setNotifyUrl(aliPayConfigProperties.getNotifyUrl()); + request.setReturnUrl(aliPayConfigProperties.getReturnUrl()); + AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); + model.setOutTradeNo(orderNo); + model.setTotalAmount(from.getPrice().multiply(new BigDecimal(from.getNum())).toString()); + model.setSubject(from.getProductName()); + model.setProductCode("APP_INSTANT_TRADE_PAY"); + model.setBody(from.getProductName()); + request.setBizModel(model); + return request; + } }