PHP电报bot,sendmessage webhook

时间:2018-10-09 12:08:22

标签: php bots telegram webhooks

我在写电报机器人, 这是我的代码,我希望用户收到他们发送到机器人中的消息:

telegram.php:

<?php
 class telegram {

 public $token;

 public function __construct($token)
{
    $this->token =  $token; 
}

    public function recievedText()
{
    $text= json_decode(file_get_contents('php://input'),true);
    return $text;
} 

public function sendMessage($userid,$text)
{
    $url='https://api.telegram.org/bot'.$this->token.'/sendMessage?chat_id='.$userid.'&text='.$text;
    file_get_contents($url)   ;
}
}

?>

index.php:

<?php

require ('config.php');
require('telegram.php');

$telegram = new telegram(TOKEN);
$result = $telegram->recievedText();
$userid = $result->message->from->id;
$text   = $result->message->text;
$telegram->sendMessage($userid,$text)  ;
?>

config.php:

<?php

define('TOKEN','----');
?>

并且我已经设置了webhook并通过this检查了我网站的SSL,并且设置成功,

我不知道将消息发送到机器人时不会发回任何消息的问题所在!

1 个答案:

答案 0 :(得分:0)

您检查了是否有ssl,但没有检查是否确实使用过它。您也不检查请求的响应是什么

file_get_contents($url)   ;

将此行更改为:

$requestResponse = file_get_contents($url);
var_dump($http_response_header);
var_dump($requestResponse);

先看看您是否成功发送了请求。 没有回应只是猜测可能出什么问题。 如果其他数字不是以2xx开头,那么您应该会看到响应代码= 200(如果一切正常),则无法发送请求。

了解与file_get_contents()的HTTPS连接,或尝试使用cURL。提示:仅出于调试目的,您可以跳过SSL验证,因此至少在开始时就消除了此问题。但是请记住在调试后重新打开验证!

如果您将请求作为GET查询进行处理,则需要先对文本进行编码,然后再将其放入url-使用urlencode()

$url='https://api.telegram.org/bot'.$this->token.'/sendMessage?chat_id='.$userid.'&text='.$text;

更改为

 $url='https://api.telegram.org/bot'.$this->token.'/sendMessage?chat_id='. urlencode($userid) . '&text='.urlencode($text);

甚至更好地利用http_build_query()并用这种方式对$this->token之外的所有变量进行编码。给定的链接有一个简单的示例,因此我将跳过为您提供的代码。