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