[fix]修改红包和提现

This commit is contained in:
wangqx 2025-09-23 16:55:04 +08:00
parent eeb50d18b1
commit 3c770192fa
14 changed files with 190 additions and 122 deletions

View File

@ -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();
}
}

View File

@ -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)));
}

View File

@ -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, "提现到钱包失败"),
/**
* 售后
*/

View File

@ -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;
}
}

View File

@ -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());
}

View File

@ -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);
}
}

View File

@ -0,0 +1,4 @@
package com.wzj.soopin.order.business;
public interface IAfterSaleBusiness {
}

View File

@ -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 {
}

View File

@ -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);
}

View File

@ -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)

View File

@ -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<>();

View File

@ -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);
}

View File

@ -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());

View File

@ -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 {
}
}