浏览代码

支付宝支付

andrew 4 年前
父节点
当前提交
2fd6eb0461

+ 15
- 0
src/main/java/com/yunzhi/niucai/common/CommConstants.java 查看文件

@@ -31,4 +31,19 @@ public class CommConstants {
31 31
      * 篮球
32 32
      */
33 33
     public final static String LOTTERY_BASKETBALL = "basketball";
34
+
35
+    /**
36
+     * 支付中状态
37
+     */
38
+    public final static Integer SRTATUS_PAYING = 3;
39
+
40
+    /**
41
+     * 重新置为有效状态
42
+     */
43
+    public final static Integer SRTATUS_EFFECTIVE = 3;
44
+
45
+    /**
46
+     * 支付成功
47
+     */
48
+    public final static String TRADE_STATUS_SUCCESS = "TRADE_SUCCESS";
34 49
 }

+ 60
- 28
src/main/java/com/yunzhi/niucai/controller/AliPayController.java 查看文件

@@ -3,15 +3,28 @@ package com.yunzhi.niucai.controller;
3 3
 import com.alipay.easysdk.factory.Factory;
4 4
 import com.alipay.easysdk.kernel.Config;
5 5
 import com.alipay.easysdk.payment.app.models.AlipayTradeAppPayResponse;
6
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
7
+import com.yunzhi.niucai.common.BaseController;
8
+import com.yunzhi.niucai.common.CommConstants;
6 9
 import com.yunzhi.niucai.common.ResponseBean;
7 10
 import com.yunzhi.niucai.config.InterceptorConfig;
11
+import com.yunzhi.niucai.entity.TaCustomer;
12
+import com.yunzhi.niucai.entity.TaOrder;
13
+import com.yunzhi.niucai.entity.TaShopApp;
14
+import com.yunzhi.niucai.service.ITaOrderService;
15
+import com.yunzhi.niucai.service.ITaShopAppService;
8 16
 import com.yunzhi.niucai.vo.LoginParam;
9 17
 import io.swagger.annotations.Api;
10 18
 import io.swagger.annotations.ApiOperation;
11 19
 import io.swagger.annotations.ApiParam;
20
+import org.springframework.beans.factory.annotation.Autowired;
21
+import org.springframework.beans.factory.annotation.Value;
12 22
 import org.springframework.web.bind.annotation.*;
13 23
 
14 24
 import javax.servlet.http.HttpServletRequest;
25
+import java.math.BigInteger;
26
+import java.security.SecureRandom;
27
+import java.util.Date;
15 28
 import java.util.Iterator;
16 29
 import java.util.Map;
17 30
 
@@ -19,52 +32,71 @@ import java.util.Map;
19 32
 @Api(tags = "登入/登出")
20 33
 @RestController
21 34
 @RequestMapping("/aliPay")
22
-public class AliPayController {
35
+public class AliPayController extends BaseController {
23 36
 
24
-    @GetMapping("/create")
37
+    @Autowired
38
+    public ITaShopAppService iTaShopAppService;
39
+
40
+    @Autowired
41
+    private ITaOrderService taOrderService;
42
+
43
+    @Value("${aliPay.notifyUrl}")
44
+    private String aliPayNotifyUrl;
45
+
46
+    @PostMapping("/create")
25 47
     @ApiOperation(value = "创建订单", notes = "创建订单", httpMethod = "POST", response = ResponseBean.class)
26
-    public ResponseBean create() throws Exception {
27
-        Factory.setOptions(getOptions());
28
-        AlipayTradeAppPayResponse pay = Factory.Payment.App().pay("测试", "12345678", "1");
48
+    public ResponseBean create(HttpServletRequest request, @RequestBody TaOrder taOrder) throws Exception {
49
+        Factory.setOptions(getOptions(taOrder));
50
+        String outTradeNo = "ALI" + System.currentTimeMillis() + randomString(5);
51
+        AlipayTradeAppPayResponse pay = Factory.Payment.App().pay("支付宝支付", outTradeNo, String.valueOf(taOrder.getAmount() / 100));
52
+        // 更新商户订单号并改为支付中
53
+        taOrder.setOutTradeNo(outTradeNo);
54
+        taOrder.setStatus(CommConstants.SRTATUS_PAYING);
55
+        taOrderService.updateById(taOrder);
29 56
         return ResponseBean.success(pay);
30 57
     }
31 58
 
32
-    public Config getOptions() {
59
+    public String randomString(int length) {
60
+        String str = new BigInteger(130, new SecureRandom()).toString(32);
61
+        return str.substring(0, length);
62
+    }
63
+
64
+    public Config getOptions(TaOrder taOrder) throws Exception {
33 65
         Config config = new Config();
34 66
         config.protocol = "https";
35 67
         config.gatewayHost = "openapi.alipay.com";
36 68
         config.signType = "RSA2";
37 69
 
38
-        config.appId = "2021001190647352";
39
-
70
+        TaShopApp taShopApp = iTaShopAppService.getOne(new QueryWrapper<TaShopApp>().eq("shop_id", taOrder.getShopId()));
71
+        config.appId = taShopApp.getAppid();
40 72
         // 私钥
41
-        config.merchantPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCsQCrrvTMjGfUay2yJv9DbjhkA7CBwcuWWaFosTfhKgaY+KGsLaY1DWvLgx3bQ85PZQoMRewzdPkZZw3nRAgt0SqI1sP3/ix0aRALNuQ3Y4386LqNieHObsjCvNaT5O1sETdPuceyH8Wny0tT8zCxfmKCuDOAJbUrN0Tx0jPHf42bucepKx7BNGwtSNGppOvdXqZgZ3px77lbGsiTibKJXi+w6fjYx2ZI7+QaK36177xMzYhct4IT0r5FXjKUz7wlsebvU72gNVLOeDBVMWb0GvX2FpnZ2XsT+Dn7vxfY1Tp/HEy9K/646TrM/h53wxoUTxVWYPj6dZEVQBFNskXlVAgMBAAECggEBAIEo5IY8KropXqcm3k40LPJVDN6qMHDhVtJ/kQ4jsQh9SyDUwd+e2DQnYHO4XZm066o/u3RCJpVHew0YDKHyvJAI3rUP8IXL1Ji7YrbMClwVynLgQdc2psmaxfK7cOcJ4OfLTB1CA7C0D1PrT5X3q1ZLZkDcmqm28B6AxKpIfZ349TxsAJPG7LhKJgkNcgign7qvU9L0CQB9PoMNDgsvOLH5gisW3hVqDveQuYTgUCafr0LeKTL5AAG5rw9TzGzkjlnOPTWZL+Lhfw9CIFzrdj0iyT7IrcgAiAZ4k47EGZnOT3ter5f1sd/YIVAjYdFORyA7BM8yIlr06oz6RkCuMQkCgYEA2U/M6iSc7L9f5ogsl/zwV3RAjTq5tcFcu4Zr591hvm0y8+NneSeDClwy9rq+AC3+kPEbYD1V0as4AbKetVLoCb7WZegQn5DeYCAfLpPmVlcQ+6UQSEdKVgff2xXxbF+EJwANsZJp/+fcS5ySS5TqVneU1xvyirBDs0czTa10EFMCgYEAyuqp+b4grQhFs5KISlUbNPFtsm9/RimBuRbEp3pEpGrHYzvb8Gn4p89FnQKvM05WFQkvLZ/g5nh/wbDavzWSF+5rQaaymYntLxhbXPqMaRxWIjQtTU0gP4pgOQ/Pzm7Sj3tL/XEK51CyTsFN+bOooK7JRQ5aDUWo0cmcoWCdOrcCgYASfGZbGKg8v37h9n2MpFixp9MB8JfxrTQ9Q48UV1HESDfIZXTc6o6MKBGxyWr2SvNX0xrYEf+l6WHHSzGTDS1t/szwOFCJsmIoXTMp3C0A9UEdlwoOi/n33Y2ebnxuEqYER03i6CiaO1gTGoubYFya5GtF7TuxrpLjwk/L8NBpvwKBgQCU4BSzcgYhTYduF509BDIA5v03xEwZ2wwdExJXWgKQqvL84IceXXGdFRqa9sQ6HUhVCLb/f2SPU2tQXYQwc4prWnaA5V/1/FbzjahCkGSCHdMoJyXxqBt34vt0AiDR8Uc1FB4NpWl9ixw3YeXmxSR8N6DdtIjnYetZd9UeJXdWAwKBgQDOFZRNcWNFxo97dXNTmAUhfOts3pRpooXUjqy9SpDsmfxn7EUTGEzo6V036a6bHYBW0XG8RozRv6AAkU2hmN2RBZRCiCaz1l++4wNxnVp64kxTP2M+VvqH8P+aRfRRlny1kBedpbVDF+w4nHBL7sZDCyOR0aer1VcEuL3n5zcnvA==";
42
-
73
+        config.merchantPrivateKey = taShopApp.getMerchantPrivateKey();
43 74
         //支付宝公钥字符串
44
-         config.alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkH7Ka+0aQDGjegXicoe7Sks+5LccNe4JQ/j61r3fa7dFmFPstKIVogjDre+Ua3Q+YXqJoYTsT5BL5aNrfWfI+B1xk66E/shOk18WhP8xwIjZhgjKDGh73fJzHMSeDqbatJzbyoeNgGimBx4ljg2Io1tT4IznRGT9zqbvLcS+72QNbnCp7DEjL6FD9gS0Wjfb+Fn+qWd8koOCGcX+JsQfKXNyUBG7AAcdcfht+/qJ6QR1XH1nMaXEid0rWgmjG6bqY/jKL0Y08lc6GdMrZw1TM7E4GcUL+qvBCsnbH2keC/3YZrUMpJw7wWhEgz6h3549SftFUh0SOLBQGWK5VVFEHQIDAQAB";
45
-
46
-        //可设置异步通知接收服务地址(可选)
47
-        config.notifyUrl = "http://127.0.0.1:8080/aliPay/callback";
48
-
49
-        //可设置AES密钥,调用AES加解密相关接口时需要(可选)
50
-//        config.encryptKey = "<-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->";
51
-
75
+         config.alipayPublicKey = taShopApp.getAlipayPublicKey();
76
+        //可设置异步通知接收服务地址
77
+        config.notifyUrl = aliPayNotifyUrl;
52 78
         return config;
53 79
     }
54 80
 
55 81
     @GetMapping("/callback")
56 82
     public void callback(HttpServletRequest request){
57
-        // 查看支付宝回调并调整业务,等调试在完善
58
-        Map<String, String[]> parameterMap = request.getParameterMap();
59
-        for (Iterator iter = parameterMap.entrySet().iterator(); iter.hasNext();) {
60
-            Map.Entry element = (Map.Entry) iter.next();
61
-            Object strKey = element.getKey();
62
-            String[] strArr = (String[])element.getValue();
63
-            System.out.println(strKey);
64
-            for (String str : strArr) {
65
-                System.out.println(str);
66
-            }
83
+        String tradeNo = request.getParameter("trade_no");
84
+        String appId = request.getParameter("app_id");
85
+        String outTradeNo = request.getParameter("out_trade_no");
86
+        String tradeStatus = request.getParameter("trade_status");
87
+        TaOrder taOrder = taOrderService.getOne(new QueryWrapper<TaOrder>().eq("out_trade_no", outTradeNo));
88
+        // 支付失败
89
+        if (!tradeStatus.equals(CommConstants.TRADE_STATUS_SUCCESS)){
90
+            taOrder.setStatus(CommConstants.SRTATUS_EFFECTIVE);
91
+            taOrderService.updateById(taOrder);
92
+            return;
67 93
         }
94
+        // 支付成功
95
+        //创建订单支付
68 96
 
97
+        // 更新为已支付状态
98
+        taOrder.setIsPayed(true);
99
+        taOrder.setStatus(CommConstants.SRTATUS_EFFECTIVE);
100
+        taOrderService.updateById(taOrder);
69 101
     }
70 102
 }

+ 2
- 1
src/main/java/com/yunzhi/niucai/entity/TaOrder.java 查看文件

@@ -57,5 +57,6 @@ public class TaOrder implements Serializable {
57 57
     @ApiModelProperty(value = "状态 1有效,0无效")
58 58
     private Integer status;
59 59
 
60
-
60
+    @ApiModelProperty(value = "商户网站唯一订单号")
61
+    private String outTradeNo;
61 62
 }

+ 4
- 1
src/main/resources/application-dev.yml 查看文件

@@ -18,4 +18,7 @@ logging:
18 18
 #    code: "0301"
19 19
 #    sign: 牛彩
20 20
 #    # 有效时间 单位秒
21
-#    expire: 300
21
+#    expire: 300
22
+
23
+aliPay:
24
+  notifyUrl: http://127.0.0.1:8080/aliPay/callback