From 5a684c38298b4caba80202133a73f44acd800128 Mon Sep 17 00:00:00 2001 From: yang <2119157836@qq.com> Date: Tue, 11 Mar 2025 09:48:33 +0800 Subject: [PATCH] =?UTF-8?q?refactor(mcwl-pay):=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E7=8A=B6=E6=80=81=E6=9F=A5=E8=AF=A2=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pay/service/impl/AliPayServiceImpl.java | 62 ++++++++++++------- 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/AliPayServiceImpl.java b/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/AliPayServiceImpl.java index f5d794f..6ba3fe8 100644 --- a/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/AliPayServiceImpl.java +++ b/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/AliPayServiceImpl.java @@ -13,18 +13,20 @@ import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.AlipayFundAccountQueryModel; import com.alipay.api.domain.AlipayFundTransUniTransferModel; +import com.alipay.api.domain.AlipayTradeQueryModel; import com.alipay.api.domain.Participant; import com.alipay.api.internal.util.file.IOUtils; import com.alipay.api.request.AlipayFundAccountQueryRequest; import com.alipay.api.request.AlipayFundTransUniTransferRequest; import com.alipay.api.request.AlipaySystemOauthTokenRequest; +import com.alipay.api.request.AlipayTradeQueryRequest; import com.alipay.api.response.AlipayFundAccountQueryResponse; import com.alipay.api.response.AlipayFundTransUniTransferResponse; import com.alipay.api.response.AlipaySystemOauthTokenResponse; +import com.alipay.api.response.AlipayTradeQueryResponse; import com.alipay.easysdk.factory.Factory; 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.facetoface.models.AlipayTradePrecreateResponse; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; 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.redis.RedisCache; import com.mcwl.common.exception.ServiceException; +import com.mcwl.common.utils.DateUtils; import com.mcwl.common.utils.SecurityUtils; import com.mcwl.common.utils.ShareCodeUtils; import com.mcwl.common.utils.StringUtils; @@ -59,6 +62,7 @@ import org.springframework.util.ResourceUtils; import java.io.FileNotFoundException; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.TimeUnit; @@ -431,17 +435,30 @@ public class AliPayServiceImpl implements AliPayService { if (orderTrade.getPayStatus() == 1) { // 查询支付宝订单 - Object tradStatus = this.getTradStatus(outTradeNo); - String jsonString = JSONObject.toJSONString(tradStatus); - JSONObject jsonObject = JSONObject.parseObject(jsonString); - Object tradeStatus = jsonObject.get("trade_status"); + AlipayTradeQueryResponse tradStatus; + try { + tradStatus = this.getTradStatus(outTradeNo); + } 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")) { Map params = new HashMap<>(); - params.put("buyer_pay_amount", jsonObject.get("buyer_pay_amount").toString()); - params.put("out_trade_no", jsonObject.get("out_trade_no").toString()); - params.put("gmt_payment", jsonObject.get("send_pay_date").toString()); - params.put("total_amount", jsonObject.get("total_amount").toString()); - params.put("trade_no", jsonObject.get("trade_no").toString()); + params.put("buyer_pay_amount", tradStatus.getBuyerPayAmount()); + params.put("out_trade_no", tradStatus.getOutTradeNo()); + params.put("gmt_payment",DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, tradStatus.getSendPayDate())); + params.put("total_amount", tradStatus.getTotalAmount()); + params.put("trade_no", tradStatus.getTradeNo()); String code = orderTrade.getCode(); // 获取订单后缀 String suffix = code.substring(code.lastIndexOf("_") + 1); @@ -535,18 +552,21 @@ public class AliPayServiceImpl implements AliPayService { } - private Object getTradStatus(String outTradeNo) throws Exception { - AlipayTradeQueryResponse query = Factory.Payment.Common().query(outTradeNo); - Map map = JSONUtils.jsonToMap(query.getHttpBody()); + private AlipayTradeQueryResponse getTradStatus(String outTradeNo) throws Exception { + // 初始化SDK + AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); - // 返回交易结果, 是否交易成功需要根据该对象中的 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 时, 表示支付成功 - return map.get("alipay_trade_query_response"); + // 构造请求参数以调用接口 + AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); + AlipayTradeQueryModel model = new AlipayTradeQueryModel(); + + // 设置订单支付时传入的商户订单号 + model.setOutTradeNo(outTradeNo); + + request.setBizModel(model); + + AlipayTradeQueryResponse response = alipayClient.certificateExecute(request); + return response; } private void addLogAndUpdateUserWallet(SysUser sysUser, String amount) {