refactor(pay): 调整支付宝支付流程

master
yang 2025-02-10 22:49:00 +08:00
parent d2e1697e4e
commit 00385906c3
3 changed files with 24 additions and 37 deletions

View File

@ -1,9 +1,6 @@
package com.mcwl.web.controller.pay.AliPay; package com.mcwl.web.controller.pay.AliPay;
import cn.hutool.core.lang.UUID; import cn.hutool.core.lang.UUID;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.json.JSONUtil;
import com.alipay.api.AlipayApiException;
import com.alipay.easysdk.factory.Factory; import com.alipay.easysdk.factory.Factory;
import com.mcwl.common.annotation.Anonymous; import com.mcwl.common.annotation.Anonymous;
import com.mcwl.common.core.controller.BaseController; import com.mcwl.common.core.controller.BaseController;
@ -18,7 +15,6 @@ import com.mcwl.pay.service.AliPayService;
import com.mcwl.pay.service.OrderTradeService; import com.mcwl.pay.service.OrderTradeService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.checkerframework.checker.units.qual.min;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -27,8 +23,6 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.HashMap; import java.util.HashMap;
@ -204,7 +198,6 @@ public class AliPayController extends BaseController {
.eq(OrderTrade::getCode, code) .eq(OrderTrade::getCode, code)
.one(); .one();
if (orderTrade == null) { if (orderTrade == null) {
redisCache.deleteObject(code);
return "failure"; return "failure";
} }
// 获取订单后缀 // 获取订单后缀

View File

@ -1,19 +1,10 @@
package com.mcwl.web.controller.pay.AliPay; package com.mcwl.web.controller.pay.AliPay;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.easysdk.base.oauth.models.AlipaySystemOauthTokenResponse;
import com.alipay.easysdk.factory.Factory; import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config; import com.alipay.easysdk.kernel.Config;
import com.alipay.easysdk.payment.common.models.AlipayTradeCancelResponse;
import com.alipay.easysdk.payment.common.models.AlipayTradeQueryResponse; import com.alipay.easysdk.payment.common.models.AlipayTradeQueryResponse;
import com.mcwl.common.JSONUtils; import com.mcwl.common.JSONUtils;
import com.mcwl.common.annotation.Anonymous;
import com.mcwl.common.core.controller.BaseController; import com.mcwl.common.core.controller.BaseController;
import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.page.TableDataInfo; import com.mcwl.common.core.page.TableDataInfo;
@ -21,7 +12,6 @@ import com.mcwl.common.core.redis.RedisCache;
import com.mcwl.common.domain.IdsParam; import com.mcwl.common.domain.IdsParam;
import com.mcwl.common.utils.SecurityUtils; import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.pay.domain.OrderTrade; import com.mcwl.pay.domain.OrderTrade;
import com.mcwl.pay.domain.OrderTradeDto;
import com.mcwl.pay.service.AliPayService; import com.mcwl.pay.service.AliPayService;
import com.mcwl.pay.service.OrderTradeService; import com.mcwl.pay.service.OrderTradeService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -30,15 +20,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import java.io.UnsupportedEncodingException; import java.util.List;
import java.net.URLEncoder; import java.util.Map;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.concurrent.TimeUnit;
/** /**
* @AuthorChenYan * @AuthorChenYan
@ -148,4 +133,18 @@ public class OrderTradeController extends BaseController {
} }
/**
*
*/
@GetMapping("/closeTrade")
public AjaxResult closeTrade(String outTradeNo) throws Exception {
// 关闭交易
AlipayTradeCancelResponse close = Factory.Payment.Common().cancel(outTradeNo);
if (close.getCode().equals("10000")) {
return AjaxResult.success("关闭成功");
}
return AjaxResult.error("关闭失败");
}
} }

View File

@ -2,8 +2,6 @@ package com.mcwl.pay.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.UUID; import cn.hutool.core.lang.UUID;
import cn.hutool.extra.mail.MailUtil; import cn.hutool.extra.mail.MailUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
@ -12,7 +10,6 @@ import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient; import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayConfig; import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient; import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.diagnosis.DiagnosisUtils;
import com.alipay.api.domain.AlipayFundAccountQueryModel; import com.alipay.api.domain.AlipayFundAccountQueryModel;
import com.alipay.api.domain.AlipayFundTransUniTransferModel; import com.alipay.api.domain.AlipayFundTransUniTransferModel;
import com.alipay.api.domain.Participant; import com.alipay.api.domain.Participant;
@ -23,7 +20,7 @@ import com.alipay.api.response.AlipayFundAccountQueryResponse;
import com.alipay.api.response.AlipayFundTransUniTransferResponse; import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.alipay.easysdk.factory.Factory; import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config; import com.alipay.easysdk.kernel.Config;
import com.alipay.easysdk.payment.common.models.AlipayTradeCloseResponse; import com.alipay.easysdk.payment.common.models.AlipayTradeCancelResponse;
import com.alipay.easysdk.payment.common.models.AlipayTradeQueryResponse; import com.alipay.easysdk.payment.common.models.AlipayTradeQueryResponse;
import com.alipay.easysdk.payment.facetoface.models.AlipayTradePrecreateResponse; import com.alipay.easysdk.payment.facetoface.models.AlipayTradePrecreateResponse;
import com.mcwl.common.JSONUtils; import com.mcwl.common.JSONUtils;
@ -217,8 +214,6 @@ public class AliPayServiceImpl implements AliPayService {
.preCreate(tradeEntity.getProductName(), .preCreate(tradeEntity.getProductName(),
tradeEntity.getCode(), tradeEntity.getCode(),
paymentAmount.toString()); paymentAmount.toString());
// 缓存到redis
redisCache.setCacheObject(tradeEntity.getCode(), JSONUtil.toJsonStr(tradeEntity), 30, TimeUnit.SECONDS);
//参照官方文档响应示例,解析返回结果 //参照官方文档响应示例,解析返回结果
String httpBodyStr = payResponse.getHttpBody(); String httpBodyStr = payResponse.getHttpBody();
JSONObject jsonObject = JSONObject.parseObject(httpBodyStr); JSONObject jsonObject = JSONObject.parseObject(httpBodyStr);
@ -357,12 +352,12 @@ public class AliPayServiceImpl implements AliPayService {
orderTradeService.orderHandler(orderTrade, suffix, params); orderTradeService.orderHandler(orderTrade, suffix, params);
return AjaxResult.success("查询成功", orderTrade.getPayStatus()); return AjaxResult.success("查询成功", orderTrade.getPayStatus());
} }
long expire = redisCache.getExpire(outTradeNo); long time = orderTrade.getCreateTime().getTime() / 1000 / 60;
// expire 超过15分钟则删除redis中订单信息 // time 超过15分钟则删除redis中订单信息
if (expire > 900) { if (time >= 15) {
// 关闭交易 // 撤销交易
AlipayTradeCloseResponse close = Factory.Payment.Common().close(outTradeNo); AlipayTradeCancelResponse cancel = Factory.Payment.Common().cancel(outTradeNo);
if (close.getCode().equals("10000")) { if (cancel.getCode().equals("10000")) {
orderTrade.setOrderStatus(4); orderTrade.setOrderStatus(4);
orderTradeService.updateById(orderTrade); orderTradeService.updateById(orderTrade);
redisCache.deleteObject(outTradeNo + "promotionId"); redisCache.deleteObject(outTradeNo + "promotionId");