Создайте счет-фактуру с не инвентарным товаром на рабочем столе Quick books в PHP - PullRequest
0 голосов
/ 16 января 2020

Я хочу создать счет-фактуру с предметами, не относящимися к инвентарю, со своего веб-сайта в настольное приложение Quick books Я использую следующий репозиторий github: https://github.com/consolibyte/quickbooks-php

Пожалуйста, помогите мне, как я могу создать счет-фактуру с не инвентарными товарами?

Я добавил свой пример кода чтобы создать счет с не инвентарными товарами:

<?php
$primary_key_of_your_customer = 5;
require_once '../../QuickBooks.php';
$user = 'user';
$pass = 'pass';
$map = array(QUICKBOOKS_ADD_INVOICE => array( '_quickbooks_invoice_add_request', '_quickbooks_invoice_add_response' ));
$errmap = array(3070 => '_quickbooks_error_stringtoolong');
$hooks = array();
$log_level = QUICKBOOKS_LOG_DEBUG;  
$soapserver = QUICKBOOKS_SOAPSERVER_BUILTIN;
$soap_options = array();
$handler_options = array( 'deny_concurrent_logins' => false, 
        'deny_reallyfast_logins' => false, 
    );
$driver_options = array();
$callback_options = array();
$dsn = 'mysqli://root:password@localhost/quickbooks';
$Server = new QuickBooks_WebConnector_Server($dsn, $map, $errmap, $hooks, $log_level, $soapserver, QUICKBOOKS_WSDL, $soap_options, $handler_options, $driver_options, $callback_options);
$response = $Server->handle(true, true);
$Queue = new QuickBooks_WebConnector_Queue($dsn);
$Queue->enqueue(QUICKBOOKS_ADD_INVOICE, $primary_key_of_your_customer);

function _quickbooks_invoice_add_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale)
{    
    $xml = '<?xml version="1.0" encoding="utf-8"?>
                <?qbxml version="13.0"?>
                <QBXML>
                    <QBXMLMsgsRq onError="stopOnError">
                        <InvoiceAddRq>
                            <InvoiceAdd defMacro="MACROTYPE">
                                <CustomerRef>
                                    <ListID >80000257-1578565322</ListID>
                                    <FullName >ConsoliBYTE, LLC (1001546518)</FullName>
                                </CustomerRef>
                                <RefNumber >STRTYPE</RefNumber>
                                <BillAddress>
                                    <Addr1 >Addr1</Addr1>
                                    <Addr2 >Addr2</Addr2>
                                    <City >indore</City>
                                    <State >TX</State>
                                    <PostalCode >482201</PostalCode>
                                    <Country >US</Country>
                                    <Note >Notes</Note>
                                </BillAddress>
                                <ShipAddress>
                                    <Addr1 >old palasia</Addr1>
                                    <Addr2 >stree 123</Addr2>
                                    <City >Katni</City>
                                    <State >TX</State>
                                    <PostalCode >48002</PostalCode>
                                    <Country >US</Country>
                                    <Note >Shipping</Note>
                                </ShipAddress>
                                <IsPending >true</IsPending>
                                <PONumber >PONumber</PONumber>
                                <ShipMethodRef>
                                    <ListID ></ListID>
                                    <FullName >Fedex</FullName>
                                </ShipMethodRef>
                                <Other >Other</Other>
                                <InvoiceLineAdd>
                                    <ItemRef>
                                        <FullName >item</FullName>
                                    </ItemRef>
                                    <Desc >item Desc</Desc>
                                    <Quantity >1</Quantity>
                                    <UnitOfMeasure >UnitOfMeasure</UnitOfMeasure>
                                    <Rate >1.5</Rate>
                                    <Amount >1.5</Amount>
                                    <Other1 >Other1</Other1>
                                    <Other2 >Other2</Other2>
                                </InvoiceLineAdd>
                            </InvoiceAdd>
                        </InvoiceAddRq>
                    </QBXMLMsgsRq>
                </QBXML>';
    return $xml;
}

function _quickbooks_invoice_add_response($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents)
{

}

function _quickbooks_error_stringtoolong($requestID, $user, $action, $ID, $extra, &$err, $xml, $errnum, $errmsg)
{
}

1 Ответ

0 голосов
/ 18 января 2020

Похоже, вы на правильном пути. Давайте поговорим о конкретных c сообщениях об ошибках, которые вы получаете:

3040: Произошла ошибка при преобразовании суммы «1,5» в поле «Сумма»

суммы в долларах в QuickBooks имеют 2 знака после запятой. например, вам необходимо отправить:

<Rate>1.50</Rate>
<Amount>1.50</Amount>

3140: в счете-фактуре имеется недопустимая ссылка на метод доставки QuickBooks "Fedex". Сообщение об ошибке QuickBooks: неверный аргумент. Указанная запись не существует в списке.

QuickBooks по своей сути является реляционной базой данных. Думайте о ShipMethodRef/FullName (и / или ShipMethodRef/ListID) как об ограничении внешнего ключа.

Если вы попытаетесь вставить что-то и сослаться на внешний ключ, который не существует, вы получите ошибку. Таким образом, вам либо необходимо:

  1. Go в пользовательский интерфейс QuickBooks и создать метод доставки с именем Fedex (Это, вероятно, ваш лучший выбор, так как Ship Method s имеют тенденцию меняться не часто, и их обычно не так много. В QuickBooks выберите Lists > Customer & Vendor Profile Lists > Item List)

или

Выполните ShipMethodAdd вызов для создания метода корабля (документы: https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/shipmethodadd)

или

Вы можете полностью опустить <ShipMethodRef>, если вы вообще не хотите его устанавливать

Вы также должны решить, собираетесь ли вы отправлять ListID или FullName. Не отправляйте оба, это только делает ошибки более запутанными. Я бы порекомендовал вам отправить только FullName. Если вы хотите отправить ListID, вам нужно будет запросить QuickBooks, чтобы получить значения ListID (они не отображаются в интерфейсе QuickBooks).

3140: недопустимая ссылка на элемент «QuickBooks» в строке «Счет-фактура». Сообщение об ошибке QuickBooks: неверный аргумент. Указанная запись не существует в списке.

Эта ошибка очень похожа на ошибку ShipMethod, описанную выше. Вы ссылаетесь на элемент:

<ItemRef>
  <FullName >item</FullName>
</ItemRef>

И QuickBooks сообщает вам, что этот элемент не существует . Подобно Ship Method, вам необходимо:

  1. Создать его (или использовать существующий элемент) через интерфейс QuickBooks (в QuickBooks выберите Lists > Item List)

или

Создайте его через API (документы: https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/itemnoninventoryadd)

У вас нет опции 3. здесь, потому что это обязательное поле для счетов.

Поскольку вы только начинаете разработку QuickBooks, Я НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ вам go с опцией 1. выше .

Работайте с 2. только в случае необходимости и после того, как у вас начнутся основы интеграции (например, после того, как вы увидели, что некоторые счета-фактуры действительно были успешно созданы).

Еще одна вещь, за которой нужно следить - в QuickBooks есть понятие «подпункт». Думайте об этом так:

Shirts
 > T-Shirts
  > Red T-Shirts
  > Blue T-Shirts
  > Green T-Shirts

Каждый из них является Item, , но , потому что они находятся во вложенной иерархии (например, T-Shirts является дочерним элементом / подпункт из Shirts) FullName значения отражают эту иерархию :

Shirts              (name=Shirts, FullName=Shirts)
 > T-Shirts         (name=T-Shirts, FullName=Shirts:T-Shirts)
  > Red T-Shirts    (name=Red T-Shirts, FullName=Shirts:T-Shirts:Red T-Shirts)
  > Blue T-Shirts   (name=Red T-Shirts, FullName=Shirts:T-Shirts:Blue T-Shirts) 
  > Green T-Shirts  (name=Red T-Shirts, FullName=Shirts:T-Shirts:Green T-Shirts) 

Так что если вы видите элемент в QuickBooks ... но вы ' Вы все еще получаете ошибки о FullName, убедитесь, что вы действительно используете все FullName вместо Name.

...