ASP.NET アプリケーションを QuickBooks Online Edition に接続する
-
11-09-2019 - |
質問
QuickBooks Online Edition に接続する ASP.NET ページを作成し、いくつかの値を読み取り、結果を表示しようとしています。これまでのところ、QuickBooks SDK をダウンロードしましたが、QuickBooks Online に接続するための asp.net ページを作成する方法に関する簡単なステップバイステップの例が見つかりませんでした。QuickBooks SDK ドキュメントと SDK 自体は非常にわかりにくく、圧倒されます。どこから始めればよいかについての簡単なステップバイステップのチュートリアルを知っている人はいますか...あるいは、最初にやるべきことについてのヒントかもしれません。
解決 2
これを機能させるために私が行ったすべての手順は次のとおりです。特に感謝します キース・パーマー 彼のコメント、回答、 彼のウェブサイト これは私がこれを機能させるのに本当に役立ちました。
アプリケーションを登録する で http://appreg.quickbooks.com. 。これにより、アプリ ID とアプリケーション名が得られます。私は次の設定を使用しました。
- 対象アプリケーション:QBOE
- 環境:生産
アプリケーションタイプ:デスクトップ
- (デスクトップを使用すると、証明書が必要ない限り、作業がはるかに簡単になりました)
確認キーが電子メール アドレスに送信されます。このウィザードの 2 ページで入力する必要があります。
- QBOE 接続をセットアップする. 。ステップ 1 でアプリケーションの登録を完了すると、アプリケーション ID が取得されます。QBOE 接続を設定するには、以下の URL でこの ID を使用します。
- 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=
- この時点で、 3つの重要な情報 QuickBooks Online Edition (QBOE) アカウントにアクセスするため。
- アプリケーション名
- アプリケーションID
- 接続キー
XML を QBOE に投稿する 3 つのアクセス情報と QBOE データベースへの実際のリクエストを含めます。QBOE ゲートウェイにポストする C# コードのサンプルを次に示します。これにより、QuickBooks データベース内のすべての顧客が返されます。アプリケーション名、アプリケーション ID、および接続キーを使用して、以下の XML を必ず更新してください。
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 { } }
注意すべき点がいくつかあります:
- Keith Palmer 氏が指摘したように、qbxml のバージョンは 6.0 である必要があります (IDN Unified On-Screen Reference では 7.0 と表示されていますが)。
- onError="ContinueOnError" 属性を含める必要がありました。
- WebRequestObject.ContentLength プロパティの設定が必要です。
- コンテンツタイプは「application/x-qbxml」である必要があります
- そして最後に、「リモートサーバーがエラーを返しました:(400) Bad Request.」という例外はまったく役に立ちませんでしたが、最終的には XML に問題があることを突き止めることができました。したがって、この例外が発生した場合は、問題の原因として XML を調べてください。
他のヒント
イーシャイの答えは、 部分的に 正しいですが、完全ではありません。
あなた できる ASP .NET アプリケーションにログインさせてリクエストを発行します それなし ユーザーを QuickBooks Online のログイン ページに誘導する必要がある セキュリティ設定を正しく設定している場合 アプリケーションを QuickBooks Online Edition に接続するとき。
アプリケーションの登録プロセス/接続プロセス中に、次のようなプロンプトが表示され、ログイン セキュリティをオンにするかオフにするかを尋ねられます。あなたはそれをしたいと伝えなければなりません 消す QuickBooks Online Edition データにアクセスできるようにする場合のログイン セキュリティ それなし ユーザーに毎回ログインを強制する。プロンプトは次のようなものです。
「ログインセキュリティを有効にしますか?」
以下を選択する必要があります:"いいえ。[アプリケーション名] にログインできる人は誰でも接続を使用できます。」
それ以外では、Yishai 氏はプロセスについて正しいです。繰り返しになりますが、簡単に言うと次のようになります。
- QBOEアカウントに登録する
- 統合アプリケーションを Intuit の AppReg サービスに登録します
- 特定のリンクにアクセスして、AppReg アプリケーションを QBOE アカウントに関連付けます (ログイン セキュリティを求められたら、必ずオフにしてください)。
- Intuit が提供する接続チケットを使用してサインオンするために、Intuit のサーバーに HTTPS POST リクエストを送信します。
- HTTPS POST リクエストを作成して、qbXML リクエストを Intuit のサーバーに送信します。これを使用して、QuickBooks Online Edition 内でレコードの追加、変更、削除、クエリを行うことができます。
追加のドキュメントとリクエストの例がいくつかあります。 QuickBooks の開発および統合 Wiki, 、具体的には QuickBooks Online Edition の統合 ページ。
私は、ユーザーが毎回ログインする必要がなく、QuickBooks Online Edition 内のデータを追加、変更、クエリする PHP であなたが求めていることを実行するソリューションを構築しました。それはチャンピオンのように機能します。PHP ショッピング カート (VirtueMart) と QuickBooks Online Edition の間で注文データをプッシュおよびプルします。PHP コードはここから入手できます。QuickBooks PHP フレームワーク
余談ですが、SSL 証明書の生成と HTTPS POST 経由での送信にあまり慣れていない限り、HOSTED モデルではなく DESKTOP モデルの通信を使用すると、多くの問題を回避できます。接続チケットは安全に暗号化して保管してください。
また、Yishai 氏の提案は次のとおりです。「1 つは、プログラムでログイン ページにアクセスし、ユーザーであるかのように資格情報を送信することです。「サポートされていない」ことは確かですが、おそらく機能するでしょう。」 に対して Intuit と SDK が定めたセキュリティ/開発者のガイドライン。このような行為を発見した場合、アプリケーションが QuickBooks に接続することを禁止されます。
あなたは何をすべきかの概要は(少なくとも私が持っているSDKの7.0バージョンで)QBSDKドキュメントの第7章に概説されています。あなたは、テストアカウントを開いて、そのサーバーに接続するための許可を取得する必要があります。
アカウントの設定をしたら、、基本的な認証手続きは、ログインするためにQuickBooksのオンラインサイトにユーザーをリダイレクトから構成され、ユーザーいったんQuickBooksのチケット、とHTTPSポストを使用してアプリケーションをコールバック、ことを行っています基本的にはシステムがあなたが認証されている知っているように、あなたは、あなたの要求に使用できるセッションハンドルです。あなたがその応答を取得すると、あなたはそれを解析し、あなたが戻って得たものに基づいて、システムに独自のログイン要求を送信します。
(私が正しくドキュメントを理解している場合)次に、あなたは基本的にQuickBooksの要求にxmlファイルのHTTPSのポストをやっている、とあなたはあなたが望むデータを取得するために解析する必要がXML応答を取得します。
私は、あなたが開始されることを願っています。
SDKの残りの部分は、(あなたがあなたの要求を形成し、あなたの応答を解析する方法を知っておく必要があります)のドキュメントであり、他のすべてのデスクトップ製品と通信する方法と懸念しています。あなたはドキュメントの残りの部分から必要としている唯一のことは、あなたがQuickBooksのにデータを掲載している場合、実際にのみ重要であるエラー処理を行う方法です。あなただけ読んでいるなら、それは(あなたの要求のいずれかがうまくいくか、それが重複したデータにつながるならば、それは、あなたが再試行する必要がある場合を心配する必要はない、またはしない)問題ではありません。
EDIT:あなたの特定のユースケースを考えると、私は2つのオプションが表示されます。 (あなたは、だけではない典型的なQuickBooksのオンラインシナリオクレイジーではありません)。
一つは、プログラム的に自分のログインページを打つと、あなたがユーザーであるかのように資格証明書を提出することです。私は、そのは、「サポート」ではないが、それはそううまくいくと確信しています。
は、他の毎朝や夕方の結果を(おそらくとにかくやるべき)の結果をキャッシュし、誰かがオンラインのQuickBooksにログインしない管理画面を持っており、更新することであるか、何が理にかなっています。
ほとんどの中小企業では、彼らは最初のオプションを選ぶしようとしているが、2番目の1はあなたが問題を持っている場合、インテュイットによってサポートされる堅牢かつ実際に、より一貫して仕事に行くされています。
これは何が必要にかなり近いです: www.QuickbooksConnector.comする
まだそれをダウンロードすることができませんでした。