Настройване на плащане за 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 стойност, докато след не бъдат създадени. Това е точно като всяка нормална автоматично нарастваща стойност на 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