Пример интеграции 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_id
getResult($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.
- Отправка номера телефона для получения кода
авторизации.
Параллельное отправление запросов для проверки результата авторизации с интервалом в 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` для выполнения нужного методальнейшей работы.
Порядок действий:
- Клиент отправляет номер телефона через действие
auth_code.phpget_code
.
- Клиент запрашивает результат авторизации через действие
auth_result.phpget_result
, передавая code_id
.
- Как только авторизация завершена (
auth: true
), клиент вызывает метод завершения авторизации через действие auth_complete.phpcomplete_auth
.
- Сервер выдает клиенту токен для дальнейшей работы.