- Модуль: socialservices
- Путь к файлу: ~/bitrix/modules/socialservices/classes/general/apple.php
- Класс: CAppleInterface
- Вызов: CAppleInterface::GetAccessToken
public function GetAccessToken($redirect_uri = ''): bool
{
$token = $this->getStorageTokens();
if (is_array($token))
{
$this->access_token = $token['OATOKEN'];
$this->accessTokenExpires = $token['OATOKEN_EXPIRES'];
if (!$this->code)
{
if ($this->checkAccessToken())
{
return true;
}
if (isset($token['REFRESH_TOKEN']) && $this->getNewAccessToken($token['REFRESH_TOKEN'], $this->userId, true))
{
return true;
}
}
$this->deleteStorageTokens();
}
if ($this->code === false)
{
return false;
}
//case for sign in from Bitrix24 application on iOS device
$request = BitrixMainContext::getCurrent()->getRequest();
$requestData = $request->toArray();
if (
$requestData['service'] === self::SERVICE_ID
&& (
$requestData['platform'] === 'ios'
|| (empty($requestData['platform']) && mb_strpos($request->getUserAgent(), 'Darwin') !== false)
)
)
{
$this->appID = self::BITRIX_APP_BUNDLE_ID;
}
$query = [
'code' => $this->code,
'grant_type' => 'authorization_code',
'client_secret' => $this->getClientSecret(),
'client_id' => $this->appID,
'redirect_uri' => $redirect_uri,
];
$httpClient = new HttpClient([
'socketTimeout' => $this->httpTimeout,
'streamTimeout' => $this->httpTimeout,
]);
$result = $httpClient->post(self::TOKEN_URL, $query);
try
{
$result = BitrixMainWebJson::decode($result);
}
catch (BitrixMainArgumentException $e)
{
$result = [];
}
if ((isset($result['access_token']) && $result['access_token'] <> ''))
{
$this->access_token = $result['access_token'];
$this->accessTokenExpires = time() + $result['expires_in'];
$this->refresh_token = $result['refresh_token'];
$this->idToken = $result['id_token'];
$_SESSION["OAUTH_DATA"] = [
"OATOKEN" => $this->access_token,
"OATOKEN_EXPIRES" => $this->accessTokenExpires,
"REFRESH_TOKEN" => $this->refresh_token,
"ID_TOKEN" => $this->idToken
];
return true;
}
return false;
}