接入APIV3获取证书
jeff1ry opened this issue · 33 comments
你是 copy 的代码,而不是直接使用这个库吗?
肯定是这个库啊
这是我的pom文件
com.github.wechatpay-apiv3
wechatpay-apache-httpclient
0.4.2
我的意思是 这个定时更新平台证书号的功能代码 我是从你这github上copy的 那么第一次获取平台证书并且支付结束了,第二次更改为 CloseableHttpClient httpClient = builder.build(); build方法后为什么401 ?
hello?还有人吗 ?这bug还是什么 很紧急的啊
请求签名不过,签名串看起来是对的,会不会是你传入的私钥不对?
建议你先参考示例,不用自动下载证书,用配置文件加载微信支付的平台证书,看看用这个库能否成功发送业务请求。
emmmm...私钥不对?可是我调用 CloseableHttpClient httpClient = WechatPayHttpClientBuilder.create()
.withMerchant(mchId, mchSerialNo, merchantPrivateKey)
.withValidator(response -> true).build();这个方法已经返回给我二维码并且成功支付了 应该不会是什么参数不对啊
我这边重新请求了一下又正常了???? 而且是什么配置或者代码都没有动的情况下好的!!!!我不知道是什么原因导致的 这会是网络原因吗?而且我看issue好像有个人跟我报了差不多的报错.........这也太奇怪了
是比较奇怪。从日志看,你有多个商户 API 证书,配置文件和程序中是只有一张证书吗?
是的 我敢肯定只有一个apiclient_key文件
请问方便排查问题吗?我这里接入apiv3Native支付 现在时常出现这个问题,时好时坏的,有的时候二维码响应出来了,但是回调方法又拿不到证书序列号,导致有的客户充了钱 而我们平台没有给他充对应的钱 这个问题的影响对我们来说很大 期待回复
但是回调方法又拿不到证书序列号
请说得更具体一些。应答是正常的,这次是回调?拿不到证书序列号,是指报文中没有证书序列号,还是跟自动下载的证书对应不上?
最好还是把收到的回调的 HTTP 头和报文贴一下吧
回调方法里我用到了.getSerialNumber去比对
但是遇到了401 下载平台证书序列号异常
而且 现在最离谱的是 当我401的时候 代码里所有的log.都打印不出来日志,但是当正常返回二维码链接的时候 log日志又正常 @slf4j和 LoggerFactory.getLogger都用了一样的
这很难看出所以然。你是回调会出 401
,还是应答也遇到了 401
?
你只需要往 certificateManager
添加一次商户的信息,而不用每次都 putMerchant
。你可以试试。
我更建议你使用我们新的 Java SDK wechatpay-java ,文档会更完善。
...现在请求二维码都不行了 在第一步生成httpclient都是401了 我改造一下新版的吧
必现还是偶发的?
你在商户平台上看看对应的商户 API 证书是否启用了,或者是否过期了
偶发占多数 我请求10次可能有一两次能返回二维码可以正常扫码 但是剩下8次全是401
这一句我不是很理解 那如果我把这个方法抽出来 回调NotificationConfig config这个对象也需要build 会重复报错吗?
是在哪里看到的这句话?
我大概找到问题了 好像是我的apiclient_key.pem文件 最后一行多了一句 空行 当我把空行删除后 没有出现了 现在正常了 !
在加载证书的时候,会去掉空格空行,怀疑是不是有不可见字符?你试试加回一个空行,看看是不是还是正常的。
好的我测试一下 但是我从商户平台配合那个exe软件下载证书的时候 证书文件就自带了空格 我是直接复制的文件而不是字母
请问获取商户 API 证书拿到的原始压缩文件还在吗?
还在的
这边我测了一下 就是不行 当我最后+了空行后就会是401 我在想如果把证书里面的字母变成一个静态常量去读 而不是通过文件流去读 +不+空格会有影响吗?我想我可以去测试一下
还在的
原始文件就存在这个问题吗?你使用的 JDK 版本是?使用的是 windows 系统?感觉不大可能出现这种情况呀。
我这边测试了 当我把apiclient_key,pem 写成静态常量后也是正常的
我这边测试了 当我把apiclient_key,pem 写成静态常量后也是正常的
你把字符串的 privateKey
输出看看,是否各种情况下是一致?