fix(mcwl-pay): 修复支付宝提现功能
parent
196ba38b15
commit
ccd4372a68
|
@ -286,74 +286,87 @@ public class AliPayServiceImpl implements AliPayService {
|
|||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<String> fetch(String amount) throws AlipayApiException, FileNotFoundException {
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
SysUser sysUser = sysUserService.selectUserById(userId);
|
||||
if (sysUser.getWallet() < Double.parseDouble(amount)) {
|
||||
return R.fail(HttpStatus.SHOW_ERROR_MSG,"钱包余额不足");
|
||||
String lock = redisCache.getCacheObject("alipay:fetch:user:" + SecurityUtils.getUserId());
|
||||
if (!StrUtil.isEmpty(lock)) {
|
||||
return R.fail(HttpStatus.SHOW_ERROR_MSG, "请勿频繁点击");
|
||||
}
|
||||
try {
|
||||
redisCache.setCacheObject("alipay:fetch:user:" + SecurityUtils.getUserId(), "1");
|
||||
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
|
||||
|
||||
SysUser sysUser = sysUserService.selectUserById(userId);
|
||||
if (sysUser.getWallet() < Double.parseDouble(amount)) {
|
||||
return R.fail(HttpStatus.SHOW_ERROR_MSG, "钱包余额不足");
|
||||
}
|
||||
|
||||
// 初始化SDK
|
||||
AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
|
||||
|
||||
// 构造请求参数以调用接口
|
||||
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
|
||||
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
|
||||
// 设置商家侧唯一订单号
|
||||
model.setOutBizNo(UUID.fastUUID().toString(true));
|
||||
|
||||
// 设置订单总金额
|
||||
model.setTransAmount(amount);
|
||||
|
||||
// 设置描述特定的业务场景
|
||||
model.setBizScene("DIRECT_TRANSFER");
|
||||
|
||||
// 设置业务产品码
|
||||
model.setProductCode("TRANS_ACCOUNT_NO_PWD");
|
||||
|
||||
// 设置转账业务的标题
|
||||
model.setOrderTitle("提现");
|
||||
|
||||
// 查询用户支付宝账户
|
||||
SysUserPayAccount sysUserPayAccount = sysUserPayAccountService
|
||||
.lambdaQuery()
|
||||
.eq(SysUserPayAccount::getUserId, userId)
|
||||
.eq(SysUserPayAccount::getType, 0)
|
||||
.one();
|
||||
if (Objects.isNull(sysUserPayAccount)) {
|
||||
return R.fail(HttpStatus.SHOW_ERROR_MSG, "请先绑定支付宝账号");
|
||||
}
|
||||
|
||||
// 收款方信息
|
||||
Participant payeeInfo = new Participant();
|
||||
|
||||
payeeInfo.setIdentity(sysUserPayAccount.getOpenId());
|
||||
payeeInfo.setIdentityType(aliConfig.getIdentityType());
|
||||
model.setPayeeInfo(payeeInfo);
|
||||
|
||||
request.setBizModel(model);
|
||||
|
||||
// 添加提现记录和修改用户钱包
|
||||
this.addLogAndUpdateUserWallet(sysUser, amount);
|
||||
|
||||
// 证书用:certificateExecute(request),密钥用:execute(request)
|
||||
AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
|
||||
System.out.println(response.getBody());
|
||||
|
||||
if (response.isSuccess()) {
|
||||
|
||||
return R.ok("提现成功");
|
||||
}
|
||||
|
||||
if (response.getSubCode().equals("PAYER_BALANCE_NOT_ENOUGH")) {
|
||||
// 账户余额不足,发送邮件通知
|
||||
ArrayList<String> tos = CollUtil.newArrayList("2119157836@qq.com");
|
||||
|
||||
String content = String.format("账户余额不足:用户%s提现%s", sysUser.getNickName(), amount);
|
||||
MailUtil.send(tos, "魔创未来", content, false);
|
||||
throw new ServiceException("网络连接出错,请稍后再试", HttpStatus.SHOW_ERROR_MSG);
|
||||
}
|
||||
System.out.println("用户" + SecurityUtils.getLoginUser().getUser().getNickName() + "提现失败:" + response.getSubMsg());
|
||||
throw new ServiceException("提现失败", HttpStatus.SHOW_ERROR_MSG);
|
||||
} finally {
|
||||
redisCache.deleteObject("alipay:fetch:user:" + SecurityUtils.getUserId());
|
||||
}
|
||||
|
||||
// 初始化SDK
|
||||
AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
|
||||
|
||||
// 构造请求参数以调用接口
|
||||
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
|
||||
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
|
||||
// 设置商家侧唯一订单号
|
||||
model.setOutBizNo(UUID.fastUUID().toString(true));
|
||||
|
||||
// 设置订单总金额
|
||||
model.setTransAmount(amount);
|
||||
|
||||
// 设置描述特定的业务场景
|
||||
model.setBizScene("DIRECT_TRANSFER");
|
||||
|
||||
// 设置业务产品码
|
||||
model.setProductCode("TRANS_ACCOUNT_NO_PWD");
|
||||
|
||||
// 设置转账业务的标题
|
||||
model.setOrderTitle("提现");
|
||||
|
||||
// 查询用户支付宝账户
|
||||
SysUserPayAccount sysUserPayAccount = sysUserPayAccountService
|
||||
.lambdaQuery()
|
||||
.eq(SysUserPayAccount::getUserId, userId)
|
||||
.eq(SysUserPayAccount::getType, 0)
|
||||
.one();
|
||||
if (Objects.isNull(sysUserPayAccount)) {
|
||||
return R.fail(HttpStatus.SHOW_ERROR_MSG,"请先绑定支付宝账号");
|
||||
}
|
||||
|
||||
// 收款方信息
|
||||
Participant payeeInfo = new Participant();
|
||||
|
||||
payeeInfo.setIdentity(sysUserPayAccount.getOpenId());
|
||||
payeeInfo.setIdentityType(aliConfig.getIdentityType());
|
||||
model.setPayeeInfo(payeeInfo);
|
||||
|
||||
request.setBizModel(model);
|
||||
|
||||
// 添加提现记录和修改用户钱包
|
||||
this.addLogAndUpdateUserWallet(sysUser, amount);
|
||||
|
||||
// 证书用:certificateExecute(request),密钥用:execute(request)
|
||||
AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
|
||||
System.out.println(response.getBody());
|
||||
|
||||
if (response.isSuccess()) {
|
||||
|
||||
return R.ok("提现成功");
|
||||
}
|
||||
|
||||
if (response.getSubCode().equals("PAYER_BALANCE_NOT_ENOUGH")) {
|
||||
// 账户余额不足,发送邮件通知
|
||||
ArrayList<String> tos = CollUtil.newArrayList("2119157836@qq.com");
|
||||
|
||||
String content = String.format("账户余额不足:用户%s提现%s", sysUser.getNickName(), amount);
|
||||
MailUtil.send(tos, "魔创未来", content, false);
|
||||
throw new ServiceException("网络连接出错,请稍后再试", HttpStatus.SHOW_ERROR_MSG);
|
||||
}
|
||||
System.out.println("用户" + SecurityUtils.getLoginUser().getUser().getNickName() + "提现失败:" + response.getSubMsg());
|
||||
throw new ServiceException("提现失败", HttpStatus.SHOW_ERROR_MSG);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -377,7 +390,7 @@ public class AliPayServiceImpl implements AliPayService {
|
|||
|
||||
// 如果数据库中不存在该订单, 则返回订单不存在
|
||||
if (Objects.isNull(orderTrade)) {
|
||||
return R.fail(HttpStatus.SHOW_ERROR_MSG,"订单不存在");
|
||||
return R.fail(HttpStatus.SHOW_ERROR_MSG, "订单不存在");
|
||||
}
|
||||
|
||||
|
||||
|
@ -404,7 +417,7 @@ public class AliPayServiceImpl implements AliPayService {
|
|||
Map<String, String> params = new HashMap<>();
|
||||
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("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();
|
||||
|
|
|
@ -123,8 +123,8 @@ public class OrderTradeServiceImpl extends ServiceImpl<OrderTradeMapper, OrderTr
|
|||
CommissionRatio commissionRatio2 = commissionRatioService.lambdaQuery()
|
||||
.eq(CommissionRatio::getType, 1)
|
||||
.one();
|
||||
redisCache.setCacheObject(CommissionRationEnum.COMMISSION_RATION_INVITER_USER.getName(), commissionRatio1);
|
||||
redisCache.setCacheObject(CommissionRationEnum.COMMISSION_RATION_MERCHANT.getName(), commissionRatio2);
|
||||
redisCache.setCacheObject(CommissionRationEnum.COMMISSION_RATION_INVITER_USER.getName(), commissionRatio1.getRatio().toString());
|
||||
redisCache.setCacheObject(CommissionRationEnum.COMMISSION_RATION_MERCHANT.getName(), commissionRatio2.getRatio().toString());
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue