TWeixinPayConfigServiceImpl.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package com.szwl.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.szwl.model.entity.TWeixinPayConfig;
  5. import com.szwl.mapper.TWeixinPayConfigMapper;
  6. import com.szwl.service.TWeixinPayConfigService;
  7. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  8. import com.szwl.weixin.core.Config;
  9. import com.szwl.weixin.core.RSAAutoCertificateConfig;
  10. import com.wechat.pay.contrib.apache.httpclient.util.AesUtil;
  11. import com.wechat.pay.java.core.http.DefaultHttpClientBuilder;
  12. import com.wechat.pay.java.core.http.HostName;
  13. import com.wechat.pay.java.core.http.HttpClient;
  14. import com.wechat.pay.java.service.refund.RefundService;
  15. import org.apache.commons.lang.StringUtils;
  16. import org.springframework.stereotype.Service;
  17. import java.nio.charset.StandardCharsets;
  18. import java.security.GeneralSecurityException;
  19. import java.util.HashMap;
  20. import java.util.List;
  21. import java.util.Map;
  22. import static java.util.Objects.requireNonNull;
  23. /**
  24. * <p>
  25. * 服务实现类
  26. * </p>
  27. *
  28. * @author wuhs
  29. * @since 2023-04-08
  30. */
  31. @Service
  32. public class TWeixinPayConfigServiceImpl extends ServiceImpl<TWeixinPayConfigMapper, TWeixinPayConfig> implements TWeixinPayConfigService {
  33. // 本地缓存
  34. public static Map<String, Config> configMap = new HashMap<>();
  35. @Override
  36. public void initConfig(Long adminId) {
  37. LambdaQueryWrapper<TWeixinPayConfig> query = Wrappers.lambdaQuery();
  38. query.eq(TWeixinPayConfig::getAdminId,adminId);
  39. List<TWeixinPayConfig> list = list(query);
  40. for (TWeixinPayConfig payConfig : list) {
  41. // RSAAutoCertificateConfig config =
  42. // new RSAAutoCertificateConfig.Builder()
  43. // .merchantId(payConfig.getMerchantId())
  44. // .privateKey(payConfig.getPrivateKey())
  45. // // .privateKeyFromPath(wechatPaymentConfig.getPrivateKeyPath())
  46. // .merchantSerialNumber(payConfig.getMchSerialNo())
  47. // .apiV3Key(payConfig.getApiV3Key())
  48. // .build();
  49. Config config =
  50. new RSAAutoCertificateConfig.Builder()
  51. .merchantId(payConfig.getMerchantId())
  52. .privateKeyFromPath(payConfig.getPrivateKeyPath())
  53. .merchantSerialNumber(payConfig.getMerchantSerialNumber())
  54. .apiV3Key(payConfig.getApiV3key())
  55. .build();
  56. configMap.put(payConfig.getAdminId().toString(), config);
  57. }
  58. }
  59. /**
  60. * @param adminId 根据adminId获取Config
  61. * @return
  62. */
  63. @Override
  64. public Config getWechatConfig(String adminId) {
  65. if(configMap==null){
  66. return null;
  67. }
  68. return configMap.get(adminId);
  69. }
  70. /**
  71. * @param adminId 根据adminId获取NotificationConfig
  72. * @return
  73. */
  74. @Override
  75. public Config getNotificationConfig(String adminId) {
  76. return configMap.get(adminId);
  77. }
  78. /**
  79. * 对称解密
  80. * @param bodyMap
  81. * @return
  82. * @throws GeneralSecurityException
  83. */
  84. @Override
  85. public String decryptFromResource(Map<String, Object> bodyMap) {
  86. // 通知数据
  87. Map<String, String> resourceMap = (Map) bodyMap.get("resource");
  88. // 数据密文
  89. String ciphertext = resourceMap.get("ciphertext");
  90. // 随机串
  91. String nonce = resourceMap.get("nonce");
  92. // 附加数据
  93. String associatedData = resourceMap.get("associated_data");
  94. List<TWeixinPayConfig> list = list();
  95. AesUtil aesUtil = new
  96. AesUtil(list.get(0).getApiV3key().getBytes(StandardCharsets.UTF_8));
  97. String plainText = null;
  98. try {
  99. plainText = aesUtil.decryptToString(associatedData.getBytes(StandardCharsets.UTF_8),
  100. nonce.getBytes(StandardCharsets.UTF_8),
  101. ciphertext);
  102. } catch (GeneralSecurityException e) {
  103. e.printStackTrace();
  104. }
  105. if(StringUtils.isEmpty(plainText)){
  106. AesUtil aesUtil1 = new
  107. AesUtil(list.get(1).getApiV3key().getBytes(StandardCharsets.UTF_8));
  108. try {
  109. plainText = aesUtil1.decryptToString(associatedData.getBytes(StandardCharsets.UTF_8),
  110. nonce.getBytes(StandardCharsets.UTF_8),
  111. ciphertext);
  112. } catch (GeneralSecurityException e) {
  113. e.printStackTrace();
  114. }
  115. }
  116. return plainText;
  117. }
  118. }