电报从外部服务器发送图像

Telegram Send image from external server

我正在使用 PHP 为 BOT 配置 webhook。

我想从另一个服务器发送图片。

我试过这种方法

function bot1($chatID,$sentText) {
    $botUrl = 'https://api.telegram.org/bot'.self::_BOT_TOKEN_;
    $img = "https://www.server2.com/1.jpeg";
    $this->sendPhoto($botUrl,$chatID,$img);
}

function sendPhoto($botUrl,$chatID, $img){
    $this->sendMessage($botUrl,$chatID,'This is the pic'.$chatID);

    $this->sendPost($botUrl,"sendPhoto",$chatID,"photo",$img);
}
function sendMessage($botUrl,$chatID, $text){
    $inserimento = file_get_contents($botUrl."/sendMessage?chat_id=".$chatID."&text=".$text."&reply_markup=".json_encode(array("hide_keyboard"=>true)));
}

function sendPost($botUrl,$function,$chatID,$type,$doc){

    $response = $botUrl. "/".$function;
    $post_fields = array('chat_id'   => $chatID,
            $type     => new CURLFile(realpath($doc))
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            "Content-Type:multipart/form-data"
    ));
    curl_setopt($ch, CURLOPT_URL, $response);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
    $output = curl_exec($ch);
}

但我只收到消息。 问题是什么? 我尝试更改 http 但问题仍然存在

您必须发送文件,而不是 URL。

所以:

function bot1( $chatID,$sentText )
{
    $botUrl = 'https://api.telegram.org/bot'.self::_BOT_TOKEN_;
    $img = "https://www.server2.com/1.jpeg";
    $data = file_get_contents( $img );                            # <---
    $filePath = "/Your/Local/FilePath/Here";                      # <---
    file_put_contents( $data, $filePath );                        # <---
    $this->sendPhoto( $botUrl, $chatID, $filePath );              # <---
}

这是原始示例,没有检查 file_get_contents() 的成功。

在我的机器人中,我使用了这个模式,它工作正常。

嗯,我已经做了一个解决方法,因为我的 cUrl 版本在上传文件时似乎有一个错误。

现在我用的是 Zend FW

$botUrl = 'https://api.telegram.org/bot'.self::_BOT_TOKEN_;
$realpath = realpath($doc);
$url = $botUrl . "/sendPhoto?chat_id=" . $chatID;
$client = new Zend_Http_Client();
$client->setUri($url);
$client->setFileUpload($realpath, "photo");
$client->setMethod('POST');
$response = $client->request();