refactor(mcwl-pay): 调整支付状态查询逻辑
parent
ed5909b837
commit
5a684c3829
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue