Skip to main content

Пример интеграции PHP (без фреймворков)

В этой статье мы рассмотрим примере вся логика обреалботки запроса на авторизацию, проверка результата и завершение авторизации через внешналий API с использованиеы в одном чистого PHP (бPHP-файлез фреймворков). Клиент отправляет номер телефона, получдает кодпараметр `action` для выборав нужного меторда.

PHP логизации через прокси-сервер, а затем проверяет результат авторизации с регудля обрнымаботки запросов

$apiUrl = "https://api.auth4app.com";
$apiKey = "your_api_key"; // Замени. В конце, после успешной авторизации, пользователь получает токен.

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

Для нач валш реа мы создадим три отдельныхй PHPAPI-ключ файла,if ко($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? null; switch ($action) { case 'get_code': getCode($_POST['phone']); break; case 'get_result': getResult($_POST['code_id']); break; case 'complete_auth': completeAuth($_POST['code_id']); break; default: http_response_code(400); echo json_encode(['error' => 'Invalid action']); } } else { http_response_code(405); // Меторыд не будут обрабатывать запросы от клиешента:

    echo
  • auth_code.phpjson_encode(['error' => 'Method not allowed']); } // Функция для запроса кода авторизации function getCode($phone) { global $apiUrl, $apiKey; $url = $apiUrl . "/code/get"; $postData = json_encode(['api_key' => $apiKey, 'phone' => $phone]); $response = sendPostRequest($url, $postData); echo $response; } // Фуна основе номера телефона.
  • auth_result.php —кция для проверки срезультатуса авторизации черезfunction code_idgetResult($codeId) { global $apiUrl, $apiKey; $url = $apiUrl .
  • auth_complete.php"/code/result"; $postData = json_encode(['api_key' => $apiKey, 'code_id' => $codeId]); $response = sendPostRequest($url, $postData); echo $response; } // Функция для завершения авторизации и выдачи токена послеfunction успешногоcompleteAuth($codeId) завершения{ процессаglobal $apiUrl, $apiKey; $url = $apiUrl .
"/code/result";

Шаг$postData 2:= Реализацияjson_encode(['api_key' файлов=> для$apiKey, обработки'code_id' запросов

=>

В$codeId]); каждом// файле будем использовать функцию file_get_contents и cURL для отправки запросов к внешнему API.

1. Файл auth_code.php

Этот файл будет принимать номер телефона и отправлять запрос для пПолучаениям кодрезультат авторизации.


// auth_code.php

 $apiKey,
        'phone' => $phone
    ]);

    $ch = curl_init($apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    $response = curl_exec(sendPostRequest($ch);
    curl_close($ch);

    echo $response; // Возвращаем ответ клиенту
} else {
    http_response_code(405); // Метод не разрешен
}
?>
    

2. Файл auth_result.php

Этот файл будет принимать code_id и отправлять запрос для проверки статуса авторизации.


// auth_result.php

 $apiKey,
        'code_id' => $codeId
    ]);

    $ch = curl_init($apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS,url, $postData);

    $response = curl_exec($ch);
    curl_close($ch);

    echo $response; // Возвращаем ответ клиенту
} else {
    http_response_code(405); // Метод не разрешен
}
?>
    

3. Файл auth_complete.php

Этот файл завершает процесс авторизации, проверяет результат и выдает токен пользователю.


// auth_complete.php

 $apiKey,
        'code_id' => $codeId
    ]);

    $ch = curl_init($apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

    $response = curl_exec($ch);
    curl_close($ch);
    $authData = json_decode($response, true);

    if ($authData['auth'] === true) {
        // 2. Получаем номер телефона из ответа
        $phone = $authData['phone']; ?? null;

        if ($phone) {
            // 3.2. Поиск пользователя по номеру телефона или его создание
            $user = findUserByPhone($phone);
            if (!$user) {
                $user = createUser($phone);
            }

            // 4.3. Генерация токена (это можно сделать через JWT или другой метод)
            $token = "ТУТ ВАШ ТОКЕН"; // На этом этапе можно создать токен

            // 4. Возвращаем токен и данные пользователя
            echo json_encode([
                'token' => $token,
                'user' => [
                    'id' => $user['id'],
                    'phone' => $user['phone']
                ]
            ]);
        } else {
            http_response_code(400);
            //echo Ошибка:json_encode(['error' номер=> телефона'Phone неnumber найденnot found']);
        }
    } else {
        http_response_code(400);
        //echo Ошибкаjson_encode(['error' авторизации=> 'Authorization failed']);
    }
}

else// Функция для отправки POST-запросов
function sendPostRequest($url, $postData) {
    http_response_code(405)$ch = curl_init($url);
    //curl_setopt($ch, МетодCURLOPT_RETURNTRANSFER, неtrue);
    разрешенcurl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

// Пример функций для поиска и создания пользователя
function findUserByPhone($phone) {
    // Здесь должна быть логика поиска пользователя по номеру телефона в базе данных
    return null; // Если пользователь не найден
}

function createUser($phone) {
    // Здесь должна быть логика создания нового пользователя
    return ['id' => 1, 'phone' => $phone]; // Пример возврата пользователя
}
?>
    

Шаг 3: Логика клиентской стороны

НТеперь на клиентской стороне нпеобходимо редализовем параметьр логику`action` для выбора нужного действия, исполнениьзуя последовательных шагов:`FormData`.

    1.
  1. Отправка номера телефона для получения кода авторизации.
  2. Параллельное отправление запросов для проверки результата авторизации с интервалом в 3 секунды.
  3. Как только в ответе появится auth: true, запрос завершения авторизации с передачей code_id.

1. Отправка номера телефона для запроса кода

Клиент отправляет POST-запрос нас auth_code.phpдействием `get_code`, передавая номер телефона:


fetch('/auth_code.php',const {formData method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
    },
    body:= new URLSearchParams({FormData();
phone:formData.append('action', 'get_code');
formData.append('phone', '+1234567890' }); // Замените на реальный номер телефона

fetch('/auth.php', {
    method: 'POST',
    body: formData
})
.then(response => response.json())
.then(data => {
    if (data.code_id) {
        // Начинаем проверку статуса авторизации каждые 3 секунды
        const codeId = data.code_id;
        const intervalId = setInterval(() => {
            checkAuthStatus(codeId, intervalId);
        }, 3000);
    }
});
    

2. Периодическая проверка статуса авторизации

Клиент начинает проверять статус авторизации, отправляяет POST-запросы нс действием `get_result`, передавая auth_result.phpcode_id:


function checkAuthStatus(codeId, intervalId) {
    const formData = new FormData();
    formData.append('action', 'get_result');
    formData.append('code_id', codeId);

    fetch('/auth_result.auth.php', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: new URLSearchParams({ code_id: codeId })formData
    })
    .then(response => response.json())
    .then(data => {
        if (data.auth === true) {
            // Останавливаем проверку
            clearInterval(intervalId);

            // Завершаем авторизацию
            completeAuth(codeId);
        }
    });
}
    

3. Завершение авторизации и получение токена

Как только авторизация будет успешной, клиент отправляет POST-запрос нс действием `complete_auth`, передавая auth_complete.phpcode_id:


function completeAuth(codeId) {
    const formData = new FormData();
    formData.append('action', 'complete_auth');
    formData.append('code_id', codeId);

    fetch('/auth_complete.auth.php', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: new URLSearchParams({ code_id: codeId })formData
    })
    .then(response => response.json())
    .then(data => {
        if (data.token) {
            // Токен получен, можно использовать для дальнейшей работы
            console.log('Authorization successful, token:', data.token);
        }
    });
}
    

Заключение

МВ этом примере мы рассмотрели, как объединить всю логику обработки запример интеграции PHP (без фреймворксов) с внешним API дляа авторизации. Вю, процвессрку результата кли завершениент отправляет номер телефона, получает код для авторизации ив затеодном провPHP-файлеряет результат с использованием code_id. Когда авторизация завершается успешно, клиент получередает дейстоквиен через параметр `action` для выполнения нужного методальнейшей работы.

Порядок действий:

  1. Клиент отправляет номер телефона через действие auth_code.phpget_code.
  2. Клиент запрашивает результат авторизации через действие auth_result.phpget_result, передавая code_id.
  3. Как только авторизация завершена (auth: true), клиент вызывает метод завершения авторизации через действие auth_complete.phpcomplete_auth.
  4. Сервер выдает клиенту токен для дальнейшей работы.