Просмотр исходного кода

产品模块 完善支付宝下单逻辑,使用沙箱环境

songfuqiang 2 лет назад
Родитель
Сommit
c70049c772

+ 5 - 3
backend-core/src/main/java/cn/kdan/pdf/backend/core/config/AlipayClientConfig.java

@@ -8,9 +8,11 @@ import org.springframework.core.env.Environment;
 
 import javax.annotation.Resource;
 
-
+/**
+ * 配置文件读取
+ */
 @Configuration
-@PropertySource("classpath:alipay-sandbox.properties")
+@PropertySource("classpath:alipay-sandbox-test.properties")
 public class AlipayClientConfig {
 
     @Resource
@@ -24,7 +26,7 @@ public class AlipayClientConfig {
         //设置应用ID
         alipayConfig.setAppId(config.getProperty("alipay.app.id"));
         //设置应用私钥
-        alipayConfig.setPrivateKey(config.getProperty("ALIPAY_RSA2_KEY"));
+        alipayConfig.setPrivateKey(config.getProperty("alipay_rsa2_key"));
         //设置请求格式,固定值json
         alipayConfig.setFormat(AlipayConstants.FORMAT_JSON);
         //设置字符集

+ 1 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/AlipayController.java

@@ -23,7 +23,7 @@ public class AlipayController {
 
     @GetMapping("/pay")
     public String pay() throws AlipayApiException {
-        return alipayService.createAlipayPageUrl("17PDF会员订阅", "20210817010101011", 0.01f, null);
+        return alipayService.createAlipayPageUrl("17PDF会员订阅", "20210817010101014", 0.01f, null);
     }
 
     @GetMapping("/query")

+ 17 - 22
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AlipayServiceImpl.java

@@ -2,10 +2,10 @@ package cn.kdan.pdf.backend.core.service.impl;
 
 import cn.kdan.pdf.backend.core.model.Subscriptions;
 import cn.kdan.pdf.backend.core.service.AlipayService;
-import cn.kdan.pdf.backend.core.service.OrderService;
 import com.alibaba.fastjson.JSONObject;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
+import com.alipay.api.domain.AlipayTradePagePayModel;
 import com.alipay.api.request.AlipayTradeCloseRequest;
 import com.alipay.api.request.AlipayTradePagePayRequest;
 import com.alipay.api.request.AlipayTradeQueryRequest;
@@ -17,10 +17,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
+import utils.DateUtils;
 
-import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.Date;
 
 @Slf4j
 @Service
@@ -31,8 +30,6 @@ public class AlipayServiceImpl implements AlipayService {
 
     @Autowired
     private Environment config;
-    @Autowired
-    private OrderService orderService;
 
     /**
      * 支付宝开放平台接收 request 请求对象后
@@ -50,30 +47,28 @@ public class AlipayServiceImpl implements AlipayService {
      */
     @Override
     public String createAlipayPageUrl(String subject, String tradeNo, Float price, Subscriptions subscription) {
-        //封装bizContent对象
-        JSONObject bizContent = new JSONObject();
-        bizContent.put("out_trade_no", tradeNo);
-        bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");
-        bizContent.put("subject", subject);
-        /*//根据环境来设置价格
-        if(false){
-            price = subscription.getPrice();
-        }else{
-            price = 0.01f;
-        }*/
-        bizContent.put("total_amount", price);
+        //封装bizModel对象
+        AlipayTradePagePayModel model =new AlipayTradePagePayModel();
+        model.setOutTradeNo(tradeNo);
+        model.setTotalAmount(price.toString());
+        model.setSubject(subject);
+        model.setProductCode("FAST_INSTANT_TRADE_PAY");
+        Date date = DateUtils.addHours(new Date(), 2, 0);
+        String timeExpire = DateUtils.dateToString(date, "yyyy-MM-dd HH:mm:ss");
+        model.setTimeExpire(timeExpire);//todo 暂定当前时间2小时后过期
 
         // 最终目的是获取url路径,联调支付宝
         AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
         request.setReturnUrl(config.getProperty("alipay.return-url"));
         //设置回调return_url、响应url
-        String notifyUrl = config.getProperty("notify_url");
-        request.setNotifyUrl(notifyUrl);
-        request.setBizContent(bizContent.toString());
+        request.setNotifyUrl(config.getProperty("notify_url"));
+        request.setBizModel(model);
         AlipayTradePagePayResponse response = null;
         try {
             log.info("支付宝支付调用参数:{}", JSONObject.toJSONString(request));
-            response = alipayClient.pageExecute(request);
+            //get方式请求,即生成url链接
+            response = alipayClient.pageExecute(request,"GET");
+//            response = alipayClient.pageExecute(request);
             log.info("支付宝支付调用成功:{}", JSONObject.toJSONString(response));
         } catch (AlipayApiException e) {
             log.error("支付宝支付调用失败:{}", e.getMessage());

+ 8 - 8
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/OrderServiceImpl.java

@@ -552,16 +552,16 @@ public class OrderServiceImpl implements OrderService {
         String outTradeNo = params.get("out_trade_no");
 
         // 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
-//        Orders order = getByTradeNo(outTradeNo);
-//        if (order == null) {
-//            throw new AlipayApiException("out_trade_no错误");
-//        }
+        Orders order = getByTradeNo(outTradeNo);
+        if (order == null) {
+            throw new AlipayApiException("out_trade_no错误");
+        }
 
         // 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
-        long total_amount = new BigDecimal(params.get("total_amount")).multiply(new BigDecimal(100)).longValue();
-//        if (total_amount != order.getPrice().longValue()) {
-//            throw new AlipayApiException("error total_amount");
-//        }
+        long total_amount = new BigDecimal(params.get("total_amount")).longValue();
+        if (total_amount != order.getPrice().longValue()) {
+            throw new AlipayApiException("error total_amount");
+        }
 
         // 3、校验通知中的seller_id(或者seller_email)是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email),
         // 第三步可根据实际情况省略

Разница между файлами не показана из-за своего большого размера
+ 17 - 0
backend-core/src/main/resources/alipay-sandbox-test.properties


+ 1 - 2
backend-core/src/main/resources/alipay-sandbox.properties

@@ -2,7 +2,7 @@
 # 应用ID ,APPID
 alipay.app.id=2018061360381286
 # 商户PID
-alipay.seller-id=2088221759705831
+alipay.seller-id=2088102170114672
 # 支付宝网关
 alipay.gateway-url=https://openapi.alipay.com/gateway.do
 #17pdf私钥
@@ -14,5 +14,4 @@ alipay.content-key=cT8kQm3D197ZJJV66RCqVg==
 #页面跳转同步通知页面   测试地址  后期需要修改为实际地址
 alipay.return-url=http://81.68.234.235:8999/17pdf-backend-core/order/alipaySyncOrder
 notify_url=http://81.68.234.235:8999/17pdf-backend-core/order/alipaySyncOrder
-#notify_url=http://127.0.0.1:8999/17pdf-backend-core/order/alipaySyncOrder