Ошибка создания счета в Quickbooks с использованием API с PHP

Я пытаюсь создать объект счета-фактуры в учетной записи онлайн-песочницы Quickbooks. Вот документация по объекту счета https://developer.intuit.com/docs/api/accounting/Invoice, который определяет простейшую структуру объекта счета, и я использую его соответственно, но все равно получаю ошибку. Чего не хватает??

 $invoiceObj = new \IPPInvoice();
 $Line = new \IPPLine(); 
 $Line->Amount = 30; 
 $Line->Description = "Test invoice line item";
 $Line->DetailType = "SalesItemLineDetail";
 $Line->AmountSpecified = true;
 $saleItemLineDetail = new \IPPSalesItemLineDetail();
 $saleItemRefType = new \IPPNameValue(); 
 $saleItemRefType->name = "Services";
 $saleItemRefType->value = "1";
 $saleItemLineDetail->ItemRef = $saleItemRefType;
 $saleItemLineDetail->ServiceDate = '2016-06-28';
 $Line->SalesItemLineDetail = $saleItemLineDetail;
 $invoiceObj->Line = $Line;
//$invoiceObj->DocNumber = '23713';
//$invoiceObj->TxnDate = '2016-06-28';
 $invoiceObj->DueDate = date(strtotime('+5 days'));
 $invoiceObj->AutoDocNumber = true;

 $customerRefType = new \IPPNameValue();  
 $customerRefType->name = "DisplayName969745229";
 $customerRefType->value = 58;
 $invoiceObj->CustomerRef = $customerRefType;
 $resultingObj = $dataService->Add($invoiceObj);
 echo "Created Invoice Id={$resultingObj->Id}. Reconstructed response body:\n\n";
 $xmlBody = \XmlObjectSerializer::getPostXmlFromArbitraryEntity($resultingObj, $urlResource);
    echo $xmlBody . "\n";

`

Этот код выдает следующую ошибку:

IdsException: [0]: Required parameter Line.SalesItemLineDetail is missing in the request

Любая помощь будет оценена. Спасибо


person Imran Khan    schedule 30.06.2016    source источник
comment
Что выводит var_dump($saleItemLineDetail)? API может сказать, что поле отсутствует, если оно действительно отсутствует или, если значение, которое вы пытались присвоить ему, пусто.   -  person theruss    schedule 30.06.2016
comment
Спасибо за ваш ответ. Я понял. Элемент не отсутствует, а неправильно настроен. Фактический класс, который необходимо использовать для установки его свойств, был IPPReferenceType, но я использовал IPPNameValue, который не был распознан API. Спасибо   -  person Imran Khan    schedule 30.06.2016


Ответы (1)


Я сам понял, что устанавливал свойства, используя неправильный класс IPPNameValue, но он должен был быть IPPReferenceType.

Вот мой рабочий код для тех, у кого в будущем возникнет такая же проблема.

$invoiceObj = new \IPPInvoice();
$Line = new \IPPLine(); 
$Line->Amount = 30; 
$Line->Description = "Test invoice line item";
$Line->DetailType = "SalesItemLineDetail";
$Line->AmountSpecified = true;
$saleItemLineDetail = new \IPPSalesItemLineDetail();
$saleItemRefType = new \IPPReferenceType(); 
$saleItemRefType->type = "Service";
$saleItemRefType->name = "Concrete";
$saleItemRefType->value = "1";
$saleItemLineDetail->ItemRef = $saleItemRefType;
$saleItemLineDetail->ServiceDate = '2016-06-28';

$Line->SalesItemLineDetail = $saleItemLineDetail;
$invoiceObj->Line = $Line;

$invoiceObj->DueDate = date(strtotime('+5 days'));
$invoiceObj->AutoDocNumber = true;

$customerRefType = new \IPPReferenceType();  
$customerRefType->type = 'Customer';
$customerRefType->name = "DisplayName969745229";
$customerRefType->value = 58;

$invoiceObj->CustomerRef = $customerRefType;

$resultingObj = $dataService->Add($invoiceObj);
// Echo some formatted output
echo "Created Invoice Id={$resultingObj->Id}. Reconstructed response body:\n\n";
        $xmlBody = \XmlObjectSerializer::getPostXmlFromArbitraryEntity($resultingObj, $urlResource);
        echo $xmlBody . "\n";
person Imran Khan    schedule 30.06.2016