Commit 605e11bf5fbaebf454ea4409890405c8ff189e12
1 parent
af361b43
fix(pay): 修复微信支付证书临时文件失效问题
使用 weixin-java-pay 的内存证书配置,替代临时文件路径,避免系统清理临时文件后导致微信支付不可用;同时使用 Hutool 的 UTF-8 字节转换方法,保持 JDK8 兼容性。
Showing
1 changed file
with
4 additions
and
6 deletions
yudao-module-pay/src/main/java/cn/iocoder/yudao/module/pay/framework/pay/core/client/impl/weixin/AbstractWxPayClient.java
| @@ -6,7 +6,6 @@ import cn.hutool.core.collection.CollUtil; | @@ -6,7 +6,6 @@ import cn.hutool.core.collection.CollUtil; | ||
| 6 | import cn.hutool.core.date.LocalDateTimeUtil; | 6 | import cn.hutool.core.date.LocalDateTimeUtil; |
| 7 | import cn.hutool.core.date.TemporalAccessorUtil; | 7 | import cn.hutool.core.date.TemporalAccessorUtil; |
| 8 | import cn.hutool.core.util.StrUtil; | 8 | import cn.hutool.core.util.StrUtil; |
| 9 | -import cn.iocoder.yudao.framework.common.util.io.FileUtils; | ||
| 10 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | 9 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 11 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; | 10 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| 12 | import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; | 11 | import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; |
| @@ -63,18 +62,17 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC | @@ -63,18 +62,17 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC | ||
| 63 | WxPayConfig payConfig = new WxPayConfig(); | 62 | WxPayConfig payConfig = new WxPayConfig(); |
| 64 | BeanUtil.copyProperties(config, payConfig, "keyContent", "privateKeyContent", "publicKeyContent"); | 63 | BeanUtil.copyProperties(config, payConfig, "keyContent", "privateKeyContent", "publicKeyContent"); |
| 65 | payConfig.setTradeType(tradeType); | 64 | payConfig.setTradeType(tradeType); |
| 66 | - // weixin-pay-java 无法设置内容,只允许读取文件,所以这里要创建临时文件来解决 | ||
| 67 | if (Objects.equals(config.getApiVersion(), API_VERSION_V2)) { | 65 | if (Objects.equals(config.getApiVersion(), API_VERSION_V2)) { |
| 68 | - payConfig.setKeyPath(FileUtils.createTempFile(Base64.decode(config.getKeyContent())).getPath()); | 66 | + payConfig.setKeyContent(Base64.decode(config.getKeyContent())); |
| 69 | } else if (Objects.equals(config.getApiVersion(), API_VERSION_V3)) { | 67 | } else if (Objects.equals(config.getApiVersion(), API_VERSION_V3)) { |
| 70 | - payConfig.setPrivateKeyPath(FileUtils.createTempFile(config.getPrivateKeyContent()).getPath()); | 68 | + payConfig.setPrivateKeyContent(StrUtil.utf8Bytes(config.getPrivateKeyContent())); |
| 71 | // 参考 https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues/ICUE53 和 https://t.zsxq.com/ODR5V | 69 | // 参考 https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues/ICUE53 和 https://t.zsxq.com/ODR5V |
| 72 | if (StrUtil.isNotBlank(config.getPublicKeyContent())) { | 70 | if (StrUtil.isNotBlank(config.getPublicKeyContent())) { |
| 73 | - payConfig.setPublicKeyPath(FileUtils.createTempFile(config.getPublicKeyContent()).getPath()); | 71 | + payConfig.setPublicKeyContent(StrUtil.utf8Bytes(config.getPublicKeyContent())); |
| 74 | } | 72 | } |
| 75 | // 特殊:强制使用微信公钥模式,避免灰度期间的问题!!! | 73 | // 特殊:强制使用微信公钥模式,避免灰度期间的问题!!! |
| 76 | payConfig.setStrictlyNeedWechatPaySerial(true); | 74 | payConfig.setStrictlyNeedWechatPaySerial(true); |
| 77 | - // 特殊:weixin-java-pay 只有配置 publicKeyPath 后,再开启 fullPublicKeyModel,才会使用 PublicCertificateVerifier | 75 | + // 特殊:weixin-java-pay 只有配置 publicKeyContent 后,再开启 fullPublicKeyModel,才会使用 PublicCertificateVerifier |
| 78 | // 对应 https://t.zsxq.com/5Q9lO 帖子 | 76 | // 对应 https://t.zsxq.com/5Q9lO 帖子 |
| 79 | payConfig.setFullPublicKeyModel(true); | 77 | payConfig.setFullPublicKeyModel(true); |
| 80 | } | 78 | } |