所以我使用精确在线 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 在其示例中提供的两个文件的链接: