ある日、クライアントがQuickbooks(以降QB)と私たちが行っているサイトの統合を必要としていました。 これに関して私が最初に疑問に思ったのは、「
QBとは何ですか。QBを実装することさえ可能ですか? 」です。
少しグーグルで、探していたものを見つけました。
Quickbooksは、小企業(米国で使用される主要市場)向けの会計プログラムです。 これは1Cのようなものですが、通常のGUIといくつかの便利な機能があります。 QBは、ユーザーが自分のコンピューター(
Windowsのみ )にインストールし、数回クリックするだけで、会計を行う会社を展開するアプリケーションです。
さて、今、少なくとも、私は自分の敵を直接知っています。 統合に関しては、ここでのすべてはもう少し複雑です。 QBを統合できるものについては、
こちらをご覧
ください 。 そこで何が見えますか:
- .NET SDK
- Java SDK
- PHP SDK(近日公開)
- Windows Azure SDK
- QuickBooks QBXML v12 SDK(ただし、デスクトップシナリオのみ )
うーん、PHP SDK(Coming Soon)が最後の希望です...私はほとんど絶望しましたが、
それは私を救いました。 この
Webコネクタとはどのようなものですか? このオフサイトには、
QuickBooks Web Connectorプログラマーズガイドをダウンロードするための小さな
ページがあり、それだけです(少なくとも、オフサイトの情報を探すのにうんざりしています)。
Webコネクタとは何ですか?
Web Connectorは、QBとWebサーバーの間の一種の仲介者です(QBと共にインストールされます)。 タイムアウトまたはマウスクリックにより、彼はサイトの特定のURLにアクセスし、QBに問い合わせる必要があるサイトからリクエストを受け取り、それを渡します。 QBからの応答を待機し、彼が待機すると、サイトをノックしてQBから応答を送信します。
それでは始めましょう...
まず、Webコネクタにノッキングする場所を指示する必要があります。これは、
* .QWCファイルを使用して行われます。
clients.QWC<?xml version="1.0"?> <QBWCXML> <AppName>QuickBooks Integrator (clients)</AppName> <AppID></AppID> <AppURL>http://localhost/quickbooks/clients.php</AppURL> <AppDescription>Export Customers from QB to csv file</AppDescription> <AppSupport>http://localhost/</AppSupport> <UserName>admin</UserName> <OwnerID>{90A44FB7-33D6-4815-AC85-AC86A7E7123B}</OwnerID> <FileID>{57F3B9B6-86F6-4FCC-B1FF-967DE1813123}</FileID> <QBType>QBFS</QBType> <IsReadOnly>false</IsReadOnly> </QBWCXML>
- AppName-Web Connectorのリストに表示されるサービスの名前
- AppID-これが必要な理由はわかりませんが、それがないと機能しません
- AppURL-ここでは、WebコネクタがノックされるURLを示します。 ここで注意が必要です。httpはデバッグ目的でのみ使用できます、それら。 ドメインにlocalhost (test-localhost-serv、localhost-admin ...)という単語が含まれている場合、httpを使用できます。 しかし、そうでない場合は、オプションなしでhttpsを使用する必要があります。
- AppDescription-サービスの説明
- AppSupport-ヘルプへのリンクとしてWebコネクタのリストに表示されるURL(ここでhttpを指定できます)
- UserName-QBデータベースと通信するためのユーザー名(このようなユーザーはQBで作成する必要があります)
- OwnerIDとFileIDは、16進文字で構成される一意のシーケンスです(各サービスについて、1つの値を変更しただけです)
- QBTypeは、Web ConnectorのQBへの接続のタイプです( QBFSまたはQBPOSの可能な値)
- IsReadOnly-サービスがデータを変更、削除、QBに追加する場合、 trueである必要があります
5分ごとにサービスを自動的に開始する必要がある場合は、次を追加する必要があります。
<Scheduler> <RunEveryNMinutes>5</RunEveryNMinutes> </Scheduler>
AppURLの短い補足:サーバーでhttpsを構成する機能がない場合(または実際の証明書にお金がない場合)、2つの抜け穴があります。
1)
QBが存在するホストでは、サーバーのIPとドメイン名をlocalhostで指定します。サーバーのApache設定でこのドメインを読むことを忘れないでください2)
自作の証明書を入れて、信頼できるサーバーのリストに追加します。そうしないと機能しません( 例 )qwcを追加するには、次のものが必要です。
-QBを有効にして、アプリケーションが動作する会社を開きます
-オープンWebコネクタ
-Web Connector'eで[
アプリケーションの
追加 ]ボタンをクリックし、qwcファイルを指定します。
-[OK]をクリックすると、QBはこのアプリケーションへのアクセスをQBデータベースに許可するかどうかを尋ねます(この場合はユーザー「admin」を選択する必要があります)
-最後のダイアログボックスで[完了]をクリックすると、Webコネクタに戻り、ユーザー「admin」のパスワードを入力します
-アプリケーションを起動するには、チェックボックスをオンにして、[
選択を
更新 ]ボタンをクリックする必要があります


それで、Webコネクタを受信するためにサイトを準備する番です。
覚えているように、
localhost/quickbooks/clients.php
localhost/quickbooks/clients.php
作成して
localhost/quickbooks/clients.php
。 WebコネクタはSOAPプロトコルを使用します。つまり、サイトはSOAPサーバーを上げる必要があります。
clients.php <?php function _log($mess = '') { $file_name = './log/clients.log'; if(!file_exists(dirname($file_name))) mkdir(dirname($file_name), 0777); $f = fopen($file_name, "ab"); fwrite($f, "==============================================\n"); fwrite($f, "[" . date("m/d/YH:i:s") . "] ".$mess."\n"); fclose($f); } function requestId($id = '') { $file_name = './log/clients_id.log'; if(!file_exists(dirname($file_name))) mkdir(dirname($file_name), 0777);
requestId()関数は、トランザクションIDをファイルに保存するために
必要です。 さらに検討される例では、すべての顧客のリストを取得したいと考えています。これは、1000社を超える企業である可能性があります。 したがって、500の部分を受け取るので、より信頼性が高く、サーバーの負荷が少なくなります。 なぜ
'QB_LOGIN 、
QB_PASSWORDおよび
QB_TICKETが必要な
のですか? 最後の3行-これはSOAPサーバーの作成です。
qbwebconnectorsvc.wsdlこのファイルはサイトのオープンスペースで見つけましたが、どこにあったか覚えていません(しばらく前に再設計しました)。
Web Connectorが知っているのは
clientVersion 、
serverVersion 、
authenticate 、
sendRequestXML 、
receiveResponseXML 、
connectionError 、
getLastError 、
closeConnectionの 8単語のみであることを忘れてい
ました 。
qb.php <?php class Response{ } class Qb { var $response = ''; public function __construct() { $this->response = new Response(); } public function clientVersion($param = '') { $response->clientVersionResult = ""; return $response; } public function serverVersion() { $this->response->serverVersionResult = ""; return $this->response; } public function authenticate($param = '') { if(($param->strUserName == QB_LOGIN) && ($param->strPassword == QB_PASSWORD)) $this->response->authenticateResult = array(QB_TICKET, ""); else $this->response->authenticateResult = array("", "nvu"); return $this->response; } public function connectionError($param = '') { $this->response->connectionErrorResult = "connectionError"; return $this->response; } public function getLastError($param = '') { $this->response->getLastErrorResult = "getLastError"; return $this->response; } public function closeConnection($param = '') { $this->response->closeConnectionResult = "Complete"; return $this->response; } }
- clientVersion-ここで、Web Connectorは私たちをノックして言います。「聞いてください、バージョンxxxxxのWeb Connectorが来ます。 何が必要ですか?」 応答として、どのバージョンが欲しいかを言うことができます。または、黙っておくことができます。
- serverVersion-上記を参照してください。
- 認証 -ここで、Web Connectorは、そのようなログインを持つそのようなユーザー(qwcファイルでログインを指定し、Web Connectorのパスワードウィンドウでパスワードを指定した)を有効なパスワードと比較し、スキップまたはエラーを送信することを通知します。 成功した場合、現在のセッション中に使用されるWeb Connector'yチケットQB_TICKETを提供します
- sendRequestXML-ここで、WebコネクタがQBに渡すリクエストを作成します。
- receiveResponseXML-リクエストに応じてデータを受信します
- connectionError-データの送信中にエラーが発生した場合、このメソッドが呼び出されます
- getLastError-間違ったリクエストを書いた場合、このメソッドが呼び出されます
- closeConnection-すべてが計画どおりに進み、リクエストを正常に受け入れた場合
以下のファイルでは、リクエストの形成方法とデータ受信の処理方法を確認できます。
qb_clients.php <?php require 'qb.php'; class Qb_Clients extends Qb { public function sendRequestXML($param = '') { $id = requestId();
<?qbxml version="12.0"?>
という行は、qbxmlの12番目のバージョンを使用していると言います。 現時点では、これは利用可能な最新バージョンです(13番目と14番目のQBでサポートされています)。 qbxmlのバージョンが高いほど、QBで作業する可能性が大きくなります。 利用可能なすべてのクエリのリストは、
ここにあります 。 リンクをたどると、QBに送信できるすべての可能なリクエストが表示されます(それらは
[メッセージの
選択]リストに表示されます)。
[リクエスト]タブと[
レスポンス]タブ-選択したリクエストに応じて生成されます。
PS。 1つ
だけです
が、 たとえば、「
CustomerAdd 」というリクエストを選択すると、このリクエストが「Contacts」ブロックをサポートしていることがわかります。これは、qbxmlの12番目のバージョンから利用できます。 しかし、実際には実装されていませんが、実装プロセス中のみです(ドキュメントに含まれているのは謎であるため、この機能が説明されているフォーラムに誤ってアクセスするまで、1時間以上この問題に取り組みました)。 したがって、何かが
qbxml v.12で
機能しない場合、それが必要なのは事実ではありません:)
PSS ソースコードは
こちらです。