package com.szwl.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.szwl.model.entity.TWeixinPayConfig;
import com.szwl.mapper.TWeixinPayConfigMapper;
import com.szwl.service.TWeixinPayConfigService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.szwl.weixin.core.Config;
import com.szwl.weixin.core.RSAAutoCertificateConfig;
import com.wechat.pay.contrib.apache.httpclient.util.AesUtil;
import com.wechat.pay.java.core.http.DefaultHttpClientBuilder;
import com.wechat.pay.java.core.http.HostName;
import com.wechat.pay.java.core.http.HttpClient;
import com.wechat.pay.java.service.refund.RefundService;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static java.util.Objects.requireNonNull;
/**
*
* 服务实现类
*
*
* @author wuhs
* @since 2023-04-08
*/
@Service
public class TWeixinPayConfigServiceImpl extends ServiceImpl implements TWeixinPayConfigService {
// 本地缓存
public static Map configMap = new HashMap<>();
@Override
public void initConfig(Long adminId) {
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TWeixinPayConfig::getAdminId,adminId);
List list = list(query);
for (TWeixinPayConfig payConfig : list) {
// RSAAutoCertificateConfig config =
// new RSAAutoCertificateConfig.Builder()
// .merchantId(payConfig.getMerchantId())
// .privateKey(payConfig.getPrivateKey())
// // .privateKeyFromPath(wechatPaymentConfig.getPrivateKeyPath())
// .merchantSerialNumber(payConfig.getMchSerialNo())
// .apiV3Key(payConfig.getApiV3Key())
// .build();
Config config =
new RSAAutoCertificateConfig.Builder()
.merchantId(payConfig.getMerchantId())
.privateKeyFromPath(payConfig.getPrivateKeyPath())
.merchantSerialNumber(payConfig.getMerchantSerialNumber())
.apiV3Key(payConfig.getApiV3key())
.build();
configMap.put(payConfig.getAdminId().toString(), config);
}
}
/**
* @param adminId 根据adminId获取Config
* @return
*/
@Override
public Config getWechatConfig(String adminId) {
if(configMap==null){
return null;
}
return configMap.get(adminId);
}
/**
* @param adminId 根据adminId获取NotificationConfig
* @return
*/
@Override
public Config getNotificationConfig(String adminId) {
return configMap.get(adminId);
}
/**
* 对称解密
* @param bodyMap
* @return
* @throws GeneralSecurityException
*/
@Override
public String decryptFromResource(Map bodyMap) {
// 通知数据
Map resourceMap = (Map) bodyMap.get("resource");
// 数据密文
String ciphertext = resourceMap.get("ciphertext");
// 随机串
String nonce = resourceMap.get("nonce");
// 附加数据
String associatedData = resourceMap.get("associated_data");
List list = list();
AesUtil aesUtil = new
AesUtil(list.get(0).getApiV3key().getBytes(StandardCharsets.UTF_8));
String plainText = null;
try {
plainText = aesUtil.decryptToString(associatedData.getBytes(StandardCharsets.UTF_8),
nonce.getBytes(StandardCharsets.UTF_8),
ciphertext);
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
if(StringUtils.isEmpty(plainText)){
AesUtil aesUtil1 = new
AesUtil(list.get(1).getApiV3key().getBytes(StandardCharsets.UTF_8));
try {
plainText = aesUtil1.decryptToString(associatedData.getBytes(StandardCharsets.UTF_8),
nonce.getBytes(StandardCharsets.UTF_8),
ciphertext);
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
}
return plainText;
}
}