如何修复curl_error:SSL:没有替代证书主题名称与目标主机名“api.telegram.org”匹配

问题描述 投票:0回答:3

我正在使用

telegram.php
连接我的机器人。当我使用
sendmessage
时,我的日志中一切正常,但我没有从机器人收到任何信息。

当我检查日志时,出现这样的问题:

ok:         False
curl_error_code:        51
curl_error:     SSL: no alternative certificate subject name matches target host name 'api.telegram.org'

我不知道该怎么解决它。

telegram php-telegram-bot
3个回答
0
投票

我不知道这个电报机器人,但我看到它使用GuzzleHttp。 在初始化期间它不接受任何配置

Request::initialize()

public static function initialize(Telegram $telegram)
{
    if (!($telegram instanceof Telegram)) {
        throw new TelegramException('Invalid Telegram pointer!');
    }
    self::$telegram = $telegram;
    self::setClient(new Client(['base_uri' => self::$api_base_uri]));
}

您应该检查其文档。我看到有很多设置器可以让您覆盖默认设置。

您需要在客户端配置中将

\GuzzleHttp\RequestOptions::VERIFY
设置为
false

$this->client = new \GuzzleHttp\Client([
    'base_uri'                          => 'someAccessPoint',
    \GuzzleHttp\RequestOptions::HEADERS => [
        'User-Agent' => 'some-special-agent',
    ],
    'defaults'                          => [
        \GuzzleHttp\RequestOptions::CONNECT_TIMEOUT => 5,
        \GuzzleHttp\RequestOptions::ALLOW_REDIRECTS => true,
    ],
    \GuzzleHttp\RequestOptions::VERIFY  => false,
]);

0
投票

要解决此问题,请将此 Url 复制到浏览器并设置 webhook:

https://api.telegram.org/botTOKEN/setWebhook?url=https://yourwebsite.com

错误解决方案2 让我们按照以下简单步骤操作:

下载此根证书包:https://curl.haxx.se/ca/cacert.pem 放在服务器的任何位置。 打开 php.ini 并添加以下行:

curl.cainfo = "[the_location]\cacert.pem"

重新启动您的网络服务器。 就是这样。 🙂


0
投票

只需将该行放入curl请求代码中 curl_setopt($userid_ch, CURLOPT_SSL_VERIFYHOST, false);

© www.soinside.com 2019 - 2024. All rights reserved.