no message
This commit is contained in:
parent
7608cb5670
commit
800780adbb
@ -6,6 +6,8 @@ use App\Middleware\Admin;
|
|||||||
use App\Middleware\Guest;
|
use App\Middleware\Guest;
|
||||||
use App\Middleware\NodeToken;
|
use App\Middleware\NodeToken;
|
||||||
use App\Middleware\GemboxToken;
|
use App\Middleware\GemboxToken;
|
||||||
|
use App\Middleware\TgHookAdmin;
|
||||||
|
use App\Middleware\TgAdmin;
|
||||||
use App\Middleware\User;
|
use App\Middleware\User;
|
||||||
use Slim\Routing\RouteCollectorProxy;
|
use Slim\Routing\RouteCollectorProxy;
|
||||||
|
|
||||||
@ -14,6 +16,8 @@ return static function (Slim\App $app): void {
|
|||||||
// test
|
// test
|
||||||
$app->get('/my', App\Controllers\MyController::class . ':index');
|
$app->get('/my', App\Controllers\MyController::class . ':index');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// gembox 日后分离出去
|
// gembox 日后分离出去
|
||||||
$app->group('/gembox', static function (RouteCollectorProxy $group): void {
|
$app->group('/gembox', static function (RouteCollectorProxy $group): void {
|
||||||
$group->get('', App\Controllers\Gembox\GemboxController::class . ':index');
|
$group->get('', App\Controllers\Gembox\GemboxController::class . ':index');
|
||||||
@ -39,9 +43,12 @@ return static function (Slim\App $app): void {
|
|||||||
})->add(new GemboxToken());
|
})->add(new GemboxToken());
|
||||||
|
|
||||||
// TomApi\Tg
|
// 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 {
|
$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
|
// test
|
||||||
$app->get('/test', App\Controllers\TestController::class . ':index');
|
$app->get('/test', App\Controllers\TestController::class . ':index');
|
||||||
|
|||||||
87
public/tests/hook.php
Normal file
87
public/tests/hook.php
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
include("include/head.php");
|
||||||
|
|
||||||
|
include("../../src/Services/TomTool/Http.php");
|
||||||
|
|
||||||
|
include("../../config/.config.php");
|
||||||
|
|
||||||
|
//use App\Services\TomTool\Http;
|
||||||
|
|
||||||
|
$oHttp = new App\Services\TomTool\Http();
|
||||||
|
|
||||||
|
$oHttp->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;
|
||||||
|
|
||||||
|
?>
|
||||||
12
public/tests/include/head.php
Normal file
12
public/tests/include/head.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
error_reporting(E_ALL); // 报告所有错误
|
||||||
|
ini_set('display_errors', 1); // 显示错误
|
||||||
|
|
||||||
|
$k = $_GET['k'];
|
||||||
|
|
||||||
|
if ($k !== "wocaonide") {
|
||||||
|
exit('x');
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
45
public/tests/test.php
Normal file
45
public/tests/test.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
include("include/head.php");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$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;
|
||||||
|
|
||||||
|
?>
|
||||||
@ -21,6 +21,8 @@ use Psr\Http\Message\ResponseInterface;
|
|||||||
use Slim\Http\Response;
|
use Slim\Http\Response;
|
||||||
use Slim\Http\ServerRequest;
|
use Slim\Http\ServerRequest;
|
||||||
|
|
||||||
|
use App\Services\TomTool\Http;
|
||||||
|
|
||||||
final class HookController
|
final class HookController
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -32,18 +34,11 @@ final class HookController
|
|||||||
$this->sApiToken = Config::obtain('telegram_token');
|
$this->sApiToken = Config::obtain('telegram_token');
|
||||||
$this->sApiChatId = Config::obtain('telegram_chatid');
|
$this->sApiChatId = Config::obtain('telegram_chatid');
|
||||||
|
|
||||||
|
$aData['chatId'] = $this->sApiChatId;
|
||||||
|
|
||||||
// 获取更新
|
// 获取更新
|
||||||
@$update = json_decode(file_get_contents("php://input"), true);
|
@$update = json_decode(file_get_contents("php://input"), true);
|
||||||
|
|
||||||
$update = [
|
|
||||||
'message' => [
|
|
||||||
'chat' => [
|
|
||||||
'id' => '-4668400285'
|
|
||||||
],
|
|
||||||
'text' => '/reply 62 sss'
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
// 获取聊天 ID
|
// 获取聊天 ID
|
||||||
// $chatId = $update["message"]["chat"]["id"];
|
// $chatId = $update["message"]["chat"]["id"];
|
||||||
|
|
||||||
@ -52,10 +47,9 @@ final class HookController
|
|||||||
|
|
||||||
// 检查消息是否为 /test
|
// 检查消息是否为 /test
|
||||||
if ($message === "/test") {
|
if ($message === "/test") {
|
||||||
// 获取服务器时间
|
|
||||||
$serverTime = date("Y-m-d H:i:s");
|
$serverTime = date("Y-m-d H:i:s");
|
||||||
|
|
||||||
// 发送消息到 Telegram
|
|
||||||
$this->sendMessage("服务器时间: " . $serverTime);
|
$this->sendMessage("服务器时间: " . $serverTime);
|
||||||
|
|
||||||
http_response_code(200);exit;
|
http_response_code(200);exit;
|
||||||
@ -69,39 +63,27 @@ final class HookController
|
|||||||
// 使用空格分割内容
|
// 使用空格分割内容
|
||||||
$responseParts = explode(' ', $responseText, 2); // 分割成两部分
|
$responseParts = explode(' ', $responseText, 2); // 分割成两部分
|
||||||
if (count($responseParts) == 2) {
|
if (count($responseParts) == 2) {
|
||||||
|
|
||||||
$number = $responseParts[0]; // 提取数字部分
|
$number = $responseParts[0]; // 提取数字部分
|
||||||
$variableText = $responseParts[1]; // 提取用户输入的文本
|
$variableText = $responseParts[1]; // 提取用户输入的文本
|
||||||
// 构造回复内容
|
|
||||||
// $replyMessage = $number . $variableText; // 组合成 "11你好"
|
|
||||||
// 发送消息到 Telegram
|
|
||||||
// $this->sendMessage($replyMessage);
|
|
||||||
|
|
||||||
// use GuzzleHttp\Psr7\ServerRequest;
|
$oHttp = new Http();
|
||||||
// use GuzzleHttp\Psr7\Utils;
|
|
||||||
|
|
||||||
// 创建一个包含请求体的 ServerRequest 实例
|
$oHttp->sMethod = "put";
|
||||||
// $body = ['comment' => $variableText];
|
$oHttp->sToUrl = $_ENV['baseUrl']."/api/tg/ticket/".$number;
|
||||||
// $request = new ServerRequest('POST', '/ticket/$number', ['Content-Type' => 'application/json'], json_encode($body));
|
$oHttp->bIsJson = true;
|
||||||
//
|
$aData['comment'] = 'hahahahah';
|
||||||
// // 创建一个 Response 实例
|
$oHttp->aData = $aData;
|
||||||
// $response = new Response(200, []);
|
|
||||||
//
|
|
||||||
// // 调用 update 方法
|
|
||||||
// $controller = new TicketController();
|
|
||||||
// $controller->update($request, $response, []);
|
|
||||||
|
|
||||||
$request = new ServerRequest('POST', new \Slim\Http\Uri('http', 'localhost', null, '/comments/1'), [], [], [], $serverParams);
|
$r = @json_decode($oHttp->send(), true);
|
||||||
// $request = new ServerRequest();
|
|
||||||
$response = new Response();
|
|
||||||
|
|
||||||
// 设置参数
|
if ($r["ret"] == 1) {
|
||||||
$request->merge(['comment' => $responseText]);
|
$sMessage = "成功";
|
||||||
|
} else {
|
||||||
|
$sMessage = "失败";
|
||||||
|
}
|
||||||
|
|
||||||
// 实例化控制器
|
$this->sendMessage($sMessage);
|
||||||
$controller = new CommentController();
|
|
||||||
|
|
||||||
// 调用 update 方法
|
|
||||||
$response = $controller->update($request, $response, ['id' => $number]);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,21 +92,6 @@ final class HookController
|
|||||||
http_response_code(200);exit;
|
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;
|
http_response_code(200);exit;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -132,8 +99,12 @@ final class HookController
|
|||||||
// 发送消息的函数
|
// 发送消息的函数
|
||||||
public function sendMessage($message) {
|
public function sendMessage($message) {
|
||||||
|
|
||||||
$url = "https://api.telegram.org/bot$this->sApiToken/sendMessage?chat_id=$this->sApiChatId&text=" . urlencode($message);
|
if ($_ENV['is_loc'] === true) {
|
||||||
file_get_contents($url);
|
var_dump($message);
|
||||||
|
} else {
|
||||||
|
$url = "https://api.telegram.org/bot$this->sApiToken/sendMessage?chat_id=$this->sApiChatId&text=" . urlencode($message);
|
||||||
|
file_get_contents($url);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
40
src/Middleware/TgAdmin.php
Executable file
40
src/Middleware/TgAdmin.php
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Middleware;
|
||||||
|
|
||||||
|
//use App\Models\Node;
|
||||||
|
//use App\Services\RateLimit;
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\MiddlewareInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Slim\Http\ServerRequest;
|
||||||
|
//use RedisException;
|
||||||
|
use Slim\Factory\AppFactory;
|
||||||
|
use voku\helper\AntiXSS;
|
||||||
|
use App\Models\Config;
|
||||||
|
|
||||||
|
final class TgAdmin implements MiddlewareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @throws RedisException
|
||||||
|
*/
|
||||||
|
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
$sChatId = $request->getParam('chatId');
|
||||||
|
|
||||||
|
$sChatIdConfig = Config::obtain('telegram_chatid');
|
||||||
|
|
||||||
|
if ($sChatIdConfig != $sChatId) {
|
||||||
|
echo json_encode([
|
||||||
|
'status' => 0,
|
||||||
|
'data' => 'key error'
|
||||||
|
]);exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $handler->handle($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
46
src/Middleware/TgHookAdmin.php
Executable file
46
src/Middleware/TgHookAdmin.php
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Middleware;
|
||||||
|
|
||||||
|
//use App\Models\Node;
|
||||||
|
//use App\Services\RateLimit;
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\MiddlewareInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
//use RedisException;
|
||||||
|
use Slim\Factory\AppFactory;
|
||||||
|
use voku\helper\AntiXSS;
|
||||||
|
use App\Models\Config;
|
||||||
|
|
||||||
|
final class TgHookAdmin implements MiddlewareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @throws RedisException
|
||||||
|
*/
|
||||||
|
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||||
|
{
|
||||||
|
@$update = json_decode(file_get_contents("php://input"), true);
|
||||||
|
|
||||||
|
$sChatIdConfig = Config::obtain('telegram_chatid');
|
||||||
|
|
||||||
|
$sChatId = @$update["message"]["chat"]["id"];
|
||||||
|
|
||||||
|
// if (@$update['chatId']) {
|
||||||
|
// $sChatId = @$update['chatId'];
|
||||||
|
// } else {
|
||||||
|
// $sChatId = @$update["message"]["chat"]["id"];
|
||||||
|
// }
|
||||||
|
|
||||||
|
if ($sChatIdConfig != $sChatId) {
|
||||||
|
echo json_encode([
|
||||||
|
'status' => 0,
|
||||||
|
'data' => 'key error'
|
||||||
|
]);exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $handler->handle($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
76
src/Services/TomTool/Http.php
Executable file
76
src/Services/TomTool/Http.php
Executable file
@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Services\TomTool;
|
||||||
|
|
||||||
|
class Http
|
||||||
|
{
|
||||||
|
public $sMethod;
|
||||||
|
public $aData = [];
|
||||||
|
public $sToUrl;
|
||||||
|
public $bIsJson = false; // 默认值为 false
|
||||||
|
|
||||||
|
public function send(): string
|
||||||
|
{
|
||||||
|
// 初始化 cURL 会话
|
||||||
|
$ch = curl_init();
|
||||||
|
|
||||||
|
// 设置请求 URL
|
||||||
|
curl_setopt($ch, CURLOPT_URL, $this->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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user