wechatpay-apiv3 / wechatpay-java

微信支付 APIv3 的官方 Java Library
Apache License 2.0
870 stars 195 forks source link

springboot中,RSAAutoCertificateConfig 的 privateKeyFromPath 怎么写获取resource下的apiclient_key.pem #198

Closed smallvq123 closed 1 year ago

smallvq123 commented 1 year ago

错误描述

public static Config payConfig = new RSAAutoCertificateConfig.Builder() .merchantId(merchantId) .privateKeyFromPath(privateKeyPath) .merchantSerialNumber(merchantSerialNumber) .apiV3Key(apiV3key) .build();

可以使用相对路劲或者 classpath路劲吗?

重现bug的步骤

1

预期行为

1

导致错误的代码片段

1

操作系统

macOS

Java 版本

java17

wechatpay-java 版本

0.2.9

其他信息

No response

xy-peng commented 1 year ago

如果你的私钥文件放在 resource 下,可以试试以下方式。

第一步,通过 @Value 获取 Resource 对象。

@Value("classpath:apiclient_key.pem")
private Resource resource;

第二步,获取文件的输入流

InputStream inputStream = resource.getInputStream();

第三步,获取私钥传入 RSAAutoCertificateConfig.Builder

public static Config payConfig = new RSAAutoCertificateConfig.Builder()
  .merchantId(merchantId)
  .privateKey(IoUtil.toString(inputStream))
  .merchantSerialNumber(merchantSerialNumber)
  .apiV3Key(apiV3key)
  .build();

第三步确实不方便,在 RSAAutoCertificateConfig.Builder 加入一个从 InputStream 设置私钥的方法会好。

另,纯手写的代码,未测试,有问题请反馈。

xy-peng commented 1 year ago

145 应该是类似的问题。

chenxin1215 commented 1 year ago

IoUtil是哪个包下面的?

BrightFutureSugar commented 1 month ago

@Value("classpath:apiclient_key.pem") private Resource resource; 这样也是找不到文件的