Ruby 1.9.3 (RoR ではない)を使用して、QuickBooks Online V2 API との統合を試みています。API ExplorerとEmployee エンドポイントのドキュメントを使用して、 Google Signet OAuth Gemを使用してテスト従業員の簡単なリストを取得できました。
require 'signet'
require 'signet/oauth_1/client'
#intialize oauth1 client
@client = Signet::OAuth1::Client.new(
:temporary_credential_uri => "https://oauth.intuit.com/oauth/v1/get_request_token",
:authorization_uri => "https://appcenter.intuit.com/Connect/Begin",
:token_credential_uri => "https://oauth.intuit.com/oauth/v1/get_access_token",
:client_credential_key => 'qyprdPEfJqU7eOze0Fby9iYhrUS5DQ',
:client_credential_secret => 'fuXsasJo4TrTEd3Yhv4TeMUizmtguh0JioIB5r2I',
:callback => "http://localhost:3000/callback/general"
)
@client.token_credential_key = 'qyprdJUtDSk7owxVfZlq7JeWO1mtpHBkSMD5GhB02PwIC6N0'
@client.token_credential_secret = 'Rq2ekgQWWL9frZAKpcgWef291mR0J5HBE354u5F3'
#setup request
original_request = [
'POST',
'https://qbo.sbfinance.intuit.com/resource/employees/v2/791630875',
# we also tried this url 'https://qbo.intuit.com/qbo28/resource/employees/v2/791630875',
[
['Content-Type', 'application/x-www-form-urlencoded'],
],
[]
]
#execute request
response = @client.fetch_protected_resource(:request => original_request)
puts response.body
ご覧のとおり、リクエストは非常に単純です。ただし、本文にフィルターを使用してリクエストを作成すると、次のエラーを含む HTML ページが表示されます。HTTP Status 401 - message=Exception authenticating OAuth; errorCode=003200; statusCode=401
#setup request
original_request = [
'POST',
'https://qbo.intuit.com/qbo28/resource/employees/v2/791630875',
#'https://qbo.sbfinance.intuit.com/resource/employees/v2/791630875',
[
['Content-Type', 'application/x-www-form-urlencoded'],
],
["Filter=Name :EQUALS: Doe"]
]
私たちは Google OAuth gem を使用しており、次のツールを使用して署名生成が正しいことを確認しました: LinkedIn Oauth テスト コンソール とOAuth 署名要求の初心者向けガイド。どちらも、Signet が生成している署名が、私が提供する本文に対して正しいことを確認します。
私はいくつかのSOの質問を見てきました:
- フィルターを使用した QuickBooks Online クエリは、毎回 401 を返します
- IDS および Sync Manager を使用して QB Windows でオブジェクト (アカウント、顧客など) を作成 (POST) できない
しかし、何も機能していません。私たちは、 quickeebooksなどのサードパーティの gem を喜んで使用しますが、むしろ使用したくありません。ここで単純なものが欠けているだけだと思います。
有効な回答を確認できるように、次の項目を提供してください。
- URI、ヘッダー、本文、および正確なクライアントとアクセス トークンを含むリクエスト パラメータ (開発者アプリ トークンのみでお願いします。署名を含め、まったく同じリクエストを生成できることを確認する必要があります)
- HMAC-SHA1 署名の生成に使用されるベースストリング。それは次のようになります
POST&https%3A%2F%2Fqbo.intuit.com%2Fqbo28%2Fresource%2Femployees%2Fv2%2F791630875&Filter%3DName%2520%253AEQUALS%253A%2520David%2520Test%26oauth_consumer_key%3DqyprdPEfJqU7eOze0Fby9iYhrUS5DQ%26oauth_nonce%3D-1787433535548338293%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1380089100%26oauth_token%3DqyprdJUtDSk7owxVfZlq7JeWO1mtpHBkSMD5GhB02PwIC6N0%26oauth_version%3D1.0
- ヘッダーと本文のデータを含む応答