QuickBooks-V3- PHP -SDK доставляет мне трудности.
Я пытаюсь использовать его для синхронизации c данных счета. Я могу успешно пройти авторизацию с помощью OAuth 2.0 и подключить свое клиентское веб-приложение PHP к QuickBooks Online. Однако, хотя я могу успешно сделать вызов getCompanyInfo и получить результаты, я не могу сделать вызов getUserInfo (или большинство других вызовов API в этом отношении), так как он будет жаловаться на то, что «объект токена доступа» не установлен пока что.
При подключении к QuickBooks и получении авторизации все работает нормально - объект токена доступа успешно помещен в сеанс PHP. Но по какой-то причине он жалуется, когда я пытаюсь получить данные UserInfo или использую любые другие вызовы API.
Вот ошибка, которую я получаю:
Fatal error: Uncaught QuickBooksOnline\API\Exception\SdkException: [0]: Can't get OAuth 2 Access Token Object. It is not set yet.
thrown in /compiled/src/Core/OAuth/OAuth2/OAuth2LoginHelper.php on line 129
Вот как я попробуйте получить UserInfo:
$dataService->updateOAuth2Token($accessToken);
$OAuth2LoginHelper = $dataService->getOAuth2LoginHelper();
$result = $OAuth2LoginHelper->getUserInfo();
Опять же, получение CompanyInfo работает без проблем.
Кто-нибудь знает, что происходит?
Ниже я включая код из apiCall. php (из примера пакета HelloWorld, дополнительно отредактированный мной). Этот файл используется для отправки запросов через Ajax после того, как я уже подключился и получил разрешение от QuickBooks Online.
<?php
require_once(__DIR__ . '/vendor/autoload.php');
use QuickBooksOnline\API\Core\ServiceContext;
use QuickBooksOnline\API\DataService\DataService;
use QuickBooksOnline\API\Core\Http\Serialization\XmlObjectSerializer;
use QuickBooksOnline\API\Facades\Invoice;
session_start();
function makeAPICall()
{
// Create SDK instance
$config = include('config.php');
$dataService = DataService::Configure(array(
'auth_mode' => 'oauth2',
'ClientID' => $config['client_id'],
'ClientSecret' => $config['client_secret'],
'RedirectURI' => $config['oauth_redirect_uri'],
'scope' => $config['oauth_scope'],
'baseUrl' => "development"
));
/*
* Retrieve the accessToken value from session variable
*/
$accessToken = $_SESSION['sessionAccessToken'];
$dataService->throwExceptionOnError(true);
/*
* Update the OAuth2Token of the dataService object
*/
$dataService->updateOAuth2Token($accessToken);
//Get the requested data:
$action = filter_input(INPUT_GET, "action", FILTER_SANITIZE_SPECIAL_CHARS);
$method = "get$action";
switch($action){
case "CompanyInfo":
$result = $dataService->$method();
break;
case "UserInfo":
$OAuth2LoginHelper = $dataService->getOAuth2LoginHelper();
$result = $OAuth2LoginHelper->getUserInfo();
break;
case "InvoiceExample":
$allInvoices = $dataService->Query("SELECT * FROM Invoice");
$result = $allInvoices;
break;
}
var_dump($result);
return $result;
}
$result = makeAPICall();
?>
Кто-нибудь знает, что я делаю неправильно?