Telegram bot API错误400 Photo具有不受支持的扩展名

时间:2016-02-27 19:17:09

标签: php api telegram-bot

我正在尝试使用“sendPhoto”方法通过我的一个电报机器人发送动态创建的png图像(生成png文件的PHP脚本,[下面的代码])。

当我链接物理png文件(在multipart字段参数中)时它工作正常,但是当我尝试使用php文件时,我收到来自Telegram的以下错误:

  

Photo的扩展程序不受支持。使用.jpg,.jpeg,.gif,.png,.tif或.bmp

之一

PHP代码非常简单,当我在浏览器中打开文件时效果很好(我显示了一个下载png文件的对话框,它在我的计算机上打开很好):

header("Content-type: image/png");
header('Content-Disposition: attachment; filename="moo.png"');
$image = imagecreatetruecolor(50, 50);
imagesavealpha($image, true);
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127); 
imagefill($image, 0, 0, $transparent); 
ob_start ();
imagepng($image);
ob_end_flush();
imagedestroy($image);

有没有办法可以绕过此扩展程序检查并在我的电报请求中发送我的动态图像脚本(扩展名为.php的文件)?

1 个答案:

答案 0 :(得分:0)

结果是bot API与它无关。 当我真的需要附加脚本输出时,我错误地附加了脚本文件(呃!):/ 因此,将输出缓冲区刷新到tmp文件然后发送它就可以了解

    function pngCraft($width = 100, $height = 100, $asBase64 = FALSE)
    {
        $image = imagecreatetruecolor($width, $height);
        imagesavealpha($image, true);
        $transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
        imagefill($image, 0, 0, $transparent);
        ob_start ();
        imagepng($image);
        $image_data = ob_get_contents();
        ob_end_clean ();
        $out = ($asBase64) ? base64_encode($image_data) : $image_data;
        imagedestroy($image);
        return $out;
    }

    $file = tmpfile();
    fwrite($file, pngCraft());
    fseek($file,0);
    $a = stream_get_meta_data($file);
    $uri = $a['uri'];
    rename($uri, $uri.='.png'); 
    $fields[TG_METHOD_SENDPHOTO_PHOTO] = '@'.$uri;
    $fields[TG_METHOD_SENDPHOTO_CAPTION] = 'Yay!';