不能长轮询电报

Can't Longpolling Telegram

我无法对 Telegram 进行长轮询查询。

这是我的代码:

$ch = curl_init();

(intval($this->offset) !== 0) ? $post_data['offset'] = $this->offset : NULL;

$options = array(
    CURLOPT_URL             => $this->api_url . $this->method,
    CURLOPT_HEADER          => false,
    CURLOPT_RETURNTRANSFER  => true,
    CURLOPT_CONNECTTIMEOUT  => 0,
    CURLOPT_TIMEOUT         => 0,
    CURLOPT_POST            => true,
    CURLOPT_POSTFIELDS      => $post_data,
);

curl_setopt_array($ch, $options);
$response = json_decode(curl_exec($ch));

api_url 是正确的,方法是 getUpdates 所以应该没问题,但是 Telegram return 立即给我发了这样的空结果:

object(stdClass)#2 (2) {
    ["ok"]=>
    bool(true)
    ["result"]=>
    array(0) {
    }
}

我做错了什么?据我所知-查询不应该 return me empty result?

PHP 不能 是长轮询客户端。

您有 2 个解决方案:

  1. 使用无限循环包含正常的 getUpdates 方法。
  2. 如果您的主机提供商提供 public HTTPS 服务,请使用 Webhook 而不是轮询。

似乎 Telegram 文档对声明参数超时有误解。

timeout - Timeout in seconds for long polling. Defaults to 0, i.e. usual short polling. Should be positive, short polling should be used for testing purposes only.

getUpdates 查询添加 POST 属性 timeout > 0 使其成为长轮询。

我知道这是一个老问题,购买也许这可以帮助某人。实际上,对于 ReactPHP,您可以使用 PHP 的长轮询模式。看看this.