fix: 修复分账配置更新不生效问题, 修复wxjava配置使用base64无法解析问题, 修复微信分账同步有空指针问题

This commit is contained in:
DaxPay
2024-12-17 16:50:05 +08:00
parent 98b07dba77
commit c0ee1dd7f8
7 changed files with 41 additions and 38 deletions

View File

@@ -30,8 +30,10 @@ import org.dromara.daxpay.service.entity.allocation.transaction.AllocOrder;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -126,7 +128,7 @@ public class WeChatPayAllocationV2Service {
}
var detailMap = details.stream()
.collect(Collectors.toMap(AllocDetail::getReceiverAccount, Function.identity(), CollectorsFunction::retainLatest));
var royaltyDetailList = result.getReceivers();
var royaltyDetailList = Optional.ofNullable( result.getReceivers()).orElse(new ArrayList<>(0));
for (var receiver : royaltyDetailList) {
var detail = detailMap.get(receiver.getAccount());
if (Objects.nonNull(detail)) {

View File

@@ -28,8 +28,10 @@ import org.dromara.daxpay.service.entity.allocation.transaction.AllocOrder;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -124,7 +126,7 @@ public class WeChatPayAllocationV3Service {
}
var detailMap = details.stream()
.collect(Collectors.toMap(AllocDetail::getReceiverAccount, Function.identity(), CollectorsFunction::retainLatest));
var royaltyDetailList = result.getReceivers();
var royaltyDetailList = Optional.ofNullable(result.getReceivers()).orElse(new ArrayList<>(0));
for (var receiver : royaltyDetailList) {
var detail = detailMap.get(receiver.getAccount());
if (Objects.nonNull(detail)) {

View File

@@ -2,6 +2,7 @@ package org.dromara.daxpay.channel.wechat.service.config;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.StrUtil;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.service.WxPayService;
@@ -146,10 +147,11 @@ public class WechatPayConfigService {
payConfig.setAppId(wechatPayConfig.getWxAppId());
payConfig.setMchKey(wechatPayConfig.getApiKeyV2());
payConfig.setApiV3Key(wechatPayConfig.getApiKeyV3());
payConfig.setPrivateKeyString(wechatPayConfig.getPrivateKey());
payConfig.setPrivateCertString(wechatPayConfig.getPrivateCert());
// 注意不要使用base64的方式进行配置, 因为wxjava 是直接读取文本并不会进行解码
payConfig.setPrivateKeyContent(Base64.decode(wechatPayConfig.getPrivateKey()));
payConfig.setPrivateCertContent(Base64.decode(wechatPayConfig.getPrivateCert()));
payConfig.setCertSerialNo(wechatPayConfig.getCertSerialNo());
payConfig.setKeyString(wechatPayConfig.getP12());
payConfig.setKeyContent(Base64.decode(wechatPayConfig.getP12()));
WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(payConfig);
return wxPayService;

View File

@@ -191,32 +191,32 @@ public class WechatPayV3Service {
*/
private void barCodePay(PayOrder payOrder, String authCode, WechatPayConfig config, PayResultBo payResult) {
WxPayService wxPayService = wechatPayConfigService.wxJavaSdk(config);
WxPayCodepayRequest request = new WxPayCodepayRequest();
request.setDescription(payOrder.getTitle());
request.setOutTradeNo(payOrder.getOrderNo());
// 金额
var amount = new WxPayCodepayRequest.Amount();
amount.setTotal(PayUtil.convertCentAmount(payOrder.getAmount()));
request.setAmount(amount);
WxPayCodepayRequest request = new WxPayCodepayRequest();
request.setDescription(payOrder.getTitle());
request.setOutTradeNo(payOrder.getOrderNo());
// 金额
var amount = new WxPayCodepayRequest.Amount();
amount.setTotal(PayUtil.convertCentAmount(payOrder.getAmount()));
request.setAmount(amount);
// 场景信息
var sceneInfo = new WxPayCodepayRequest.SceneInfo();
var storeInfo = new WxPayCodepayRequest.StoreInfo();
storeInfo.setOutId("1");
sceneInfo.setStoreInfo(storeInfo);
request.setSceneInfo(sceneInfo);
// 场景信息
var sceneInfo = new WxPayCodepayRequest.SceneInfo();
var storeInfo = new WxPayCodepayRequest.StoreInfo();
storeInfo.setOutId("1");
sceneInfo.setStoreInfo(storeInfo);
request.setSceneInfo(sceneInfo);
// 条码参数
var payer = new WxPayCodepayRequest.Payer();
payer.setAuthCode(authCode);
request.setPayer(payer);
// 条码参数
var payer = new WxPayCodepayRequest.Payer();
payer.setAuthCode(authCode);
request.setPayer(payer);
// 分账参数
if (payOrder.getAllocation()){
var settleInfo = new WxPayCodepayRequest.SettleInfo();
settleInfo.setProfitSharing(true);
request.setSettleInfo(settleInfo);
}
// 分账参数
if (payOrder.getAllocation()){
var settleInfo = new WxPayCodepayRequest.SettleInfo();
settleInfo.setProfitSharing(true);
request.setSettleInfo(settleInfo);
}
try {
// 发送请求
var result = wxPayService.codepay(request);