Sfoglia il codice sorgente

feat: 完成了支付宝沙箱

DingXiaoYu 2 anni fa
parent
commit
d75ce7964c

+ 5 - 0
pom.xml

@@ -52,6 +52,11 @@
 			<artifactId>aliyun-sdk-oss</artifactId>
 			<version>3.15.1</version>
 		</dependency>
+		<dependency>
+			<groupId>com.alipay.sdk</groupId>
+			<artifactId>alipay-sdk-java</artifactId>
+			<version>4.22.110.ALL</version>
+		</dependency>
 
         <dependency>
             <groupId>org.apache.poi</groupId>

+ 63 - 0
src/main/java/com/seecoder/BlueWhale/configure/AlipayTools.java

@@ -0,0 +1,63 @@
+package com.seecoder.BlueWhale.configure;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.*;
+import com.alipay.api.request.AlipayTradePagePayRequest;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.UUID;
+
+@ConfigurationProperties(prefix = "alipay")
+@Component
+@Getter
+@Setter
+public class AlipayTools {
+
+    private String serverUrl;
+
+    private String appId;
+
+    private String appPrivateKey;
+
+    private String alipayPublicKey;
+
+    private String notifyUrl;
+
+    private static String format="json";
+
+    private static String charset="utf-8";
+
+    private static String signType="RSA2";
+
+    public void pay(String name , Double price, HttpServletResponse httpResponse){
+        AlipayClient alipayClient = new DefaultAlipayClient(serverUrl,appId,appPrivateKey,format,charset,alipayPublicKey,signType);
+
+        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
+
+        request.setNotifyUrl(notifyUrl);
+
+        String replace = UUID.randomUUID().toString().replace("-", "");
+        JSONObject bizContent = new JSONObject();
+        bizContent.put("out_trade_no", replace); //订单编号
+        bizContent.put("total_amount", price);
+        bizContent.put("subject", name);
+        bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");
+        request.setBizContent(bizContent.toString());
+
+        String form= "" ;
+        try  {
+            form = alipayClient.pageExecute(request).getBody();
+            httpResponse.setContentType("text/html;charset=" + charset);
+            httpResponse.getWriter().write(form);
+            httpResponse.getWriter().flush();
+            httpResponse.getWriter().close();
+        }  catch  (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 57 - 57
src/main/java/com/seecoder/BlueWhale/configure/CorsFilter.java

@@ -1,57 +1,57 @@
-//package com.seecoder.BlueWhale.configure;
-//
-//import org.springframework.core.Ordered;
-//import org.springframework.core.annotation.Order;
-//import org.springframework.stereotype.Component;
-//
-//import javax.servlet.Filter;
-//import javax.servlet.FilterChain;
-//import javax.servlet.FilterConfig;
-//import javax.servlet.ServletException;
-//import javax.servlet.ServletRequest;
-//import javax.servlet.ServletResponse;
-//import javax.servlet.annotation.WebFilter;
-//import javax.servlet.http.HttpServletRequest;
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//
-///**
-// * @Author: DingXiaoyu
-// * @Date: 19:17 2023/12/5
-// * 在SpringBoot过滤器中配置跨域,
-// * 跨域配置不能和拦截器写一起,
-// * 会造成冲突,
-// * 需要在过滤器中配置跨域,
-// * 过滤器在拦截器前进行。
-// * 在“Access-Control-Allow-Headers”中,
-// * 需要添加上token,
-// * 因为前端要传输token到后端,不能过滤掉。
-//*/
-//@Component
-//@Order(Ordered.HIGHEST_PRECEDENCE)
-//@WebFilter("/*")
-//public class CorsFilter implements Filter {
-//
-//    @Override
-//    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
-//            throws IOException, ServletException {
-//        HttpServletResponse response = (HttpServletResponse) res;
-//        response.setHeader("Access-Control-Allow-Origin", "*");
-//        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE");
-//        response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, token");
-//        response.setHeader("Access-Control-Max-Age", "3600");
-//        if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) req).getMethod())){
-//            response.setStatus(200);
-//        }else {
-//            chain.doFilter(req, res);
-//        }
-//    }
-//
-//    @Override
-//    public void init(FilterConfig filterConfig) {
-//    }
-//
-//    @Override
-//    public void destroy() {
-//    }
-//}
+package com.seecoder.BlueWhale.configure;
+
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @Author: DingXiaoyu
+ * @Date: 19:17 2023/12/5
+ * 在SpringBoot过滤器中配置跨域,
+ * 跨域配置不能和拦截器写一起,
+ * 会造成冲突,
+ * 需要在过滤器中配置跨域,
+ * 过滤器在拦截器前进行。
+ * 在“Access-Control-Allow-Headers”中,
+ * 需要添加上token,
+ * 因为前端要传输token到后端,不能过滤掉。
+*/
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
+@WebFilter("/*")
+public class CorsFilter implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
+            throws IOException, ServletException {
+        HttpServletResponse response = (HttpServletResponse) res;
+        response.setHeader("Access-Control-Allow-Origin", "*");
+        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE");
+        response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, token");
+        response.setHeader("Access-Control-Max-Age", "3600");
+        if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) req).getMethod())){
+            response.setStatus(200);
+        }else {
+            chain.doFilter(req, res);
+        }
+    }
+
+    @Override
+    public void init(FilterConfig filterConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}

+ 2 - 0
src/main/java/com/seecoder/BlueWhale/configure/MyWebMvcConfig.java

@@ -27,6 +27,8 @@ public class MyWebMvcConfig implements WebMvcConfigurer {
                 .addPathPatterns("/**")
                 .excludePathPatterns("/api/users/register")
                 .excludePathPatterns("/api/users/login")
+                .excludePathPatterns("/api/orders/notify")
+                .excludePathPatterns("/api/orders/test")
                 .order(1);
     }
 

+ 17 - 0
src/main/java/com/seecoder/BlueWhale/controller/OrderController.java

@@ -1,11 +1,14 @@
 package com.seecoder.BlueWhale.controller;
 
+import com.seecoder.BlueWhale.configure.AlipayTools;
 import com.seecoder.BlueWhale.service.OrderService;
 import com.seecoder.BlueWhale.vo.OrderVO;
 import com.seecoder.BlueWhale.vo.ResultVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 
@@ -16,6 +19,9 @@ public class OrderController {
     @Autowired
     OrderService orderService;
 
+    @Autowired
+    AlipayTools alipayTools;
+
     @PostMapping
     public ResultVO<OrderVO> create(@RequestBody OrderVO orderVO){
         return ResultVO.buildSuccess(orderService.create(orderVO));
@@ -55,4 +61,15 @@ public class OrderController {
     public ResultVO<Double> calculate(@RequestParam("orderId") Integer orderId,@RequestParam("couponId")Integer couponId){
         return ResultVO.buildSuccess(orderService.calculate(orderId,couponId));
     }
+
+    @PostMapping("/notify")
+    public ResultVO<Boolean> notify(HttpServletRequest httpServletRequest){
+        System.out.println(666);
+        return ResultVO.buildSuccess(true);
+    }
+
+    @GetMapping("/test")
+    public void test(HttpServletResponse httpServletResponse){
+        alipayTools.pay("nihao",666.0,httpServletResponse);
+    }
 }

+ 8 - 1
src/main/resources/application.yml

@@ -15,4 +15,11 @@ aliyun:
     endpoint: https://oss-cn-hangzhou.aliyuncs.com
     accessKeyId: LTAI4Fi1qmL4iuhH8t7G7r2H
     accessKeySecret: 7tJWyQqa0cMkQGaPMMvtH6c0VLiOO2
-    bucketName: seec-portal
+    bucketName: seec-portal
+
+alipay:
+  appId: 9021000134634835
+  appPrivateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCb6f5ANvvjb9fGNLZIjy1APbXSAgwAFdu5YNgsA11VE0erxyN8doYX/nslKxcz79C8hM8cpFzpfe6LCK7hX2WiKcYQjMrJcXkfwqVhjyKy6wNEZBOryq4JEo8dMBmLqFpNRx2RYFXjFZRYKVTcGjvWtLEwmXd33rKBmORe+HLx6Kc1E5lLBsKCvtIbdcs12F1Dk9LIjQL+qq6MkO9fZEA3UayIOvW9BqkZcImIBHeH49TeFtY5xPeDhG/rI2ik4VEcO9HP8SNjomE2o+iYVHwJLfdDdVC1tABJVcj4MNiafmW8YzLGs9FLnF5q9DVxBh49X6NkKI9iSlVuGwKbRVshAgMBAAECggEANNwJGiZKEdraUdWPM1xvYAdL/G47OVAv1VKzF4DwhKZrtx5lto3MepgJkhlg3Xfh0fhI65IB+ht642JHQBuCro7xGq1RFyjEgvMP9Np9TiGFUwuG68hkZqkHIkMrdgDW1LpWmPILTFkFmToyDglK3kkWhb6SFW7IIE4Apv4eokrOG0FnlugKZYj4E/a+GTVGFvpe57Bb+n4I0ZiCYE1FNipJM0PfjFZxVItdLgp2heHjOkiXtPYUfFe2DooJwy3C/xtJywz8evWP1KJx/T9awrynjvuM7wbnSOc18o+8IQi/xgtWAw5ySzwL/Ja8iiEWe5aFu9b1idkB/NJMucfAAQKBgQD8+HDxZmGpVfRroy3dpiU5e9LWKZYm3HL9LyMUXubtj5i8HhjHn7cyz3Syg6FmjwdWpLAeT3UCdbogQDYYG8qKt0q7rqfkCIhQxdRxOcBGXdQSAN3O5a1o4inS8mbShaUfGnuQNchw5QV28Gdrw9RzNLaxj5molPU7MBMwkkSZIQKBgQCdx/7gh7QwMEn78+kamaCNSATxZe3RuEOdOrXmmz29iWRDHFyEOZuT+wGXp6FPtxRQdUr/VOzAIUVqaBa1XuP8RWpIt8AKk2J697/BS8h7vjr6wJGKMZfXbmDqlY9qpS6ef8PNTpV6fU5oRasuNGTCeP8E871IkNB3iQWUNX6CAQKBgG8JJZnv1GIdZmFwiItHiANJRGvYaR25mYdkD0O7vCT96I55r2q/wgu9X32TpV583T28n8lOGw/vWLkbNiMy354vgdALg4nl7N93Vh40uR6pxJH6a2GLEqh8zNrYpyU0oBuc5iuQT+Ctxc5FC0AT/sZqlt4tJ8cFSvalzWZ+bTnBAoGBAJXU5TIdTDxyrt9HObab6v4fRSpkDBoa7IJzzWdHRrMltIOSfDzIY/h75YA5nJMRnYXmTKj54bV2IvAwFlh32vKmjI6vh/vDCEMT4BHUQHdaJ7IVil/8RmA7HmfGTSIN6J51X+AoXwSp1/pnJm7DLGgM9MekGry9YGoTQawDvLYBAoGBAPrdP7mIIypubwnDmgbX8Ke5qZb4gYlqL1/geKLZWlJiSUOhuJqxdB18m7fynqWUIenN/L3ilRzhyAuKw/6kl7d3C5F3xTr+5lA5Klh+EUPY/GbY/IUPpXQPqLwOuTQTZKOit8c0wRMvbx7fTxzHSsHdQSwwdKQ6yrmXOLwTWmMS
+  alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjMaVjki3OlqoBGZDRPPcP3CsR0Ge9ni1YI/uwRiOMXlqdx69K+/O9nnfRTf9Lbwxz0dhgyMzd4sYkidcCMawmb8Ex2GWHDHJxKVWtq/III3HIRKCYeicqRxLmMV75CduwfFVRUyWU3F5PxKEVwc4HqF9cVB8WAK8pONAer21UiG+Ca4gbZR7HLgeVjWBZrVsrVl3zVSc+DqXGTiZPNj65P29N498tMwvy5wNxLWGle7hlA31UK5Q1boREsuvPJoTIc6rggD1Nb8etFVUq50sVe6SyfyQTJN532VVTJ8KUo2pqgA1iDbMO6aX/dGo5ZpBnAPZqUudmxeA9Yh6BQMgxwIDAQAB
+  notifyUrl: http://97isx5.natappfree.cc/api/orders/notify
+  serverUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do