0

我需要将 vTiger CRM 与 Quickbooks 2010 集成。所以它是 PHP。QB 服务器和运行 vTiger 的 Linux 机器位于同一个办公室。我试图弄清楚是否有一种方法可以让 PHP 在不使用 Web 连接器的情况下直接与 QB 服务器对话。我们需要实时数据访问。不像真正的“实时”,但需要在 5-30 秒内生成报告。只读取数据,不写入。有什么方法可以直接向 QB 服务器发送/接收 qbXML?提前致谢。迈克尔

4

1 回答 1

1

这可以做到……但请注意,QuickBooks 并不总是最可靠的软件,可用于集成以进行实时数据访问 - 与 QuickBooks 的连接往往既缓慢又脆弱,这就是为什么您通常会看到使用 Web 连接器的排队模型。

您可以做的是编写一个自定义 C# 组件(查看 SDK 中包含的示例,特别是这个:C:\Program Files (x86)\Intuit\IDN\QBSDK12.0\samples\qbdt\c-sharp\qbXML \CustomerAdd) 打开与 QuickBooks 的连接,然后执行任何操作。

“随便”可能是这样的:

  • 对 QuickBooks 运行查询,然后将数据 HTTP POST 回 vTiger

或者

  • 打开一个套接字并监听传入的请求,在这种情况下,PHP 可以连接到该套接字并提供可以中继到 QuickBooks 的组件请求,然后返回响应

请注意,每 5 秒在 QuickBooks 中生成一份报告可能会大大降低 QuickBooks 的速度。根据您正在谈论的数据量和过滤器,甚至可能无法让 QuickBooks 快速生成报告。

同样,请注意某些事情会导致与 QuickBooks 的连接失败,因此您必须优雅地处理这些问题。具体来说:

  • QuickBooks 自动更新将锁定集成应用程序
  • 如果您有太多用户同时登录,您将被锁定
  • 如果其他人进入单用户模式,您将被锁定

等等

也许如果您能提供更多关于为什么需要如此频繁地访问报告的详细信息,我们可以提供一些额外的信息。

您的代码将如下所示:

        while (true)
        {
            string input = "your fancy qbXML request goes here";

            RequestProcessor2 rp = null; 
            string ticket = null;
            string response = null;
            try 
            {
                rp = new RequestProcessor2 ();
                rp.OpenConnection("", "Your App Name");
                ticket = rp.BeginSession("", QBFileMode.qbFileOpenDoNotCare );
                response = rp.ProcessRequest(ticket, input);
            }
            catch( System.Runtime.InteropServices.COMException ex )
            {
                MessageBox.Show( "COM Error Description = " +  ex.Message, "COM error" );
                return;
            }
            finally
            {
                if( ticket != null )
                {
                    rp.EndSession(ticket);
                }
                if( rp != null )
                {
                    rp.CloseConnection();
                }
            };

            // Do something with the response here
             ... 
        }
于 2013-01-30T00:37:46.343 回答