1

所以我使用精确在线 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分钟后不被踢出是否可以以某种方式管理?

在exact-online的后端没有这样的东西,它可以改变这个值。另外,由于这是我收到的请求,我不认为我可以操纵它,对吧?


更新 1 由于良好的反馈,我想我从这个问题开始,但还没有解决方案。我将提供我目前正在使用的代码。我还请求了exact的支持,但不幸的是在那里没有得到太多帮助。

请看这段代码:

<?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

4

1 回答 1

1

您有两个 Exact Online 支持的 OAuth 流。根据您提供的信息和超时,我很确定您使用的是隐式授权流程,Exact 没有记录,但它确实有效。

您唯一的其他选择是使用基于令牌的身份验证流程,这需要一个额外的步骤,即将您的响应代码交换为访问令牌。该令牌有效期为一年,之后可以刷新以将期限延长一年。基于令牌的身份验证流程仅在您可以控制的环境中有用,例如 Web 应用程序。

基于令牌的身份验证流程不适用于两阶段身份验证,因此您无法在一年后刷新令牌。

于 2016-11-03T18:09:51.180 回答