服务器突然不能访问微信支付的域名了怎么办?(cURL error 35)

2023-07-30 10:13:26 +08:00
 milukun

请求下单的时候,长时间无响应

然后返回这个错误:( PHP )

cURL error 35: OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to api.mch.weixin.qq.com:443

然后尝试使用 Curl 命令行直接 POST 订单信息测试的时候,也是长时间无响应,最后也是返回以上代码。 升级了 openssl 、升级了 nss 、升级了 curl 都不行

根据: https://blog.csdn.net/lilongsy/article/details/84940800 进行配置过也没有用

另外使用 curl post 其他 https 的网站是没有问题的,包括企业微信的一些接口。

测试用例,可以在服务器上测试一下

curl --location --request POST 'https://api.mch.weixin.qq.com/v3/pay/transactions/h5' --header 'Content-Type: application/json; charset=utf-8' --header 'Content-Length: 398' --header 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183' --header 'Authorization: WECHATPAY2-SHA256-RSA2048 mchid="0000000000",serial_no="0000000000000000000000000000000000000000",timestamp="1690554600",nonce_str="0000000000000000000000000000000",signature="0000000000"' --data-raw '{"mchid":"0000000000","out_trade_no":"20230728223129","appid":"000000000000000000","description":"000000000000000000000000","notify_url":"https:\/\/0000000.0000000.00\/weixin\/pay\/main\/0000000000.000","amount":{"total":1,"currency":"CNY"},"scene_info":{"payer_client_ip":"11.11.111.111","h5_info":{"type":"Wap"}},"attach":"00000000000000000000,00000,000000000000000000000000,6487d1781f0000000000"}'

已经隐去敏感信息(以同样数量 0 代替),正常应该秒返回一个参数不对的 json 回来("message":"解析 Json 出错 (位置: /body):),但是实际服务器会卡很久然后返回:

cURL error 35: OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to api.mch.weixin.qq.com:443

然后发现客户的系统是 alibaba linux release 3.. 无语了

1612 次点击
所在节点    问与答
11 条回复
milukun
2023-07-30 10:15:48 +08:00
截止到上个月 16 号还是好好的,最近几天才发现拉不起微信支付了
排查一顿发现是 php 页面请求这个地址的时候卡住 1 分钟

然后在机器上使用 curl 直接 post 到微信支付下单的地址,就是上面说明的错误。
同样的 curl 命令,拿到任何已有的服务器上执行都是秒出结果
kapr1k0rn
2023-07-30 10:55:29 +08:00
看看是不是证书更新了
之前有遇到调用企业微信接口突然出错,提示也是 ssl 相关,排查后发现是腾讯刚好更新了证书
moult
2023-07-30 11:00:36 +08:00
curl -v 查看整个请求过程,看下到哪一步卡住了。
然后直接请求接口网址,不带任何参数看下。
milukun
2023-07-30 11:03:18 +08:00
@kapr1k0rn 腾讯更新证书的话,我需要操作什么呢?
zoharSoul
2023-07-30 11:05:09 +08:00
还有个可能是你 ip 变了, 微信支付后台上没更新
milukun
2023-07-30 11:07:53 +08:00
@zoharSoul 跟 IP 没关系,你看看我给的用例,里面所有的信息都换成 0 了,所以微信直接给了一个参数错误的 json 。而我的服务器是直接连错误都没有,根本没办法和这个地址建立连接。
测试用例你也可以本地 postman 测试看看,正常就是立即返回错误了
zoharSoul
2023-07-30 11:47:01 +08:00
@milukun #6 对 所以说可能是你 ip 变了
Xusually
2023-07-30 12:00:51 +08:00
curl -vvv 看具体什么错误
mitx
2023-07-30 15:00:12 +08:00
milukun
2023-07-30 15:37:28 +08:00
解决了,curl 可用了:

服务器配置了 ipv6 ,使用 ipv6 地址访问对方无响应, 手动在 /etc/hosts 里面配置了一下 api.mch.weixin.qq.com 的 ipv4 地址

(阿里的工单,响应速度很快,而且直接给解决问题了
milukun
2023-07-30 15:44:42 +08:00
php 上面的支付服务,加一句:

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

强制使用 ipv4 访问,就 OK 了....
问题解决

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/960910

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX