diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayController.java index 92dc115..d837dc0 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayController.java @@ -189,7 +189,7 @@ public class AliPayController extends BaseController { @ApiOperation(value = "提现") public R 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() 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 57eefa4..51e2b60 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 @@ -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();