10

sendPhotoコマンドには、として定義された引数が必要ですphotoInputFile or String

API ドキュメントには次のように記載されています。

Photo to send. You can either pass a file_id as String to resend a photo
that is already on the Telegram servers, or upload a new photo using
multipart/form-data.

InputFile

This object represents the contents of a file to be uploaded. Must be
posted using multipart/form-data in the usual way that files are 
uploaded via the browser. 

そこで、この方法を試しました

    $bot_url    = "https://api.telegram.org/bot<bot_id>/";
    $url = $bot_url . "sendPhoto?chat_id=" . $chat_id;
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "Content-Type:multipart/form-data"
    ));
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, array(
        "photo"     => "@/path/to/image.png", 
    )); 
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/root/dev/fe_new.png"));
    $output = curl_exec($ch);

カールが実行されますが、テレグラムは私にこれを返信します:

Error: Bad Request: Wrong persistent file_id specified: contains wrong
characters or have wrong length

@/path...私もaに置き換えてみましたfile_get_contentsが、この場合、Telegram は空の返信を返します (そしてcurl_error空です!)。

php + curl を使用してテレグラムに写真を送信する方法は?

4

7 に答える 7

36

これは私の実用的なソリューションですが、PHP 5.5 が必要です。

$bot_url    = "https://api.telegram.org/bot<bot_id>/";
$url        = $bot_url . "sendPhoto?chat_id=" . $chat_id ;

$post_fields = array('chat_id'   => $chat_id,
    'photo'     => new CURLFile(realpath("/path/to/image.png"))
);

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type:multipart/form-data"
));
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 
$output = curl_exec($ch);
于 2015-08-30T12:03:34.550 に答える
3

オンラインでたくさん検索しましたが、答えが見つかりませんでした。しかし、あなたの質問は私の問題を解決しました...私はあなたのコードを変更したところ、それが私に代わって答えました...私はあなたのコードを次のように変更しました:

$chat_id=chat Id Here;

$bot_url    = "https://api.telegram.org/botYOUR_BOT_TOKEN/";
$url = $bot_url . "sendPhoto?chat_id=" . $chat_id;
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type:multipart/form-data"
));
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
    "photo"     => "@path/to/image.png", 
)); 
curl_setopt($ch, CURLOPT_INFILESIZE, filesize("path/to/image.png"));
$output = curl_exec($ch);
print$output;
于 2015-09-08T12:00:29.270 に答える
1

この API を使用できます: https://github.com/mgp25/Telegram-Bot-API

例:

$tg->sendPhoto($chat_id, $image, $caption);

保存された画像または URL を使用できます。

于 2015-09-06T09:22:50.853 に答える