From b05f3c36b4ec6edf570e83c5b6c638799823a856 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 27 Sep 2021 18:18:43 +0800
Subject: [PATCH] add alipay

---
 src/main/java/cc/mrbird/febs/pay/properties/AliPayProperties.java               |   24 ++++
 src/main/java/cc/mrbird/febs/pay/configure/AliPayConfigure.java                 |   43 ++++++++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |   22 ++-
 src/main/resources/application-prod.yml                                         |   12 ++
 src/main/java/cc/mrbird/febs/pay/service/IPayService.java                       |   12 ++
 src/main/resources/application-test.yml                                         |   12 ++
 pom.xml                                                                         |    7 +
 src/main/java/cc/mrbird/febs/pay/model/AliPayPassbackModel.java                 |   15 +++
 src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java               |   62 ++++++++++++
 src/main/resources/application-dev.yml                                          |   12 ++
 src/test/java/cc/mrbird/febs/PayTest.java                                       |   33 ++++++
 src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java          |   31 ++++++
 src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java              |    1 
 13 files changed, 274 insertions(+), 12 deletions(-)

diff --git a/pom.xml b/pom.xml
index 9e4f7c5..6a367e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,6 +23,7 @@
         <tomcat.version>9.0.31</tomcat.version>
         <hutool.version>5.3.1</hutool.version>
         <aliyun-oss.version>3.8.0</aliyun-oss.version>
+        <ijapy.version>2.7.8</ijapy.version>
         <mapstruct.version>1.3.1.Final</mapstruct.version>
     </properties>
 
@@ -274,6 +275,12 @@
         </dependency>
 
         <dependency>
+            <groupId>com.github.javen205</groupId>
+            <artifactId>IJPay-AliPay</artifactId>
+            <version>${ijapy.version}</version>
+        </dependency>
+
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
diff --git a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
index 5a9998f..dc92049 100644
--- a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
+++ b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
@@ -21,5 +21,6 @@
         registration.excludePathPatterns("/api/common/**");
         registration.excludePathPatterns("/api/category/**");
         registration.excludePathPatterns("/api/goods/**");
+        registration.excludePathPatterns("/api/pay/**");
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 5d3d9bd..fad46d2 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -20,6 +20,7 @@
 import cc.mrbird.febs.mall.vo.OrderDetailVo;
 import cc.mrbird.febs.mall.vo.OrderListVo;
 import cc.mrbird.febs.mall.vo.OrderRefundVo;
+import cc.mrbird.febs.pay.service.IPayService;
 import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUnit;
@@ -61,6 +62,7 @@
     private final RedisUtils redisUtils;
 
     private final AgentProducer agentProducer;
+    private final IPayService payService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -164,20 +166,21 @@
             throw new FebsException("订单状态不能支付");
         }
 
-        String orderNo = "";
+        String payResultStr = "";
         switch (payOrderDto.getType()) {
             case "1":
-                orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo());
-                orderInfo.setPayImage(payOrderDto.getPayImage());
+//                orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo());
+//                orderInfo.setPayImage(payOrderDto.getPayImage());
                 orderInfo.setPayMethod("微信支付");
                 break;
             case "2":
-                orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo());
-                orderInfo.setPayImage(payOrderDto.getPayImage());
+                payResultStr = payService.aliPay(orderInfo);
+
+                orderInfo.setPayOrderNo(payResultStr);
                 orderInfo.setPayMethod("支付宝支付");
                 break;
             case "3":
-                orderNo = balancePay(orderInfo, payOrderDto.getTradePwd());
+                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd());
 
                 orderInfo.setPayOrderNo(orderInfo.getOrderNo());
                 orderInfo.setPayMethod("积分支付");
@@ -193,11 +196,12 @@
         memberService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null);
 
         Map<String, Object> map = new HashMap<>();
-        map.put("orderNo", orderNo);
+        map.put("orderInfo", payResultStr);
+        map.put("orderNo", orderInfo.getOrderNo());
         map.put("orderId", orderInfo.getId());
 
-        agentProducer.sendAutoLevelUpMsg(member.getId());
-        agentProducer.sendReturnMoneyMsg(orderInfo.getId());
+//        agentProducer.sendAutoLevelUpMsg(member.getId());
+//        agentProducer.sendReturnMoneyMsg(orderInfo.getId());
         return map;
     }
 
diff --git a/src/main/java/cc/mrbird/febs/pay/configure/AliPayConfigure.java b/src/main/java/cc/mrbird/febs/pay/configure/AliPayConfigure.java
new file mode 100644
index 0000000..a191273
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/configure/AliPayConfigure.java
@@ -0,0 +1,43 @@
+package cc.mrbird.febs.pay.configure;
+
+import cc.mrbird.febs.pay.properties.AliPayProperties;
+import com.ijpay.alipay.AliPayApiConfig;
+import com.ijpay.alipay.AliPayApiConfigKit;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+@Slf4j
+@Configuration
+public class AliPayConfigure {
+
+    @Autowired
+    private AliPayProperties aliPayProperties;
+
+    @Bean
+    public AliPayApiConfig aliPayConfig() {
+        log.info("====================");
+        AliPayApiConfig aliPayApiConfig;
+        try {
+            aliPayApiConfig = AliPayApiConfigKit.getApiConfig(aliPayProperties.getAppId());
+        } catch (Exception e) {
+            aliPayApiConfig = AliPayApiConfig.builder()
+                    .setAppId(aliPayProperties.getAppId())
+                    .setAliPayPublicKey(aliPayProperties.getPublicKey())
+                    .setCharset("UTF-8")
+                    .setPrivateKey(aliPayProperties.getPrivateKey())
+                    .setServiceUrl("https://openapi.alipaydev.com/gateway.do")
+                    .setSignType("RSA2")
+                    // 普通公钥方式
+                    .build();
+
+        }
+        AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);
+        return aliPayApiConfig;
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java b/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java
new file mode 100644
index 0000000..26ed5a7
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java
@@ -0,0 +1,31 @@
+package cc.mrbird.febs.pay.controller;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import com.ijpay.alipay.AliPayApi;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+@Slf4j
+@RestController
+@RequestMapping(value = "/api/pay")
+public class PayCallBackController {
+
+    @GetMapping("/aliCallBack")
+    public FebsResponse aliPayCallBack(HttpServletRequest request) {
+        Map<String, String> params = AliPayApi.toMap(request);
+
+        for (Map.Entry<String, String> entry : params.entrySet()) {
+            log.info("支付宝回调:{}===={}", entry.getKey(), entry.getValue());
+        }
+        return new FebsResponse().success();
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/model/AliPayPassbackModel.java b/src/main/java/cc/mrbird/febs/pay/model/AliPayPassbackModel.java
new file mode 100644
index 0000000..b15ef73
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/model/AliPayPassbackModel.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.pay.model;
+
+import lombok.Data;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+@Data
+public class AliPayPassbackModel {
+
+    private Long orderId;
+
+    private Long memberId;
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/properties/AliPayProperties.java b/src/main/java/cc/mrbird/febs/pay/properties/AliPayProperties.java
new file mode 100644
index 0000000..42e5e8d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/properties/AliPayProperties.java
@@ -0,0 +1,24 @@
+package cc.mrbird.febs.pay.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "pay.ali")
+public class AliPayProperties {
+
+    private String appId;
+
+    private String publicKey;
+
+    private String privateKey;
+
+    private String noticeUrl;
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/service/IPayService.java b/src/main/java/cc/mrbird/febs/pay/service/IPayService.java
new file mode 100644
index 0000000..cd10f45
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/service/IPayService.java
@@ -0,0 +1,12 @@
+package cc.mrbird.febs.pay.service;
+
+import cc.mrbird.febs.mall.entity.MallOrderInfo;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+public interface IPayService {
+
+    String aliPay(MallOrderInfo orderInfo);
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
new file mode 100644
index 0000000..e940f38
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
@@ -0,0 +1,62 @@
+package cc.mrbird.febs.pay.service.impl;
+
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.mall.entity.MallOrderInfo;
+import cc.mrbird.febs.pay.model.AliPayPassbackModel;
+import cc.mrbird.febs.pay.properties.AliPayProperties;
+import cc.mrbird.febs.pay.service.IPayService;
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.domain.AlipayTradeAppPayModel;
+import com.alipay.api.response.AlipayTradeAppPayResponse;
+import com.ijpay.alipay.AliPayApi;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+@Slf4j
+@Service
+public class PayServiceImpl implements IPayService {
+
+    @Resource
+    private AliPayProperties aliPayProperties;
+
+    @Value("${spring.profiles.active}")
+    private String active;
+
+    @Override
+    public String aliPay(MallOrderInfo orderInfo) {
+        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
+        model.setSubject("全民商城商品支付");
+        model.setBody(orderInfo.getName());
+        model.setOutTradeNo(orderInfo.getOrderNo());
+        model.setTimeoutExpress("15m");
+
+        if ("dev".equals(active) || "test".equals(active)) {
+            model.setTotalAmount("0.01");
+        } else {
+            model.setTotalAmount(orderInfo.getAmount().toString());
+        }
+
+        AliPayPassbackModel passbackModel = new AliPayPassbackModel();
+        passbackModel.setOrderId(orderInfo.getId());
+        passbackModel.setMemberId(orderInfo.getMemberId());
+        model.setPassbackParams(JSONObject.toJSONString(passbackModel));
+
+        model.setProductCode("QUICK_MSECURITY_PAY");
+        AlipayTradeAppPayResponse resp = null;
+        try {
+            resp = AliPayApi.appPayToResponse(model, aliPayProperties.getNoticeUrl());
+        } catch (AlipayApiException e) {
+            log.error("支付宝支付异常", e);
+            throw new FebsException("支付宝支付异常");
+        }
+        return resp.getBody();
+    }
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 0afbd49..4ca7b9b 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -46,4 +46,14 @@
     port: 5672
     username: ct_rabbit
     password: 123456
-    publisher-confirm-type: correlated
\ No newline at end of file
+    publisher-confirm-type: correlated
+
+pay:
+  ali:
+    appId: 2021002182686737
+    # 支付宝公钥
+    publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1WQMo5SqNK644piwb1iK83RUwNyw6bEr/+diP/+FUx2HBuidRJwGmwRE4PVzX2NXT/HsXIZdVFXYl8JbZA2uphXILmKr039CSTKpB+5v2hzKtnrBFNtLn+pKI5cchhDdk5IFo5esNV7yWbFlZKF4sztn1/s0uwn7DHyaNRdr7480kVxVUHqwl+t2G8SqifyvUMhT0Fq9a72yft7vgC7PYh2TF21vrH8pV4xbTcZ54evMl0wyDj6W1xsW+hYsdWy/gEogpvZ+qtQyL6LbjUhpSHeNJcGP004ilFB4ksfQqUrEcxROYV9bhTb+1QY+rmmuv4PCSesdHDNqFRj1ReeNzwIDAQAB
+    # 支付宝私钥
+    privateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDOhu+hD2kuMh5s7IQuKjexeC4DmXxrAr/bu10rNB304NaIRUNAkGPI9tep7ZRBZqa/Tjrfom8LeeBnbA1n+SgxROSREEXDA1E3/XJY+vYivehVTD2TuA2GEnEtLXUgxQJVfz/CNIOa3rCc1nj9n4/kv03Sx/yqiKnLd6h9dRvdaY9k7DwnWPu1FT5T3bpTiU+oKaUODkcfUPpMH8aQaolzKY07M0cqZFn75Z0KFAoM6p/TDoF7JKpwdzGO5xuJe8YT4xx2OcLY++d/dzSoQvvsKh8r1yE37Z5B9FxHSHe1GuR2wOQxhgXUyaj7gden/pAVspzbjZTDdQppjzNavnzdAgMBAAECggEAKAJL+c+aeLCM5F0NXkQfdenqQBhD2hc2Q8MQUYZPJ1lHNi700FUof44SSYEU73aLZxQoo5o8GOULa/2quzGxb5oBDXkxio3h9g7LUCGN/Tz8/Uk/xJYrSIXaFv5vamHACgAUwfKabC4n2LpTxg5bOd01nlfPwtmmyxvrMCK3uzSWzxDLag0jVh9DGA97D00UOkL9QpEJ26dpBuF7pf9Nt0BtfyJMFrCbJXY2F3j65VNN4f2rOG7/DTGm434Sektj9Bc31ept9MfPw9VyRbV7EMvG5be9iDqBvLbRGhQVtBjv3N/E7p3uUI5HyxM8GOjQhSwSOJQ0gQS8vNdNN90qoQKBgQDqxoTFOsPM3+LoQj1r7CjoXhooEfpikyHpK2l8mzM4+La9ajzUJzTWT8nc0k2Qha8AvBZzJ2+kSKAjtwc/VNTu0IeEn480V9zVyBFkcC294d3A1keN5ch9wP1it5fWsVh+62T9xGXlQQIpuYeQm1BXj7kltd7vE8t6fLrmnhVkpwKBgQDhMqgZoRQGmcgrVc8F//lBO7g6ku/+GfNJnve64sRi5ZifwSiNSULVqDWmdHJiVWyYXoTvt1o3bqQorawe0c+wEzknn8ZipNDnN9tybxhKqD6pzCbRv6yWmU+9X9ZhSxYJeumn3sqxyZB7rnqJQ7/vpsoNZRvp0LS85iJVJFXO2wKBgB7O3i1jgL4pwwTnbFf1LYkQkC4h7dFxrUmDwNvxIc+gE5rXjhPo8S4OWlb34eXNJSHbjLafvi64uQr2waS15RtRkfb9WTVtMjV7g4zCi74XHZpohAtC1ARshtOlc+9gZlSBX0dNtnFXDombJwb62pgi7BDexNpqppD0PTJ2HCiRAoGAREmZIdRvfyToxwNJOLeLPNXAIrrl3Xa/CGcVFe2nwZl/s4neIyHBC4rrYeNTwC/JM1cOFqbRy5dYXiFz3RCgWvMpVLOlc8oossSEXeoEQrdL8S8/4kCuNCifPnyuRGiBcTR9X/M2Ib1Oe8LH05HgxOodwPwU/8zS0akzZgATqRsCgYA5TDAX996ThMjHr+qjLh5gdIJ+85jxP0+tqVk5Vwl3niS3qJGoLIofIgHYee9U6c1wLJU+lUTaxYpuaJPwQFbdMGGGB8i3c2XczVBShCUEedelTghl7Izwh/DILmlAQCvYsC+wWMcFdU3LhYvFGXmTx9ToRBLdtd6v45+7MXcHQw==
+    # 回调地址
+    noticeUrl:
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 1285e7e..60baf48 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -52,4 +52,14 @@
     port: 5672
     username: ct_rabbit
     password: 123456
-    publisher-confirm-type: correlated
\ No newline at end of file
+    publisher-confirm-type: correlated
+
+pay:
+  ali:
+    appId: 2021002182686737
+    # 支付宝公钥
+    publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1WQMo5SqNK644piwb1iK83RUwNyw6bEr/+diP/+FUx2HBuidRJwGmwRE4PVzX2NXT/HsXIZdVFXYl8JbZA2uphXILmKr039CSTKpB+5v2hzKtnrBFNtLn+pKI5cchhDdk5IFo5esNV7yWbFlZKF4sztn1/s0uwn7DHyaNRdr7480kVxVUHqwl+t2G8SqifyvUMhT0Fq9a72yft7vgC7PYh2TF21vrH8pV4xbTcZ54evMl0wyDj6W1xsW+hYsdWy/gEogpvZ+qtQyL6LbjUhpSHeNJcGP004ilFB4ksfQqUrEcxROYV9bhTb+1QY+rmmuv4PCSesdHDNqFRj1ReeNzwIDAQAB
+    # 支付宝私钥
+    privateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDOhu+hD2kuMh5s7IQuKjexeC4DmXxrAr/bu10rNB304NaIRUNAkGPI9tep7ZRBZqa/Tjrfom8LeeBnbA1n+SgxROSREEXDA1E3/XJY+vYivehVTD2TuA2GEnEtLXUgxQJVfz/CNIOa3rCc1nj9n4/kv03Sx/yqiKnLd6h9dRvdaY9k7DwnWPu1FT5T3bpTiU+oKaUODkcfUPpMH8aQaolzKY07M0cqZFn75Z0KFAoM6p/TDoF7JKpwdzGO5xuJe8YT4xx2OcLY++d/dzSoQvvsKh8r1yE37Z5B9FxHSHe1GuR2wOQxhgXUyaj7gden/pAVspzbjZTDdQppjzNavnzdAgMBAAECggEAKAJL+c+aeLCM5F0NXkQfdenqQBhD2hc2Q8MQUYZPJ1lHNi700FUof44SSYEU73aLZxQoo5o8GOULa/2quzGxb5oBDXkxio3h9g7LUCGN/Tz8/Uk/xJYrSIXaFv5vamHACgAUwfKabC4n2LpTxg5bOd01nlfPwtmmyxvrMCK3uzSWzxDLag0jVh9DGA97D00UOkL9QpEJ26dpBuF7pf9Nt0BtfyJMFrCbJXY2F3j65VNN4f2rOG7/DTGm434Sektj9Bc31ept9MfPw9VyRbV7EMvG5be9iDqBvLbRGhQVtBjv3N/E7p3uUI5HyxM8GOjQhSwSOJQ0gQS8vNdNN90qoQKBgQDqxoTFOsPM3+LoQj1r7CjoXhooEfpikyHpK2l8mzM4+La9ajzUJzTWT8nc0k2Qha8AvBZzJ2+kSKAjtwc/VNTu0IeEn480V9zVyBFkcC294d3A1keN5ch9wP1it5fWsVh+62T9xGXlQQIpuYeQm1BXj7kltd7vE8t6fLrmnhVkpwKBgQDhMqgZoRQGmcgrVc8F//lBO7g6ku/+GfNJnve64sRi5ZifwSiNSULVqDWmdHJiVWyYXoTvt1o3bqQorawe0c+wEzknn8ZipNDnN9tybxhKqD6pzCbRv6yWmU+9X9ZhSxYJeumn3sqxyZB7rnqJQ7/vpsoNZRvp0LS85iJVJFXO2wKBgB7O3i1jgL4pwwTnbFf1LYkQkC4h7dFxrUmDwNvxIc+gE5rXjhPo8S4OWlb34eXNJSHbjLafvi64uQr2waS15RtRkfb9WTVtMjV7g4zCi74XHZpohAtC1ARshtOlc+9gZlSBX0dNtnFXDombJwb62pgi7BDexNpqppD0PTJ2HCiRAoGAREmZIdRvfyToxwNJOLeLPNXAIrrl3Xa/CGcVFe2nwZl/s4neIyHBC4rrYeNTwC/JM1cOFqbRy5dYXiFz3RCgWvMpVLOlc8oossSEXeoEQrdL8S8/4kCuNCifPnyuRGiBcTR9X/M2Ib1Oe8LH05HgxOodwPwU/8zS0akzZgATqRsCgYA5TDAX996ThMjHr+qjLh5gdIJ+85jxP0+tqVk5Vwl3niS3qJGoLIofIgHYee9U6c1wLJU+lUTaxYpuaJPwQFbdMGGGB8i3c2XczVBShCUEedelTghl7Izwh/DILmlAQCvYsC+wWMcFdU3LhYvFGXmTx9ToRBLdtd6v45+7MXcHQw==
+    # 回调地址
+    noticeUrl:
\ No newline at end of file
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index a5d65d6..a895b7d 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -46,4 +46,14 @@
     port: 5672
     username: ct_rabbit
     password: 123456
-    publisher-confirm-type: correlated
\ No newline at end of file
+    publisher-confirm-type: correlated
+
+pay:
+  ali:
+    appId: 2021002182686737
+    # 支付宝公钥
+    publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1WQMo5SqNK644piwb1iK83RUwNyw6bEr/+diP/+FUx2HBuidRJwGmwRE4PVzX2NXT/HsXIZdVFXYl8JbZA2uphXILmKr039CSTKpB+5v2hzKtnrBFNtLn+pKI5cchhDdk5IFo5esNV7yWbFlZKF4sztn1/s0uwn7DHyaNRdr7480kVxVUHqwl+t2G8SqifyvUMhT0Fq9a72yft7vgC7PYh2TF21vrH8pV4xbTcZ54evMl0wyDj6W1xsW+hYsdWy/gEogpvZ+qtQyL6LbjUhpSHeNJcGP004ilFB4ksfQqUrEcxROYV9bhTb+1QY+rmmuv4PCSesdHDNqFRj1ReeNzwIDAQAB
+    # 支付宝私钥
+    privateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDOhu+hD2kuMh5s7IQuKjexeC4DmXxrAr/bu10rNB304NaIRUNAkGPI9tep7ZRBZqa/Tjrfom8LeeBnbA1n+SgxROSREEXDA1E3/XJY+vYivehVTD2TuA2GEnEtLXUgxQJVfz/CNIOa3rCc1nj9n4/kv03Sx/yqiKnLd6h9dRvdaY9k7DwnWPu1FT5T3bpTiU+oKaUODkcfUPpMH8aQaolzKY07M0cqZFn75Z0KFAoM6p/TDoF7JKpwdzGO5xuJe8YT4xx2OcLY++d/dzSoQvvsKh8r1yE37Z5B9FxHSHe1GuR2wOQxhgXUyaj7gden/pAVspzbjZTDdQppjzNavnzdAgMBAAECggEAKAJL+c+aeLCM5F0NXkQfdenqQBhD2hc2Q8MQUYZPJ1lHNi700FUof44SSYEU73aLZxQoo5o8GOULa/2quzGxb5oBDXkxio3h9g7LUCGN/Tz8/Uk/xJYrSIXaFv5vamHACgAUwfKabC4n2LpTxg5bOd01nlfPwtmmyxvrMCK3uzSWzxDLag0jVh9DGA97D00UOkL9QpEJ26dpBuF7pf9Nt0BtfyJMFrCbJXY2F3j65VNN4f2rOG7/DTGm434Sektj9Bc31ept9MfPw9VyRbV7EMvG5be9iDqBvLbRGhQVtBjv3N/E7p3uUI5HyxM8GOjQhSwSOJQ0gQS8vNdNN90qoQKBgQDqxoTFOsPM3+LoQj1r7CjoXhooEfpikyHpK2l8mzM4+La9ajzUJzTWT8nc0k2Qha8AvBZzJ2+kSKAjtwc/VNTu0IeEn480V9zVyBFkcC294d3A1keN5ch9wP1it5fWsVh+62T9xGXlQQIpuYeQm1BXj7kltd7vE8t6fLrmnhVkpwKBgQDhMqgZoRQGmcgrVc8F//lBO7g6ku/+GfNJnve64sRi5ZifwSiNSULVqDWmdHJiVWyYXoTvt1o3bqQorawe0c+wEzknn8ZipNDnN9tybxhKqD6pzCbRv6yWmU+9X9ZhSxYJeumn3sqxyZB7rnqJQ7/vpsoNZRvp0LS85iJVJFXO2wKBgB7O3i1jgL4pwwTnbFf1LYkQkC4h7dFxrUmDwNvxIc+gE5rXjhPo8S4OWlb34eXNJSHbjLafvi64uQr2waS15RtRkfb9WTVtMjV7g4zCi74XHZpohAtC1ARshtOlc+9gZlSBX0dNtnFXDombJwb62pgi7BDexNpqppD0PTJ2HCiRAoGAREmZIdRvfyToxwNJOLeLPNXAIrrl3Xa/CGcVFe2nwZl/s4neIyHBC4rrYeNTwC/JM1cOFqbRy5dYXiFz3RCgWvMpVLOlc8oossSEXeoEQrdL8S8/4kCuNCifPnyuRGiBcTR9X/M2Ib1Oe8LH05HgxOodwPwU/8zS0akzZgATqRsCgYA5TDAX996ThMjHr+qjLh5gdIJ+85jxP0+tqVk5Vwl3niS3qJGoLIofIgHYee9U6c1wLJU+lUTaxYpuaJPwQFbdMGGGB8i3c2XczVBShCUEedelTghl7Izwh/DILmlAQCvYsC+wWMcFdU3LhYvFGXmTx9ToRBLdtd6v45+7MXcHQw==
+    # 回调地址
+    noticeUrl:
\ No newline at end of file
diff --git a/src/test/java/cc/mrbird/febs/PayTest.java b/src/test/java/cc/mrbird/febs/PayTest.java
new file mode 100644
index 0000000..ede5efa
--- /dev/null
+++ b/src/test/java/cc/mrbird/febs/PayTest.java
@@ -0,0 +1,33 @@
+package cc.mrbird.febs;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.domain.AlipayTradeAppPayModel;
+import com.alipay.api.response.AlipayTradeAppPayResponse;
+import com.ijpay.alipay.AliPayApi;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+@Slf4j
+@SpringBootTest
+public class PayTest {
+
+    @Test
+    public void aliPay() throws AlipayApiException {
+        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
+        model.setBody("这是测试用");
+        model.setSubject("支付测试用的");
+        model.setOutTradeNo("2021092712215802974");
+        model.setTimeoutExpress("15m");
+        model.setTotalAmount("0.01");
+        model.setPassbackParams("callback params");
+        model.setProductCode("QUICK_MSECURITY_PAY");
+        AlipayTradeAppPayResponse resp = AliPayApi.appPayToResponse(model, "");
+        log.info("=====>>>{}", JSONObject.toJSONString(resp));
+    }
+}

--
Gitblit v1.9.1