Как добавить счет с помощью qbxml?

Я использую красивый php-фреймворк Кейта Палмера: docs / example_online_edition.php для взаимодействия с учетной записью Quickbooks Online Edition.

Я могу получить информацию о счете и ввести запись поставщика (пример поведения по умолчанию), но я не могу ввести счет.

Я загрузил валидатор sdk v12 и проверил свой xml, но в Quickbooks нет счета. Вот результат моей веб-страницы с удаленными учетными данными. У меня есть операторы печати в Gateway / OnlineEdition.php непосредственно перед завитком. без операторов печати я не могу увидеть запрос msg xml.

XXXXX PHP-код с удаленной информацией о подключении: XXXXX

<?php

    /**
     * Example of connecting to QuickBooks Online edition via qbXML
     * 
     * IMPORTANT: 
     *  IF YOU ARE BUILDING A SAAS APPLICATION (E.G. YOU ARE ALLOWING MANY OF YOUR 
     *  CUSTOMERS TO CONNECT THEIR COMPANY FILES TO YOUR WEB APPLICATION) THEN THIS 
     *  IS PROBABLY *NOT* THE FILE YOU SHOULD LOOKING AT. You should look at the 
     *  Intuit Partner Platform (and thus the corresponding docs/example_ipp_*.php 
     *  scripts) in this package.
     * 
     * 
     * 
     * @author Keith Palmer <[email protected]>
     * 
     * @package QuickBooks
     */

    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    header('Content-Type: text/plain');

    require_once dirname(__FILE__) . '/../QuickBooks.php';


    // Register in DESKTOP mode to get these. Docs: 
    //  http://www.consolibyte.com/docs/index.php/QuickBooks_Online_via_qbXML#Connecting_with_the_.27Desktop.27_model_of_communication
    $application_id = 'goodid';
    $application_login = 'goodLogin';
    $connection_ticket = 'goodTicket';

    // Create our new gateway instance 
    $Gateway = new QuickBooks_Gateway_OnlineEdition(
        $application_id,
        $application_login,
        $connection_ticket);

    // Get RefNumber 1014
    $xml =
    '<QBXMLMsgsRq onError="stopOnError">
        <InvoiceQueryRq>
            <RefNumber>1014</RefNumber>
        </InvoiceQueryRq>
    </QBXMLMsgsRq>';

    // Send the request
    $resp = $Gateway->qbxml($xml);

    print($resp);
    print("\n\n\n\n");


    $xml = '<QBXMLMsgsRq onError="stopOnError">
            <InvoiceAddRq requestID="1">
                <InvoiceAdd>
                    <CustomerRef>
                        <ListID>2</ListID>
                    </CustomerRef>
                    <InvoiceLineAdd>
                        <ItemRef>
                            <FullName>Sales</FullName>
                        </ItemRef>
                        <Desc>Item1escriptionGoesHere</Desc>
                        <Amount>29.50</Amount>
                    </InvoiceLineAdd>
                </InvoiceAdd>
            </InvoiceAddRq>
            </QBXMLMsgsRq>';


    // Send the request
    $resp = $Gateway->qbxml($xml);

    print($resp);

    print('\n\n\n\nLast print in file');

?>

XXXXX Конец php-кода XXXXX

XXXXX Начало вывода (без регистрации) XXXXX

<?xml version="1.0" ?>
<?qbxml version="6.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
    <InvoiceQueryRq>
        <RefNumber>1014</RefNumber>
    </InvoiceQueryRq>
</QBXMLMsgsRq></QBXML>

XXXXX успешный ответ:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE QBXML PUBLIC "-//INTUIT//DTD QBXML QBO 6.0//EN" "http://apps.quickbooks.com/dtds/qbxmlops60.dtd">
<QBXML>
 <QBXMLMsgsRs>
  <InvoiceQueryRs statusCode="0" statusMessage="Status OK" statusSeverity="Info">
   <InvoiceRet>
    <TxnID>19</TxnID>
    <TimeCreated>2013-09-11T21:06:33</TimeCreated>
    <TimeModified>2013-09-11T21:17:54</TimeModified>
    <EditSequence>0</EditSequence>
    <TxnNumber>19</TxnNumber>
    <CustomerRef>
     <ListID>3</ListID>
     <FullName>Willy Wonka #442:Bertha Linebacker</FullName>
    </CustomerRef>
    <ARAccountRef>
     <ListID>48</ListID>
     <FullName>Accounts Receivable (A/R)</FullName>
    </ARAccountRef>
    <TxnDate>2013-09-11</TxnDate>
    <RefNumber>1014</RefNumber>
    <BillAddress>
     <Addr1>111 Main</Addr1>
     <City>Denver</City>
     <State>CO</State>
     <PostalCode>98310</PostalCode>
    </BillAddress>
    <ShipAddress>
     <Addr1>111 Main</Addr1>
     <City>Denver</City>
     <State>CO</State>
     <PostalCode>98310</PostalCode>
    </ShipAddress>
    <DueDate>2013-09-26</DueDate>
    <Subtotal>70.00</Subtotal>
    <SalesTaxPercentage>0</SalesTaxPercentage>
    <AppliedAmount>0.00</AppliedAmount>
    <BalanceRemaining>70.00</BalanceRemaining>
    <IsPaid>false</IsPaid>
    <IsToBePrinted>true</IsToBePrinted>
    <InvoiceLineRet>
     <TxnLineID>1</TxnLineID>
     <ItemRef>
      <ListID>1</ListID>
      <FullName>Sales</FullName>
     </ItemRef>
     <Desc>tire storage (season)
RO# 57, Bertha</Desc>
     <Amount>70.00</Amount>
     <IsTaxable>false</IsTaxable>
    </InvoiceLineRet>
   </InvoiceRet>
  </InvoiceQueryRs>
 </QBXMLMsgsRs>
</QBXML>

XXXXX Запрос на добавление счета-фактуры: обратите внимание, что клиент «2» является действующим клиентом.

<?xml version="1.0" ?>
<?qbxml version="6.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
        <InvoiceAddRq requestID="1">
            <InvoiceAdd>
                <CustomerRef>
                    <ListID>2</ListID>
                </CustomerRef>
                <InvoiceLineAdd>
                    <ItemRef>
                        <FullName>Sales</FullName>
                    </ItemRef>
                    <Desc>Item1escriptionGoesHere</Desc>
                    <Amount>29.50</Amount>
                </InvoiceLineAdd>
            </InvoiceAdd>
        </InvoiceAddRq>
        </QBXMLMsgsRq></QBXML>
        </QBXMLMsgsRq></QBXML>
    [41] => 
    [42] => 1
    [64] => 
    [81] => 0
)




\n\n\n\nLast print in file

XXXXXXXXX конец вывода

Очевидно, сервер не отвечает на запрос addInvoice.

Мы будем благодарны за любую помощь в разгадывании этой загадки!

Кроме того, если я смогу ввести счет-фактуру, смогу ли я записать поля и в IPP API? Следующее сообщение об ошибке, которое я получил в какой-то момент, не очень обнадеживает:

org.xml.sax.SAXParseException: содержимое типа элемента «InvoiceAdd» должно соответствовать »(CustomerRef, ClassRef?, ARAccountRef?, TemplateRef?, TxnDate?, RefNumber?, BillAddress?, ShipAddress?, IsPending?, PONumber?, TermsRef ?, DueDate?, SalesRepRef?, FOB?, ShipDate?, ShipMethodRef?, ItemSalesTaxRef?, Memo?, CustomerMsgRef?, IsToBePrintage?, IsToBeEmailed?, IsTaxIncluded?, CustomerSalesTaxCodeRefo?, Другой?, , DiscountLineAdd?, SalesTaxLineAdd?, ShippingLineAdd?) "

Большое спасибо!


person Pete Nordquist    schedule 13.09.2013    source источник
comment
Попробуйте также указать поля TxnDate, RefNumber и Quantity и посмотрите, повезет ли вам больше. Я видел тайм-аут qbXML API, если вы иногда не включаете некоторые поля. Сообщение об ошибке, которое вы получили, говорит вам, что вы либо пропустили обязательное поле, либо вы отправили данные узла XML в неправильном порядке.   -  person Keith Palmer Jr.    schedule 16.09.2013


Ответы (1)


Попробуй это

<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="5.0"?>
<QBXML>
    <QBXMLMsgsRq onError="continueOnError">
        <InvoiceAddRq requestID="SW52b2ljZUFkZHw1NA==">
            <InvoiceAdd>
                <CustomerRef>
                    <ListID>90001-1263558758</ListID>
                    <FullName>Testy McTesterson</FullName>
                </CustomerRef>
                <TxnDate>2010-01-15</TxnDate>
                <RefNumber>21011</RefNumber>
                <BillAddress>
                    <Addr1>ConsoliBYTE, LLC</Addr1>
                    <Addr2>134 Stonemill Road</Addr2>
                    <Addr3 />
                    <City>Mansfield</City>
                    <State>CT</State>
                    <PostalCode>06268</PostalCode>
                    <Country>United States</Country>
                </BillAddress>
                <ShipAddress>
                    <Addr1>ConsoliBYTE, LLC</Addr1>
                    <Addr2>Attn: Keith Palmer</Addr2>
                    <Addr3>56 Cowles Road</Addr3>
                    <City>Willington</City>
                    <State>CT</State>
                    <PostalCode>06279</PostalCode>
                    <Country>United States</Country>
                </ShipAddress>
                <TermsRef>
                    <FullName>Net 30</FullName>
                </TermsRef>
                <SalesRepRef>
                    <FullName>KRP</FullName>
                </SalesRepRef>
                <Memo>Test memo goes here.</Memo>
                <InvoiceLineAdd>
                    <ItemRef>
                        <FullName>test</FullName>
                    </ItemRef>
                    <Desc>Test item description</Desc>
                    <Quantity>1.00000</Quantity>
                    <Rate>15.00000</Rate>
                </InvoiceLineAdd>
            </InvoiceAdd>
        </InvoiceAddRq>
    </QBXMLMsgsRq>
</QBXML>

Вы можете интегрировать свой счет-фактуру Authorize.net (http://www.fetchflow.com/blog/how-do-i-integrate-payments-with-authorize-net) на fetchflow.com, чтобы ваши клиенты могли оплачивать вам онлайн через веб-счет-фактуру.

person user3702628    schedule 03.06.2014