- Модуль: socialservices
- Путь к файлу: ~/bitrix/modules/socialservices/classes/general/googleproxy.php
- Класс: CGoogleProxyOAuthInterface
- Вызов: CGoogleProxyOAuthInterface::GetAccessToken
public function GetAccessToken($redirect_uri = false)
{
$tokens = $this->getStorageTokens();
if(is_array($tokens))
{
$this->access_token = $tokens["OATOKEN"];
$this->accessTokenExpires = $tokens["OATOKEN_EXPIRES"];
if(!$this->code)
{
if ($this->checkAccessToken())
{
return true;
}
if(
isset($tokens["REFRESH_TOKEN"])
&& $this->getNewAccessToken(
$tokens["REFRESH_TOKEN"],
$this->userId,
true
)
)
{
return true;
}
}
$this->deleteStorageTokens();
}
if($this->code === false)
{
return false;
}
$http = new HttpClient([
"socketTimeout" => $this->httpTimeout
]);
$params = array_merge(
$this->getLicenseParams(),
[
"client_id" => $this->appID,
"code" => $this->code,
"redirect_uri" => $this->getRedirectUri(),
"grant_type" => "authorization_code",
]
);
try
{
$result = BitrixMainWebJson::decode($http->post(static::TOKEN_URL, $params));
if (isset($result['APP_ID'], $result['API_KEY']))
{
$params['client_id'] = $result['APP_ID'];
$this->appID = $result['APP_ID'];
CSocServGoogleOAuth::SetOption("google_proxy_appid", trim($result['APP_ID']));
CSocServGoogleOAuth::SetOption("google_proxy_api_key", trim($result['API_KEY']));
$result = BitrixMainWebJson::decode($http->post(static::TOKEN_URL, $params));
}
$this->arResult = $result;
}
catch(BitrixMainArgumentException $e)
{
$this->arResult = [];
}
if(isset($this->arResult["access_token"]) && $this->arResult["access_token"] <> '')
{
if(isset($this->arResult["refresh_token"]) && $this->arResult["refresh_token"] <> '')
{
$this->refresh_token = $this->arResult["refresh_token"];
}
$this->access_token = $this->arResult["access_token"];
$this->accessTokenExpires = $this->arResult["expires_in"] + time();
$_SESSION["OAUTH_DATA"] = [
"OATOKEN" => $this->access_token,
"OATOKEN_EXPIRES" => $this->accessTokenExpires,
"REFRESH_TOKEN" => $this->refresh_token,
];
return true;
}
return false;
}