【问题标题】:Converting an application using Keith Palmer's QBWC framework to QuickBooks Online将使用 Keith Palmer 的 QBWC 框架的应用程序转换为 QuickBooks Online
【发布时间】:2012-10-16 01:38:28
【问题描述】:

我们在 Web 应用程序中使用 Keith Palmer/Consolibyte Solutions' excellent PHP QuickBooks Framework 通过 QuickBooks Web 连接器与 QuickBooks 桌面版通信。我们在代码中使用了QuickBooks_ServerQuickBooks_Queue,如下所示:

$this->myQBQueue = new QuickBooks_Queue($this->myDSN);

$mappedFunctions = array(
    QUICKBOOKS_ADD_CUSTOMER,
    QUICKBOOKS_ADD_SALESORDER,
    QUICKBOOKS_ADD_SALESRECEIPT,
    QUICKBOOKS_QUERY_CUSTOMER,
);

$map = array();

foreach($mappedFunctions as $function) {
    $map[$function] = array(
        array($this,"quickbooks{$function}Request"),
        array($this,"quickbooks{$function}Response"),
    );
}

$errmap = array('*' => array($this,'quickbooksErrorHandler'));

$hooks = array(
    QUICKBOOKS_HANDLERS_HOOK_LOGINFAILURE => array(
        array($this,'quickbooksLoginFailureHook')
    ),
    QUICKBOOKS_HANDLERS_HOOK_LOGINSUCCESS => array(
        array($this,'quickbooksLoginSuccessHook')
    )
);

$soap_options = array();
$handler_options = array();
$driver_options = array();
$callback_options = array();

$this->myQBServer = new QuickBooks_Server($this->myDSN, $map, $errmap, $hooks, QUICKBOOKS_LOG_NORMAL, QUICKBOOKS_SOAPCLIENT_BUILTIN, QUICKBOOKS_WSDL, $soap_options, $handler_options, $driver_options, $callback_options);

我们现在有一位客​​户要求我们添加对在线 QuickBooks 的支持。我们仍然可以使用 Keith Palmer 的在线 QuickBooks 框架使用 QuickBooks_ServerQuickBooks_Queue,还是我们必须为 QuickBooks 在线部分编写新代码?

【问题讨论】:

  • 您是在构建 SaaS 应用程序(例如,允许您的客户将其 QuickBooks 文件连接到您的应用程序,并为您的服务定期收费)还是内部/一次性/自定义仅为您的公司集成?
  • @KeithPalmer 这是一个 SaaS 应用程序,但它没有月费——只是安装费。它是我们电子商务系统的附加组件。我看到你的其他答案表明 IPP 比 qbXML 更好,但由于我们已经构建了一个完整的 qbXML/WebConnector 应用程序并且 IPP 需要按月付费,所以我认为切换到 IPP 会更困难......

标签: php quickbooks quickbooks-online


【解决方案1】:

可以重用队列的东西,但是框架本身并不支持它——你当然可以很容易地破解它。

您也将绝对能够重用大部分(但不是全部)您的 qbXML。

QuickBooks Online 确实支持 qbXML 接口(虽然它不是非常好 - Intuit 已公开表示他们可能会在明年左右弃用它,并且不再向它添加功能)。您应该知道在不久的将来,您很有可能开始考虑转向 Intuit Anywhere/IDS - 尤其是如果您是一个拥有大量 QuickBooks Online 客户的 SaaS 应用程序。

您可以在此处找到 QuickBooks Online 的 qbXML 文档: http://developer.intuit.com/qbsdk-current/common/newosr/index.html (确保勾选“OE”复选框并取消选中“US”复选框)

使用 QuickBooks Online 让很多人感到困扰的几件事:

  • 添加付款时,您必须将它们应用到发票上。 QBO 中没有 IsAutoApply
  • QBO 的 qbXML API 中不支持更新发票
  • QBO 的 qbXML API 中不支持库存项目

如果您查看包含在您拥有的 QuickBooks PHP DevKit 库代码中的 docs/example_online_edition.php(或 docs/example_raw_online_edition.php)文件,您将了解它是如何工作的。基本上不是队列,您只是通过 HTTPS 将直接 qbXML 请求发送到 Intuit 的服务器,而不是将其包装在 SOAP 中并等待 Web 连接器接收它。

话虽如此,如果你真的想继续使用队列,你可以 - 像往常一样排队,然后设置一个类似这样的脚本,在 cron 作业上运行:

(警告 - 完全未经测试的代码,您必须测试和调试)

<?php

// Do some setup stuff here as shown in the example... 

$res = mysql_query("SELECT * FROM quickbooks_queue WHERE qb_username = 'the username' AND qb_status = 'q'");
while ($arr = mysql_fetch_array($res))
{
  $request_function = $map[$arr['qb_action']][0];
  $response_function = $map[$arr['qb_action']][1];

  $requestID = null;   // not relevant for QBO
  $user = 'the username';
  $ID = $arr['ident']; 
  $extra = null;
  if($arr['extra']) $extra = unserialize($arr['extra']);
  $err = null;
  $last_action_time = null;
  $last_actionident_time = null;
  $version = '6.0'; // QBO only supports 6.0
  $locale = 'US';   // QBO only supports US
  $qbxml = $request_function($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale);

  $xml = $API->qbxml($qbxml);

  $idents = _extractIdentifiers($xml);   // You can find this function in QuickBooks/Handlers.php and pull it into your app as a function instead of a method

  $response_function($requestID, $user, $action, $ID, $extra, $err, $last_action_time, $last_actionident_time, $xml, $idents);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多