refactor(mcwl-pay): 调整支付状态查询逻辑

master
yang 2025-03-11 09:48:33 +08:00
parent ed5909b837
commit 5a684c3829
1 changed files with 41 additions and 21 deletions

View File

@ -13,18 +13,20 @@ import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient; import com.alipay.api.DefaultAlipayClient;
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.AlipayTradeQueryModel;
import com.alipay.api.domain.Participant; import com.alipay.api.domain.Participant;
import com.alipay.api.internal.util.file.IOUtils; import com.alipay.api.internal.util.file.IOUtils;
import com.alipay.api.request.AlipayFundAccountQueryRequest; import com.alipay.api.request.AlipayFundAccountQueryRequest;
import com.alipay.api.request.AlipayFundTransUniTransferRequest; import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.request.AlipaySystemOauthTokenRequest; import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.response.AlipayFundAccountQueryResponse; import com.alipay.api.response.AlipayFundAccountQueryResponse;
import com.alipay.api.response.AlipayFundTransUniTransferResponse; import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.alipay.api.response.AlipaySystemOauthTokenResponse; import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
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.AlipayTradeCancelResponse;
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.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.mcwl.common.JSONUtils; import com.mcwl.common.JSONUtils;
@ -33,6 +35,7 @@ import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.domain.entity.SysUser; import com.mcwl.common.core.domain.entity.SysUser;
import com.mcwl.common.core.redis.RedisCache; import com.mcwl.common.core.redis.RedisCache;
import com.mcwl.common.exception.ServiceException; import com.mcwl.common.exception.ServiceException;
import com.mcwl.common.utils.DateUtils;
import com.mcwl.common.utils.SecurityUtils; import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.common.utils.ShareCodeUtils; import com.mcwl.common.utils.ShareCodeUtils;
import com.mcwl.common.utils.StringUtils; import com.mcwl.common.utils.StringUtils;
@ -59,6 +62,7 @@ import org.springframework.util.ResourceUtils;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -431,17 +435,30 @@ public class AliPayServiceImpl implements AliPayService {
if (orderTrade.getPayStatus() == 1) { if (orderTrade.getPayStatus() == 1) {
// 查询支付宝订单 // 查询支付宝订单
Object tradStatus = this.getTradStatus(outTradeNo); AlipayTradeQueryResponse tradStatus;
String jsonString = JSONObject.toJSONString(tradStatus); try {
JSONObject jsonObject = JSONObject.parseObject(jsonString); tradStatus = this.getTradStatus(outTradeNo);
Object tradeStatus = jsonObject.get("trade_status"); } catch (Exception e) {
log.error("支付状态获取失败,原始内容: {}", e.getMessage());
return R.ok(0);
}
// 返回交易结果, 是否交易成功需要根据该对象中的 trade_status 来确定
// trade_status 的枚举值如下, 请见 https://opendocs.alipay.com/apis/api_1/alipay.trade.query
// WAIT_BUYER_PAY交易创建等待买家付款
// TRADE_CLOSED未付款交易超时关闭或支付完成后全额退款
// TRADE_SUCCESS交易支付成功
// TRADE_FINISHED交易结束不可退款
// 当 trade_status 等于 TRADE_SUCCESS 或 TRADE_FINISHED 时, 表示支付成功
String tradeStatus = tradStatus.getTradeStatus();
if (Objects.nonNull(tradeStatus) && tradeStatus.equals("TRADE_SUCCESS")) { if (Objects.nonNull(tradeStatus) && tradeStatus.equals("TRADE_SUCCESS")) {
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("buyer_pay_amount", jsonObject.get("buyer_pay_amount").toString()); params.put("buyer_pay_amount", tradStatus.getBuyerPayAmount());
params.put("out_trade_no", jsonObject.get("out_trade_no").toString()); params.put("out_trade_no", tradStatus.getOutTradeNo());
params.put("gmt_payment", jsonObject.get("send_pay_date").toString()); params.put("gmt_payment",DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, tradStatus.getSendPayDate()));
params.put("total_amount", jsonObject.get("total_amount").toString()); params.put("total_amount", tradStatus.getTotalAmount());
params.put("trade_no", jsonObject.get("trade_no").toString()); params.put("trade_no", tradStatus.getTradeNo());
String code = orderTrade.getCode(); String code = orderTrade.getCode();
// 获取订单后缀 // 获取订单后缀
String suffix = code.substring(code.lastIndexOf("_") + 1); String suffix = code.substring(code.lastIndexOf("_") + 1);
@ -535,18 +552,21 @@ public class AliPayServiceImpl implements AliPayService {
} }
private Object getTradStatus(String outTradeNo) throws Exception { private AlipayTradeQueryResponse getTradStatus(String outTradeNo) throws Exception {
AlipayTradeQueryResponse query = Factory.Payment.Common().query(outTradeNo); // 初始化SDK
Map<String, Object> map = JSONUtils.jsonToMap(query.getHttpBody()); AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
// 返回交易结果, 是否交易成功需要根据该对象中的 trade_status 来确定 // 构造请求参数以调用接口
// trade_status 的枚举值如下, 请见 https://opendocs.alipay.com/apis/api_1/alipay.trade.query AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
// WAIT_BUYER_PAY交易创建等待买家付款 AlipayTradeQueryModel model = new AlipayTradeQueryModel();
// TRADE_CLOSED未付款交易超时关闭或支付完成后全额退款
// TRADE_SUCCESS交易支付成功 // 设置订单支付时传入的商户订单号
// TRADE_FINISHED交易结束不可退款 model.setOutTradeNo(outTradeNo);
// 当 trade_status 等于 TRADE_SUCCESS 或 TRADE_FINISHED 时, 表示支付成功
return map.get("alipay_trade_query_response"); request.setBizModel(model);
AlipayTradeQueryResponse response = alipayClient.certificateExecute(request);
return response;
} }
private void addLogAndUpdateUserWallet(SysUser sysUser, String amount) { private void addLogAndUpdateUserWallet(SysUser sysUser, String amount) {