Skip to main content

Пример интеграции Yii2

В этой статье мы разберем процесс интеграции внешней авторизации через API в Yii2, где клиент отправляет номер телефона для получения кода авторизации, а затем проверяет результат с регулярными запросами. В конце процесса пользователю выдается токен для дальнейшей работы.

Шаг 1: Настройка маршрутов в Yii2

Для начала создадим маршруты в Yii2. В Yii2 маршруты можно описывать в конфигурационном файле config/web.php в разделе rules:

// config/web.php

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        'POST proxy/auth/code' => 'auth-proxy/get-code',
        'POST proxy/auth/result' => 'auth-proxy/get-result',
        'POST proxy/auth/complete' => 'auth-proxy/complete-auth',
    ],
],
Шаг 2: Создание контроллера для обработки запросов


Теперь создадим контроллер AuthProxyController.php, который будет отвечать за проксирование запросов на внешний API авторизации.

Контроллер будет иметь три метода:

1. getCode() — для запроса кода авторизации.

 2. getResult() — для проверки результата авторизации.

 3. completeAuth() — для завершения процесса авторизации и выдачи токена.

namespace app\controllers;

use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\httpclient\Client;

class AuthProxyController extends Controller
{
    private $apiUrl = 'https://api.auth4app.com';
    private $apiKey = 'your_api_key';  // Замените на ваш реальный API-ключ

    // Отключаем CSRF для API-запросов
    public $enableCsrfValidation = false;

    // Метод для запроса кода авторизации
    public function actionGetCode()
    {
        Yii::$app->response->format = Response::FORMAT_JSON;
        $request = Yii::$app->request;

        $phone = $request->post('phone');

        $client = new Client();
        $response = $client->createRequest()
            ->setMethod('POST')
            ->setUrl($this->apiUrl . '/code/get')
            ->setData([
                'api_key' => $this->apiKey,
                'phone' => $phone,
            ])
            ->send();

        return $response->isOk ? $response->data : ['error' => 'Ошибка запроса кода'];
    }

    // Метод для проверки результата авторизации
    public function actionGetResult()
    {
        Yii::$app->response->format = Response::FORMAT_JSON;
        $request = Yii::$app->request;

        $sessionId = $request->post('session_id');

        $client = new Client();
        $response = $client->createRequest()
            ->setMethod('POST')
            ->setUrl($this->apiUrl . '/code/result')
            ->setData([
                'api_key' => $this->apiKey,
                'session_id' => $sessionId,
            ])
            ->send();

        return $response->isOk ? $response->data : ['error' => 'Ошибка проверки результата'];
    }

    // Метод для завершения авторизации и выдачи токена
    public function actionCompleteAuth()
    {
        Yii::$app->response->format = Response::FORMAT_JSON;
        $request = Yii::$app->request;

        $sessionId = $request->post('session_id');

        // Пример генерации фиктивного токена
        return [
            'token' => 'generated_token_for_session_' . $sessionId,
        ];
    }
}