2015-07-20 112 views
2

我想在我的本地主機SendPhotowebhook。該圖片不在電報服務器中。所以我需要通過多段頭來上傳它。電報SendPhoto方法does not工作

試圖代碼:

$file=fopen("Untitled.png","rb"); 
$cont=fread($file,filesize("Untitled.png")); 
$headers=array("Content-type: multipart/form-data"); 
$postfields = array("chat_id" => "108432389", "photo" => "$file"); 
$ch = curl_init(); 
$options = array(
    CURLOPT_URL => "https://api.telegram.org/bot(Token)/SendPhoto", 
    CURLOPT_HEADER => true, 
    CURLOPT_POST => 1, 
    CURLOPT_POSTFIELDS => $postfields, 
    CURLOPT_INFILESIZE => filesize("Untitled.png"), 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_SSL_VERIFYPEER => false, 
    CURLOPT_HTTPHEADER => $headers 
); 
curl_setopt_array($ch, $options); 
curl_exec($ch); 

但它不能SendPhoto。

我已經在不同的網站上找到了解決方案,但是他們的代碼與我的代碼相同。

爲什麼不能正常工作?

+0

我覺得這個解決方案可以解決您的問題,幫助http://stackoverflow.com/a/32844167/5348805 – Ars

回答

1

這是我的PHP函數,它可以完成這項工作。

sendPicture($id, "picture.png"); 


function sendPicture($_chatID, $file_on_server){ 

    $target_url = 'https://api.telegram.org/**<YOUR TOKEN HERE>**/sendphoto'; 

    $file_name_with_full_path = realpath('./'.$file_on_server); 

    $post = array(
     'chat_id' => $_chatID, 
     'photo'  => '@'.$file_name_with_full_path 
    ); 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$target_url); 
    curl_setopt($ch, CURLOPT_POST,1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    $result=curl_exec ($ch); 
    curl_close ($ch); 
    echo $result; 


} 
+0

謝謝@Markus但它不能sendphoto過。 '{「ok」:false,「error_code」:400,「description」:「錯誤:錯誤的請求:錯誤的持久file_id指定:包含錯誤的字符或長度錯誤」} – Alireza

+0

@Alireza:在我看來,與請求的編碼。 Telegram bot API僅使用UTF-8。所以你可以嘗試一下,把你的編碼設置爲UTF-8:iconv(mb_detect_encoding($ text,mb_detect_order(),true),「UTF-8」,$ text); – Markus

+0

該照片不在電報服務器中。 我們應該先上傳。但我們沒有! – Alireza