Дата истечения срока действия в фишке обновления (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 предоставляет в своих примерах:

ExactApi.php

ExactOAuth.php

1 ответ

У вас есть два потока OAuth, поддерживаемых Exact Online. Исходя из предоставленной вами информации и времени ожидания, я почти уверен, что вы используете неявный поток грантов, который не задокументирован Exact, но он работает.

Единственный другой вариант, который у вас есть, - это использовать процесс аутентификации на основе токенов, который требует дополнительного шага, а именно обмена кода ответа на токен доступа. Этот токен действителен в течение года и впоследствии может быть обновлен, чтобы продлить период еще на один год. Процесс аутентификации на основе токенов полезен только в средах, которыми вы можете управлять, например, в веб-приложениях.

Этот поток аутентификации на основе токенов не работает с двухфазной аутентификацией, поэтому вы не можете обновить токен после этого одного года.

Другие вопросы по тегам