• Модуль: socialservices
  • Путь к файлу: ~/bitrix/modules/socialservices/classes/general/mailru.php
  • Класс: CSocServMyMailRu
  • Вызов: CSocServMyMailRu::Authorize
public function Authorize()
{
	$GLOBALS["APPLICATION"]->RestartBuffer();

	$bSuccess = 1;
	$bProcessState = false;

	if((isset($_REQUEST["code"]) && $_REQUEST["code"] <> '') && CSocServAuthManager::CheckUniqueKey())
	{
		$bProcessState = true;

		$redirect_uri = CSocServUtil::GetCurUrl('auth_service_id='.self::ID, array("code", "state", "check_key", "backurl"));
		$appID = trim(self::GetOption("mailru_id"));
		$appSecret = trim(self::GetOption("mailru_secret_key"));

		$gAuth = new CMailRuOAuthInterface($appID, $appSecret, $_REQUEST["code"]);

		if($gAuth->GetAccessToken($redirect_uri) !== false)
		{
			$arMRUser = $gAuth->GetCurrentUser();

			if(is_array($arMRUser) && ($arMRUser['0']['uid'] <> ''))
			{
				$email = $first_name = $last_name = $gender = "";
				if($arMRUser['0']['first_name'] <> '')
				{
					$first_name = $arMRUser['0']['first_name'];
				}
				if($arMRUser['0']['last_name'] <> '')
				{
					$last_name = $arMRUser['0']['last_name'];
				}
				if($arMRUser['0']['email'] <> '')
				{
					$email = $arMRUser['0']['email'];
				}
				if(isset($arMRUser['0']['sex']) && $arMRUser['0']['sex'] != '')
				{
					if ($arMRUser['0']['sex'] == '0')
						$gender = 'M';
					elseif ($arMRUser['0']['sex'] == '1')
						$gender = 'F';
				}

				$arFields = array(
					'EXTERNAL_AUTH_ID' => self::ID,
					'XML_ID' => $arMRUser['0']['uid'],
					'LOGIN' => "MM_".$email,
					'NAME'=> $first_name,
					'EMAIL'=> $email,
					'LAST_NAME'=> $last_name,
					'PERSONAL_GENDER' => $gender,
				);

				if(isset($arMRUser['0']['birthday']))
					if ($date = MakeTimeStamp($arMRUser['0']['birthday'], "DD.MM.YYYY"))
						$arFields["PERSONAL_BIRTHDAY"] = ConvertTimeStamp($date);
				if(isset($arMRUser['0']['pic_190']) && self::CheckPhotoURI($arMRUser['0']['pic_190']))
					if ($arPic = CFile::MakeFileArray($arMRUser['0']['pic_190'].'?name=/'.md5($arMRUser['0']['pic_190']).'.jpg'))
						$arFields["PERSONAL_PHOTO"] = $arPic;
				$arFields["PERSONAL_WWW"] = $arMRUser['0']['link'];
				if(SITE_ID <> '')
					$arFields["SITE_ID"] = SITE_ID;
				$bSuccess = $this->AuthorizeUser($arFields);
			}
		}
	}

	if(!$bProcessState)
	{
		unset($_REQUEST["state"]);
	}

	$url = ($GLOBALS["APPLICATION"]->GetCurDir() == "/login/") ? "" : $GLOBALS["APPLICATION"]->GetCurDir();
	if(isset($_REQUEST["state"]))
	{
		$arState = array();
		parse_str($_REQUEST["state"], $arState);

		if(isset($arState['backurl']))
			$url = parse_url($arState['backurl'], PHP_URL_PATH);
	}

	$aRemove = array("logout", "auth_service_error", "auth_service_id", "code", "error_reason", "error", "error_description", "check_key");
	if($bSuccess !== true)
		$url = $GLOBALS['APPLICATION']->GetCurPageParam(('auth_service_id='.self::ID.'&auth_service_error='.$bSuccess), $aRemove);

	echo '

';
	CMain::FinalActions();
}