update telegram

This commit is contained in:
Tokumeikoi 2020-05-17 15:23:39 +08:00
parent 871291e02d
commit 422b18ca66
7 changed files with 137 additions and 1 deletions

View File

@ -0,0 +1,41 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class Test extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'test';
/**
* The console command description.
*
* @var string
*/
protected $description = '';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
}
}

View File

@ -3,6 +3,7 @@
namespace App\Http\Controllers\Admin;
use App\Http\Requests\Admin\ConfigSave;
use App\Services\TelegramService;
use Illuminate\Http\Request;
use App\Utils\Dict;
use App\Http\Controllers\Controller;
@ -20,6 +21,20 @@ class ConfigController extends Controller
]);
}
public function setTelegramWebhook()
{
$telegramService = new TelegramService();
if (!$telegramService->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

View File

@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\Guest;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class TelegramController extends Controller
{
public function __construct(Request $request)
{
if ($request->input('access_token') !== md5(config('v2board.telegram_bot_token'))) {
abort(500, 'authentication failed');
}
}
public function webhook(Request $request)
{
info($request->input());
}
}

View File

@ -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');

View File

@ -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');
});
}
}

View File

@ -0,0 +1,50 @@
<?php
namespace App\Services;
use \Curl\Curl;
class TelegramService {
protected $api;
public function __construct()
{
$this->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;
}
}

View File

@ -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;
}
}