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 | 6 | import cn.hutool.core.date.LocalDateTimeUtil; |
| 7 | 7 | import cn.hutool.core.date.TemporalAccessorUtil; |
| 8 | 8 | import cn.hutool.core.util.StrUtil; |
| 9 | -import cn.iocoder.yudao.framework.common.util.io.FileUtils; | |
| 10 | 9 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 11 | 10 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| 12 | 11 | import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; |
| ... | ... | @@ -63,18 +62,17 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC |
| 63 | 62 | WxPayConfig payConfig = new WxPayConfig(); |
| 64 | 63 | BeanUtil.copyProperties(config, payConfig, "keyContent", "privateKeyContent", "publicKeyContent"); |
| 65 | 64 | payConfig.setTradeType(tradeType); |
| 66 | - // weixin-pay-java 无法设置内容,只允许读取文件,所以这里要创建临时文件来解决 | |
| 67 | 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 | 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 | 69 | // 参考 https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues/ICUE53 和 https://t.zsxq.com/ODR5V |
| 72 | 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 | 74 | payConfig.setStrictlyNeedWechatPaySerial(true); |
| 77 | - // 特殊:weixin-java-pay 只有配置 publicKeyPath 后,再开启 fullPublicKeyModel,才会使用 PublicCertificateVerifier | |
| 75 | + // 特殊:weixin-java-pay 只有配置 publicKeyContent 后,再开启 fullPublicKeyModel,才会使用 PublicCertificateVerifier | |
| 78 | 76 | // 对应 https://t.zsxq.com/5Q9lO 帖子 |
| 79 | 77 | payConfig.setFullPublicKeyModel(true); |
| 80 | 78 | } | ... | ... |