Php 使用Keith Palmer&x27转换应用程序;s QBWC框架到QuickBooks Online
我们在web应用程序中使用QuickBooks web连接器与QuickBooks桌面版通信。我们在代码中使用Php 使用Keith Palmer&x27转换应用程序;s QBWC框架到QuickBooks Online,php,quickbooks,quickbooks-online,Php,Quickbooks,Quickbooks Online,我们在web应用程序中使用QuickBooks web连接器与QuickBooks桌面版通信。我们在代码中使用QuickBooks\u服务器和QuickBooks\u队列,如下所示: $this->myQBQueue = new QuickBooks_Queue($this->myDSN); $mappedFunctions = array( QUICKBOOKS_ADD_CUSTOMER, QUICKBOOKS_ADD_SALESORDER, QUICKB
QuickBooks\u服务器
和QuickBooks\u队列
,如下所示:
$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 online的支持。我们是否仍然可以使用Keith Palmer的QuickBooks online框架使用QuickBooks\u服务器
和QuickBooks\u队列
,或者我们是否必须为QuickBooks online部分编写新代码?您可以重复使用队列内容,但该框架本身并不支持它-您当然可以轻松地将其破解
您还肯定能够重用大部分(但不是全部)qbXML
QuickBooks Online确实支持qbXML接口(尽管它不是非常好——Intuit已经公开声明,他们可能会在未来一年左右内反对它,并且他们不再向它添加功能)。您应该知道,在不久的将来,您很可能会开始考虑转向Intuit Anywhere/IDS-尤其是如果您是一个拥有大量QuickBooks在线客户的SaaS应用程序
您可以在此处找到QuickBooks在线版的qbXML文档:
(确保勾选“OE”复选框并取消勾选“US”复选框)
使用QuickBooks Online,有几件事会让很多人心痛不已:
- 添加付款时,必须将其应用于发票。QBO中没有自动应用
- QBO的qbXML API中不支持更新发票
- QBO的qbXML API中不支持库存项目
qbxml($qbxml);
$idents=_提取标识符($xml);//您可以在QuickBooks/Handlers.php中找到此函数,并将其作为函数而不是方法拉入应用程序
$response_function($requestID、$user、$action、$ID、$extra、$err、$last_action_time、$last_actionident_time、$xml、$idents);
}
您是在构建SaaS应用程序(例如,允许您的客户将其QuickBooks文件连接到您的应用程序,并定期为您的服务向他们收费)还是仅为您的公司进行内部/一次性/定制集成?@KeithPalmer这是一个SaaS应用程序,但不收取月费,只收取安装费。这是我们电子商务系统的一个附加组件。我看到你的其他答案表明IPP比qbXML好,但由于我们已经构建了一个完整的qbXML/WebConnector应用程序,而且IPP需要按月付费,我认为切换到IPP会更困难。。。
<?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);
}