oauth 2.0 — ошибка в параметрах заказов на покупку Quickbooks PHP SDK

Я пытаюсь создать заказы на покупку, используя Quickbooks PHP SDK, и получаю неверную / отсутствующую ошибку параметра или, возможно, неправильный идентификатор.

Мои параметры основаны на QuickBooks API Explorer. В демонстрационной версии «Создание» заказа на поставку есть возможность создать файл по умолчанию в формате json / xml. Я думал, что это даст мне минимально необходимые параметры.

Поэтому в своем коде я создал массив заказов на покупку с этими параметрами и составил значения. Но не могу понять, что не так или отсутствует.

Несколько примеров заказов на покупку PHP QuickBooks SDK, которые я видел, используют Oauth 1.0, поэтому играть с ними не стоило моего времени, так как мое приложение использует Oauth 2.0

ОШИБКА

Код состояния: 400. Вспомогательное сообщение: Неверный сильный запрос / неверный текст запроса (получил 400, ожидаемый HTTP / 1.1 20X или перенаправление). Ответное сообщение: Неверный ссылочный IdInvalid Идентификатор ссылки: что-то, что вы пытаетесь использовать был сделан неактивным. Проверьте поля с учетными записями, клиентами, товарами, продавцами или сотрудниками.

ОБРАЗЕЦ JSON из QUICKBOOKS API Explorer (данные из изолированной программной среды приложения)

{
"Line": [{
"Id": "1",
"Amount": 25.0,
"DetailType": "ItemBasedExpenseLineDetail",
"ItemBasedExpenseLineDetail": {
"CustomerRef": {
"value": "3",
"name": "Cool Cars"},
"BillableStatus": "NotBillable",
"ItemRef": {
"value": "38",
"name": "Garden Supplies"},
"UnitPrice": 25,
"Qty": 1,
"TaxCodeRef": {
"value": "NON"}
}
}],
"VendorRef": {
"value": "41",
"name": "Hicks Hardware"},
"APAccountRef": {
"value": "33",
"name": "Accounts Payable (A/P)"},
"TotalAmt": 25.0
}

Quickbooks.php (только важные части)

$purchaseOrder = PurchaseOrder::create([
"Line" =>[
[
"Id" =>"0",
"Amount" => 25.0,
"DetailType" => "ItemBasedExpenseLineDetail",
"ItemBasedExpenseLineDetail"=>
[
"CustomerRef"=>
[
"value"=>"3",
"name"=>"Cool Cars"],
"BillableStatus"=> "NotBillable",
"ItemRef"=>
[
"value"=> "38",
"name"=> "Garden Supplies"],
"UnitPrice"=> "25",
"Qty"=>"1",
"TaxCodeRef"=>
[
"value"=> "NON",
]

]
]
],
"VendorRef"=>
[
"value"=>"41",
"name"=>"Hicks Hardware"
],
"APAccountRef"=>
[
"value"=>"33",
"name"=>"Accounts Payable (A/P)"
],
"TotalAmt"=> 25.0
]);$resultingpurchaseOrder = $dataService->Add($purchaseOrder);
$error = $dataService->getLastError();
if ($error != null) {
echo "The Status code is: " . $error->getHttpStatusCode() . "\n";
echo "The Helper message is: " . $error->getOAuthHelperError() . "\n";
echo "The Response message is: " . $error->getResponseBody() . "\n";
} else {
var_dump($resultingpurchaseOrder);
}

0

Решение

Потребовалось некоторое время, чтобы понять, но вот что я сделал, чтобы создать успешный образец Заказа на поставку в моей песочнице.

Совет, чтобы найти хороший образец Json / XML для базовых параметров PO от

  • Перейдите в API приложения APP и выберите «Заказы на покупку». https://developer.intuit.com/v2/apiexplorer?apiname=V3QBO#?id=PurchaseOrder
  • Найти «Запрос» Проводник внизу страницы.
  • введите select * from PurchaseOrder в поле запроса.
  • большая часть возвращенного XML / JSON может быть использована для ваших параметров PO
  • Я удалил несколько вещей, включая идентификатор (который, я считаю, автоматически генерируется QB)
  • Посмотрите мой окончательный пример кода ниже в качестве ссылки, для которой параметры были или не были необходимы.

Это просто пример для тестирования создания ПО, который работал для меня, опубликованный на случай, если он поможет кому-то еще.

Образец создания заказа на поставку

 $dataService = DataService::Configure(array(
'auth_mode' => 'oauth2',
'ClientID' => "",
'ClientSecret' => "",
'accessTokenKey' => "",
'refreshTokenKey' => '',
'QBORealmID' => "",
'baseUrl' => "https://sandbox-quickbooks.api.intuit.com"));

$OAuth2LoginHelper = $dataService->getOAuth2LoginHelper();
$accessToken = $OAuth2LoginHelper->refreshToken();
$error = $OAuth2LoginHelper->getLastError();
if ($error != null) {
echo "The Status code is: " . $error->getHttpStatusCode() . "\n";
echo "The Helper message is: " . $error->getOAuthHelperError() . "\n";
echo "The Response message is: " . $error->getResponseBody() . "\n";
return;
}
$dataService->updateOAuth2Token($accessToken);

$dataService->setLogLocation("/home/lindsay/Desktop/log");
$purchaseOrder = PurchaseOrder::create([
"ShipAddr" => [
"Id"=> "96",
"Line1"=> "Sandbox Company_US_1",
"Line2"=> "123 Sierra Way",
"Line3"=> "San Pablo, CA  87999"],
"Line" =>[
[
"Id" =>"1",
"Description" => "This is the purchasing description.",
"Amount" => 5.0,
"DetailType" => "ItemBasedExpenseLineDetail",
"ItemBasedExpenseLineDetail"=>
[
"CustomerRef"=>
[
"value"=>"4",
"name"=>"Diego Rodriguez"],
"BillableStatus"=> "NotBillable",
"ItemRef"=>
[
"value"=> "19",
"name"=> "T-Shirt"],
"UnitPrice"=> "5",
"Qty"=>"1",
"TaxCodeRef"=>
[
"value"=> "NON",
]

]
]
],
"VendorRef"=>
[
"value"=>"56",
"name"=>"Bob's Burger Joint"
],
"APAccountRef"=>
[
"value"=>"33",
"name"=>"Accounts Payable (A/P)"
],
"TotalAmt"=> 5.0,
"Memo" => "vendor message test!"
]);$resultingpurchaseOrder = $dataService->Add($purchaseOrder);
$error = $dataService->getLastError();
if ($error != null) {
echo "The Status code is: " . $error->getHttpStatusCode() . "\n";
echo "The Helper message is: " . $error->getOAuthHelperError() . "\n";
echo "The Response message is: " . $error->getResponseBody() . "\n";
} else {
var_dump($resultingpurchaseOrder);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]