我在写电报机器人, 这是我的代码,我希望用户收到他们发送到机器人中的消息:
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,并且设置成功,
我不知道将消息发送到机器人时不会发回任何消息的问题所在!
答案 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
之外的所有变量进行编码。给定的链接有一个简单的示例,因此我将跳过为您提供的代码。