Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Keith Palmer&x27转换应用程序;s QBWC框架到QuickBooks Online_Php_Quickbooks_Quickbooks Online - Fatal编程技术网

Php 使用Keith Palmer&x27转换应用程序;s QBWC框架到QuickBooks Online

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

我们在web应用程序中使用QuickBooks web连接器与QuickBooks桌面版通信。我们在代码中使用
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中不支持库存项目
如果查看QuickBooks php DevKit库代码中包含的docs/example_online_edition.php(或docs/example_raw_online_edition.php)文件,您将看到它是如何工作的。基本上,您只需通过HTTPS直接向Intuit的服务器发送qbXML请求,而不是将其包装在SOAP中,等待Web连接器接收

话虽如此,如果你真的想继续使用队列,你可以像平常一样排队,只需设置一个在cron作业上运行的脚本:

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

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);
}