haha 2 年之前
父節點
當前提交
8950c290e0

+ 8 - 7
config.yml

@@ -1,20 +1,21 @@
 server:
-  port: 3081
+  port: 8080
 
 pay:
   alipay:
-    gatewayUrl: https://openapi.alipaydev.com/gateway.do
-    appid: 2016101800715899
-    appPrivateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDCbN/W17Z1BUTH+BnUwYCBxstHSl4I0RlIPrpMsEQBt8d5GysUv667ig73F0fgkdHCmGE3Nv2ifJGvvxqxmApX6El7TttFrbPkW4om+yKEaOItgOTitw0PScdQzyOadQJ611znvHiqNMxQ+NGLP5YPKEso9WhUWqIeu8VRtctak6zlreI+Jotcv82zeOFTmJc5QsyRKQKztiN2VkAIi3IeEhkh0lFLBlIGZWJDWjunkgfCp0uPsyxi2zV+UyPGr+ViTe0YtYLyGZkxrfiYNt+iBkXEDIygMRKanvTrz48L/XiEd7vsBWfyvLawd7jA5yqSEkFCNppEH8azymJN1aPbAgMBAAECggEAPvPJtmK6LUG7d5QZqQ3OcjbP8xFdSTWLHh1RbStVmcjLyabGWD2IcijNl6vuFgShCoUUVTB1B3uWIHWcSwyTrMsFn+t0jCcmLDaHkP+XuY/MTDeD5PSoQd79rmijeouQdf3tkwsvds0Jqt4l2xSHnfjJ/UUYttdxzsm1pjNa2MSPlQ7rlv0lU/47EekADkAa/0dTg2foHldL6HgKFanDF1osmRyXNEksdALRN6g+KosIXrLhMnamix3zlc2mGqU/aHAPkLS6zxoYXE1fnGfRWFCQ+oJEkHvIU0Rh4Sd+sYGNt7IPAK4u0w/yhmDwGLfgqmGMxj4wjrSOua1FDv3nwQKBgQDmon3E7tuG0ACfgPiy3MVwZ/u+FBCiF8t7seJm7OwEI0ZCvUMJ1Ng5UquxKmph9qsJjy87RkQBXs4nOyf/7cr0odUNccvdLPM55l7j4fbmVy55+gNQPzf6ofUJKfgZsRR0z5NO6zBrmvS+dAUujHXhxZxvyP34zf7DpkJWAs9UeQKBgQDXzuh+hfVoO9OB9/cDYVlKDVQmDZTuyx5Pjr5r7nToGmOOWswsw+qgC/67WJ4hXcpXgLAv4OmtxOz7G4j/8OKyJJxLNMhnnjIzl97vJaHpwJC/QPLngsvqeiCFb2c3SQ1ovYhqp2YM4TrlrXhls/wBNQ2kmPyEi4qUX8KlgPzd8wKBgD0e4uXFxze69+9NZptAFrLrW7PL7XyHgc2OHsnYD9Qo5P3a2mFInuTSG94ft4GutTUbVREIVg1m6otLChaxFhAusx+VAMnkl7DIdG0//QaeJBr/PtGNb3Bka2O6U527aAhs2kUX3wUlU6cFaDolzze9/u9A/M1rChEfhoT0ya1BAoGBAM1RJfLR4fQkDwt07YZCxN9mJOv7OfmiN5k7VkF7YbA9AwC5s8zXLE7OerClE/TstYhgf79dfRT86PXScZoHBLa1jBklA5FJebuKPuhJZmzs7wl2cmL+FqFjRbONlKaNkvtWbwYBc17HnfBMBOLFxPklD3DMuFomJFcbcCVjvbAvAoGBANrJEAUfEO7ehNji47M9yD5l2eDVLtVazrp+WskUzgVA+BibkbabtITza32kl+vkfR1mdBo6a7bUoGTQxyqW4e3OTt0iWh+hFWJWn5hnSmY2F6trqWNSwZnIYGVFUgMfZv4LWV6RukLo2tF2sfKdsnJJKaY36Y/Tb7NXPoFEZkNl
-    alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1q80QLBdFndav1L4ZAR4dUcKs4MaDZrFGhe3sjrmHQmpWj0CuCgOjQUts4+CI3UKcwoGDK1Nij72Ao+uXqyawbPASu/GaiCBRrjNm9fntv0xxOEZfqoj4Bs0N9d6fp8uldtDgdQuyM4fh+uf/3nJXnA0AiWDLuorVA89nD9cXP9rwsEXt150ShDDRepn7C54U5llgEF51ezLBLhwWtXcBz9OGqKEESvOXhhDyVwk0M4a8MWtIpwub2Yv/It7W/gUYP6yy0x3cUOXDKvBoNLiiuYnSYG7LfwnE5WNNdDg6cIU5vB8+mxYgPCfrcy+ModyfKAfwWcFUQriKwUsgbic6QIDAQAB
-    notifyUrl: http://pay.seec.seecoder.cn/api/alipay/notify
+    gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
+    appid: 9021000133688986
+    appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7JurPkMO5If5q277CaoTtUvD9K1xu370PnyTTEE2hFGabrg7Fiy1j0kLYocktMXADlvVj8juLIR+m9+Wbx9Mc0tfdYCtoOqNPEQA57RmHgSt/ihiEqnxgq2IIgQZH16BdgLlkG2oOE3fTQ++qmUDgZ6+Bd4+eDOq28WnlyZkjIRj9/RXow7W/mt8w+Y7/AAJSiXNx972043Wgl+E+f6UxMYBT048Ic+T1L2TR9mtZrc45ArT6kxpnO0YAO4Lpt7SP8vvTR0LB0qwMsNmulZAUtu3DG6NErDP3jgAvEOsExDufNIGZSty2CeitxvGYDn/eTifaT1bLOYakksnBrhXdAgMBAAECggEAZJi/oICE5A9krNWfTOtqthJeHQdgsOwsuKfnaFgcEhhgKxA9OmvcIwrTCZS1CUjIl/Vdw7Jh1SAh3mLjlX+sd5LRm1nlGyphu888muZaUZ7Z3b1B/pWRM3kLwdxwns9FkNzvSeL+d8B5KSMcQUwNNlIlYWb92IvC4kETlgNuABYNLCag+JzFcdwIxEsBZscvlCevwEI5EVIToI9P0zIj7q866bhM/Y70HEb2kveqMT6Kes5eEDSIF074kScVByhkLi9XrJNoRCirHBkGyfzMJyMiiTncsVEa74DI7EElib9Qj2W1gX65haLpOm7DbzjEWeKiaEAVMA//mDk9gIPWVQKBgQD/qrFX0b2bA/YUPFDqUQ8ClhFtjiZlGykKhxK8Qv/HAkeNqVtV70GAN/FEmxFgs3e3+Sw+Efa3JdbbgMVW6YIGUBNtJPJvqu4YzyEiPwzwWodTZx23cJwervxPD9HMHqPZPZUoskvtd5bpbBeW5zjDz/BpJ889lfVGXUlpfXWfQwKBgQC7ZV0LdEy0U7K6BVaqLMzBTTbNDczf2lFOf7JbntYVoCn7UknWwqU9HfXvXXlp9WkgSkCwfUkGKDfn1WXzRYzA09JJ3nB2c27rAfDQVTUyLOkQJman7/Sj+hQgfasN0ItL4mMeKRMK6iWnXXmBcHfgCc9OfGon30QJGsilzsJUXwKBgGL2l57+uP4AEojSsB+DMOQ3Ypedpo8MbF5+2mm1JXzLDRdwrsIc0qXnAaUkwR1FWtoDwXRlT7KlGv3sYna5/HKlHF/rJUzERVWlF5ZCAagn4qoOCBqxpDzcTx3rabIxSgsVI1+VZH6PBANmq9rltbtWCiEqH7YfDcom4fvLbHQxAoGAPLXqHvvenc0/6eQw35EEBNvvFR+TcDJahQP51JTw5rCs6S8PnPQSdGpwcsvlud434K4tpv/v2H7PHdyU2ut9XjtBtYzLApUDKj/GtLfmNAs4tnK6b03eBAHQ43XTJPabKkp9she8g5y39jDiXH0DWSHUd6j2+1PpxslWl+EUNCECgYEAsYvG+IJoqJ7luzG34M01t+DUzY4sSp1iJQIf+/rSe/3sd0nYBZbdasASUsKjsIk7QAyCLPiehB6uqq7GH9CH2XilxYi6AHHax5ZvIisd8nbXrtByZcPEu1X7hbTaRbnBy6HepDEPtOyap2UTlANSd6EtPb2jA5Jfh9oz3czRmz4=
+    alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjkh962aaFtsZN81RNmfmc4RON3d2BD2069xQjWfX/PjfUHHsgz0kbura22hJkcvUMsBt3MCki5VPywxH1VZrEFCY20fDB66arUl3RP9xwzLa+9LENXes/R7dcmymlDbtd1Ta/6tvnm9XvxUz6IDFwvlUeGbn5zpZKcl/GWByeVX4R7iIx1yRlTgtA1zl1b8gDPc/cfSunR+Kc3OekvMJd3895hdylpPWGjlBC95D2YbPwKt2a+J/lzo8HIcZ5hKZVzy4VfO+omG9qQjdS762Z7Z/BfUjaBYRyA0Bqw5fYTDEOXo9Hi7Pn+glC9TBAMX5MFGcavOY31fnKruiEMrD8QIDAQAB
+    notifyUrl: http://pay.seec.seecoder.cn/alipay/notify
     sellerId: 2088102180140519
 
 spring:
   datasource:
-    url: jdbc:mysql://172.17.0.1:3306/pay?useUnicode=true&characterEncoding=UTF-8&useSSL=false
+    url: jdbc:mysql://environment-58-233.seec.svc.cluster.local:3306/pay?useUnicode=true&characterEncoding=UTF-8&useSSL=false
     username: root
     password: NJU67mysql
+
   jpa:
     database-platform: org.hibernate.dialect.MySQL57InnoDBDialect
     hibernate:

+ 30 - 9
src/main/java/com/nju/edu/pay/controller/api/AlipayController.java

@@ -48,28 +48,41 @@ public class AlipayController {
         this.tradeService = tradeService;
     }
 
-    @PostMapping("/testPay")
-    public Response testPay(@RequestBody PayModelDTO payModelDTO){
-        System.out.println("testPay开始");
-        return new SuccessResponse();
-    }
-
+    /**
+     * 支付
+     * @param payModelDTO 支付参数模型DTO
+     * @return 支付界面
+     * @throws AlipayApiException 支付宝异常
+     * @throws IOException IO异常
+     */
     @PostMapping("/pay")
     public Response pay(@RequestBody PayModelDTO payModelDTO) throws AlipayApiException, IOException {
-        Order order=orderService.createOrder(payModelDTO.getUserId(),payModelDTO.getProductId(),payModelDTO.getPlatformType(),payModelDTO.getPrice());
+        Order order=orderService.createOrder(
+                payModelDTO.getUserId(),
+                payModelDTO.getProductId(),
+                payModelDTO.getPlatformType(),
+                payModelDTO.getPrice());
         if (order==null)
             return new ErrorResponse(500,"存在重复订单,订单创建失败");
-        // 订单模型
+        // 销售产品码,电脑支付场景仅支持这个
         String productCode = "FAST_INSTANT_TRADE_PAY";
+        // 必传参数
         AlipayTradePagePayModel model = new AlipayTradePagePayModel();
+        // 商户订单号,商家自定义,保持唯一性
         model.setOutTradeNo(order.getOutTradeNo().toString());
+        // 订单标题,不可以使用特殊符号
         model.setSubject(payModelDTO.getSubject());
+        // 支付金额,最小值0.01元
         model.setTotalAmount(String.valueOf(order.getPrice()));
+        // 商品描述
         model.setBody(payModelDTO.getSubject()+", 共"+payModelDTO.getPrice()+"元");
+        // 销售产品码
         model.setProductCode(productCode);
 
         AlipayTradePagePayRequest pagePayRequest =new AlipayTradePagePayRequest();
+        // 交易成功后,返回的页面
         pagePayRequest.setReturnUrl(payModelDTO.getReturnUrl());
+        // 交易成功后,异步调用的URL
         pagePayRequest.setNotifyUrl(alipayProperties.getNotifyUrl());
         pagePayRequest.setBizModel(model);
 
@@ -86,6 +99,13 @@ public class AlipayController {
         }
     }
 
+    /**
+     * 支付成功后异步回调
+     * @param request
+     * @return
+     * @throws AlipayApiException
+     * @throws UnsupportedEncodingException
+     */
     @RequestMapping("/notify")
     public String notify(HttpServletRequest request) throws AlipayApiException, UnsupportedEncodingException {
         System.out.println("notify开始");
@@ -94,8 +114,9 @@ public class AlipayController {
         StringBuilder notifyBuild = new StringBuilder("/****************************** alipay notify ******************************/\n");
         parameterMap.forEach((key, value) -> notifyBuild.append(key + "=" + value[0] + "\n") );
         log.info(notifyBuild.toString());
-
+        // 1. 校验签名,确保当前支付通知是由支付宝发送的
         boolean flag = alipayService.verifySign(request);
+        // 2. 二次校验,校验支付结果中的业务内容是否与对应订单相同
         if (flag) {
             /**
              * 需要严格按照如下描述校验通知数据的正确性

+ 3 - 3
src/main/java/com/nju/edu/pay/service/impl/OrderServiceImpl.java

@@ -19,9 +19,9 @@ public class OrderServiceImpl implements OrderService {
 
     @Override
     public Order createOrder(int userId, int productId, PlatformType platformType, double price) {
-        Order existOrder=orderRepository.findByUserIdAndProductIdAndPlatformType(userId,productId,platformType);
-        if (existOrder !=null)
-            return null;
+//        Order existOrder=orderRepository.findByUserIdAndProductIdAndPlatformType(userId,productId,platformType);
+//        if (existOrder !=null)
+//            return null;
         Order order=new Order(price,platformType,userId,productId, OrderStatus.PROCESSING, LocalDateTime.now());
         order=orderRepository.saveAndFlush(order);
         return order;

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

@@ -16,7 +16,7 @@ pay:
     appid: 9021000133688986
     appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7JurPkMO5If5q277CaoTtUvD9K1xu370PnyTTEE2hFGabrg7Fiy1j0kLYocktMXADlvVj8juLIR+m9+Wbx9Mc0tfdYCtoOqNPEQA57RmHgSt/ihiEqnxgq2IIgQZH16BdgLlkG2oOE3fTQ++qmUDgZ6+Bd4+eDOq28WnlyZkjIRj9/RXow7W/mt8w+Y7/AAJSiXNx972043Wgl+E+f6UxMYBT048Ic+T1L2TR9mtZrc45ArT6kxpnO0YAO4Lpt7SP8vvTR0LB0qwMsNmulZAUtu3DG6NErDP3jgAvEOsExDufNIGZSty2CeitxvGYDn/eTifaT1bLOYakksnBrhXdAgMBAAECggEAZJi/oICE5A9krNWfTOtqthJeHQdgsOwsuKfnaFgcEhhgKxA9OmvcIwrTCZS1CUjIl/Vdw7Jh1SAh3mLjlX+sd5LRm1nlGyphu888muZaUZ7Z3b1B/pWRM3kLwdxwns9FkNzvSeL+d8B5KSMcQUwNNlIlYWb92IvC4kETlgNuABYNLCag+JzFcdwIxEsBZscvlCevwEI5EVIToI9P0zIj7q866bhM/Y70HEb2kveqMT6Kes5eEDSIF074kScVByhkLi9XrJNoRCirHBkGyfzMJyMiiTncsVEa74DI7EElib9Qj2W1gX65haLpOm7DbzjEWeKiaEAVMA//mDk9gIPWVQKBgQD/qrFX0b2bA/YUPFDqUQ8ClhFtjiZlGykKhxK8Qv/HAkeNqVtV70GAN/FEmxFgs3e3+Sw+Efa3JdbbgMVW6YIGUBNtJPJvqu4YzyEiPwzwWodTZx23cJwervxPD9HMHqPZPZUoskvtd5bpbBeW5zjDz/BpJ889lfVGXUlpfXWfQwKBgQC7ZV0LdEy0U7K6BVaqLMzBTTbNDczf2lFOf7JbntYVoCn7UknWwqU9HfXvXXlp9WkgSkCwfUkGKDfn1WXzRYzA09JJ3nB2c27rAfDQVTUyLOkQJman7/Sj+hQgfasN0ItL4mMeKRMK6iWnXXmBcHfgCc9OfGon30QJGsilzsJUXwKBgGL2l57+uP4AEojSsB+DMOQ3Ypedpo8MbF5+2mm1JXzLDRdwrsIc0qXnAaUkwR1FWtoDwXRlT7KlGv3sYna5/HKlHF/rJUzERVWlF5ZCAagn4qoOCBqxpDzcTx3rabIxSgsVI1+VZH6PBANmq9rltbtWCiEqH7YfDcom4fvLbHQxAoGAPLXqHvvenc0/6eQw35EEBNvvFR+TcDJahQP51JTw5rCs6S8PnPQSdGpwcsvlud434K4tpv/v2H7PHdyU2ut9XjtBtYzLApUDKj/GtLfmNAs4tnK6b03eBAHQ43XTJPabKkp9she8g5y39jDiXH0DWSHUd6j2+1PpxslWl+EUNCECgYEAsYvG+IJoqJ7luzG34M01t+DUzY4sSp1iJQIf+/rSe/3sd0nYBZbdasASUsKjsIk7QAyCLPiehB6uqq7GH9CH2XilxYi6AHHax5ZvIisd8nbXrtByZcPEu1X7hbTaRbnBy6HepDEPtOyap2UTlANSd6EtPb2jA5Jfh9oz3czRmz4=
     alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjkh962aaFtsZN81RNmfmc4RON3d2BD2069xQjWfX/PjfUHHsgz0kbura22hJkcvUMsBt3MCki5VPywxH1VZrEFCY20fDB66arUl3RP9xwzLa+9LENXes/R7dcmymlDbtd1Ta/6tvnm9XvxUz6IDFwvlUeGbn5zpZKcl/GWByeVX4R7iIx1yRlTgtA1zl1b8gDPc/cfSunR+Kc3OekvMJd3895hdylpPWGjlBC95D2YbPwKt2a+J/lzo8HIcZ5hKZVzy4VfO+omG9qQjdS762Z7Z/BfUjaBYRyA0Bqw5fYTDEOXo9Hi7Pn+glC9TBAMX5MFGcavOY31fnKruiEMrD8QIDAQAB
-    notifyUrl: http://localhost:8080/alipay/notify
+    notifyUrl: http://pay.seec.seecoder.cn/alipay/notify
     sellerId: 2088102180140519
 
 spring:
@@ -32,8 +32,6 @@ spring:
     hibernate:
       naming:
         physical-strategy:  org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
-      ddl-auto: create
-    generate-ddl: true
 
 root:
   name: root