Настройка оплаты для QuickBooks Online с помощью PHP DevKit

Я пытаюсь настроить процесс, в котором счет-фактура добавляется в нашу учетную запись Quickbooks, и если клиент помечен как оплаченный, он затем настраивает платеж, чтобы показать этот платеж. Настройка счета-фактуры работает, как и ожидалось, за исключением того, что когда я пытаюсь получить идентификатор счета-фактуры, который будет использоваться при настройке платежа, он, похоже, не устанавливает его.

Вот код:

if(isset($companyName) && $companyName == $customerName) {
     $InvoiceService = new QuickBooks_IPP_Service_Invoice();

     $Invoice = new QuickBooks_IPP_Object_Invoice();

     $Invoice->setDocNumber(1000 + $transaction->salesHistoryId);
     $Invoice->setTxnDate($transaction->dateOrdered);

     $Line = new QuickBooks_IPP_Object_Line();
     $Line->setDescription('Annual Payment');
     $Line->setDetailType('SalesItemLineDetail');
     $Line->setAmount($transaction->contractPrice);

     $SalesItemLineDetail = new QuickBooks_IPP_Object_SalesItemLineDetail();
     $SalesItemLineDetail->setItemRef('7');
     $SalesItemLineDetail->setUnitPrice(money_format('%i',$transaction->contractPrice));
     $SalesItemLineDetail->setQty(1);

     $Line->addSalesItemLineDetail($SalesItemLineDetail);

     $Invoice->addLine($Line);

     $Invoice->setCustomerRef($customerId);
     $invoiceId = $Invoice->getId();
     echo ($invoiceId);
     $resp = $InvoiceService->add($Context, $realm, $Invoice);
 }

if($transaction->paid == '1'){

     $PaymentService = new QuickBooks_IPP_Service_Payment();
     $Payment = new QuickBooks_IPP_Object_Payment();

     $Payment->setPaymentRefNum('Invoice #'. (1000 + $transaction->salesHistoryId));
     $Payment->setTxnDate($transaction->dateOrdered);;
     $Payment->setTotalAmt($transaction->contractPrice);

     $Line = new QuickBooks_IPP_Object_Line();
     $Line->setAmount($transaction->contractPrice);

     $LinkedTxn = new QuickBooks_IPP_Object_LinkedTxn();
     $LinkedTxn->setTxnId($invoiceId);
     $LinkedTxn->setTxnType('Invoice');

     $Line->setLinkedTxn($LinkedTxn);
     $Payment->addLine($Line);
     $Payment->setCustomerRef($customerId);
     $resp = $PaymentService->add($Context, $realm, $Payment);
}

Результаты моего IPP->lastRequest():

<Payment xmlns="http://schema.intuit.com/finance/v3">
<Line xmlns="http://schema.intuit.com/finance/v3">
    <Amount>1295</Amount>
    <LinkedTxn xmlns="http://schema.intuit.com/finance/v3">
        <TxnId></TxnId>
        <TxnType>Invoice</TxnType>
    </LinkedTxn>
</Line>
<PaymentRefNum>Invoice #3310</PaymentRefNum>
<TxnDate>2015-06-14 00:00:00</TxnDate>
<TotalAmt>1295</TotalAmt>
<CustomerRef>1930</CustomerRef>
</Payment>HTTP/1.1 400 Bad Request
Date: Mon, 15 Jun 2015 17:24:45 GMT
Content-Type: application/xml
Content-Length: 270
intuit_tid: 2b6330f0-3df5-4336-911d-0ed43acafdd0
Vary: Accept-Encoding
Via: 1.1 ipp-gateway-ap06
Content-Encoding: gzip
Connection: close

Результат IPP->lastResponse():

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2015-06-15T10:24:41.206-07:00"><Fault type="ValidationFault"><Error code="2030" element="LinkedTxn.TxnId"><Message>Invalid ID</Message><Detail>Id should be a valid number. Supplied value:</Detail></Error></Fault></IntuitResponse><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

Я предполагаю, что с тех пор:

<LinkedTxn xmlns="http://schema.intuit.com/finance/v3">
    <TxnId></TxnId>
    <TxnType>Invoice</TxnType>
</LinkedTxn>

не показывает TxnId, это проблема, но я не знаю, как это исправить. Любая помощь приветствуется. Спасибо!


person jldavis76    schedule 15.06.2015    source источник


Ответы (1)


Новые счета не имеют значения Id до после их создания. Это похоже на любое обычное значение идентификатора с автоинкрементом в базе данных SQL.

Итак, если вы посмотрите на свой код здесь:

 $invoiceId = $Invoice->getId();
 echo ($invoiceId);
 $resp = $InvoiceService->add($Context, $realm, $Invoice);

Значение $invoiceId всегда будет равно null, поскольку вы еще не создали счет-фактуру. Вы создаете его двумя строками позже. Итак, у него еще нет Id. Это невозможно. Его не существует.

$InvoiceService возвращает значение счета-фактуры Id, поэтому просто измените свой код на этот:

 $invoiceId = $InvoiceService->add($Context, $realm, $Invoice);

И все будет готово.

person Keith Palmer Jr.    schedule 15.06.2015