QuickBooks Online Edition に接続し、いくつかの値を読み取り、結果を表示する ASP.NET ページを作成しようとしています。これまでのところ、QuickBooks SDK をダウンロードしましたが、QuickBooks Online に接続するための asp.net ページを作成する方法に関する簡単な段階的な例を見つけることができませんでした。QuickBooks SDK のドキュメントと SDK 自体は、非常に紛らわしく、圧倒されます。どこから始めるべきかについての簡単なステップバイステップのチュートリアルを知っている人は誰でも...またはおそらく最初にやるべきことのヒント.
4 に答える
これが機能するために私が取ったすべてのステップです。キース・パーマーのコメント、回答、および彼のWebサイトに感謝します。これは、私がこれを機能させるのに本当に役立ちました。
http://appreg.quickbooks.comでアプリケーションを登録します。これにより、アプリIDとアプリケーション名がわかります。私はこれらの設定を使用しました:
- ターゲットアプリケーション:QBOE
- 環境:本番
アプリケーションタイプ:デスクトップ
- (デスクトップを使用すると、証明書を必要としない限り、作業がはるかに簡単になります)
確認キーは、このウィザードの2ページで入力する必要のあるメールアドレスに送信されます。
- QBOE接続を設定します。手順1でアプリケーションの登録が完了すると、アプリケーションIDが取得されます。以下のURLでこのIDを使用して、QBOE接続を設定します。
- https://login.quickbooks.com/j/qbn/sdkapp/confirm?serviceid=2004&appid=
APP_ID
- 注:上記のURLのAPP_IDは、アプリケーションの登録時に作成されたアプリケーションIDに置き換えてください。
- ウィザードにより、次の手順が実行されます。
- 接続の名前を指定します。
- アクセス権の付与-これが最も簡単だったので、すべてのアカウンティング権限を付与しました。
- ログインセキュリティの指定-ログインセキュリティをオフにしました。これは、ユーザーごとにセッションチケットを取得する必要がないため、xmlをQBOEに送信するのがはるかに簡単になるため重要です。
- その後、接続キーが与えられます。
- https://login.quickbooks.com/j/qbn/sdkapp/confirm?serviceid=2004&appid=
- この時点で、QuickBooks Online Edition(QBOE)アカウントにアクセスするため
の3つの重要な情報が得られました。
- アプリケーション名
- アプリケーションID
- 接続キー
3つのアクセス情報と実際のリクエストを含むXMLをQBOEデータベースに投稿します。これは、QBOEゲートウェイに投稿するサンプルのc#コードです。これにより、QuickBooksデータベース内のすべての顧客が返されます。以下のxmlを、アプリケーション名、アプリケーションID、および接続キーで更新してください。
string requestUrl = null; requestUrl = "https://apps.quickbooks.com/j/AppGateway"; HttpWebRequest WebRequestObject = null; StreamReader sr = null; HttpWebResponse WebResponseObject = null; StreamWriter swr = null; try { WebRequestObject = (HttpWebRequest)WebRequest.Create(requestUrl); WebRequestObject.Method = "POST"; WebRequestObject.ContentType = "application/x-qbxml"; WebRequestObject.AllowAutoRedirect = false; string post = @"<?xml version=""1.0"" encoding=""utf-8"" ?> <?qbxml version=""6.0""?> <QBXML> <SignonMsgsRq> <SignonDesktopRq> <ClientDateTime>%%CLIENT_DATE_TIME%%</ClientDateTime> <ApplicationLogin>APPLICATION_LOGIN</ApplicationLogin> <ConnectionTicket>CONNECTION_TICKET</ConnectionTicket> <Language>English</Language> <AppID>APP_ID</AppID> <AppVer>1</AppVer> </SignonDesktopRq> </SignonMsgsRq> <QBXMLMsgsRq onError=""continueOnError""> <CustomerQueryRq requestID=""2"" /> </QBXMLMsgsRq> </QBXML>"; post = post.Replace("%%CLIENT_DATE_TIME%%", DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(post); post = xmlDoc.InnerXml; WebRequestObject.ContentLength = post.Length; swr = new StreamWriter(WebRequestObject.GetRequestStream()); swr.Write(post); swr.Close(); WebResponseObject = (HttpWebResponse)WebRequestObject.GetResponse(); sr = new StreamReader(WebResponseObject.GetResponseStream()); string Results = sr.ReadToEnd(); } finally { try { sr.Close(); } catch { } try { WebResponseObject.Close(); WebRequestObject.Abort(); } catch { } }
注意すべきいくつかの事柄:
- キースパーマーが指摘したように、qbxmlのバージョンは6.0である必要があります(IDNユニファイドオンスクリーンリファレンスには7.0が表示されていますが)
- onError="continueOnError"属性を含める必要がありました。
- WebRequestObject.ContentLengthプロパティを設定する必要があります。
- コンテンツタイプは「application/x-qbxml」である必要があります
- そして最後に、「リモートサーバーがエラーを返しました:(400)不正なリクエスト」をたくさん受け取りました。まったく役に立たなかった例外ですが、最終的にはxmlの問題を追跡することができました。したがって、この例外が発生した場合は、問題の原因としてxmlを調べてください。
Yishai の答えは部分的に正しいですが、完全ではありません。
アプリケーションを QuickBooks Online Edition に接続するときにセキュリティ設定を正しく設定していれば、ユーザーを QuickBooks Online のログイン ページに移動させることなく、ASP .NET アプリケーションにログインさせて要求を発行させることができます。
アプリケーションの登録プロセス/接続プロセス中に、以下のようなプロンプトでログイン セキュリティをオンまたはオフにするかどうかを尋ねられます。ユーザーに毎回ログインを強制することなくQuickBooks Online Edition のデータにアクセスできるようにする場合は、ログイン セキュリティをオフにすることを伝える必要があります。プロンプトは次のようなものです。
「ログインセキュリティを有効にしますか?」
「いいえ。[アプリケーション名] にログインできる人なら誰でも接続を使用できます」を選択する必要があります。
それ以外では、Yishai はプロセスについて正しいです。繰り返しますが、一言で言えば:
- QBOEアカウントに登録する
- 統合アプリケーションを Intuit の AppReg サービスに登録する
- 特定のリンクにアクセスして、AppReg アプリケーションを QBOE アカウントに結び付けます (要求されたら、ログイン セキュリティを必ずオフにしてください!)
- Intuit のサーバーに HTTPS POST リクエストを送信し、Intuit が提供する接続チケットを使用してサインオンします。
- HTTPS POST リクエストを作成して qbXML リクエストを Intuit のサーバーに送信します。これを使用して、QuickBooks Online Edition 内のレコードを追加、変更、削除、およびクエリできます。
私のQuickBooks 開発および統合 wiki、特にQuickBooks Online Edition 統合ページには、いくつかの追加のドキュメントといくつかのサンプル リクエストがあります。
ユーザーが毎回ログインする必要なく、QuickBooks Online Edition 内でデータを追加、変更、およびクエリする PHP で、あなたが求めていることを実行するソリューションを構築しました。これはチャンピオンのように機能します。PHP ショッピング カート (VirtueMart) と QuickBooks オンライン版の間で注文データをプッシュおよびプルします。PHP コードは、 QuickBooks PHP フレームワークから入手できます。
補足として、SSL 証明書の生成と HTTPS POST 経由での送信に精通していない限り、HOSTED モデルではなく DESKTOP モデルの通信を使用することで、多くの問題を回避できます。接続チケットを安全に暗号化しておいてください。
また、Yishai の提案は次のとおりです。セキュリティ/開発者向けガイドライン Intuit および SDKに明確に違反しています。あなたがそれをしているのを彼らが見つけた場合、彼らはあなたのアプリケーションが QuickBooks に接続するのを禁止します。
あなたがしなければならないことの概要は、QBSDK ドキュメントの第 7 章に概説されています (少なくとも、私が持っている SDK の 7.0 バージョンでは)。テスト アカウントを開き、サーバーに接続する許可を得る必要があります。
アカウントのセットアップが完了したら、基本的な認証手順は、ユーザーを QuickBooks Online サイトにリダイレクトしてログインすることで構成されます。ユーザーがそれを完了すると、QuickBooks はチケット付きの HTTPS ポストでアプリケーションをコールバックします。システムが認証済みであることを認識できるように、リクエストに使用できるセッション ハンドル。その応答を取得したら、それを解析し、返された内容に基づいて独自のログイン要求をシステムに送信します。
次に (ドキュメントを正しく理解していれば) 基本的に、QuickBooks 要求を使用して xml ファイルの Https POSTS を実行し、必要なデータを取得するために解析する必要がある XML 応答を取得します。
これで始められることを願っています。
SDK の残りの部分はドキュメント (リクエストを作成し、レスポンスを解析する方法を知る必要があります) であり、それ以外はデスクトップ製品との通信方法に関するものです。残りのドキュメントで必要になるのは、エラー処理の方法だけです。これは、データを QuickBooks に投稿する場合にのみ重要です。読んでいるだけなら問題ありません (リクエストがうまくいくかどうかに関係なく、再試行する必要があるかどうか、またはそれによってデータが重複するかどうかを心配する必要はありません)。
編集:特定のユースケースを考えると、2つのオプションがあります。(典型的な QuickBooks Online のシナリオではありません)。
1 つは、プログラムでログイン ページにアクセスし、ユーザーであるかのように資格情報を送信することです。「サポートされていない」と確信していますが、おそらくうまくいくでしょう。
もう 1 つは、結果をキャッシュし (おそらくとにかく実行する必要があります)、誰かがオンラインで QuickBooks にログインし、毎朝または夕方に結果を更新する管理画面を表示することです。
ほとんどの中小企業では、最初のオプションを選択しますが、2 番目のオプションは、より一貫して堅牢に機能し、問題が発生した場合に Intuit によって実際にサポートされます。
これはあなたが必要とするものにかなり近いように見えます:www.QuickbooksConnector.com
まだダウンロードできませんでした。