V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
milukun
V2EX  ›  问与答

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

  •  
  •   milukun · 2023-07-30 10:13:26 +08:00 · 1589 次点击
    这是一个创建于 465 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    然后返回这个错误:( 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.. 无语了

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

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

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

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

    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

    强制使用 ipv4 访问,就 OK 了....
    问题解决
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5378 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:44 · PVG 13:44 · LAX 21:44 · JFK 00:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.