Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

接入APIV3获取证书 #203

Open
jeff1ry opened this issue Dec 14, 2023 · 33 comments
Open

接入APIV3获取证书 #203

jeff1ry opened this issue Dec 14, 2023 · 33 comments

Comments

@jeff1ry
Copy link

jeff1ry commented Dec 14, 2023

报错
我第一次已经获取完了并且支付了 但是当我改回CloseableHttpClient httpClient = builder.build();后就报错
0
请问是两个/n的问题吗?但是定时更新平台证书的代码完全copy的 没有改过呢

@xy-peng
Copy link
Contributor

xy-peng commented Dec 14, 2023

你是 copy 的代码,而不是直接使用这个库吗?

@jeff1ry
Copy link
Author

jeff1ry commented Dec 14, 2023

肯定是这个库啊
这是我的pom文件

com.github.wechatpay-apiv3
wechatpay-apache-httpclient
0.4.2

@jeff1ry
Copy link
Author

jeff1ry commented Dec 14, 2023

我的意思是 这个定时更新平台证书号的功能代码 我是从你这github上copy的 那么第一次获取平台证书并且支付结束了,第二次更改为 CloseableHttpClient httpClient = builder.build(); build方法后为什么401 ?

@jeff1ry
Copy link
Author

jeff1ry commented Dec 14, 2023

image
这个是报错原因

@jeff1ry
Copy link
Author

jeff1ry commented Dec 14, 2023

hello?还有人吗 ?这bug还是什么 很紧急的啊

@xy-peng
Copy link
Contributor

xy-peng commented Dec 15, 2023

请求签名不过,签名串看起来是对的,会不会是你传入的私钥不对?

建议你先参考示例,不用自动下载证书,用配置文件加载微信支付的平台证书,看看用这个库能否成功发送业务请求。

@jeff1ry
Copy link
Author

jeff1ry commented Dec 15, 2023

emmmm...私钥不对?可是我调用 CloseableHttpClient httpClient = WechatPayHttpClientBuilder.create()
.withMerchant(mchId, mchSerialNo, merchantPrivateKey)
.withValidator(response -> true).build();这个方法已经返回给我二维码并且成功支付了 应该不会是什么参数不对啊

@jeff1ry
Copy link
Author

jeff1ry commented Dec 15, 2023

我这边重新请求了一下又正常了???? 而且是什么配置或者代码都没有动的情况下好的!!!!我不知道是什么原因导致的 这会是网络原因吗?而且我看issue好像有个人跟我报了差不多的报错.........这也太奇怪了

@xy-peng
Copy link
Contributor

xy-peng commented Dec 15, 2023

是比较奇怪。从日志看,你有多个商户 API 证书,配置文件和程序中是只有一张证书吗?

@jeff1ry
Copy link
Author

jeff1ry commented Dec 18, 2023

是的 我敢肯定只有一个apiclient_key文件

@jeff1ry
Copy link
Author

jeff1ry commented Dec 19, 2023

请问方便排查问题吗?我这里接入apiv3Native支付 现在时常出现这个问题,时好时坏的,有的时候二维码响应出来了,但是回调方法又拿不到证书序列号,导致有的客户充了钱 而我们平台没有给他充对应的钱 这个问题的影响对我们来说很大 期待回复

@xy-peng
Copy link
Contributor

xy-peng commented Dec 19, 2023

但是回调方法又拿不到证书序列号

请说得更具体一些。应答是正常的,这次是回调?拿不到证书序列号,是指报文中没有证书序列号,还是跟自动下载的证书对应不上?

最好还是把收到的回调的 HTTP 头和报文贴一下吧

@jeff1ry
Copy link
Author

jeff1ry commented Dec 19, 2023

回调方法里我用到了.getSerialNumber去比对
image
但是遇到了401 下载平台证书序列号异常
image
而且 现在最离谱的是 当我401的时候 代码里所有的log.都打印不出来日志,但是当正常返回二维码链接的时候 log日志又正常 @slf4j和 LoggerFactory.getLogger都用了一样的

@jeff1ry
Copy link
Author

jeff1ry commented Dec 19, 2023

image
image
日志搜不到log的

@xy-peng
Copy link
Contributor

xy-peng commented Dec 19, 2023

这很难看出所以然。你是回调会出 401,还是应答也遇到了 401

你只需要往 certificateManager 添加一次商户的信息,而不用每次都 putMerchant。你可以试试。

我更建议你使用我们新的 Java SDK wechatpay-java ,文档会更完善。

@jeff1ry
Copy link
Author

jeff1ry commented Dec 19, 2023

...现在请求二维码都不行了 在第一步生成httpclient都是401了 我改造一下新版的吧

@xy-peng
Copy link
Contributor

xy-peng commented Dec 19, 2023

另外,建议先检查下本地的商户 API 私钥,验证下它是不是跟商户 API 证书匹配的。验证两个点:

  1. 参考这里,检查商户 API 证书(apiclient_cert.pem)的证书序列号是不是跟在 serial_no 上送的一致
  2. 参考这里,检查商户 API 证书和私钥是匹配的

@jeff1ry
Copy link
Author

jeff1ry commented Dec 19, 2023

image
还是不对
image
太奇葩了 我用openssl测试了 都是对的 两个点都验证成功了

@xy-peng
Copy link
Contributor

xy-peng commented Dec 19, 2023

必现还是偶发的?

你在商户平台上看看对应的商户 API 证书是否启用了,或者是否过期了

@jeff1ry
Copy link
Author

jeff1ry commented Dec 19, 2023

偶发占多数 我请求10次可能有一两次能返回二维码可以正常扫码 但是剩下8次全是401

@jeff1ry
Copy link
Author

jeff1ry commented Dec 19, 2023

image
这一句我不是很理解 那如果我把这个方法抽出来 回调NotificationConfig config这个对象也需要build 会重复报错吗?

@jeff1ry
Copy link
Author

jeff1ry commented Dec 20, 2023

我大概找到问题了 好像是我的apiclient_key.pem文件 最后一行多了一句 空行 当我把空行删除后 没有出现了 现在正常了
image
第29行就是多的那一行

@xy-peng
Copy link
Contributor

xy-peng commented Dec 20, 2023

这一句我不是很理解 那如果我把这个方法抽出来 回调NotificationConfig config这个对象也需要build 会重复报错吗?

是在哪里看到的这句话?

@jeff1ry
Copy link
Author

jeff1ry commented Dec 20, 2023

image
你们demo里这样写的

@xy-peng
Copy link
Contributor

xy-peng commented Dec 20, 2023

我大概找到问题了 好像是我的apiclient_key.pem文件 最后一行多了一句 空行 当我把空行删除后 没有出现了 现在正常了 !

在加载证书的时候,会去掉空格空行,怀疑是不是有不可见字符?你试试加回一个空行,看看是不是还是正常的。

@jeff1ry
Copy link
Author

jeff1ry commented Dec 20, 2023

好的我测试一下 但是我从商户平台配合那个exe软件下载证书的时候 证书文件就自带了空格 我是直接复制的文件而不是字母

@xy-peng
Copy link
Contributor

xy-peng commented Dec 20, 2023

请问获取商户 API 证书拿到的原始压缩文件还在吗?

@jeff1ry
Copy link
Author

jeff1ry commented Dec 20, 2023

还在的

@jeff1ry
Copy link
Author

jeff1ry commented Dec 20, 2023

这边我测了一下 就是不行 当我最后+了空行后就会是401 我在想如果把证书里面的字母变成一个静态常量去读 而不是通过文件流去读 +不+空格会有影响吗?我想我可以去测试一下

@xy-peng
Copy link
Contributor

xy-peng commented Dec 20, 2023

还在的

原始文件就存在这个问题吗?你使用的 JDK 版本是?使用的是 windows 系统?感觉不大可能出现这种情况呀。

@jeff1ry
Copy link
Author

jeff1ry commented Dec 20, 2023

对 原始文件就会出现
image
我先把原始文件放在config目录下 然后通过getPrivateKey方法复制给了new RSAAutoCertificateConfig.Builder().privateKey
JDK是1.8的,我没有在windows上做测试,我用的是云服务器测试环境去测的,应该是centos7

@jeff1ry
Copy link
Author

jeff1ry commented Dec 20, 2023

我这边测试了 当我把apiclient_key,pem 写成静态常量后也是正常的

@xy-peng
Copy link
Contributor

xy-peng commented Dec 20, 2023

我这边测试了 当我把apiclient_key,pem 写成静态常量后也是正常的

你把字符串的 privateKey 输出看看,是否各种情况下是一致?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants