SeoLik

1 июня 2020, 14:23
35

В данной статье рассмотрим регистрацию на сайте через Mail.ru.

Создайте в корне своего сайта 2 папки, например social_login и social_login_callback. В первой будут храниться файлы для использования их в качестве прямых ссылок на инициализацию аутентификации в социальной сети, а во второй обработчики ответов от социальных сетей.

Для начала нам необходимо добавить свой сайт в нашу учётную запись сервиса Mail.ru.

Потом заполнить форму своими данными

И нажать на кнопку "Продолжить"

После предупреждения нажимаем на кнопку "Пропустить"

Ваше приложение создано. Сохраните его данные, они нам понадобятся при написании php кода, а именно: ID, Приватный ключ, Секретный ключ.

Приступаем к написанию кода

Создаем файл mail.php в папке social_login и записываем в него код:

$client_id = 'XXXXXXXX'; // ID
$client_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'; // Секретный ключ
$redirect_uri = 'https://site.ru/social_login_callback/mail.php'; // Ссылка на обработчик ответа

$url = 'https://connect.mail.ru/oauth/authorize';

$params = array(
    'client_id'     => $client_id,
    'response_type' => 'code',
    'redirect_uri'  => $redirect_uri
);

header('Location: '. $url . '?' . urldecode(http_build_query($params)) ); exit();

 

Теперь для инициации регистрации пользователя через Mail.ru нужно направить его по адресу https://site.ru/social_login/mail.php

Для того, чтобы получить ответ от социальной сети и email юзера создадим файл mail.php, но теперь в папке social_login_callback и запишем в него следующий код:

$client_id = 'XXXXXXX'; // ID
$client_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // Секретный ключ
$redirect_uri = 'https://site.ru/social_login_callback/mail.php'; // Замените на свой путь обработчика

if (isset($_GET['code'])) {

 $result = false;

    $params = array(
        'client_id'     => $client_id,
        'client_secret' => $client_secret,
        'grant_type'    => 'authorization_code',
        'code'          => $_GET['code'],
        'redirect_uri'  => $redirect_uri
    );

    $url = 'https://connect.mail.ru/oauth/token';

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, urldecode(http_build_query($params)));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($curl);
    curl_close($curl);

    $tokenInfo = json_decode($result, true);

    if (isset($tokenInfo['access_token'])) {
        $sign = md5("app_id={$client_id}method=users.getInfosecure=1session_key={$tokenInfo['access_token']}{$client_secret}");

        $params = array(
            'method'       => 'users.getInfo',
            'secure'       => '1',
            'app_id'       => $client_id,
            'session_key'  => $tokenInfo['access_token'],
            'sig'          => $sign
        );

        $userInfo = json_decode(file_get_contents('http://www.appsmail.ru/platform/api' . '?' . urldecode(http_build_query($params))), true);
        if (isset($userInfo[0]['uid'])) {
            $userInfo = array_shift($userInfo);
            $result = true;
        }
	}	
	
	
$email = $userInfo['email']; // почта юзера		
		
// все получаемые данные		
if ($result) {
print_r($userInfo);
}
	

}