diff --git a/app/Console/Commands/Test.php b/app/Console/Commands/Test.php new file mode 100644 index 00000000..667e616c --- /dev/null +++ b/app/Console/Commands/Test.php @@ -0,0 +1,41 @@ +getMe()) { + abort(500, '机器人Token有误'); + } + if (!$telegramService->setWebhook(config('v2board.app_url') . '/api/v1/guest/telegram/webhook?access_token=' . md5(config('v2board.telegram_bot_token')))) { + abort(500, 'Webhook设置失败'); + } + return response([ + 'data' => true + ]); + } + public function fetch() { // TODO: default should be in Dict diff --git a/app/Http/Controllers/Guest/TelegramController.php b/app/Http/Controllers/Guest/TelegramController.php new file mode 100644 index 00000000..afa03479 --- /dev/null +++ b/app/Http/Controllers/Guest/TelegramController.php @@ -0,0 +1,21 @@ +input('access_token') !== md5(config('v2board.telegram_bot_token'))) { + abort(500, 'authentication failed'); + } + } + + public function webhook(Request $request) + { + info($request->input()); + } +} diff --git a/app/Http/Routes/AdminRoute.php b/app/Http/Routes/AdminRoute.php index bfbbf46c..a08a126b 100644 --- a/app/Http/Routes/AdminRoute.php +++ b/app/Http/Routes/AdminRoute.php @@ -15,6 +15,7 @@ class AdminRoute $router->get ('/config/fetch', 'Admin\\ConfigController@fetch'); $router->post('/config/save', 'Admin\\ConfigController@save'); $router->get ('/config/getEmailTemplate', 'Admin\\ConfigController@getEmailTemplate'); + $router->get ('/config/setTelegramWebhook', 'Admin\\ConfigController@setTelegramWebhook'); // Plan $router->get ('/plan/fetch', 'Admin\\PlanController@fetch'); $router->post('/plan/save', 'Admin\\PlanController@save'); diff --git a/app/Http/Routes/GuestRoute.php b/app/Http/Routes/GuestRoute.php index ec90b940..9cb62554 100644 --- a/app/Http/Routes/GuestRoute.php +++ b/app/Http/Routes/GuestRoute.php @@ -17,6 +17,8 @@ class GuestRoute $router->post('/order/stripeNotify', 'Guest\\OrderController@stripeNotify'); $router->post('/order/bitpayXNotify', 'Guest\\OrderController@bitpayXNotify'); $router->post('/order/payTaroNotify', 'Guest\\OrderController@payTaroNotify'); + // Telegram + $router->post('/telegram/webhook', 'Guest\\TelegramController@webhook'); }); } } diff --git a/app/Services/TelegramService.php b/app/Services/TelegramService.php new file mode 100644 index 00000000..f157ca1c --- /dev/null +++ b/app/Services/TelegramService.php @@ -0,0 +1,50 @@ +api = 'https://api.telegram.org/bot' . config('v2board.telegram_bot_token') . '/'; + } + + public function sendMessage(int $chatId, string $text, string $parseMode = '') + { + $this->request('sendMessage', [ + 'chat_id' => $chatId, + 'text' => $text, + 'parse_mode' => $parseMode + ]); + } + + public function getMe() + { + $response = $this->request('getMe'); + if (!$response->ok) { + return false; + } + return $response; + } + + public function setWebhook(string $url) + { + $response = $this->request('setWebhook', [ + 'url' => $url + ]); + if (!$response->ok) { + return false; + } + return $response; + } + + private function request(string $method, array $params = []) + { + $curl = new Curl(); + $curl->get($this->api . $method, http_build_query($params)); + $curl->close(); + return $curl->response; + } +} diff --git a/library/Telegram.php b/library/Telegram.php index 63d9cfab..fdbf9cc3 100644 --- a/library/Telegram.php +++ b/library/Telegram.php @@ -20,10 +20,16 @@ class Telegram { ]); } + public function getMe() + { + dd($this->request('getMe')); + } + private function request(string $method, array $params) { $curl = new Curl(); - $curl->post($this->api . $method, http_build_query($params)); + $curl->get($this->api . $method, http_build_query($params)); $curl->close(); + return $curl->response; } }