Quickbooks PHP SDK OAuth2, Как получить и сохранить токены доступа / обновления - PullRequest
0 голосов
/ 20 января 2019

У меня есть магазин Magento 2.3, в котором я пытаюсь синхронизировать некоторые данные с Quickbooks Online.Я создал приложение QBO, но я впервые использую oauth, и я немного запутался в том, как хранить и использовать токены доступа / обновления.

Согласно документу Quickbooks мне нужно хранить последний токен обновления:

Каждый токен доступа может быть действителен только в течение часа после его создания.Если вы попытаетесь сделать вызов API через час с тем же токеном доступа, запрос будет заблокирован QBO.Вот для чего используется токен обновления.Он используется для запроса нового токена доступа после истечения срока действия токена, так что вы можете получить доступ к компании QBO через час.Просто помните, что всякий раз, когда вы выполняете вызов API refreshToken, всегда СОХРАНЯЙТЕ ПОСЛЕДНЮЮ ОБНОВЛЕННУЮ СИМВОЛ в своей сессии или базе данных.В протоколе QuickBooks Online 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();
...

Теперь это работает, пока не истечет мой токен доступа, и мне нужно сгенерировать новый, я просто не уверен, как обновить мой токен.получить доступ к токену и правильно сохранить новый токен обновления, чтобы всегда обновлять доступ к моему приложению.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

как только вы получите токен доступа.используйте это, чтобы получить токен и обновить токен.Вы получите токен, токен обновления, срок действия токена, срок действия токена обновления. Сохраните все данные в базе данных с текущим временем.

для токена QuickBook истечет через несколько часов, но токен обновления не истечет до 1 года.поэтому для каждого запроса вы сначала проверяете, истек ли токен, получите новый токен с токеном обновления.токен обновления вернет токен и новый токен обновления заменит предыдущий

0 голосов
/ 01 февраля 2019

потому что у вас нет и механизма для обновления токена.Я полагаю, вам нужен токен постоянного доступа.

https://www.oauth.com/oauth2-servers/access-tokens/access-token-lifetime/

...