Пример интеграции 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,
];
}
}