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

时间:2019-01-29 09:47:56

标签: telegram php-telegram-bot

我正在使用telegram.php连接我的机器人。当我使用sendmessage时,日志中的所有内容都没问题,但机器人没有收到任何信息。

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

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

我不知道该怎么办。

2 个答案:

答案 0 :(得分: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,
]);

答案 1 :(得分:0)

要解决此问题,请将此网址复制到浏览器并设置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"

重新启动您的Web服务器。 而已。 ?