【问题标题】:Using telegram API with PHP在 PHP 中使用电报 API
【发布时间】:2015-09-20 08:41:17
【问题描述】:

我正在尝试使用 Telegram API 使用 PHP 制作在线广告应用程序,但我遇到的问题是我什至无法理解向电报网站发出请求。这是我基于 Telegram 的 API 和协议编写的一个短代码:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Length" content="348">
    <meta http-equiv="Connection" content="keep-alive">
    <meta http-equiv="Host" content="149.154.167.40:80">
</head>

<body>
<?php
$url = '149.154.167.40';

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);

$result = curl_exec($curl);

echo $result;

?>
</body>
</html>

有人知道如何让它工作吗?

【问题讨论】:

  • -.-- --- ..- / ... .... --- ..- .-.. -.. / .- ... -.- / - ...... / ...- . -。 -.. --- .-. .-.-.- 你应该问供应商,他们有支持论坛吗?否则你会得到任何错误吗?更加详细一些。您是否只需要tell cURL 即可返回转账?
  • 没有论坛,它只是在“nginx/0.3.33”上返回“501 Not Implemented”,据我了解,根据他们使用的协议,我们应该建立一个保持连接并发布到他们给我们的网址。
  • 啊,也许你需要告诉 cURL 跟随重定向? CURLOPT_FOLLOWLOCATION 另外,如果它被路由为 HTTPS 可能需要告诉 cURL 忽略证书验证。发出请求时不需要其他身份验证?
  • 我将 curl_setopt() 更改为 curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_FOLLOWLOCATION => TRUE, CURLOPT_SSL_VERIFYHOST => FALSE ));还是不行。

标签: php curl telegram


【解决方案1】:

Telegram API 使用起来很麻烦,您必须应用各种加密魔法才能使用他们的 MTProto 协议,并且可用的 PHP 参考或示例非常少。我建议您使用他们的新Bot API。它是一种服务,将所有 MTProto 交互抽象在一个简单的 HTTP 层后面。您首先需要使用他们的Bot Father 生成一个机器人,然后使用该 ID 与 API 进行交互。

接收新消息(轮询):

<?php

$bot_id = "<bot ID generated by BotFather>";

# Note: you want to change the offset based on the last update_id you received
$url = 'https://api.telegram.org/bot' . $bot_id . '/getUpdates?offset=0';
$result = file_get_contents($url);
$result = json_decode($result, true);

foreach ($result['result'] as $message) {
    var_dump($message);
}

发送消息:

# The chat_id variable will be provided in the getUpdates result
$url = 'https://api.telegram.org/bot' . $bot_id . '/sendMessage?text=message&chat_id=0';
$result = file_get_contents($url);
$result = json_decode($result, true);

var_dump($result['result']);

您也可以使用 webhook 来代替轮询更新。您可以在我链接的 API 文档中找到更多信息。

【讨论】:

  • 这个API没有我想要的方法,通过channel/id获取消息信息,所以我需要回答作者的原始问题。 ://
【解决方案2】:

你可以使用这个库:

电报MTProto协议的PHP实现(更好的tg-cli) https://github.com/danog/MadelineProto

简单示例代码:

<?php

if (!file_exists('madeline.php')) {
    copy('https://phar.madelineproto.xyz/madeline.php', 'madeline.php');
}
include 'madeline.php';

$MadelineProto = new \danog\MadelineProto\API('session.madeline');
$MadelineProto->start();

$me = $MadelineProto->get_self();

\danog\MadelineProto\Logger::log($me);

if (!$me['bot']) {
    $MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => "Hi!\nThanks for creating MadelineProto! <3"]);
    $MadelineProto->channels->joinChannel(['channel' => '@MadelineProto']);

    try {
        $MadelineProto->messages->importChatInvite(['hash' => 'https://t.me/joinchat/Bgrajz6K-aJKu0IpGsLpBg']);
    } catch (\danog\MadelineProto\RPCErrorException $e) {
    }

    $MadelineProto->messages->sendMessage(['peer' => 'https://t.me/joinchat/Bgrajz6K-aJKu0IpGsLpBg', 'message' => 'Testing MadelineProto!']);
}
echo 'OK, done!'.PHP_EOL;

【讨论】:

    猜你喜欢
    • 2017-11-07
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2016-01-28
    • 2016-11-11
    • 2023-03-11
    • 2015-07-21
    • 2023-03-13
    相关资源
    最近更新 更多