Задать вопрос
@hollanditkzn

Как сделать сохранение у пользователя chat_id?

Вопрос такой, я хочу сохранить у пользователя chat_id. Изначально система не знает его. Когда он переходит к боту и нажимает /start то появляется chat_id. Как можно этот caht_id перехватить у данного пользователя и занести его в систему. То что пользователь имеет данный chat_id. Попробовал вот так написать, но когда он уходит из сайта ничего не сохраняет в бд
Кнопка перехода на бота следующий frontend/views/setting.php
<a href="http://telegram.me/HollandSotrudbot?start=<?= $model->token ?>" target="_blank" class="black-btn btn-lg">
                <i class="fa fa-paper-plane"></i> Подключить
            </a>

В этом же контроллере frontend/controllers/SiteController.php
public function actionSetting($id)
    {
        $model = User::findOne($id);
        return $this->render('setting', ['model' => $model]);
    }

В контроллере телеграмма frontend/controllers/TelegramController.php
namespace frontend\controllers;

use app\models\User;
use frontend\components\TelegramComponent;
use yii\db\Exception;
use yii\web\Controller;

public function actionWebhook()
    {
        try{
            $content = json_decode(file_get_contents('php://input'));
           if(isset($data['message']['chat']['id']))
            {
                $chatId = $content['message']['chat']['id'];
                $message = isset($data['message']['text']) ? $data['message']['text'] : false;
    
                $send = false;

                if (strpos($message, '/start') !== false) {
                    $explode = explode('', $message);
                    $token = isset($explode[1]) ? $explode[1] : false;
                    $data = [
                        'raw' => $token,
                        'chat_id' => $chatId,
                    ];
                    $send = Telegram::start($data);
                } else {
                    $send = 'Комманда не найдена. Если Вы уверены в том, что ошибка, обратитесь в тех поддержку';
                }
                $send = $send ? '' : 'Что-то пошло не по плану. Обратитесь в тех.поддержку';
            }
        } catch (Exception $e){
            $e->getMessage();
        }
    }

В моделе Telegram.php
<?php 
namespace frontend\models;

use common\models\User;

class Telegram
{
    public static function start($data){
    	return self::login($data);
    }
    public static function login($data)
    {
    	$token = $data['raw'];
    	if ($token && $user_id = User::findOne(['token' => $token])) {
    		$user = User::findOne($user_id->id);
    		if ($user->telegram_chat_id) {
                return "Уважаемый $user->name, Вы уже авторизованы в системе. ";
            }
            $user->telegram_chat_id = $data['chat_id'];
            $user->save();
            return "Добро пожаловать, $user->first_name $user->last_name. Вы успешно авторизовались!";   
    	} else {
    		return "Извините, не удалось найти данный токен!";
    	}
    }
}

setWook установлен и я через контроллер могу отправить сообщение, но вот чтобы сохранить не могу
  • Вопрос задан
  • 392 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы