fix(payment): 修复支付宝支付相关问题

feature/community-center
yang 2025-05-05 17:09:57 +08:00
parent d460b542ce
commit b3340340bd
2 changed files with 51 additions and 21 deletions

View File

@ -189,7 +189,7 @@ public class AliPayController extends BaseController {
@ApiOperation(value = "提现")
public R<String> fetch(@Valid
@NotNull(message = "提现金额不能为空")
@Pattern(regexp = "^(0|(?!0\\d)[1-9]\\d*)(\\.\\d{2})?$", message = "金额格式错误(必须保留两位小数)")
@Pattern(regexp = "^(0|(?!0\\d)[1-9]\\d*)(\\.\\d{1,2})?$", message = "金额格式错误(必须保留两位小数)")
String amount) throws Exception {
SysUserPayAccount sysUserPayAccount = sysUserPayAccountService.lambdaQuery()

View File

@ -11,19 +11,18 @@ import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayFundTransUniTransferModel;
import com.alipay.api.domain.AlipayTradeQueryModel;
import com.alipay.api.domain.Participant;
import com.alipay.api.domain.*;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.alipay.api.response.AlipayTradePrecreateResponse;
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.facetoface.models.AlipayTradePrecreateResponse;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.domain.entity.SysUser;
@ -50,7 +49,6 @@ import com.mcwl.system.service.ISysUserPayAccountService;
import com.mcwl.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@ -59,6 +57,7 @@ import java.io.FileNotFoundException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
/**
@ -157,16 +156,17 @@ public class AliPayServiceImpl implements AliPayService {
orderTradeService.save(tradeEntity);
//调用支付宝的接口
AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace()
.preCreate(memberLevel.getMemberName(),
tradeEntity.getCode(),
orderTradeDto.getAmount().toString());
// AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace()
// .preCreate(memberLevel.getMemberName(),
// tradeEntity.getCode(),
// orderTradeDto.getAmount().toString());
AlipayTradePrecreateResponse payResponse = getAlipayTradePrecreateResponse(tradeEntity);
// 缓存到redis
if (Objects.nonNull(orderTradeDto.getPromotionId())) {
redisCache.setCacheObject(tradeEntity.getCode() + "_promotionId", orderTradeDto.getPromotionId(), 15, TimeUnit.MINUTES);
}
//参照官方文档响应示例,解析返回结果
String httpBodyStr = payResponse.getHttpBody();
String httpBodyStr = payResponse.getBody();
JSONObject jsonObject = JSONObject.parseObject(httpBodyStr);
PayVo payVo = new PayVo();
@ -197,12 +197,13 @@ public class AliPayServiceImpl implements AliPayService {
tradeEntity.setPayStatus(1);
orderTradeService.save(tradeEntity);
//调用支付宝的接口
AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace()
.preCreate(tradeEntity.getProductName(),
tradeEntity.getCode(),
paymentAmount.toString());
// AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace()
// .preCreate(tradeEntity.getProductName(),
// tradeEntity.getCode(),
// paymentAmount.toString());
AlipayTradePrecreateResponse payResponse = getAlipayTradePrecreateResponse(tradeEntity);
//参照官方文档响应示例,解析返回结果
String httpBodyStr = payResponse.getHttpBody();
String httpBodyStr = payResponse.getBody();
JSONObject jsonObject = JSONObject.parseObject(httpBodyStr);
String url = jsonObject.getJSONObject("alipay_trade_precreate_response").get("qr_code").toString();
@ -235,12 +236,14 @@ public class AliPayServiceImpl implements AliPayService {
tradeEntity.setPayStatus(1);
orderTradeService.save(tradeEntity);
//调用支付宝的接口
AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace()
.preCreate(tradeEntity.getProductName(),
tradeEntity.getCode(),
paymentAmount.toString());
// AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace()
// .preCreate(tradeEntity.getProductName(),
// tradeEntity.getCode(),
// paymentAmount.toString());
AlipayTradePrecreateResponse payResponse = getAlipayTradePrecreateResponse(tradeEntity);
//参照官方文档响应示例,解析返回结果
String httpBodyStr = payResponse.getHttpBody();
String httpBodyStr = payResponse.getBody();
JSONObject jsonObject = JSONObject.parseObject(httpBodyStr);
String url = jsonObject.getJSONObject("alipay_trade_precreate_response").get("qr_code").toString();
@ -557,6 +560,33 @@ public class AliPayServiceImpl implements AliPayService {
sysUserPayAccountLogService.save(sysUserPayAccountLog);
}
public AlipayTradePrecreateResponse getAlipayTradePrecreateResponse(OrderTrade tradeEntity) throws Exception {
// 初始化SDK
AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
// 构造请求参数以调用接口
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
// 设置商户订单号
model.setOutTradeNo(tradeEntity.getCode());
// 设置订单总金额
model.setTotalAmount(tradeEntity.getTotalAmount().toString());
// 设置订单标题
model.setSubject(tradeEntity.getProductName());
// 设置产品码
model.setProductCode("QR_CODE_OFFLINE");
request.setBizModel(model);
// 第三方代调用模式下请设置app_auth_token
// request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");
return alipayClient.certificateExecute(request);
}
public AlipayConfig getAlipayConfig() throws FileNotFoundException {
AlipayConfig config = new AlipayConfig();