我有一个2.3 Magento的商店,我想同步一些数据QuickBooks的在线。我创建了一个QBO应用程序,但这种使用OAuth是我第一次和我在如何存储和使用的接入/刷新令牌有点糊涂了。
根据商务部的Quickbooks我需要存储最新的刷新令牌:
每一个访问令牌只能是有效的创建后一个小时。如果你试图让具有相同的访问令牌小时后的API调用,请求将被QBO被阻止。这就是刷新令牌用于。它是用来请求新的访问令牌后访问令牌过期,所以你仍然可以一个小时后访问该公司QBO。只要记住,只要您拨打一个refreshToken API调用,一直存储在您的会话或数据库中的最新刷新令牌值。在QuickBooks的在线的OAuth 2协议,它不是访问令牌,你应该存储,它是刷新令牌,你需要存储。
所以我的问题是,我该如何妥善存放和我所刷新令牌调用生成一个新的访问令牌我的每一个API进行调用来同步数据的时间。
目前,我直接被硬编码他们到我的帮助文件中使用我的OAuth凭证:
<?php
namespace Company\Module\Helper;
use QuickBooksOnline\API\DataService\DataService;
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
public function getConfigurationSetting()
{
$dataService = DataService::Configure(array(
'auth_mode' => 'oauth2',
'ClientID' => '<<my ClientID',
'ClientSecret' => '<<my ClientSecret>>',
'accessTokenKey' => 'xxxxxx',
'refreshTokenKey' => 'xxxxxx',
'QBORealmID' => "123xxxxxxx",
'baseUrl' => 'Development'
));
$OAuth2LoginHelper = $dataService->getOAuth2LoginHelper();
$refreshedAccessTokenObj = $OAuth2LoginHelper->refreshToken();
$error = $OAuth2LoginHelper->getLastError();
if ($error){
$dataService->throwExceptionOnError(true);
} else {
$dataService->updateOAuth2Token($refreshedAccessTokenObj);
}
return $dataService;
}
}
然后我打电话,从我的控制器:
<?php
namespace Company\Module\Observer;
use Magento\Framework\Event\ObserverInterface;
use QuickBooksOnline\API\DataService\DataService;
class CreateQbInvoice implements ObserverInterface
{
protected $helperData;
public function __construct(
\Company\Module\Helper\Data $helperData
){
$this->helperData = $helperData;
}
public function execute()
{
// Prep Data Services
$dataService = $this->helperData->getConfigurationSetting();
...
现在这个工作,直到我的访问令牌过期,我需要生成一个新的,我只是不知道如何更新我的访问令牌和存储新的刷新令牌妥善保留访问我的应用程序总是刷新。
因为你没有和机制刷新令牌。我猜你需要一个永久的访问令牌。
https://www.oauth.com/oauth2-servers/access-tokens/access-token-lifetime/
一旦你获得访问令牌。用它来获得令牌和刷新令牌。你会得到令牌,令牌刷新,令牌到期,到期的刷新令牌保存在数据库中的所有数据和当前时间。
为的QuickBook令牌几个小时后就会过期,但刷新令牌不会过期长达1年。所以对于每一个请求,你首先会检查令牌到期获得与刷新令牌新的令牌。刷新令牌将返回令牌和新的刷新令牌替换意志上一个