Веб-коннектор основан на SOAP, поэтому здесь вы фактически настраиваете сервер SOAP, к которому подключается веб-коннектор.
Важно понимать, что Web Connector делает много вызовов на службу SOAP (например, много независимых HTTP-запросов к вашему PHP сценарию) каждый раз это соединяет . По крайней мере, даже если нет фактических данных для обмена, он совершает как минимум 4 вызова:
- clientVersion
- serverVersion
- authenticate
- closeConnection
Здесь подразумевается, что все, что вы вводите в свой PHP скрипт , запускается как минимум 4 раза каждый раз, когда Web Connector подключается к вашей службе, пытаясь обмениваться данными с QuickBooks. Таким образом, каждый раз, когда подключается Web Connector, этот фрагмент кода запускается как минимум 4 раза :
$Queue = new QuickBooks_WebConnector_Queue($dsn);
$Queue->enqueue(QUICKBOOKS_ADD_CUSTOMER, $primary_key_of_your_customer);
У вас не должно быть этого фрагмента кода в этом файле , Это должно быть в другом месте. Удалите его из этого файла, и ваша проблема исчезнет go.
Вместо этого измените ваше веб-приложение , чтобы при создании нового клиента в вашем веб-приложении вы одновременно ставили в очередь запрос на QuickBooks . Итак, где-то в вашем приложении, когда вы делаете что-то вроде этого:
// Person submitted the form, so save the data they submitted into my database
$my_customer['first_name'] = $_POST['first_name'];
$my_customer['last_name'] = $_POST['last_name'];
$my_customer_id = $MyModelOrDatabase->insert('customer_table', $my_customer);
Вы должны сделать это:
// Person submitted the form, so save the data they submitted into my database
$my_customer['first_name'] = $_POST['first_name'];
$my_customer['last_name'] = $_POST['last_name'];
$my_customer_id = $MyModelOrDatabase->insert('customer_table', $my_customer);
if ($my_customer_id)
{
$Queue = new QuickBooks_WebConnector_Queue($dsn);
$Queue->enqueue(QUICKBOOKS_ADD_CUSTOMER, $my_customer_id);
}
Это ставит запись в очередь для QuickBooks. Затем, когда веб-коннектор подключается, он может выбрать это из очереди , которую вы уже создали , и обработать его.
Если вы посмотрите на примеры, есть пример, который иллюстрирует это:
В частности, это Пример:
Что выглядит примерно так:
// Handle the form post
if (isset($_POST['submitted']))
{
// Save the record
mysql_query("
INSERT INTO
my_customer_table
(
name,
fname,
lname
) VALUES (
'" . mysql_escape_string($_POST['name']) . "',
'" . mysql_escape_string($_POST['fname']) . "',
'" . mysql_escape_string($_POST['lname']) . "'
)");
// Get the primary key of the new record
$id = mysql_insert_id();
// Queue up the customer add
$Queue = new QuickBooks_WebConnector_Queue($dsn);
$Queue->enqueue(QUICKBOOKS_ADD_CUSTOMER, $id);
die('Great, queued up a customer!');
}
И если вы посмотрите на документы, они на самом деле явно предупреждают вас не делать то, что вы сделали до сих пор:
Документы:
// NOTE: You would normally *never* want to do this in this file! This is
// meant as an initial test ONLY. See example_web_connector_queueing.php for more
// details!
//
// 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.