From 800780adbb27d017b4c7625cf67ec48657ce314b Mon Sep 17 00:00:00 2001 From: hellcat <> Date: Fri, 21 Mar 2025 21:50:04 +0800 Subject: [PATCH] no message --- app/routes.php | 11 ++- public/tests/hook.php | 87 +++++++++++++++++++ public/tests/include/head.php | 12 +++ public/tests/test.php | 45 ++++++++++ src/Controllers/TomApi/Tg/HookController.php | 91 +++++++------------- src/Middleware/TgAdmin.php | 40 +++++++++ src/Middleware/TgHookAdmin.php | 46 ++++++++++ src/Services/TomTool/Http.php | 76 ++++++++++++++++ 8 files changed, 346 insertions(+), 62 deletions(-) create mode 100644 public/tests/hook.php create mode 100644 public/tests/include/head.php create mode 100644 public/tests/test.php create mode 100755 src/Middleware/TgAdmin.php create mode 100755 src/Middleware/TgHookAdmin.php create mode 100755 src/Services/TomTool/Http.php diff --git a/app/routes.php b/app/routes.php index ee41c66b..32ada7a8 100755 --- a/app/routes.php +++ b/app/routes.php @@ -6,6 +6,8 @@ use App\Middleware\Admin; use App\Middleware\Guest; use App\Middleware\NodeToken; use App\Middleware\GemboxToken; +use App\Middleware\TgHookAdmin; +use App\Middleware\TgAdmin; use App\Middleware\User; use Slim\Routing\RouteCollectorProxy; @@ -14,6 +16,8 @@ return static function (Slim\App $app): void { // test $app->get('/my', App\Controllers\MyController::class . ':index'); + + // gembox 日后分离出去 $app->group('/gembox', static function (RouteCollectorProxy $group): void { $group->get('', App\Controllers\Gembox\GemboxController::class . ':index'); @@ -39,9 +43,12 @@ return static function (Slim\App $app): void { })->add(new GemboxToken()); // TomApi\Tg + $app->post('/api/tg/hook', App\Controllers\TomApi\Tg\HookController::class . ':cmd')->add(new TgHookAdmin()); + $app->group('/api/tg', static function (RouteCollectorProxy $group): void { - $group->any('/hook', App\Controllers\TomApi\Tg\HookController::class . ':cmd'); - }); + $group->put('/ticket/{id:[0-9]+}', App\Controllers\Admin\TicketController::class . ':update'); +// $group->post('/ticket', App\Controllers\Admin\TicketController::class . ':update_tg'); + })->add(new TgAdmin()); // test $app->get('/test', App\Controllers\TestController::class . ':index'); diff --git a/public/tests/hook.php b/public/tests/hook.php new file mode 100644 index 00000000..7be81901 --- /dev/null +++ b/public/tests/hook.php @@ -0,0 +1,87 @@ +sMethod = "post"; +$oHttp->sToUrl = $_ENV['baseUrl']."/api/tg/hook"; +$oHttp->bIsJson = true; +//$oHttp->aData[] +$oHttp->aData = [ + 'update_id' => 123456789, + 'message' => [ + 'message_id' => 1, + 'from' => [ + 'id' => 987654321, + 'is_bot' => false, + 'first_name' => 'John', + 'last_name' => 'Doe', + 'username' => 'johndoe', + 'language_code' => 'en' + ], + 'chat' => [ + 'id' => -4668400285, + 'first_name' => 'John', + 'last_name' => 'Doe', + 'username' => 'johndoe', + 'type' => 'private' + ], + 'date' => 1610000000, + 'text' => '/reply 62 哈哈哈哈哈哈哈哈哈哈你麻痹' + ] +]; + +$r = $oHttp->send(); + +var_dump($r); +exit; + + + + +$url = 'https://fuc.loc/api/tg/hook'; +$data = [ + 'message' => [ + 'chat' => [ + 'id' => '-4668400285' + ], + 'text' => '/reply 11 sss' + ] +]; + +$options = [ + 'http' => [ + 'header' => "Content-Type: application/json\r\n", + 'method' => 'POST', + 'content' => json_encode($data), + ], + 'ssl' => [ + 'verify_peer' => false, + 'verify_peer_name' => false, + ], +]; + +$context = stream_context_create($options); +$result = file_get_contents($url, false, $context); + +if ($result === FALSE) { + die('Error'); +} + +echo $result; + + + + + + +exit; + +?> diff --git a/public/tests/include/head.php b/public/tests/include/head.php new file mode 100644 index 00000000..48525e2a --- /dev/null +++ b/public/tests/include/head.php @@ -0,0 +1,12 @@ + diff --git a/public/tests/test.php b/public/tests/test.php new file mode 100644 index 00000000..e06f3aec --- /dev/null +++ b/public/tests/test.php @@ -0,0 +1,45 @@ + [ + 'chat' => [ + 'id' => '-4668400285' + ], + 'text' => '/reply 11 sss' + ] +]; + +$options = [ + 'http' => [ + 'header' => "Content-Type: application/json\r\n", + 'method' => 'POST', + 'content' => json_encode($data), + ], + 'ssl' => [ + 'verify_peer' => false, + 'verify_peer_name' => false, + ], +]; + +$context = stream_context_create($options); +$result = file_get_contents($url, false, $context); + +if ($result === FALSE) { + die('Error'); +} + +echo $result; + + + + + + +exit; + +?> diff --git a/src/Controllers/TomApi/Tg/HookController.php b/src/Controllers/TomApi/Tg/HookController.php index 848c7dd5..7a1d8d54 100755 --- a/src/Controllers/TomApi/Tg/HookController.php +++ b/src/Controllers/TomApi/Tg/HookController.php @@ -21,6 +21,8 @@ use Psr\Http\Message\ResponseInterface; use Slim\Http\Response; use Slim\Http\ServerRequest; +use App\Services\TomTool\Http; + final class HookController { @@ -31,31 +33,23 @@ final class HookController { $this->sApiToken = Config::obtain('telegram_token'); $this->sApiChatId = Config::obtain('telegram_chatid'); + + $aData['chatId'] = $this->sApiChatId; // 获取更新 @$update = json_decode(file_get_contents("php://input"), true); - - $update = [ - 'message' => [ - 'chat' => [ - 'id' => '-4668400285' - ], - 'text' => '/reply 62 sss' - ] - ]; // 获取聊天 ID // $chatId = $update["message"]["chat"]["id"]; // 获取消息文本 $message = $update["message"]["text"]; - + // 检查消息是否为 /test if ($message === "/test") { - // 获取服务器时间 + $serverTime = date("Y-m-d H:i:s"); - - // 发送消息到 Telegram + $this->sendMessage("服务器时间: " . $serverTime); http_response_code(200);exit; @@ -69,40 +63,28 @@ final class HookController // 使用空格分割内容 $responseParts = explode(' ', $responseText, 2); // 分割成两部分 if (count($responseParts) == 2) { + $number = $responseParts[0]; // 提取数字部分 $variableText = $responseParts[1]; // 提取用户输入的文本 - // 构造回复内容 -// $replyMessage = $number . $variableText; // 组合成 "11你好" - // 发送消息到 Telegram -// $this->sendMessage($replyMessage); -// use GuzzleHttp\Psr7\ServerRequest; -// use GuzzleHttp\Psr7\Utils; - - // 创建一个包含请求体的 ServerRequest 实例 -// $body = ['comment' => $variableText]; -// $request = new ServerRequest('POST', '/ticket/$number', ['Content-Type' => 'application/json'], json_encode($body)); -// -// // 创建一个 Response 实例 -// $response = new Response(200, []); -// -// // 调用 update 方法 -// $controller = new TicketController(); -// $controller->update($request, $response, []); + $oHttp = new Http(); + + $oHttp->sMethod = "put"; + $oHttp->sToUrl = $_ENV['baseUrl']."/api/tg/ticket/".$number; + $oHttp->bIsJson = true; + $aData['comment'] = 'hahahahah'; + $oHttp->aData = $aData; + + $r = @json_decode($oHttp->send(), true); + + if ($r["ret"] == 1) { + $sMessage = "成功"; + } else { + $sMessage = "失败"; + } + + $this->sendMessage($sMessage); - $request = new ServerRequest('POST', new \Slim\Http\Uri('http', 'localhost', null, '/comments/1'), [], [], [], $serverParams); -// $request = new ServerRequest(); - $response = new Response(); - - // 设置参数 - $request->merge(['comment' => $responseText]); - - // 实例化控制器 - $controller = new CommentController(); - - // 调用 update 方法 - $response = $controller->update($request, $response, ['id' => $number]); - } @@ -110,21 +92,6 @@ final class HookController http_response_code(200);exit; } -// if ($message === "/reply") { -// -// // 创建一个包含请求体的 ServerRequest 实例 -// $body = ['comment' => 'This is a comment.']; -// $request = new ServerRequest('PUT', '/ticket/', ['Content-Type' => 'application/json'], json_encode($body)); -// -// // 创建一个 Response 实例 -// $response = new Response(); -// -// // 调用 update 方法 -// $controller = new YourController(); -// $controller->update($request, $response, []); -// -// } - http_response_code(200);exit; } @@ -132,8 +99,12 @@ final class HookController // 发送消息的函数 public function sendMessage($message) { - $url = "https://api.telegram.org/bot$this->sApiToken/sendMessage?chat_id=$this->sApiChatId&text=" . urlencode($message); - file_get_contents($url); + if ($_ENV['is_loc'] === true) { + var_dump($message); + } else { + $url = "https://api.telegram.org/bot$this->sApiToken/sendMessage?chat_id=$this->sApiChatId&text=" . urlencode($message); + file_get_contents($url); + } } diff --git a/src/Middleware/TgAdmin.php b/src/Middleware/TgAdmin.php new file mode 100755 index 00000000..8dc391c7 --- /dev/null +++ b/src/Middleware/TgAdmin.php @@ -0,0 +1,40 @@ +getParam('chatId'); + + $sChatIdConfig = Config::obtain('telegram_chatid'); + + if ($sChatIdConfig != $sChatId) { + echo json_encode([ + 'status' => 0, + 'data' => 'key error' + ]);exit; + } + + return $handler->handle($request); + } +} diff --git a/src/Middleware/TgHookAdmin.php b/src/Middleware/TgHookAdmin.php new file mode 100755 index 00000000..26e63067 --- /dev/null +++ b/src/Middleware/TgHookAdmin.php @@ -0,0 +1,46 @@ + 0, + 'data' => 'key error' + ]);exit; + } + + return $handler->handle($request); + } +} diff --git a/src/Services/TomTool/Http.php b/src/Services/TomTool/Http.php new file mode 100755 index 00000000..d06dc63d --- /dev/null +++ b/src/Services/TomTool/Http.php @@ -0,0 +1,76 @@ +sToUrl); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回响应而不是输出 + + // 根据请求方法设置 cURL 选项 + switch (strtolower($this->sMethod)) { + case 'post': + curl_setopt($ch, CURLOPT_POST, true); // 设置为 POST 请求 + if ($this->bIsJson) { + curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($this->aData)); // 设置 POST 数据为 JSON + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json', // 设置内容类型为 JSON + 'Content-Length: ' . strlen(json_encode($this->aData)) // 设置内容长度 + ]); + } else { + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($this->aData)); // 设置 POST 数据为普通表单格式 + } + break; + + case 'put': + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // 设置为 PUT 请求 + if ($this->bIsJson) { + curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($this->aData)); // 设置 PUT 数据为 JSON + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json', // 设置内容类型为 JSON + 'Content-Length: ' . strlen(json_encode($this->aData)) // 设置内容长度 + ]); + } else { + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($this->aData)); // 设置 PUT 数据为普通表单格式 + } + break; + + default: + // 默认使用 GET 请求 + curl_setopt($ch, CURLOPT_HTTPGET, true); // 设置为 GET 请求 + curl_setopt($ch, CURLOPT_URL, $this->sToUrl . '?' . http_build_query($this->aData)); // 设置请求 URL + break; + } + + // 禁用 SSL 验证 + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 不验证对等证书 + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 不验证主机名 + + // 执行 cURL 请求 + $response = curl_exec($ch); + + // 检查是否有错误 + if (curl_errno($ch)) { + return 'Error: ' . curl_error($ch); + } + + // 关闭 cURL 会话 + curl_close($ch); + + // 返回响应 + return $response; + } +}