Caused by: com.wechat.pay.java.core.exception.ServiceException: Wrong HttpStatusCode[404] httpResponseBody[{"code":"RESOURCE_NOT_EXISTS","message":"无可用的平台证书,请在商户平台-API安全申请使用微信支付公钥。可查看指引https://pay.weixin.qq.com/docs/merchant/products/platform-certificate/wxp-pub-key-guide.html"}] HttpRequest[{"http_method":"GET","url":"https://api.mch.weixin.qq.com/v3/certificates?algorithm_type=RSA","uri":"https://api.mch.weixin.qq.com/v3/certificates?algorithm_type=RSA","headers":{"headers":{"Authorization":"WECHATPAY2-SHA256-RSA2048 mchid=\"1718060739\",nonce_str=\"2fIjgO829OTNkz4xeLkJSwlsanm0vnC0\",timestamp=\"1748448652\",serial_no=\"18F91FCC7DE13479724F2B8F653802E6EA4190F8\",signature=\"Q17HvMziw+ah+5fRVlOwlJ26KrZAlXCGxC5LOSBH3Q+7n4D+qqZK9fhsP8KxwL9euDEVmRzN26ZgxZB0w2rQaPoavF7VJg8QqkC2msthkF+c4m46zhW+lvBh7otnApD7OBV9sMqtE5ydU5YVe8KjlQDGUXSHE0uNt+SCVNt+ZsZkNbRQdg2g4KCZthbuEDC4WAnyG7qBZTYoxlWsEQMT+5YjUTgAGXWz+qU3/bRiAnCzzolW/j/sRPmGTLMx51nMVKxAV56He8EUHVUwOwVzxL3fWYb4twznfi5/yw5ZDzfCzjzuYC3kiif3+MRPAV7mEUVeTVwtvn/ckgCsINZACA==\"","Accept":" */*","User-Agent":"WechatPay-Java/0.2.17 (Windows 11/10.0) Java/21.0.1 Credential/WechatPay2Credential Validator/ okhttp3/null","Content-Type":"application/json","Wechatpay-Serial":""}}}]
时间: 2025-06-01 08:10:25 浏览: 111
### 微信支付平台证书错误问题及公钥配置方法
微信支付 API 在 V3 版本中引入了新的验签方式,不再支持使用平台证书进行签名验证,而是推荐使用微信支付公钥进行验签。如果商户在使用过程中遇到“无可用的平台证书”或“RESOURCE_NOT_EXISTS”等错误,可以通过以下方法解决并正确配置微信支付公钥。
#### 1. 升级依赖版本
确保使用的 `wechatpay-java` SDK 版本为 `0.2.14` 或更高版本,因为只有这些版本支持 `RSAPublicKeyConfig` 配置类[^1]。如果当前版本较低(如 `0.2.12`),需要升级 Maven 依赖:
```xml
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>0.2.14</version>
</dependency>
```
#### 2. 使用 RSAPublicKeyConfig 配置支付
商户需使用微信支付公钥和公钥 ID 初始化支付配置,而不是传统的 `RSAAutoCertificateConfig`。具体代码示例如下:
```java
import com.wechat.pay.java.service.WechatPayService;
import com.wechat.pay.java.core.Config;
public class WechatPayConfig {
public static void main(String[] args) {
Config config = new RSAPublicKeyConfig(
"your_merchant_id",
"your_serial_number",
"private_key_path",
"wechat_public_key",
"public_key_id"
);
WechatPayService service = new WechatPayService(config);
}
}
```
上述代码中,`wechat_public_key` 和 `public_key_id` 可以通过微信支付官方接口获取[^3]。
#### 3. 获取微信支付公钥
商户可以在微信支付商户平台的 **API 安全** 页面申请并下载微信支付公钥。此外,还可以通过调用微信支付的公钥获取接口动态获取公钥:
- 接口地址:`https://api.mch.weixin.qq.com/v3/certificates`
- 请求方式:`GET`
- 返回值包含公钥内容及其对应的公钥 ID。
示例返回数据:
```json
{
"data": [
{
"serial_no": "证书序列号",
"encrypt_certificate": {
"algorithm": "AEAD_AES_256_GCM",
"nonce": "随机数",
"ciphertext": "加密后的证书内容"
}
}
]
}
```
商户需对返回的 `ciphertext` 进行解密,解密时需使用商户私钥[^4]。
#### 4. 修改框架代码以支持公钥验签
对于基于第三方框架(如芋道框架)开发的项目,可能需要手动修改代码以支持微信支付公钥验签。例如,在芋道框架中,可以将原有的平台证书验签逻辑替换为公钥验签逻辑[^2]。
#### 5. 检查商户私钥配置
确保商户私钥路径正确,并且私钥文件未被篡改或损坏。私钥文件通常为 `.pem` 格式,用于生成请求签名。
---
###
阅读全文
相关推荐


















