所以我使用完全在线的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在线提供的两个文件的链接:
答案 0 :(得分:1)
Exact Online支持两种OAuth流程。根据您提供的信息和超时,我非常确定您使用的是隐式授权流程,Exact没有记录,但它确实有效。
您唯一的另一个选择是使用token based authentication flow,这需要额外的步骤,即交换访问令牌的响应代码。该令牌有效期为一年,之后可以刷新,以延长一年。基于令牌的身份验证流程仅在您可以控制的环境中有用,例如Web应用程序。
基于令牌的身份验证流程不适用于两阶段身份验证,因此您无法在该一年后刷新令牌。