为什么 Telegram 在 webhook 上给我一个空的 POST 请求?

Why does Telegram give me an empty POST request on the webhook?

我遵循了这些步骤:

  1. 向 BotFather 注册了一个机器人。
  2. 发送 post 网络钩子请求(https://api.telegram.org/bot[BOTID]/setWebhook) with the URL being https://example.com/myscript.php
  3. 再次检查 getWebhookInfo,它表明它已正确注册。
  4. 当我向机器人发送消息时,正在调用脚本,但 POST 负载为空。在 documentation 中,他们说他们将向指定的 url 发送一个 HTTPS POST 请求,其中包含一个 JSON-序列化更新。

是否还有其他人遇到此问题并且可能知道解决此问题的方法?

我要记录的 php 脚本:

    $file = dirname(__FILE__) . '/telegram-log.txt';
    $entry = (object)array();
    $entry->date = date("r");
    $entry->GET = $_GET;
    $entry->POST = $_POST;
    $entry->REQUEST = $_REQUEST;
    $entry->HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
    $entry->REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
    file_put_contents($file, json_encode($entry) . "\n", FILE_APPEND | LOCK_EX);

回复:

{"date":"Thu, 17 Jun 2021 13:42:49 +0200","GET":[],"POST":[],"REQUEST":[],"HTTP_USER_AGENT":null,"REMOTE_ADDR":"91.108.6.133"}

使用 $content = file_get_contents("php://input") 接收更新。

Telegram 的响应是内容类型application/json

$_POST 仅在使用 application/x-www-form-urlencodedmultipart/form-data 作为请求中的 HTTP Content-Type 时有效。