【问题标题】:sending message in telegram bot using curl使用 curl 在电报机器人中发送消息
【发布时间】:2016-11-11 08:31:01
【问题描述】:

我想从数据库中获取我的机器人消息并发送给用户,当我的文本只有 1 个单词时它可以工作,但现在它不起作用并显示 HTTP BAD REQUEST 400。我想我应该使用 curl,但我没有发现任何文档对从电报机器人发送长消息有用。(实际上是因为我是 php 的初学者)

这是我的代码

$botToken="something";
$website="https://api.telegram.org/bot".$botToken;


$update = file_get_contents("php://input");
$update = json_decode($update, true);

$chatID = $update["message"]["chat"]["id"];
$message = $update["message"]["text"];

define("dbhost", "localhost:3306"); define("dbuser", "sm");
define("dbpass", "sm"); define("database", "sm");

switch ($message){
 case "/get":
  connected($chatID);

break;

 }

function sendMessage($chatID,$message){


$url =$GLOBALS[website]."/sendMessage?chat_id=".$chatID."&text=".$message;

//file_get_contents($url);
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    $output = curl_exec($ch);
    curl_close($ch);

   //checkJSON($chatID,$update);

 }

 function connected($chatID){

 $conn = mysql_connect(dbhost,dbuser,dbpass);

 if(! $conn )
 {
   die('Could not connect: ' . mysqli_error());
 }


  mysql_select_db( database );

  $strSQL = "SELECT text FROM bott WHERE id= '1' ";
  $result = mysql_query($strSQL) or die('SQL Error :: '.mysql_error());
   $row = mysql_fetch_assoc($result);
  $message=$row['text'];
  sendMessage($chatID,$message);
  mysql_close($conn);
  }




function checkJSON($chatID,$update){

    $myFile = "log.txt";
    $updateArray = print_r($update,TRUE);
    $fh = fopen($myFile, 'w') or die("can't open file");
    fwrite($fh, $chatID ."\n\n");
    fwrite($fh, $updateArray."\n\n");
    fclose($fh);
  }




?>

这是我使用 file_get_contents 时的错误

[08-Jul-2016 12:27:35 America/Chicago] PHP Warning:     file_get_contents(https://api.telegram.org/bot218048829:AAF7baKISagQfALp4OIPh-   yU_hMOnpFGU0A/sendMessage?   chat_id=98506693&text=Introduction%0D%0AA+COMPUTER+PROCESSOR+such+as+Intel%92s+i486+used+to+cost+around+the+same+as+a+small+car.+Nowadays+a+chip+with+similar+power+is+the+price+of+a+chocolate+bar.%0D%0A): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
 in /home/sfduiir1/public_html/php.php on line 29

此代码不会向用户发送任何内容。

【问题讨论】:

  • 是否启用错误报告?是否显示任何错误?
  • 是的,这是这段代码的报告
  • 因为测试您的网址并通过 &text= 更改 &text= 我收到 400 错误,提示消息未进行 utf8 编码跨度>
  • 谢谢@Edu,我使用 urlencode(utf8_encode($message)) 将 url 更改为 utf8
  • 好的,没错。 Telegram 接收和发送所有 utf-8 格式的消息。All queries must be made using UTF-8

标签: php curl telegram-bot


【解决方案1】:

在 curl 方法中,您不应该在 url 中使用任何数据。 如您所见,出现错误的 url 包含无效的空格。 这是一个有效的 curl 代码:

$website="https://api.telegram.org/bot".$botToken;
$chatId=1234567;  //Receiver Chat Id 
$params=[
    'chat_id'=>$chatID,
    'text'=>'MoonLight',
];
$ch = curl_init($website . '/sendMessage');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, ($params));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close($ch);

【讨论】:

  • 您好先生,您在使用 curl 发送图像时有参考吗?我总是收到通知:无法打开流:HTTP 请求失败! HTTP/1.1 404 未找到
  • @IIMNURDIANSYAH 对于您和其他有相同问题的人来说,最好提出一个新问题。但按照你的要求,我写了一些示例代码。这是它的链接:How to send photo with cURL
  • 我正在创建新线程但仍然没有得到答案,这是我的线程:stackoverflow.com/questions/38266912/…
  • @IIMNURDIANSYAH 我在your question 上给你发了一些东西,希望对你有所帮助。
猜你喜欢
  • 2017-03-19
  • 2016-03-11
  • 2017-09-01
  • 2023-03-22
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多