【问题标题】:PHP telegram bot, sendmessage webhookPHP电报机器人,sendmessage webhook
【发布时间】:2019-03-14 05:08:05
【问题描述】:

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

电报.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 并且设置好了,

我不知道问题出在哪里,当我向机器人发送消息时它没有发回任何消息!

【问题讨论】:

    标签: php bots telegram webhooks


    【解决方案1】:

    你检查了你是否有 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-&gt;token 之外的所有变量。给定的链接有一个简单的例子,所以我会跳过给你代码。

    【讨论】:

    • 非常感谢您的回答。结果是:array(8) { [0]=&gt; string(24) "HTTP/1.1 400 Bad Request" [1]=&gt; string(20) "Server: nginx/1.12.2" [2]=&gt; string(35) "Date: Wed, 10 Oct 2018 07:42:39 GMT" [3]=&gt; string(30) "Content-Type: application/json" [4]=&gt; string(18) "Content-Length: 80" [5]=&gt; string(17) "Connection: close" [6]=&gt; string(30) "Access-Control-Allow-Origin: *" [7]=&gt; string(81) "Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection" } bool(false) 为什么请求失败?是主机的 ssl 还是其他问题?
    • @ZaGol 然后阅读电报 API 的文档,也许您需要发送 JSON 标头 "Content-Type", "application/json" 和数据作为 JSON。不幸的是,我无法为您提供更多帮助,因为我不知道电报 API
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2019-10-14
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多