1 回答
TA贡献1934条经验 获得超2个赞
Web 连接器是基于 SOAP 的,因此您实际上在这里所做的是设置 Web 连接器连接到的 SOAP 服务器。
这里需要意识到的重要一点是,Web 连接器每次连接时都会对 SOAP 服务进行多次调用(例如,对您的 PHP 脚本进行许多独立的 HTTP 请求)。至少,即使没有要交换的实际数据,它也至少会进行 4 次调用:
客户端版本
服务器版本
认证
关闭连接
这意味着每次 Web 连接器连接到您的服务以尝试与 QuickBooks 交换数据时,您在 PHP 脚本中放置的任何内容都至少运行 4 次。所以每次 Web 连接器连接时,这段代码至少运行 4 次:
$Queue = new QuickBooks_WebConnector_Queue($dsn);
$Queue->enqueue(QUICKBOOKS_ADD_CUSTOMER, $primary_key_of_your_customer);
你不应该在这个文件中有这段代码。它应该在其他地方。从这个文件中删除它,你的问题就会消失。
相反,请修改您的 Web 应用程序,以便在您的 Web 应用程序中创建新客户时,同时将 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 的队列中。然后,当 Web 连接器连接时,它可以从您已经构建的队列中提取并处理它。
如果您查看示例,则有一个示例可以说明这一点:
https://github.com/consolibyte/quickbooks-php/tree/master/docs/web_connector/example_app_web_connector
具体来说,这个例子:
https://github.com/consolibyte/quickbooks-php/blob/master/docs/web_connector/example_app_web_connector/handler.php
看起来像这样:
// 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!');
}
如果您查看文档,他们实际上明确警告您不要做到目前为止所做的事情:
https://github.com/consolibyte/quickbooks-php/blob/master/docs/web_connector/example_web_connector.php#L284
文件:
// 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.
- 1 回答
- 0 关注
- 85 浏览
添加回答
举报