Дата истечения срока действия в фишке обновления (oauth2, точный)
Поэтому я использую точный онлайн XML-API для получения некоторых пользовательских данных. Пока это работает нормально, но так как он использует oauth 2.0, меня перенаправляют через 600 секунд, и снова появляется приглашение для входа.
Эта функция обновляет токен доступа:
/**
* @param string $refreshToken
* @return array {access_token, expires_in, refresh_token}
*/
public function refreshAccessToken($refreshToken)
{
$params = array(
'refresh_token' => $refreshToken,
'grant_type' => self::GRANT_REFRESH_TOKEN,
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret
);
$url = sprintf(self::URL_TOKEN, $this->countryCode);
return $this->getResponse($url, $params);
}
Я отладил в нем, и expires_in установлен на 600. Я думаю, что это причина, по которой меня регистрируют после небольшой суммы. Мой вопрос: как отключить этот тайм-аут на 600 секунд?
Также я нашел эту функцию:
/**
* @param int $expiresInTime
*/
protected function setExpiresIn($expiresInTime)
{
$this->expiresIn = time() + $expiresInTime;
}
Я изменил функцию и добавил *1000, чтобы она не закончилась, но это не повлияло на результат.
Это специфическая для oauth вещь? Можно ли как-то справиться с тем, чтобы тебя не выгнали через 10 минут?
В бэкэнде точного онлайн нет такой вещи, которая могла бы изменить это значение. Кроме того, поскольку я получаю этот запрос, я не думаю, что смогу им манипулировать, верно?
Обновление 1 Из-за хорошей обратной связи, я думаю, что я начал с этой проблемы, но пока нет решения. Я предоставлю код, который я сейчас использую. Я также попросил точную поддержку, но, к сожалению, не получил слишком много помощи.
Пожалуйста, смотрите этот код:
<?php
require_once($sShopHomeDir . "modules/" . $sModulePath . "/library//exact/ExactApi.php");
$this->_exactApi = new ExactApi('de', $this->_sClientId, $this->_sClientSecret, $this->_sDivision);
$this->_exactApi->getOAuthClient()->setRedirectUri($this->_sRedirectUri.$param);
if (!isset($_GET['code']))
{
// Redirect to Auth-endpoint
$authUrl = $this->_exactApi->getOAuthClient()->getAuthenticationUrl();
header('Location: ' . $authUrl, true, 302);
die('Redirect');
}
else
{
$tokenResult = $this->_exactApi->getOAuthClient()->getAccessToken($_GET['code']);
$this->_exactApi->setRefreshToken($tokenResult['refresh_token']);
}
Из комментариев и ответов я убежден, что это путь. Я извлекаю код и сохраняю / устанавливаю токен обновления - что, на мой взгляд, правильно.
Для лучшей читабельности я приведу ссылки на два файла, которые Exact online предоставляет в своих примерах:
1 ответ
У вас есть два потока OAuth, поддерживаемых Exact Online. Исходя из предоставленной вами информации и времени ожидания, я почти уверен, что вы используете неявный поток грантов, который не задокументирован Exact, но он работает.
Единственный другой вариант, который у вас есть, - это использовать процесс аутентификации на основе токенов, который требует дополнительного шага, а именно обмена кода ответа на токен доступа. Этот токен действителен в течение года и впоследствии может быть обновлен, чтобы продлить период еще на один год. Процесс аутентификации на основе токенов полезен только в средах, которыми вы можете управлять, например, в веб-приложениях.
Этот поток аутентификации на основе токенов не работает с двухфазной аутентификацией, поэтому вы не можете обновить токен после этого одного года.