diff --git a/cloud-market2-common/pom.xml b/cloud-market2-common/pom.xml index e471363..112ae4c 100644 --- a/cloud-market2-common/pom.xml +++ b/cloud-market2-common/pom.xml @@ -17,10 +17,27 @@ 17 UTF-8 + + + + + + com.alipay.sdk + alipay-easysdk + 2.2.0 + + + + com.alipay.sdk + alipay-sdk-java + 4.22.113.ALL + + com.muyu cloud-common-core + diff --git a/cloud-market2-common/src/main/java/com/muyu/data/AliPay.java b/cloud-market2-common/src/main/java/com/muyu/data/AliPay.java new file mode 100644 index 0000000..297abca --- /dev/null +++ b/cloud-market2-common/src/main/java/com/muyu/data/AliPay.java @@ -0,0 +1,11 @@ +package com.muyu.data; + +import lombok.Data; + +@Data +public class AliPay { + private String traceNo; + private String totalAmount; + private String subject; + private String alipayTraceNo; +} diff --git a/cloud-market2-server/pom.xml b/cloud-market2-server/pom.xml index 8f0d667..817d1c8 100644 --- a/cloud-market2-server/pom.xml +++ b/cloud-market2-server/pom.xml @@ -19,6 +19,20 @@ + + + + com.alipay.sdk + alipay-easysdk + 2.2.0 + + + + com.alipay.sdk + alipay-sdk-java + 4.22.113.ALL + + commons-beanutils diff --git a/cloud-market2-server/src/main/java/com/muyu/market/server/MarketApplication.java b/cloud-market2-server/src/main/java/com/muyu/market/MarketApplication.java similarity index 93% rename from cloud-market2-server/src/main/java/com/muyu/market/server/MarketApplication.java rename to cloud-market2-server/src/main/java/com/muyu/market/MarketApplication.java index 8c6a5b2..4f30c63 100644 --- a/cloud-market2-server/src/main/java/com/muyu/market/server/MarketApplication.java +++ b/cloud-market2-server/src/main/java/com/muyu/market/MarketApplication.java @@ -1,4 +1,4 @@ -package com.muyu.market.server; +package com.muyu.market; import com.muyu.common.security.annotation.EnableCustomConfig; import com.muyu.common.security.annotation.EnableMyFeignClients; diff --git a/cloud-market2-server/src/main/java/com/muyu/market/server/config/MyAliPayConfig.java b/cloud-market2-server/src/main/java/com/muyu/market/server/config/MyAliPayConfig.java new file mode 100644 index 0000000..0c18bc4 --- /dev/null +++ b/cloud-market2-server/src/main/java/com/muyu/market/server/config/MyAliPayConfig.java @@ -0,0 +1,36 @@ +package com.muyu.market.server.config; + +import com.alipay.easysdk.factory.Factory; +import com.alipay.easysdk.kernel.Config; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Data +@Component +@ConfigurationProperties(prefix = "alipay") +public class MyAliPayConfig { + private String appId; + private String appPrivateKey; + private String alipayPublicKey; + private String notifyUrl; + + @PostConstruct + public void init() { + // 设置参数(全局只需设置一次) + Config config = new Config(); + config.protocol = "https"; + config.gatewayHost = "https://openapi-sandbox.dl.alipaydev.com/gateway.do"; + config.signType = "RSA2"; + config.appId = this.appId; + config.merchantPrivateKey = this.appPrivateKey; + config.alipayPublicKey = this.alipayPublicKey; + config.notifyUrl = this.notifyUrl; + Factory.setOptions(config); + System.out.println("=======支付宝SDK初始化成功======="); + } + +} diff --git a/cloud-market2-server/src/main/java/com/muyu/market/server/controller/AliPayController.java b/cloud-market2-server/src/main/java/com/muyu/market/server/controller/AliPayController.java new file mode 100644 index 0000000..1e7b67b --- /dev/null +++ b/cloud-market2-server/src/main/java/com/muyu/market/server/controller/AliPayController.java @@ -0,0 +1,98 @@ +package com.muyu.market.server.controller; + +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipayTradePagePayRequest; + + +import com.muyu.market.server.config.MyAliPayConfig; +import com.muyu.data.AliPay; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +@RestController +@RequestMapping("/alipay") +public class AliPayController { + //-支付宝网关地址 + private static final String GATEWAY_URL = "https://openapi-sandbox.dl.alipaydev.com/gateway.do"; + private static final String FORMAT_JSON = "JSON"; + private static final String CHARSET_UTF8 = "UTF-8"; + private static final String SIGN_TYPE_RSA2 = "RSA2"; + +// 差一个回调 我写在教你还是怎么样 有代码吗 没有 我现在给你操作一边 以后你自己启动就行了 媳妇 好 + @Resource + private MyAliPayConfig myAliPayConfig; + + @GetMapping("/pay") + public void pay(AliPay aliPay, HttpServletResponse httpResponse) throws Exception{ + AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, myAliPayConfig.getAppId(), + myAliPayConfig.getAppPrivateKey(), FORMAT_JSON, CHARSET_UTF8, myAliPayConfig.getAlipayPublicKey(), SIGN_TYPE_RSA2); + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + request.setNotifyUrl(myAliPayConfig.getNotifyUrl()); + //-商品的内容可以从系统中传递过来,目前这里是手写的 + aliPay.setTraceNo(UUID.randomUUID().toString().replaceAll("-","")); + aliPay.setTotalAmount("100"); + aliPay.setSubject("笔记本华硕"); + //===== + request.setBizContent("{\"out_trade_no\":\"" + aliPay.getTraceNo() + "\"," + + "\"total_amount\":\"" + aliPay.getTotalAmount() + "\"," + + "\"subject\":\"" + aliPay.getSubject() + "\"," + + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); + String form = ""; + try { + form = alipayClient.pageExecute(request).getBody(); // 调用SDK生成表单 + } catch (AlipayApiException e) { + e.printStackTrace(); + } + httpResponse.setContentType("text/html;charset=" + CHARSET_UTF8); + httpResponse.getWriter().write(form);// 直接将完整的表单html输出到页面 + httpResponse.getWriter().flush(); + httpResponse.getWriter().close(); + } + + + @PostMapping("/notify") // 注意这里必须是POST接口 + public String payNotify(HttpServletRequest request) throws Exception { + if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) { + System.out.println("=========支付宝异步回调========"); + + Map params = new HashMap<>(); + Map requestParams = request.getParameterMap(); + for (String name : requestParams.keySet()) { + params.put(name, request.getParameter(name)); + // System.out.println(name + " = " + request.getParameter(name)); + } + + String tradeNo = params.get("out_trade_no"); + String gmtPayment = params.get("gmt_payment"); + String alipayTradeNo = params.get("trade_no"); + // (不需要)支付宝验签 + //if (Factory.Payment.Common().verifyNotify(params)) { + // 验签通过 + System.out.println("交易名称: " + params.get("subject")); + System.out.println("交易状态: " + params.get("trade_status")); + System.out.println("支付宝交易凭证号: " + params.get("trade_no")); + System.out.println("商户订单号: " + params.get("out_trade_no")); + System.out.println("交易金额: " + params.get("total_amount")); + System.out.println("买家在支付宝唯一id: " + params.get("buyer_id")); + System.out.println("买家付款时间: " + params.get("gmt_payment")); + System.out.println("买家付款金额: " + params.get("buyer_pay_amount")); + + // 更新订单未已支付 +// ordersMapper.updateState(tradeNo, "已支付", gmtPayment, alipayTradeNo); + //} + } + return "success"; + } +} diff --git a/cloud-market2-server/src/main/java/com/muyu/market/server/controller/RecordController.java b/cloud-market2-server/src/main/java/com/muyu/market/server/controller/RecordController.java index 82d2041..9d5cac0 100644 --- a/cloud-market2-server/src/main/java/com/muyu/market/server/controller/RecordController.java +++ b/cloud-market2-server/src/main/java/com/muyu/market/server/controller/RecordController.java @@ -49,4 +49,5 @@ public class RecordController { recodeService.save( Record.SaveRecodeList( recodeListReq )); return Result.success(null,"操作成功"); } + } diff --git a/cloud-market2-server/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-market2-server/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 9be35bd..a38f554 100644 --- a/cloud-market2-server/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/cloud-market2-server/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,2 +1,2 @@ -com.muyu.market.server.MarketApplication +com.muyu.market.MarketApplication com.muyu.Main diff --git a/cloud-market2-server/src/main/resources/bootstrap.yml b/cloud-market2-server/src/main/resources/bootstrap.yml index cf87e4c..50e1004 100644 --- a/cloud-market2-server/src/main/resources/bootstrap.yml +++ b/cloud-market2-server/src/main/resources/bootstrap.yml @@ -1,6 +1,6 @@ # Tomcat server: - port: 6666 + port: 10001 # nacos线上地址 nacos: @@ -54,3 +54,9 @@ spring: logging: level: com.muyu.system.mapper: DEBUG + +alipay: + appId: 9021000140631838 + appPrivateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCWxZholdxU/C9Vh+4hjD4yWH5MUn3ZK7zkFKB09KY1Kz5k6t0fhcdMRbTaJulyQVL21wneb83f+5hhAzk9+j6RLrvIbE1YZyvt9uoUIpljMkEFyVL2L97/m/Bc+D+PMXMor0DxWMgdkGvmm/1Phjaoxr+HZn6WI1ZFXjKNdIUMNs8H5oLXkBpfTVDS8GLXfDxrUT2gx9g2AH8NJMLlWObHwG3ZPQenRg5szhjLHxuuNgcfJXyoW0agSnRqzn8QeYyq5H0XVElrtF+JbBsnvuUgJn/+h/oVoKeFekEYjfqogzx/1oROereXdEk3OxmzrlW0+EUYBEMViv7EGi0z8/jLAgMBAAECggEAYDm+OsmidK76+silZ83dCD7IZKelYEx04tBzVBGsXnS5/qiS9gJonzpB4ZVCGsSsUZQO3WNX7uLhbtEi4HZtJjXAbXsJpik6tUaIQM+QO+of67SA+VS2K0b4Ei3ySs6Ro96uQRqbpZq98tGNywpqqi8moCD/G410CxPCidta6t64jgMigJr1llhzUDNa6KnEZTTof0D9E4HPYm+zQelRa3xDSYojw3VGUr+Ar0gopsyYLUlUgJJLTA4nzKfL7CP0d2+9qrP7OvcpNexe9/PsXTh2rJPKqttYJjXTEzi4+a6GfpX/XF8E9mCAg1QyIl+wZtKhhJDdlwvFf58cddvgoQKBgQDU8znRH+/d253tFPhlqJcUpaNFPzv7r1R3WWt9e5QsHHy60r6CnDpHeu2Q+0xYfeqEonUstM8qCkNqFx68MghYp79SKSEXrPhELdV25GNvF1XjrNB8BNBgd+NO1FiSJjiwXHmZ9f+Sw967lVABZhCvykkKEORN/UVLEvxo+ppGMQKBgQC1QHfiQpmhmQ0mnok+s9VQtkdWl5SvYn0Urpghe31hjnUa30pGEPIlYhpJWpyN1kL77HHr9+NRDfR1pN1TDHf+P3Ru2Kue5C70vLqIWhVJxs6RKVAWAgnrfnBJsM4TVAR93uWHv8Livdj+wf3D/ZLb8FVeOa76pYeu4okAm8ojuwKBgA5AYOQwAPuWERGmz6DuEX5eP3kI7FjBuSNrppf1R0tUdLyEEh/nmLbj8TY8uzVI6AMMZE8joqGroitddL8fkhNs1o8HFaHh/5OAhcK5MjZjF2pvTFygbdmm7F2ANJVDXZPf/HtjTUFjPmrLaVlOnVtGbHDyBHV7t8F4edAExYJhAoGAUUKT/OarBh4eHUBae7gYXNU76oCO8oqPVWRpZCl/Luu1aNTO8dbLGSOAcX6kTZrP8S4ybP539XDyNoQxjfg7G8vLIZ8WYmge/S5X2qW4gZkWJ1KESzmixOes4/zWhyfV07DI6zF36DwBO0YxxVq8Ksr3GwV1g34O9MMvdQxjdd0CgYBu00EaXBQaxANpO+6oH3KECxvxspKZvk4exI72OFbZ1mZayHNG7BVyfuAMNNp/SRoFXGC4/dVq+tycIOQutvRHrBSRRsv1db8No1j8oEYHvQ5br7OxjS941S/KWeIZefBAyajyCzUjIDZBRTBMGVyJ2p2c/SdUmPs2XTMQnG+mUg== + alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvAodOIG6vaqMsl5DXjcRYPRro+C/SeTswVo5gqQdikK3qy118GWkVwL9gvEovq23EMCTmSV+KAFsHz8f0UxLEK9FZcfRuM5E7GfnP7sdY0ctjfmUhQ7fWVOTGLuH0h5DiQ+4voO/2Hi6SElvtLXAUBSqMKw6J0PsJ0uUY9CBZCQnZkFJWAAroUWw5ARUMy62KPZSAW2s8Qg4gacdhSk7SBACNGBFcJZHCS09xQJi5SxCHaTRLhhIckLBvuKEWhBsh+jU75BKYAC4ovoWhMAFnIWKwCmubhXqmYjuJ4egUQTQBbD1hasK99I1YzdXRH8OKwKD4Lufb42B9buZ/2hOywIDAQAB + notifyUrl: http://lihongxiang.natapp1.cc/alipay/notify