电报机器人 sendPhoto 不工作

Telegram bot sendPhoto not working

我正在尝试做的事情 是从用户那里检索个人资料照片并将其发送给另一个用户,全部由 PHP。

问题是当我使用file_id字符串发送照片时,发送给用户的所有照片都是同一张图片!

我还没有真正 运行 但我正在向自己发送自己的照片以测试功能,结果每次都是我当前的电报个人资料图片。

我的代码:

<?php
define('my_id', '12345678');

$userPhotos = apiRequestJson("getUserProfilePhotos", array('user_id' => my_id, 'offset' => 0, 'limit' => 1));

apiRequestJson("sendPhoto", array('chat_id' => my_id, 'photo' => $userPhotos['photos'][0][0]['file_id']));
apiRequestJson("sendPhoto", array('chat_id' => my_id, 'photo' => $userPhotos['photos'][0][1]['file_id']));
?>

Link 到电报机器人 api: https://core.telegram.org/bots/api

如有任何帮助,我将不胜感激。

你的代码有两个问题。

首先,当您在请求中将 limit 参数设置为 1 时,您请求 只有一张 照片。只需删除可选的 offsetlimit 参数即可检索前 100 张照片:

$userPhotos = apiRequestJson( 'getUserProfilePhotos', array( 'user_id' => my_id ) );

第二个问题:返回的响应是“Array of Array of PhotoSize”,这意味着照片数组是不同照片尺寸的数组:

$userPhotos['photos'][0][0]['file_id']
                      │  │
              photos ─┘  └─ photo sizes

你迭代第二个索引(同一张照片的大小);你必须迭代第一个索引:

apiRequestJson( 'sendPhoto', array( 'chat_id' => my_id, 'photo' => $userPhotos['photos'][0][0]['file_id'] ) );
apiRequestJson( 'sendPhoto', array( 'chat_id' => my_id, 'photo' => $userPhotos['photos'][1][0]['file_id'] ) );

由于事先不知道每个用户的照片总数,最好的办法是通过一个foreach循环进行迭代:

foreach( $userPhotos['photos'] as $photo )
{
    apiRequestJson( 'sendPhoto', array( 'chat_id' => my_id, 'photo' => $photo[0]['file_id'] ) );
}

最后但并非最不重要的一点是,请注意通过此请求您将检索 用户个人资料 照片,因此在大多数情况下您只会获得一张照片。