Я новичок в quickbook, и мой клиент хочет синхронизировать его заказы Magento с QuickBooks. Он использует настольную версию QuickBooks Enterprises для синхронизации заказов. Мы используем веб-коннектор PHP devkit и пример примера, приведенный в документе, чтобы добавить клиента.
Впервые пример добавления клиента работал нормально, но после этого, когда я попытался добавить другого клиента, я получил сообщение «Требуется обмен данными» в быстром веб-коннекторе и пользователь не был добавлен в quickbook.
Пожалуйста, помогите мне решить эту проблему и посоветуйте мне, как добавить заказ Magento в quickbook и клиентов. Ниже приведен код, который я использовал:
<?php error_reporting(E_ALL | E_STRICT); ini_set('display_errors', true); if (function_exists('date_default_timezone_set')){ date_default_timezone_set('America/New_York'); } require_once '../QuickBooks.php'; $user = 'quickbooks'; $pass = 'password'; $map = array( QUICKBOOKS_ADD_CUSTOMER => array( '_quickbooks_customer_add_request', '_quickbooks_customer_add_response' ), QUICKBOOKS_ADD_INVOICE => array( '_quickbooks_invoice_add_request', '_quickbooks_invoice_add_response' ) ); $errmap = array(); $hooks = array(); $log_level = QUICKBOOKS_LOG_DEVELOP; $dsn = 'mysql://root:root@localhost/quickbooks_server'; if (!QuickBooks_Utilities::initialized($dsn)) { QuickBooks_Utilities::initialize($dsn); QuickBooks_Utilities::createUser($dsn, $user, $pass); $primary_key_of_your_customer = 5; $Queue = new QuickBooks_WebConnector_Queue($dsn); $Queue->enqueue(QUICKBOOKS_ADD_CUSTOMER, $primary_key_of_your_customer); $Queue->enqueue(QUICKBOOKS_ADD_INVOICE, $primary_key_of_your_customer); } $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); function _quickbooks_customer_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="2.0"?> <QBXML> <QBXMLMsgsRq onError="stopOnError"> <CustomerAddRq requestID="' . $requestID . '"> <CustomerAdd> <Name>Muralidhar, LLC (' . mt_rand() . ')</Name> <CompanyName>Muralidhar, LLC</CompanyName> <FirstName>Muralidhar</FirstName> <LastName>Jampa</LastName> <BillAddress> <Addr1>Muralidhar, LLC</Addr1> <Addr2>134 Stonemill Road</Addr2> <City>NewYork</City> <State>NY</State> <PostalCode>06268</PostalCode> <Country>United States</Country> </BillAddress> <Phone>860-634-1602</Phone> <AltPhone>860-429-0021</AltPhone> <Fax>860-429-5183</Fax> <Email>murarimaniram@gmail.com</Email> <Contact>Muralidhar Jampa</Contact> </CustomerAdd> </CustomerAddRq> </QBXMLMsgsRq> </QBXML>'; return $xml; } function _quickbooks_customer_add_response($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents) { return; } 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="2.0"?> <QBXML> <QBXMLMsgsRq onError="stopOnError"> <InvoiceAddRq requestID="' . $requestID . '"> <InvoiceAdd> <CustomerRef> <FullName>Muralidhar Jampa</FullName> </CustomerRef> <TxnDate>2014-04-14</TxnDate> <RefNumber>9869</RefNumber> <BillAddress> <Addr1>56 Cowles Road</Addr1> <City>Willington</City> <State>CT</State> <PostalCode>06279</PostalCode> <Country>United States</Country> </BillAddress> <PONumber></PONumber> <Memo></Memo> <InvoiceLineAdd> <ItemRef> <FullName>Test Item</FullName> </ItemRef> <Desc>Item 1 Description Goes Here</Desc> <Quantity>1</Quantity> <Rate>295</Rate> </InvoiceLineAdd> <InvoiceLineAdd> <ItemRef> <FullName>Test Item</FullName> </ItemRef> <Desc>Item 2 Description Goes Here</Desc> <Quantity>3</Quantity> <Rate>25</Rate> </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) { return; } ?>
Если вы прочтете комментарии в файле примера, вы найдете этот комментарий:
// IMPORTANT NOTE: This particular example of queueing something up will // only ever happen *once* when these scripts are first run/used. After // this initial test, you MUST do your queueing in another script. DO NOT // DO YOUR OWN QUEUEING IN THIS FILE! See // docs/example_web_connector_queueing.php for more details and examples // of queueing things up.
И ссылка на эту страницу:
Что говорит:
Нет данных для обмена. Ничего не поделаешь. Веб-коннектор и эта структура работают с использованием концепции «очередь». Как только очередь пуста, вам больше нечего делать, и вы получите это сообщение. Если вы добавите что-то в очередь, то он обработает эти элементы, пока вам нечего делать, и вы снова получите сообщение «Нет обмена данными …».
Например, скажем, вы хотите создать процесс, при котором каждый раз, когда клиент создается в вашем магазине, клиент создается в QuickBooks. Затем вы хотите настроить процесс, когда клиент будет создан в вашем магазине, вы ставите в очередь запрос на добавление клиента в QuickBooks.
Вы выполняете свою очередь, используя класс QuickBooks_Queue и метод → enqueue ().
По сути, проблема в том, что вы не сказали ей ничего делать . Пример добавляет только одного клиента в QuickBooks.
Если вы хотите добавить больше клиентов, вам нужно поставить что-то в очередь, чтобы он попытался это сделать.
Когда вы ставите что-то в очередь, обратите внимание, что вы должны сделать это где-то еще . НЕ ЗНАЙТЕ ВОПРОСЫ В ЭТОМ ФАЙЛЕ (как и комментарии выше).
Поэтому в другом месте вашего приложения у вас, вероятно, есть такой код, как при добавлении нового клиента в базу данных приложений:
// end-user submitted a form, let's save the customer to our database if ($_POST['customer_name']) { mysql_query("INSERT INTO my_customer_table ( ... ) VALUES ( ... )"); }
Вы должны изменить свой код приложения, чтобы потом выглядеть примерно так:
// end-user submitted a form, let's save the customer to our database if ($_POST['customer_name']) { mysql_query("INSERT INTO my_customer_table ( ... ) VALUES ( ... )"); // ... and queue them up to be added to QB $primary_key_of_your_customer = mysql_insert_id(); $Queue = new QuickBooks_WebConnector_Queue($dsn); $Queue->enqueue(QUICKBOOKS_ADD_CUSTOMER, $primary_key_of_your_customer); }
Обратите внимание, что все в этом блоке:
if (!QuickBooks_Utilities::initialized($dsn)) {
Выполняется только один раз. Так что ничего не делайте в этом блоке – он больше никогда не запустится.