Ver código fonte

支付直连

chunping 2 anos atrás
pai
commit
5163b51f4a

+ 0 - 6
mp-admin/pom.xml

@@ -17,12 +17,6 @@
 
     <dependencies>
 
-        <dependency>
-            <groupId>com.alipay.sdk</groupId>
-            <artifactId>alipay-sdk-java</artifactId>
-            <version>4.31.12.ALL</version>
-        </dependency>
-
         <!--快递100SDK-->
         <dependency>
             <groupId>com.github.kuaidi100-api</groupId>

+ 170 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/callback/AlipayCallBackController.java

@@ -0,0 +1,170 @@
+package com.qs.mp.web.controller.api.callback;
+
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.domain.AlipayTradeAppPayModel;
+import com.alipay.api.internal.util.AlipaySignature;
+import com.alipay.api.request.AlipayTradeAppPayRequest;
+import com.alipay.api.response.AlipayTradeAppPayResponse;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.qs.mp.common.enums.PayOrderStatusEnum;
+import com.qs.mp.common.exception.ServiceException;
+import com.qs.mp.common.utils.DateUtils;
+import com.qs.mp.common.utils.LogUtil;
+import com.qs.mp.common.utils.StringUtils;
+import com.qs.mp.common.utils.WebhookService;
+import com.qs.mp.pay.domain.PayOrder;
+import com.qs.mp.pay.service.IPayOrderService;
+import com.qs.mp.pay.service.IWalletService;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @auther duota
+ * @create 2021 2021/9/6 2:54 下午
+ * @describe 三方支付平台回调
+ */
+
+@RestController
+@RequestMapping("/service/notify")
+public class AlipayCallBackController {
+
+  private final Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName());
+  private String UNKNOWN = "UNKNOWN";
+
+  @Autowired
+  private IPayOrderService payOrderService;
+
+  @Autowired
+  private IWalletService walletService;
+
+  @Value("${ali-miniApp.public-key}")
+  private String aliPublicKey;
+
+
+  @RequestMapping(value = "/alipayCallback", method = RequestMethod.POST)
+  public void payCallback(HttpServletRequest request, HttpServletResponse response) {
+    //获取支付宝POST过来反馈信息
+    Map< String , String > params = new HashMap< String , String >();
+    Map requestParams = request.getParameterMap();
+    for(Iterator iter = requestParams.keySet().iterator();iter.hasNext();){
+      String name = (String)iter.next();
+      String[] values = (String [])requestParams.get(name);
+      String valueStr = "";
+      for(int i = 0;i < values.length;i ++ ){
+        valueStr =  (i==values.length-1)?valueStr + values [i]:valueStr + values[i] + ",";
+      }
+      //乱码解决,这段代码在出现乱码时使用。
+      //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
+      params.put (name,valueStr);
+    }
+    //切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
+    //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
+    boolean flag = false;
+    try {
+      flag = AlipaySignature.rsaCheckV1 (params, aliPublicKey, "GBK","RSA2");
+      if (!flag) {
+        LogUtil.error(logger,"验签失败");
+        responseWrite(response,"error");
+        return;
+      }
+    } catch (AlipayApiException e) {
+      e.printStackTrace();
+    }
+    String bizId = request.getParameter("out_trade_no");
+    String tradeNo = request.getParameter("trade_no");
+    String tradeStatus = request.getParameter("trade_status"); // TRADE_SUCCESS
+    Integer totalAmount = new BigDecimal(request.getParameter("total_amount")).multiply(new BigDecimal(100)).intValue();
+    String completeDate = request.getParameter("gmt_payment");
+    logger.info("data: bizId:"+bizId +" tradeNo:"+tradeNo +" totalAmount:"+totalAmount+ "tradeStatus:"+tradeStatus);
+
+    //回调金额与订单金额一致性校验
+    PayOrder order = payOrderService.getOne(new LambdaQueryWrapper<PayOrder>()
+        .eq(PayOrder::getBizId, bizId)
+        .eq(PayOrder::getOrderNo, tradeNo));
+    if (null == order) {
+      logger.error("支付订单不存在,bizId:" + bizId + ",tradeNo:" + tradeNo);
+      responseWrite(response,"error");
+      return;
+    }
+    if(order.getTransactionAmount() != totalAmount){
+      logger.error("回调金额与订单金额不一致");
+      responseWrite(response,"error");
+      return;
+    }
+    if (!"TRADE_SUCCESS".equals(tradeStatus)) {
+      logger.error("非支付成功消息,忽略");
+      responseWrite(response,"error");
+      return;
+    }
+    PayOrder payOrder =  new PayOrder();
+    payOrder.setOrderId(order.getOrderId());
+    payOrder.setOrderNo(tradeNo);
+    payOrder.setCompleteDate(completeDate);
+//    payOrder.setChannelNo(channelNo);
+    payOrder.setOrderStatus(PayOrderStatusEnum.SUCCESS.getValue());
+
+    try {
+      // 订单支付状态单独保存
+      LambdaUpdateWrapper<PayOrder> updateWrapper = new LambdaUpdateWrapper<>();
+      updateWrapper.eq(PayOrder::getOrderStatus, PayOrderStatusEnum.WAIT.getValue());
+      updateWrapper.eq(PayOrder::getOrderId, order.getOrderId());
+      boolean ret = payOrderService.update(payOrder, updateWrapper);
+      if (!ret) {
+        throw new ServiceException("支付订单更新失败,orderId:" + order.getOrderId());
+      }
+
+      // 更新订单,单个事务处理
+      logger.info("支付回调消息更新成功 orderId:" + order.getOrderId());
+      walletService.payOrderStatusHandle(payOrder);
+      responseWrite(response,"success");
+    } catch (Exception e){
+      LogUtil.error(logger, e, "支付回调消息更新失败 orderId:" + order.getOrderId());
+      responseWrite(response,"error");
+    }
+  }
+
+  private void responseWrite(HttpServletResponse response,String echostr){
+    try {
+      response.getWriter().write(echostr);
+      response.getWriter().flush();
+      response.getWriter().close();
+    } catch (IOException e) {
+      LogUtil.error(logger, e, "微信公众号设置url回调处理异常");
+    }
+  }
+
+  /**
+   * 获取 IP地址
+   * 使用 Nginx等反向代理软件, 则不能通过 request.getRemoteAddr()获取 IP地址
+   * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,
+   * X-Forwarded-For中第一个非 unknown的有效IP字符串,则为真实IP地址
+   */
+  private String getIpAddr(HttpServletRequest request) {
+    String ip = request.getHeader("x-forwarded-for");
+    if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
+      ip = request.getHeader("Proxy-Client-IP");
+    }
+    if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
+      ip = request.getHeader("WL-Proxy-Client-IP");
+    }
+    if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
+      ip = request.getRemoteAddr();
+    }
+    return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
+  }
+
+}

+ 1 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserDeliverOrderController.java

@@ -332,7 +332,7 @@ public class UserDeliverOrderController extends BaseApiController {
         try {
             if (param.getPayType() == 1) {
                 // 支付宝支付
-                jsonObject = walletService.aliPay(BizTypeEnum.TICKET_ORDER, param.getOrderId(), sysUser.getAliuserId(),
+                jsonObject = walletService.directAliPay(BizTypeEnum.TICKET_ORDER, param.getOrderId(), sysUser.getAliuserId(),
                     deliverOrder.getPayAmt(), "盲票--提货订单");
             } else {
                 // 微信支付

+ 1 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketOrderController.java

@@ -225,7 +225,7 @@ public class UserTicketOrderController extends BaseApiController {
         try {
             if (param.getPayType() == 1) {
                 // 支付宝支付
-                jsonObject = walletService.aliPay(BizTypeEnum.TICKET_ORDER, param.getOrderId(), sysUser.getAliuserId(),
+                jsonObject = walletService.directAliPay(BizTypeEnum.TICKET_ORDER, param.getOrderId(), sysUser.getAliuserId(),
                     ticketOrder.getPayAmt(), ticketOrder.getTitle());
             } else {
                 // 微信支付

+ 3 - 1
mp-admin/src/main/resources/application-8100.yml

@@ -5,6 +5,8 @@ mp:
 #三方支付配置
 pay:
   callbackUrl: https://mp-api.51jiazhu.com/service/notify/payCallback
+alipay:
+  callbackUrl: https://mp-api.51jiazhu.com/service/notify/alipayCallback
 
 # 日志配置
 logging:
@@ -144,4 +146,4 @@ shipping:
   user: 1
   channel: 2
 bind:
-  channelId: 1528
+  channelId: 1528

+ 3 - 1
mp-admin/src/main/resources/application-8200.yml

@@ -5,6 +5,8 @@ mp:
 #三方支付配置
 pay:
   callbackUrl: https://mp-api.51jiazhu.com/service/notify/payCallback
+alipay:
+  callbackUrl: https://mp-api.51jiazhu.com/service/notify/alipayCallback
 
 # 日志配置
 logging:
@@ -144,4 +146,4 @@ shipping:
   user: 1
   channel: 2
 bind:
-  channelId: 1528
+  channelId: 1528

+ 2 - 0
mp-admin/src/main/resources/application-dev.yml

@@ -4,6 +4,8 @@ mp:
 
 pay:
     callbackUrl: https://test-mp.quanshu123.com/service/notify/payCallback
+alipay:
+    callbackUrl: https://test-mp.quanshu123.com/service/notify/alipayCallback
 
 # 数据源配置
 spring:

+ 3 - 1
mp-admin/src/main/resources/application-test.yml

@@ -3,6 +3,8 @@ mp:
   profile: /home/quanshu/mp-server
 pay:
   callbackUrl: https://test-mp.quanshu123.com/service/notify/payCallback
+alipay:
+  callbackUrl: https://test-mp.quanshu123.com/service/notify/alipayCallback
 
 # 日志配置
 logging:
@@ -142,4 +144,4 @@ shipping:
   user: 4
   channel: 7
 bind:
-  channelId: 2
+  channelId: 2

+ 77 - 7
mp-admin/src/test/java/com/qs/mp/service/ServiceImplTest.java

@@ -1,14 +1,19 @@
 package com.qs.mp.service;
 
 import com.qs.mp.MpApplication;
+import com.qs.mp.admin.domain.TicketAwardsPrize;
 import com.qs.mp.admin.service.ITicketBoxSerialService;
 import com.qs.mp.common.utils.DateUtils;
+import com.qs.mp.common.utils.LogUtil;
+import com.qs.mp.common.utils.http.MpHttpRequestUtils;
 import com.qs.mp.framework.service.IWxUrlLinkService;
 import com.qs.mp.quartz.task.DayStatTask;
 import com.qs.mp.quartz.task.TicketBoxTask;
 import com.qs.mp.quartz.task.TicketPkgDataTask;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -53,8 +58,8 @@ public class ServiceImplTest {
 
   @Test
   public void testGenerateUnlimitCode() {
-    System.out.println(wxUrlLinkService.generateUnlimitCode("pages/ticketBox/detail", "boxId=1&suid=2&type=user", "wx8533800e393dbd6b"));
-
+//    System.out.println(wxUrlLinkService.generateUnlimitCode("pages/ticketBox/detail", "boxId=1&suid=2&type=user", "wx8533800e393dbd6b"));
+    System.out.println(wxUrlLinkService.generateUnlimitCode("", "2325&2", "wx8533800e393dbd6b"));
   }
 
   @Test
@@ -65,8 +70,8 @@ public class ServiceImplTest {
 
   @Test
   public void testGenerateUrlSchema() {
-    System.out.println(wxUrlLinkService.generateUrlSchema("/pages/login/invitation", "", "wxc3a684f1196f6e15"));
-
+//    System.out.println(wxUrlLinkService.generateUrlSchema("/pages/login/invitation", "", "wxc3a684f1196f6e15"));
+    System.out.println(wxUrlLinkService.generateUrlSchema("", "2325&2", "wx8533800e393dbd6b"));
   }
 
   @Test
@@ -93,9 +98,42 @@ public class ServiceImplTest {
   }
 
 
-
+  @Test
+  public void testGetAccessToken() {
+    String appId = "wx8533800e393dbd6b";
+    String params = "{\"appId\":\"" + appId + "\"}";
+    String url = "https://test-mp.quanshu123.com/api/v1/mp/wx/getAccessToken?";
+    String res = MpHttpRequestUtils.request(url, params);
+    LogUtil.info(logger, "获取accessToken结果:" + res);
+  }
 
   public static void main(String[] args) {
+    List<TicketAwardsPrize> newTicketAwardsPrizes = new ArrayList<>();
+    TicketAwardsPrize prize1 = new TicketAwardsPrize();
+    prize1.setRemainQty(1);
+    newTicketAwardsPrizes.add(prize1);
+    TicketAwardsPrize prize2 = new TicketAwardsPrize();
+    prize2.setRemainQty(1);
+    newTicketAwardsPrizes.add(prize2);
+    TicketAwardsPrize prize3 = new TicketAwardsPrize();
+    prize3.setRemainQty(1);
+    newTicketAwardsPrizes.add(prize3);
+    TicketAwardsPrize prize4 = new TicketAwardsPrize();
+    prize4.setRemainQty(1);
+    newTicketAwardsPrizes.add(prize4);
+    TicketAwardsPrize prize5 = new TicketAwardsPrize();
+    prize5.setRemainQty(2000);
+    newTicketAwardsPrizes.add(prize5);
+    for (int i=0; i<500; i++) {
+      System.out.println(getRandom(newTicketAwardsPrizes));
+      i++;
+    }
+
+    /*String appId = "wx8533800e393dbd6b";
+    String params = "{\"appId\":\"" + appId + "\"}";
+    String url = "https://test-mp.quanshu123.com/api/v1/mp/wx/getAccessToken?";
+    String res = MpHttpRequestUtils.request(url, params);
+    System.out.println("获取accessToken结果:" + res);*/
     /*int n = 500;
     Random rand = new Random();
     boolean[] bool = new boolean[n];
@@ -116,9 +154,41 @@ public class ServiceImplTest {
 
     char[] a = Character.toChars(72);
 
-    System.out.println(new String(a));*/
+    System.out.println(new String(a));
     System.out.println(DateUtils.dateTime());
-    System.out.println(new Date().getTime());
+    System.out.println(new Date().getTime());*/
+  }
+
+  private static int getRandom(List<TicketAwardsPrize> newTicketAwardsPrizes) {
+    // 开奖
+    int random = -1;
+    // 计算总权重
+    double sumWeight = 0;
+    for (TicketAwardsPrize ticketAwardsPrize : newTicketAwardsPrizes) {
+      sumWeight += ticketAwardsPrize.getRemainQty();
+    }
+
+    //产生随机数
+    double randomNumber;
+    randomNumber = Math.random();
+    System.out.println("random:" + randomNumber);
+    //根据随机数在所有奖品分布的区域并确定所抽奖品
+    double d1 = 0;
+    double d2 = 0;
+    for (int i = 0; i < newTicketAwardsPrizes.size(); i++) {
+      d2 += Double.parseDouble(String.valueOf(newTicketAwardsPrizes.get(i).getRemainQty())) / sumWeight;
+      if (i == 0) {
+        d1 = 0;
+      } else {
+        d1 += Double.parseDouble(String.valueOf(newTicketAwardsPrizes.get(i - 1).getRemainQty())) / sumWeight;
+      }
+      System.out.println("d1:" + d1 + ",d2:" +d2);
+      if (randomNumber >= d1 && randomNumber < d2) {
+        random = i;
+        break;
+      }
+    }
+    return random;
   }
 
   }

+ 5 - 0
mp-common/pom.xml

@@ -188,6 +188,11 @@
             <artifactId>jedis</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.alipay.sdk</groupId>
+            <artifactId>alipay-sdk-java</artifactId>
+        </dependency>
+
         <!-- spring2.X集成redis所需common-pool2,使用jedis必须依赖它-->
         <dependency>
             <groupId>org.apache.commons</groupId>

+ 1 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelOrderServiceImpl.java

@@ -280,6 +280,7 @@ public class ChannelOrderServiceImpl extends
     }
 
     @Override
+    @Transactional
   public void paySuccess(PayOrder payOrder) {
     ChannelOrder channelOrder = getById(payOrder.getBizId());
     if (null == channelOrder || channelOrder.getStatus() != ChannelOrderStatusEnum.NOT_PAY) {

+ 2 - 0
mp-service/src/main/java/com/qs/mp/pay/domain/PayOrder.java

@@ -52,12 +52,14 @@ public class PayOrder implements Serializable {
 
   /**
    * 支付来源 1:支付宝  2:微信支付 5:云闪付
+   * 增加直连来源(2022.7) 10:支付宝直连
    */
   @TableField("pay_resource")
   private String payResource;
 
   /**
    * 1004:支付宝CTB;1008:微信公众号(需要绑定支付目录)1014: 支付宝服务窗1016:云闪付CTB1017:微信小程序1019:支付宝小程序(请用1014编码)
+   *
    */
   @TableField("trans_type_code")
   private String transTypeCode;

+ 12 - 0
mp-service/src/main/java/com/qs/mp/pay/service/IWalletService.java

@@ -11,6 +11,18 @@ import com.qs.mp.pay.domain.PayOrder;
  */
 public interface IWalletService {
 
+  /**
+   * 支付宝直连支付
+   * @param bizType
+   * @param bizId
+   * @param openId
+   * @param money
+   * @param orderRemark
+   * @return
+   */
+  JSONObject directAliPay(BizTypeEnum bizType, String bizId, String openId, int money,
+      String orderRemark);
+
   /**
    * 支付宝支付
    * @param bizType

+ 98 - 0
mp-service/src/main/java/com/qs/mp/pay/service/impl/WalletServiceImpl.java

@@ -1,6 +1,12 @@
 package com.qs.mp.pay.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.request.AlipayTradeCreateRequest;
+import com.alipay.api.response.AlipayTradeCreateResponse;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.qs.mp.channel.service.IChannelOrderService;
@@ -22,6 +28,11 @@ import com.qs.mp.pay.service.IWalletService;
 import com.qs.mp.system.service.id.BizIdGenerator;
 import com.qs.mp.user.service.IUserDeliverOrderService;
 import com.qs.mp.user.service.IUserTicketOrderService;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 import org.apache.pulsar.client.api.PulsarClientException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -91,6 +102,93 @@ public class WalletServiceImpl implements IWalletService {
   private static final String PAY_RESOURCE = "2"; //2:微信支付
   private static final String PAY_RESOURCE_TYPE = "1017"; //2:微信小程序
 
+  // 支付宝直连
+
+  private static String aliAppId;
+  @Value("${ali-miniApp.appId}")
+  public void setAliAppId(String aliAppId) {
+    aliAppId = aliAppId;
+  }
+
+  private static String aliPublicKey;
+  @Value("${ali-miniApp.public-key}")
+  public void setAliPublicKey(String aliPublicKey) {
+    aliPublicKey = aliPublicKey;
+  }
+
+  private static String aliPrivateKey;
+  @Value("${ali-miniApp.private-key}")
+  public static void setAliPrivateKey(String aliPrivateKey) {
+    aliPrivateKey = aliPrivateKey;
+  }
+
+  private static String aliServerUrl;
+  @Value("${ali-miniApp.serverUrl}")
+  public static void setAliServerUrl(String aliServerUrl) {
+    aliServerUrl = aliServerUrl;
+  }
+
+  @Value("${alipay.callbackUrl}")
+  private String alipayCallbackUrl;  //支付宝直连回调地址
+  private static AlipayClient alipayClient = null;
+
+
+  @Override
+  public JSONObject directAliPay(BizTypeEnum bizType, String bizId, String openId, int money, String orderRemark) {
+    if (null == alipayClient) {
+      alipayClient = new DefaultAlipayClient(aliServerUrl, aliAppId, aliPrivateKey, "json", "GBK", aliPublicKey, "RSA2");
+    }
+    Map<String, Object> params = new HashMap<String, Object>();
+    params.put("out_trade_no", bizId);
+    params.put("buyer_id", openId);
+    params.put("subject", orderRemark);
+    params.put("total_amount", new BigDecimal(money).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
+    Object obj = JSONObject.toJSON(params);
+    AlipayTradeCreateRequest alipayRequest = new AlipayTradeCreateRequest();
+    alipayRequest.setNotifyUrl(alipayCallbackUrl);
+    alipayRequest.setBizContent(obj.toString());
+    AlipayTradeCreateResponse alipayResponse = null;
+    try {
+      alipayResponse = alipayClient.execute(alipayRequest);
+      if (null == alipayResponse || !alipayResponse.isSuccess()) {
+        LogUtil.error(logger, "创建直连支付宝交易失败。request:{0}, response:{1}", new Object[]{JSONObject.toJSON(alipayRequest),
+            alipayResponse});
+        throw new ServiceException("订单创建失败");
+      }
+
+
+
+    }catch (AlipayApiException e) {
+      if(e.getCause() instanceof java.security.spec.InvalidKeySpecException){
+        logger.error("商户私钥格式不正确,请确认application.properties文件中是否配置正确");
+      }
+      throw new ServiceException("订单创建失败");
+    }
+
+    String trade_no = alipayResponse.getTradeNo();
+    //保存订单记录
+    PayOrder payOrder = new PayOrder();
+    payOrder.setOrderId(String.valueOf(bizIdGenerator.newId()));
+    payOrder.setBizType(bizType);
+    payOrder.setBizId(bizId);
+    payOrder.setOrderNo(trade_no);
+    payOrder.setOrderTime(DateUtils.getTime());
+    payOrder.setPayResource("10"); // 支付宝直连
+    payOrder.setTransTypeCode("1019"); // 支付宝小程序
+    payOrder.setTransactionAmount(money);
+    payOrder.setOrderRemark(orderRemark);
+    payOrder.setOrderName(orderRemark);
+    payOrder.setOrderStatus(PayOrderStatusEnum.WAIT.getValue());
+    boolean ret = payOrderService.save(payOrder);
+    if (!ret) {
+      LogUtil.error(logger, "支付订单数据保存失败.");
+      throw new ServiceException("支付订单保存失败");
+    }
+
+    JSONObject data = new JSONObject();
+    data.put("pay_info", trade_no);
+    return data;
+  }
 
   @Override
   public JSONObject aliPay(BizTypeEnum bizType, String bizId, String openId, int money, String orderRemark) {

+ 1 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserDeliverOrderServiceImpl.java

@@ -229,6 +229,7 @@ public class UserDeliverOrderServiceImpl extends ServiceImpl<UserDeliverOrderMap
   }
 
   @Override
+  @Transactional
   public boolean paySuccess(PayOrder payOrder) {
     UserDeliverOrder deliverOrder = getById(payOrder.getBizId());
     if (null == deliverOrder || deliverOrder.getStatus() != DeliverOrderStatusEnum.NOT_PAY) {

+ 5 - 1
pom.xml

@@ -73,7 +73,11 @@
 			    <artifactId>mybatis-plus-generator</artifactId>
 			    <version>3.4.1</version>
 			</dependency>
-
+            <dependency>
+                <groupId>com.alipay.sdk</groupId>
+                <artifactId>alipay-sdk-java</artifactId>
+                <version>4.31.12.ALL</version>
+            </dependency>
             <!-- MQ消息中间件-->
             <dependency>
                 <groupId>org.apache.pulsar</groupId>