0

Keith Palmer/Consolibyte Solutions の優れた PHP QuickBooks フレームワークをWeb アプリケーションで使用して、QuickBooks Web コネクタ経由で QuickBooks デスクトップ版と通信しています。次のように、コードでaQuickBooks_Serverと aを使用しています。QuickBooks_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 オンラインのサポートを追加するように要求している顧客がいます。QuickBooks_Serverオンラインの QuickBooks に Keith Palmer のフレームワークを引き続き使用できますかQuickBooks_Queue、それともオンラインの QuickBooks 部分用に新しいコードを作成する必要がありますか?

4

1 に答える 1

2

キューのものを再利用することはできますが、フレームワークはそれをネイティブにサポートしていません。ただし、簡単にハッキングすることはできます。

また、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) ファイルを見ると、それがどのように機能するかがわかります。基本的に、キューの代わりに、SOAP でラップして Web コネクタが取得するのを待つのではなく、HTTPS 経由で直接 qbXML 要求を Intuit のサーバーに送信するだけです。

そうは言っても、本当にキューを引き続き使用したい場合は、通常と同じようにキューに入れ、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);
}
于 2012-10-17T23:06:32.800 に答える