diff --git a/xdclass-order-service/src/main/java/net/jieyuu/config/AlipayConfig.java b/xdclass-order-service/src/main/java/net/jieyuu/config/AlipayConfig.java index e8af5b4..775f327 100644 --- a/xdclass-order-service/src/main/java/net/jieyuu/config/AlipayConfig.java +++ b/xdclass-order-service/src/main/java/net/jieyuu/config/AlipayConfig.java @@ -1,14 +1,26 @@ package net.jieyuu.config; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; + public class AlipayConfig { + + /** + * 支付宝网关地址 todo + */ + public static final String PAY_GATEWAY = "https://openapi-sandbox.dl.alipaydev.com/gateway.do"; + + /** + * 支付宝APPID todo + */ public static final String APPID = "9021000140690163"; /** - * 应用私钥 + * 应用私钥 todo */ public static final String APP_PRI_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCXErw8mdLqhNbQqNBAC4mUYXpRb3hbTYCg+W+JJe5R7oid7yGI61h9DhdWPZIKelKIN3km7QX8wa7BygBLx0U8LVmxh1Y14kxluNqykqeZc/250L+Y2fTTWZBoeaQvajZnLgnMm8ym/Z0Ned6vvCp+2OY4xjpAxJQm3RW6EMdQDQ3did8pAX03KU7W3+TZ7t3I8Ml9JeNyh4wyM4KNVH0aKTGYYn0uR6Euh5On1hID86ENRuSg3Xu9cvUkH2px/6RX2HBG43/kKHniz3T2AB+Htx6r+1GMqKjx8f3dxkKYro2EmxBxdSxEJgOqh7JjGP0qqiWwaW8zgicwtmrccI7XAgMBAAECggEAGz/Q3ilsxspRKO/aKEMsfKwccQXnMqjHE8IKITXLR9H7qGkSpmy02FGrWe3fIq6vpkxDOQc1tkKFMAUsin6V+WXAsOnVXgDEgPCX2e/j9STb1iFV/c8Kfvi/uGiAeeDxkSjXsaVEg7ZpFp4t0YriK2EaHZF7vmT2yA/GtHoESWbYw/2bchW/6OUbmugIzR7GVAjvc7/ZmkZVCnG4xDdW2Nu5jHNLPvNTluB5CZUnjjXvdRtChTdktgQD1t8LSQ6I1NHJutw10/N1anwQ99uO+LMxDUnZZvZshP26ooO2Og/kWPEU2oUgdB37DGJ0OfSWrEF67fzCyKuBxKT1TnmikQKBgQD0R09FD6vo+H6gd4WhN/BfUHtoN5Lyz8kkvaDWDzyCC/t+utJ+hNXTSHgz+hA/OQxCk0iIlPnPfBJRhzhxB2yUVwD//nXB3lu3hnfnkXrg3iKKjqkO6SP9yDHi7XghDTdU2P1F1cj+gfH+nasMElesDBSjtfHYLBS0WiHUec6LLwKBgQCeUoBZAa5p5ILHflnFva4eFQdEtr5gAwH8oRqFCTZBQtWdCDUQ9MvciLK1Pe9hBhR8iOCtP15Qgpc867vld/ZF1VeW0TYtxBwfM+u3JdXllYtx6KIt1L83jWhcmHWdv73bCCUPw/m7FTPi3lrUAGRw0+jWYoLVpmEHrd9THHes2QKBgHh7g3mIlT2+8pWq3dn6gTBBvdxVLMFeAtOARAfQVAPAbTbAZnnIgr5HDCJ2v/Su6oEbq7bR47SWeWKE0y3Mf51anD+m/eW1Cn+mbxVkB7tJVLgKTQ/xpbLSPuiyP4HtxtCuhZ0gKJZ++SCgG3FEysEs5DEq2DHK7BtYKT9nJJw5AoGAQzRMDPwcuBBqvxnQK5LvlQ9iDXXw67p7HmyYYD5fzGX9XPH97Jus6YkRKsQGl83H5nEHxiKu+0fjwNVj5ez9GfmMe5WFBPpI4andddnWqOTI02pnZUL4hDE/Sobg7jxU7+POL5oFqLdAVh4CuhkMiaQ6Ir6gQOamK2dP8+ySlEkCgYEA1kBmBFtKFl4V+ZshqcjMWcMCAANWf3jKkBAf9Dvr632vcafQeXTZdnWLQkwuwz/r0aoSKcCIuhxPzKpalSoyItX5DYYNG5BiC/Wwo3ktTvv+2xdnkpgx/+2gvbJLtNsikCDWC6zWO7Q/4/v0LsrzEWNgMXUIepqPffI3NUGtWkU="; /** - * 支付宝公钥 + * 支付宝公钥 todo */ public static final String ALIPAY_PUB_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj4BMyZx16Xpfd00w25ub4ZcWzRiWCx1v6EScmq2ezu/W95FO70r6EawFGVh2nE+XqZFlf53bIBhwtxUCV2xJEy9qHuooVvqByoMRdSs4y1BlUR99WfYqc+67i41rp8hDDZ8s31/9gXbiVfsSFe3YqHq3WzCuYbqwpwt0vEFbX829DZP3BNJ/DTbx2mtFYEJYFRi8nKkHFjivjjMw9nbAQsFQT6Q7GpPR6cqUGX1YYzvsdo1U+XF3FG4SoPYZKh6KVdRJQ/RKzYnNgPN7d6UydUarFRCnyLQ9qa/gFTX373pM+IlD9WhW15ixGq/USgcOBLZ+1Ujc90OLym0mulCGRQIDAQAB"; @@ -22,7 +34,34 @@ public class AlipayConfig { */ public static final String CHARSET = "UTF-8"; + + /** + * 返回参数格式 + */ + public static final String FORMAT = "json"; + + /** + * 构造函数私有 + */ private AlipayConfig() { } + + private volatile static AlipayClient instance = null; + + /** + * 单例模式获取,双重锁校验 + */ + public static AlipayClient getInstance() { + + if (instance == null) { + synchronized (AlipayConfig.class) { // 加锁 + if (instance == null) { + instance = new DefaultAlipayClient(PAY_GATEWAY, APPID, APP_PRI_KEY, FORMAT, CHARSET, ALIPAY_PUB_KEY, SIGN_TYPE); + } + } + } + return instance; + } + } \ No newline at end of file diff --git a/xdclass-order-service/src/main/java/net/jieyuu/config/InterceptorConfig.java b/xdclass-order-service/src/main/java/net/jieyuu/config/InterceptorConfig.java index 07825eb..fa800a9 100644 --- a/xdclass-order-service/src/main/java/net/jieyuu/config/InterceptorConfig.java +++ b/xdclass-order-service/src/main/java/net/jieyuu/config/InterceptorConfig.java @@ -18,7 +18,7 @@ public class InterceptorConfig implements WebMvcConfigurer { //拦截的路径 .addPathPatterns("/api/order/*/**") //放行的路径 - .excludePathPatterns("api/callback/*/**", "/api/order/*/query_state"); + .excludePathPatterns("api/callback/*/**", "/api/order/*/query_state", "/api/order/*/test_pay"); WebMvcConfigurer.super.addInterceptors(registry); } diff --git a/xdclass-order-service/src/main/java/net/jieyuu/controller/ProductOrderController.java b/xdclass-order-service/src/main/java/net/jieyuu/controller/ProductOrderController.java index 5e1ea1d..c3e5531 100644 --- a/xdclass-order-service/src/main/java/net/jieyuu/controller/ProductOrderController.java +++ b/xdclass-order-service/src/main/java/net/jieyuu/controller/ProductOrderController.java @@ -1,10 +1,15 @@ package net.jieyuu.controller; +import com.alibaba.fastjson.JSON; +import com.alipay.api.request.AlipayTradeAppPayRequest; +import com.alipay.api.response.AlipayTradeAppPayResponse; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; +import net.jieyuu.config.AlipayConfig; +import net.jieyuu.config.PayUrlConfig; import net.jieyuu.enums.BizCodeEnum; import net.jieyuu.enums.ClientType; import net.jieyuu.enums.ProductOrderPayTypeEnum; @@ -17,6 +22,9 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.PrintWriter; +import java.util.HashMap; +import java.util.UUID; /** *

@@ -35,6 +43,9 @@ public class ProductOrderController { @Autowired private ProductOrderService orderService; + @Autowired + private PayUrlConfig payUrlConfig; + @ApiOperation("提交订单") @PostMapping("confirm") public void confirmOrder(@ApiParam("订单对象") @RequestBody ConfirmOrderRequest confirmOrderRequest, HttpServletResponse response) { @@ -88,5 +99,44 @@ public class ProductOrderController { return StringUtils.isBlank(state) ? JsonData.buildResult(BizCodeEnum.ORDER_CONFIRM_NOT_EXIST) : JsonData.buildSuccess(state); } + @GetMapping("/test_pay") + public void test_Alipay(HttpServletResponse response) throws Exception { + HashMap content = new HashMap<>(); + //商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复 + String no = UUID.randomUUID().toString(); + log.info("订单号:{}", no); + content.put("out_trade_no", no); + content.put("product_code", "FAST_INSTANT_TRADE_PAY"); + //订单总金额,单位为元,精确到小数点后两位 + content.put("total_amount", String.valueOf("111.99")); + //商品标题/交易标题/订单标题/订单关键字等。 注意:不可使用特殊字符,如 /,=,& 等。 + content.put("subject", "杯子"); + //商品描述,可空 + content.put("body", "好的杯子"); + + // 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。 + content.put("timeout_express", "5m"); + + AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); + request.setBizContent(JSON.toJSONString(content)); + request.setNotifyUrl(payUrlConfig.getAlipayCallbackUrl()); + request.setReturnUrl(payUrlConfig.getAlipaySuccessReturnUrl()); + + AlipayTradeAppPayResponse alipayTradeAppPayResponse = AlipayConfig.getInstance().pageExecute(request); + + + if (alipayTradeAppPayResponse.isSuccess()) { + System.out.println("调用成功"); + String form = alipayTradeAppPayResponse.getBody(); + response.setContentType("text/html;charset=utf-8"); + response.getWriter().write(form); + response.getWriter().flush(); + response.getWriter().close(); + } else { + System.out.println("调用失败"); + } + } + + }