[fix]修改红包和提现
This commit is contained in:
parent
eeb50d18b1
commit
3c770192fa
@ -24,6 +24,7 @@ import com.wzj.soopin.transaction.convert.ChargeConvert;
|
||||
import com.wzj.soopin.transaction.convert.WithdrawConvert;
|
||||
import com.wzj.soopin.transaction.domain.bo.ChargeBO;
|
||||
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
|
||||
import com.wzj.soopin.transaction.domain.po.Withdraw;
|
||||
import com.wzj.soopin.transaction.enums.WithdrawType;
|
||||
import com.wzj.soopin.transaction.service.IAccountBillService;
|
||||
import com.wzj.soopin.transaction.service.IChargeService;
|
||||
@ -47,6 +48,8 @@ import org.dromara.common.social.config.properties.SocialProperties;
|
||||
import org.dromara.common.social.utils.SocialUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/app/member")
|
||||
@Tag(name = "会员管理")
|
||||
@ -200,7 +203,15 @@ public class AppMemberController {
|
||||
Long memberId = loginUser.getUserId();
|
||||
bo.setMemberId(memberId);
|
||||
bo.setType(WithdrawType.WALLET.getCode());
|
||||
return R.ok(withdrawService.withdrawWallet(withdrawConvert.toPo(bo)));
|
||||
Withdraw withdraw=withdrawConvert.toPo(bo);
|
||||
withdrawService.withdraw(withdraw);
|
||||
//检查提现金额是否小于1元 一元以下自动审批
|
||||
if(withdraw.getMoney().compareTo(BigDecimal.ONE)<0){
|
||||
//自动审批
|
||||
bo.setId(withdraw.getId());
|
||||
withdrawService.audit(bo);
|
||||
}
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
@ -223,6 +234,4 @@ public class AppMemberController {
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ public class AppTenantController {
|
||||
Long memberId = loginUser.getUserId();
|
||||
bo.setMemberId(memberId);
|
||||
bo.setType(WithdrawType.REVENUE.getCode());
|
||||
return R.ok(withdrawService.withdrawRevenue(withdrawConvert.toPo(bo)));
|
||||
return R.ok(withdrawService.withdraw(withdrawConvert.toPo(bo)));
|
||||
}
|
||||
|
||||
|
||||
|
@ -232,6 +232,12 @@ public enum ResultCode {
|
||||
CAN_NOT_RECHARGE_WALLET(32012, "不能使用余额进行充值"),
|
||||
RECHARGE_PRICE_ERROR(32013, "充值金额错误"),
|
||||
|
||||
|
||||
WITHDRAW_ERROR(33000, "提现失败"),
|
||||
WITHDRAW_AUDIT_ERROR(33001, "提现审核失败"),
|
||||
WITHDRAW_WALLET_ERROR(33002, "提现到钱包失败"),
|
||||
|
||||
|
||||
/**
|
||||
* 售后
|
||||
*/
|
||||
|
@ -15,6 +15,8 @@ public enum MessageActionEnum {
|
||||
ORDER_RECHARGE(30, "order"), //订单->充值 online
|
||||
ORDER_PAY(31, "order"), //订单->订单交易成功通知 online
|
||||
ORDER_REFUND(32, "order"), //订单->退款结果通知
|
||||
ORDER_WITHDRAW_AUDIT(33, "order"), //订单->提现审核结果通知
|
||||
ORDER_WITHDRAW_REFUSE(34, "order"), //订单->提现审核结果通知(拒绝)
|
||||
GROUP_NOTIFY_CHECK(43, "groupNotify"), //群通知->进群申请 online
|
||||
GROUP_NOTIFY_ACCEPT(44, "groupNotify"), // 群通知->进群审核审核通过 online
|
||||
GROUP_NOTIFY_FAIL(45, "groupNotify"), // 群通知->进群审核审核拒绝 online
|
||||
@ -52,4 +54,6 @@ public enum MessageActionEnum {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -349,6 +349,32 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
||||
childComment.setUpdateBy(username);
|
||||
commentMapper.updateById(childComment);
|
||||
}
|
||||
|
||||
|
||||
List<Comment> notifyList = new ArrayList<>();
|
||||
notifyList.add(comment);
|
||||
notifyList.addAll(childComments);
|
||||
notifyList.forEach(c -> {
|
||||
//给评论发送通知
|
||||
MqUtil.sendIMMessage(buildOfflineMessage(c));
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
private MQMessage buildOfflineMessage(Comment comment) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("userId", MessageActionEnum.SYSTEM_REPORT.getCode());
|
||||
params.put("nickName", MessageActionEnum.SYSTEM_REPORT.getAccount());
|
||||
params.put("toUserId", comment.getId());
|
||||
params.put("commentId", comment.getId());
|
||||
params.put("commentContent", comment.getContent());
|
||||
params.put("action", MessageActionEnum.SYSTEM_REPORT.getAccount());
|
||||
MQMessage mqMessage = new MQMessage();
|
||||
mqMessage.setTag(MessageActionEnum.SYSTEM_REPORT.getAccount());
|
||||
mqMessage.setData(params);
|
||||
return mqMessage;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -375,13 +401,16 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
||||
// 3) 发送站内消息:根评论 -> 通知视频作者;回复评论 -> 通知被回复用户
|
||||
|
||||
|
||||
// 关注消息
|
||||
MqUtil.sendIMMessage(buildMessage(bo));
|
||||
// 给评论或者作者发送通知
|
||||
MqUtil.sendIMMessage(buildCommentMessage(bo));
|
||||
|
||||
//检查是否有@
|
||||
|
||||
}
|
||||
|
||||
private MQMessage buildMessage(CommentBO bo){
|
||||
Map<String,Object> params=new HashMap<>();
|
||||
LoginUser loginUser=LoginHelper.getLoginUser();
|
||||
private MQMessage buildCommentMessage(CommentBO bo) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if ("0".equals(bo.getFatherCommentId())) {
|
||||
// 评论视频,通知视频作者
|
||||
if (bo.getVlogerId() != null && !bo.getVlogerId().isEmpty()
|
||||
@ -402,8 +431,8 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
||||
params.put("nickName", loginUser.getNickname());
|
||||
params.put("toUserId", father.getCommentUserId());
|
||||
params.put("vlogId", bo.getVlogId());
|
||||
params.put("commentId",father.getId());
|
||||
params.put("commentContent",father.getContent());
|
||||
params.put("commentId", father.getId());
|
||||
params.put("commentContent", father.getContent());
|
||||
params.put("action", MessageActionEnum.INTERACTION_REPLY.getAccount());
|
||||
|
||||
}
|
||||
|
@ -408,4 +408,12 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
|
||||
Assert.isTrue(StrUtil.equals(smsCode, code), () -> new ServiceException("短信验证码错误"));
|
||||
memberMapper.updateById(Member.builder().id(loginUser.getUserId()).status(Constants.MEMBER_ACCOUNT_STATUS.FORBIDDEN).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = GlobalConstants.MEMBER_KEY, key = "#id")
|
||||
|
||||
|
||||
public boolean updateById(Member entity) {
|
||||
return super.updateById(entity);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,4 @@
|
||||
package com.wzj.soopin.order.business;
|
||||
|
||||
public interface IAfterSaleBusiness {
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package com.wzj.soopin.order.business.impl;
|
||||
|
||||
import com.wzj.soopin.order.convert.AftersaleConvert;
|
||||
import com.wzj.soopin.order.domain.entity.Aftersale;
|
||||
import com.wzj.soopin.order.domain.vo.AftersaleVO;
|
||||
import com.wzj.soopin.order.service.AftersaleService;
|
||||
import org.dromara.common.web.core.BusinessImpl;
|
||||
|
||||
public class AfterSaleBusiness {
|
||||
}
|
@ -1,24 +1,16 @@
|
||||
package com.wzj.soopin.order.convert;
|
||||
|
||||
import com.wzj.soopin.member.domain.bo.MemberAddressBO;
|
||||
import com.wzj.soopin.member.domain.po.MemberAddress;
|
||||
import com.wzj.soopin.member.domain.vo.MemberAddressVO;
|
||||
import com.wzj.soopin.order.domain.bo.AftersaleBo;
|
||||
import com.wzj.soopin.order.domain.entity.Aftersale;
|
||||
import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm;
|
||||
import com.wzj.soopin.order.domain.vo.AftersaleVO;
|
||||
import com.wzj.soopin.order.domain.vo.ManagerRefundOrderVO;
|
||||
import org.dromara.common.web.core.BaseConverter;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
/**
|
||||
* 订单售后 DO <=> DTO <=> VO / BO / Query
|
||||
*
|
||||
* @author zcc
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface AftersaleConvert extends BaseConverter<AftersaleVO, AftersaleBo,Aftersale> {
|
||||
public interface AftersaleConvert extends BaseConverter<AftersaleVO, AftersaleBo, Aftersale> {
|
||||
|
||||
// List<AftersaleVO> dos2vos(List<Aftersale> list);
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
package com.wzj.soopin.order.domain.bo;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.wzj.soopin.order.domain.entity.Aftersale;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.dromara.common.core.domain.BaseBO;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@ -13,7 +13,7 @@ import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@Schema(description = "订单售后 查询 对象")
|
||||
public class AftersaleBo {
|
||||
public class AftersaleBo extends BaseBO<Aftersale> {
|
||||
|
||||
@Schema(description = "MEMBER_ID 精确匹配")
|
||||
private Long memberId;
|
||||
@ -64,7 +64,7 @@ public class AftersaleBo {
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime endTime;
|
||||
|
||||
public Wrapper<Aftersale> toWrapper() {
|
||||
public LambdaQueryWrapper<Aftersale> toWrapper() {
|
||||
return new LambdaQueryWrapper<Aftersale>()
|
||||
.eq(memberId != null, Aftersale::getMemberId, memberId)
|
||||
.eq(orderId != null, Aftersale::getOrderId, orderId)
|
||||
|
@ -31,6 +31,9 @@ import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.event.Constants;
|
||||
import org.dromara.common.core.enums.AftersaleStatus;
|
||||
import org.dromara.common.core.enums.OrderRefundStatus;
|
||||
import org.dromara.common.mq.domain.MQMessage;
|
||||
import org.dromara.common.mq.enums.MessageActionEnum;
|
||||
import org.dromara.common.mq.utils.MqUtil;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -232,8 +235,24 @@ public class AftersaleServiceImpl extends ServiceImpl<AftersaleMapper, Aftersale
|
||||
if ((request.getOptType() == Constants.OptType.GIVING || (request.getOptType() == Constants.OptType.AGREE && aftersale.getType() == 1))) {
|
||||
tradeRefund(aftersale, order, optDate, userId);
|
||||
}
|
||||
}
|
||||
|
||||
//发送成功通知
|
||||
MqUtil.sendIMMessage(buildMessage(aftersale, MessageActionEnum.ORDER_REFUND));
|
||||
}
|
||||
private MQMessage buildMessage(Aftersale o, MessageActionEnum actionEnum) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
Member sender=new Member();
|
||||
sender.setUserId(Long.valueOf(actionEnum.getCode()));
|
||||
params.put("sender", sender);
|
||||
|
||||
// params.put("receiver", memberService.getMemberInfo(o.getMemberId()));
|
||||
params.put("object", o);
|
||||
params.put("action", actionEnum.getAccount());
|
||||
MQMessage mqMessage = new MQMessage();
|
||||
mqMessage.setTag(actionEnum.getAccount());
|
||||
mqMessage.setData(params);
|
||||
return mqMessage;
|
||||
}
|
||||
public void tradeRefund(Aftersale returnApply, Order order, LocalDateTime optDate, Long userId) {
|
||||
//查一下微信订单
|
||||
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();
|
||||
|
@ -9,7 +9,6 @@ public interface IWithdrawService extends IService<Withdraw> {
|
||||
|
||||
boolean withdrawCallback(WithdrawBO withdraw);
|
||||
|
||||
boolean withdrawWallet(Withdraw withdraw);
|
||||
boolean withdraw (Withdraw withdraw);
|
||||
|
||||
boolean withdrawRevenue (Withdraw withdraw);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.wzj.soopin.transaction.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.wzj.soopin.content.domain.po.Comment;
|
||||
import com.wzj.soopin.member.domain.po.Member;
|
||||
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
|
||||
import com.wzj.soopin.member.domain.po.MemberAccount;
|
||||
@ -19,10 +20,15 @@ import com.wzj.soopin.transaction.domain.vo.EasypayAccountVO;
|
||||
import com.wzj.soopin.transaction.service.IAccountBillService;
|
||||
import com.wzj.soopin.transaction.service.IWithdrawService;
|
||||
import com.wzj.soopin.transaction.service.IEasypayService;
|
||||
import com.wzj.soopin.transaction.util.SnowFlake;
|
||||
import com.wzj.soopin.transaction.wechat.WechatPayConfig;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.constant.ResultCode;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.mq.domain.MQMessage;
|
||||
import org.dromara.common.mq.enums.MessageActionEnum;
|
||||
import org.dromara.common.mq.utils.MqUtil;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.system.domain.SysTenantAccount;
|
||||
import org.dromara.system.service.ISysTenantAccountService;
|
||||
@ -30,9 +36,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 会员封禁
|
||||
@ -60,22 +64,25 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
|
||||
|
||||
private final IMemberService memberService;
|
||||
|
||||
private final WechatPayConfig wechatPayConfig;
|
||||
@Override
|
||||
public boolean audit(WithdrawBO bo) {
|
||||
Withdraw withdraw = getById(bo.getId());
|
||||
if (withdraw == null) {
|
||||
throw new RuntimeException("提现申请不存在");
|
||||
}
|
||||
if (!Objects.equals(WithdrawAuditStatus.PENDING.getCode(), withdraw.getAuditStatus())) {
|
||||
if (!Objects.equals(WithdrawAuditStatus.PENDING.getCode(), withdraw.getStatus())) {
|
||||
throw new RuntimeException("提现申请已处理");
|
||||
}
|
||||
//发起提现
|
||||
|
||||
try{
|
||||
wxPayService.initiateBatchTransferNew(buildWechatPayParam(bo));
|
||||
wxPayService.initiateBatchTransferNew(buildWechatPayParam(withdraw));
|
||||
}catch (ServiceException e){
|
||||
log.error("提现申请失败",e);
|
||||
throw new RuntimeException("提现申请失败");
|
||||
//提现失败
|
||||
//发送通知
|
||||
MqUtil.sendIMMessage(buildMessage(withdraw,MessageActionEnum.ORDER_WITHDRAW_AUDIT));
|
||||
throw new ServiceException(ResultCode.WITHDRAW_AUDIT_ERROR);
|
||||
}
|
||||
withdraw = Withdraw.builder().id(bo.getId())
|
||||
.auditReason(bo.getAuditReason())
|
||||
@ -84,14 +91,36 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
|
||||
.auditBy(LoginHelper.getUserId())
|
||||
.build();
|
||||
this.updateById(withdraw);
|
||||
|
||||
//发送成功通知
|
||||
MqUtil.sendIMMessage(buildMessage(withdraw, MessageActionEnum.ORDER_WITHDRAW_AUDIT));
|
||||
return true;
|
||||
}
|
||||
|
||||
private MQMessage buildMessage(Withdraw o, MessageActionEnum actionEnum) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
Member sender=new Member();
|
||||
sender.setUserId(Long.valueOf(actionEnum.getCode()));
|
||||
params.put("sender", sender);
|
||||
params.put("receiver", memberService.getMemberInfo(o.getMemberId()));
|
||||
params.put("object", o);
|
||||
params.put("action", actionEnum.getAccount());
|
||||
MQMessage mqMessage = new MQMessage();
|
||||
mqMessage.setTag(actionEnum.getAccount());
|
||||
mqMessage.setData(params);
|
||||
return mqMessage;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private InitiateBatchTransferRequestNew buildWechatPayParam(WithdrawBO withdraw) {
|
||||
//sender
|
||||
//receiver
|
||||
//object
|
||||
//action
|
||||
|
||||
|
||||
private InitiateBatchTransferRequestNew buildWechatPayParam(Withdraw withdraw) {
|
||||
InitiateBatchTransferRequestNew request = new InitiateBatchTransferRequestNew();
|
||||
WechatPayConfig wechatPayConfig = new WechatPayConfig();
|
||||
//商户AppID
|
||||
request.setAppid(wechatPayConfig.getAppId());
|
||||
//商户单号
|
||||
@ -104,7 +133,9 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
|
||||
Member member=memberService.getById(withdraw.getMemberId());
|
||||
request.setOpenid(member.getOpenId());
|
||||
//收款用户姓名
|
||||
request.setUserName(member.getNickname());
|
||||
if (request.getTransferAmount() > 30) {
|
||||
request.setUserName(member.getNickname());
|
||||
}
|
||||
//转账备注
|
||||
request.setTransferRemark("提现");
|
||||
//转账场景报备信息 佣金的固定类型
|
||||
@ -155,47 +186,8 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
|
||||
}
|
||||
|
||||
|
||||
public boolean withdrawRevenue(Withdraw withdraw) {
|
||||
//调用三方支付平台获取用户余额
|
||||
// TODO: 2025/9/10 这个地方不能用null ,但是现在商户提现的业务不对,暂时没有提现业务
|
||||
SysTenantAccount tenantAccount = sysTenantAccountService.getByTenantId(null);
|
||||
if (tenantAccount == null) {
|
||||
throw new RuntimeException("用户不存在");
|
||||
}
|
||||
BigDecimal balance = tenantAccount.getRevenue();
|
||||
EasypayAccountVO easypayAccountVO = easypayService.getEasypayAccount(withdraw.getMemberId());
|
||||
|
||||
if (easypayAccountVO == null) {
|
||||
throw new RuntimeException("账户余额获取失败");
|
||||
}
|
||||
//生成费用
|
||||
BigDecimal fee = withdraw.getMoney().multiply(new BigDecimal("0.01"));
|
||||
withdraw.setFee(fee);
|
||||
withdraw.setActualMoney(withdraw.getMoney().subtract(fee));
|
||||
|
||||
|
||||
save(withdraw);
|
||||
BigDecimal newBalance = balance.subtract(withdraw.getMoney());
|
||||
|
||||
tenantAccount.setRevenue(newBalance);
|
||||
//锁定用户余额
|
||||
sysTenantAccountService.updateById(tenantAccount);
|
||||
|
||||
//生成账单
|
||||
AccountBill memberAccountChangeRecord = AccountBill.builder()
|
||||
.accountId(withdraw.getMemberId())
|
||||
.moneyBalance(balance.subtract(withdraw.getMoney()))
|
||||
.beforeBalance(balance)
|
||||
.afterBalance(newBalance)
|
||||
.changeType(AccountBillChangeTypeEnum.OUT.getCode())
|
||||
.changeDesc("提现锁定")
|
||||
.source(AccountBillSourceEnum.WITHDRAW.getCode())
|
||||
.build();
|
||||
accountBillService.save(memberAccountChangeRecord);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean withdrawWallet(Withdraw withdraw) {
|
||||
public boolean withdraw (Withdraw withdraw) {
|
||||
MemberAccount memberAccount = memberAccountService.getMemberAccount(withdraw.getMemberId());
|
||||
if (memberAccount == null) {
|
||||
throw new RuntimeException("用户不存在");
|
||||
@ -206,9 +198,10 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
|
||||
throw new RuntimeException("用户余额不足");
|
||||
}
|
||||
//生成费用
|
||||
BigDecimal fee = withdraw.getMoney().multiply(new BigDecimal("0.01"));
|
||||
BigDecimal fee = withdraw.getMoney().multiply(new BigDecimal("0.00"));
|
||||
withdraw.setFee(fee);
|
||||
withdraw.setActualMoney(withdraw.getMoney().subtract(fee));
|
||||
withdraw.setCode(SnowFlake.createStr("TX"));
|
||||
save(withdraw);
|
||||
|
||||
BigDecimal newBalance = balance.subtract(withdraw.getMoney());
|
||||
|
@ -17,6 +17,7 @@ import com.wzj.soopin.transaction.domain.entity.TransferBillEntity;
|
||||
import com.wzj.soopin.transaction.domain.entity.TransferDetailEntityNew;
|
||||
import com.wzj.soopin.transaction.wechat.WechatPayConfig;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.dromara.common.core.constant.ResultCode;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -53,32 +54,27 @@ public class WxPayService {
|
||||
*/
|
||||
public InitiateBatchTransferResponseNew initiateBatchTransferNew(InitiateBatchTransferRequestNew request) {
|
||||
logger.info("WxPayService.initiateBatchTransferNew request:{}", request.toString());
|
||||
try{
|
||||
|
||||
if(request.getUserName()!=null){
|
||||
String encryptName = wxPayConfig.createEncryptor().encrypt(request.getUserName());
|
||||
request.setUserName(encryptName);
|
||||
String requestPath = "https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills";
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue());
|
||||
headers.addHeader("Content-Type", MediaType.APPLICATION_JSON.getValue());
|
||||
headers.addHeader("Wechatpay-Serial", wxPayConfig.createEncryptor().getWechatpaySerial());
|
||||
HttpRequest httpRequest =
|
||||
new HttpRequest.Builder()
|
||||
.httpMethod(HttpMethod.POST)
|
||||
.url(requestPath)
|
||||
.headers(headers)
|
||||
.body(createRequestBody(request))
|
||||
.build();
|
||||
HttpClient httpClient = new DefaultHttpClientBuilder().config(wxPayConfig).build();
|
||||
HttpResponse<InitiateBatchTransferResponseNew> httpResponse = httpClient.execute(httpRequest, InitiateBatchTransferResponseNew.class);
|
||||
logger.info("WxPayService.initiateBatchTransferNew response:{}", httpResponse.getServiceResponse());
|
||||
return httpResponse.getServiceResponse();
|
||||
|
||||
}catch (Exception e){
|
||||
logger.error("WxPayService.initiateBatchTransferNew error:{}", e);
|
||||
}
|
||||
return null;
|
||||
|
||||
String requestPath = "https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills";
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue());
|
||||
headers.addHeader("Content-Type", MediaType.APPLICATION_JSON.getValue());
|
||||
headers.addHeader("Wechatpay-Serial", wxPayConfig.createEncryptor().getWechatpaySerial());
|
||||
HttpRequest httpRequest =
|
||||
new HttpRequest.Builder()
|
||||
.httpMethod(HttpMethod.POST)
|
||||
.url(requestPath)
|
||||
.headers(headers)
|
||||
.body(createRequestBody(request))
|
||||
.build();
|
||||
HttpClient httpClient = new DefaultHttpClientBuilder().config(wxPayConfig).build();
|
||||
HttpResponse<InitiateBatchTransferResponseNew> httpResponse = httpClient.execute(httpRequest, InitiateBatchTransferResponseNew.class);
|
||||
logger.info("WxPayService.initiateBatchTransferNew response:{}", httpResponse.getServiceResponse());
|
||||
return httpResponse.getServiceResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -91,22 +87,22 @@ public class WxPayService {
|
||||
logger.info("WxPayService.getTransferDetailByOutNoNew request:{}", outBillNo);
|
||||
|
||||
Config config = new RSAAutoCertificateConfig.Builder()
|
||||
.merchantId(WechatPayConfig.getMchId())
|
||||
.privateKeyFromPath(WechatPayConfig.getPrivateKeyPath())
|
||||
.merchantSerialNumber(WechatPayConfig.getMchSerialNo())
|
||||
.apiV3Key(WechatPayConfig.getApiV3Key())
|
||||
.build();
|
||||
.merchantId(WechatPayConfig.getMchId())
|
||||
.privateKeyFromPath(WechatPayConfig.getPrivateKeyPath())
|
||||
.merchantSerialNumber(WechatPayConfig.getMchSerialNo())
|
||||
.apiV3Key(WechatPayConfig.getApiV3Key())
|
||||
.build();
|
||||
String requestPath = "https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills/out-bill-no/{out_bill_no}";
|
||||
requestPath = requestPath.replace("{out_bill_no}", UrlEncoder.urlEncode(outBillNo));
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue());
|
||||
headers.addHeader("Content-Type", MediaType.APPLICATION_JSON.getValue());
|
||||
HttpRequest httpRequest =
|
||||
new HttpRequest.Builder()
|
||||
.httpMethod(HttpMethod.GET)
|
||||
.url(requestPath)
|
||||
.headers(headers)
|
||||
.build();
|
||||
new HttpRequest.Builder()
|
||||
.httpMethod(HttpMethod.GET)
|
||||
.url(requestPath)
|
||||
.headers(headers)
|
||||
.build();
|
||||
PrivacyDecryptor decryptor = config.createDecryptor();
|
||||
HttpClient httpClient = new DefaultHttpClientBuilder().config(config).build();
|
||||
HttpResponse<TransferDetailEntityNew> httpResponse = httpClient.execute(httpRequest, TransferDetailEntityNew.class);
|
||||
@ -142,20 +138,20 @@ public class WxPayService {
|
||||
String wechatpayNonce = request.getHeader("Wechatpay-Nonce");
|
||||
// 1. 构造 RequestParam
|
||||
RequestParam requestParam = new RequestParam.Builder()
|
||||
.serialNumber(wechatPaySerial)
|
||||
.nonce(wechatpayNonce)
|
||||
.signature(wechatSignature)
|
||||
.timestamp(wechatTimestamp)
|
||||
.body(requestBody)
|
||||
.build();
|
||||
.serialNumber(wechatPaySerial)
|
||||
.nonce(wechatpayNonce)
|
||||
.signature(wechatSignature)
|
||||
.timestamp(wechatTimestamp)
|
||||
.body(requestBody)
|
||||
.build();
|
||||
// 2. 构建Config RSAAutoCertificateConfig
|
||||
Config config = new RSAAutoCertificateConfig.Builder()
|
||||
.merchantId(WechatPayConfig.getMchId())
|
||||
.privateKeyFromPath(WechatPayConfig.getPrivateKeyPath())
|
||||
.merchantSerialNumber(WechatPayConfig.getMchSerialNo())
|
||||
.apiV3Key(WechatPayConfig.getApiV3Key())
|
||||
.build();
|
||||
logger.info("WxPayService.wxPaySuccessCallback request : wechatPaySerial is [{}] , wechatSignature is [{}] , wechatTimestamp is [{}] , wechatpayNonce is [{}] , requestBody is [{}]",wechatPaySerial,wechatSignature,wechatTimestamp,wechatpayNonce,requestBody);
|
||||
.merchantId(WechatPayConfig.getMchId())
|
||||
.privateKeyFromPath(WechatPayConfig.getPrivateKeyPath())
|
||||
.merchantSerialNumber(WechatPayConfig.getMchSerialNo())
|
||||
.apiV3Key(WechatPayConfig.getApiV3Key())
|
||||
.build();
|
||||
logger.info("WxPayService.wxPaySuccessCallback request : wechatPaySerial is [{}] , wechatSignature is [{}] , wechatTimestamp is [{}] , wechatpayNonce is [{}] , requestBody is [{}]", wechatPaySerial, wechatSignature, wechatTimestamp, wechatpayNonce, requestBody);
|
||||
// 3. 初始化 NotificationParser
|
||||
NotificationParser parser = new NotificationParser((NotificationConfig) config);
|
||||
try {
|
||||
@ -244,6 +240,5 @@ public class WxPayService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user