1

Ruby 1.9.3 (RoR ではない)を使用して、QuickBooks Online V2 API との統合を試みています。API ExplorerEmployee エンドポイントのドキュメントを使用して、 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の質問を見てきました:

しかし、何も機能していません。私たちは、 quickeebooksなどのサードパーティの gem を喜んで使用しますが、むしろ使用したくありません。ここで単純なものが欠けているだけだと思います。

有効な回答を確認できるように、次の項目を提供してください。

  • URI、ヘッダー、本文、および正確なクライアントとアクセス トークンを含むリクエスト パラメータ (開発者アプリ トークンのみでお願いします。署名を含め、まったく同じリクエストを生成できることを確認する必要があります)
  • HMAC-SHA1 署名の生成に使用されるベースストリング。それは次のようになります

POST&https%3A%2F%2Fqbo.intuit.com%2Fqbo28%2Fresource%2Femployees%2Fv2%2F7916308‌​75&Filter%3DName%2520%253AEQUALS%253A%2520David%2520Test%26oauth_consumer_key%3Dq‌​yprdPEfJqU7eOze0Fby9iYhrUS5DQ%26oauth_nonce%3D-1787433535548338293%26oauth_signat‌​ure_method%3DHMAC-SHA1%26oauth_timestamp%3D1380089100%26oauth_token%3DqyprdJUtDSk‌​7owxVfZlq7JeWO1mtpHBkSMD5GhB02PwIC6N0%26oauth_version%3D1.0

  • ヘッダーと本文のデータを含む応答
4

2 に答える 2

0

従業員エンドポイントでフィルター クエリを使用しようとしました。それは正常に動作します。

編集- 従業員 API エンドポイントに関連するエンドポイント、フィルター、結果セットの共有

https://qbo.intuit.com/qbo28/resource/employees/v2/791926875

Filter= Name :EQUALS: Manas Mukherjee

ヘッダー -"Authorization: OAuth oauth_token="2eRrd7LhEtHrM1CrqWvy1kmSgeukEgFxW99E1xwhSsLCp1JB", oauth_consumer_key="qyprdXsaKh0a132eNs7NTJLufjfrzm", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1380084612", oauth_nonce="1556081845430558974", oauth_signature="IMjh%2FTx%2F7GMFDE6WQqZK8b6apjI%3D"[\r][\n]"

Content-Type: application/x-www-form-urlencoded

データセット

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<qbo:SearchResults xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:qbp="http://www.intuit.com/sb/cdm/qbopayroll/v1" xmlns:qbo="http://www.intuit.com/sb/cdm/qbo">
    <qbo:CdmCollections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Employees">
        <Employee>
            <Id idDomain="QBO">20</Id>
            <SyncToken>0</SyncToken>
            <MetaData>
                <CreateTime>2013-09-24T21:37:22-07:00</CreateTime>
                <LastUpdatedTime>2013-09-24T21:37:22-07:00</LastUpdatedTime>
            </MetaData>
            <Name>Manas Mukherjee</Name>
            <Address>
                <Line1>ABC Str</Line1>
                <City>London</City>
                <PostalCode>4353543</PostalCode>
                <GeoCode>LAT=51.5148382,LNG=-0.1264144</GeoCode>
            </Address>
            <GivenName>Manas</GivenName>
            <MiddleName>Kr</MiddleName>
            <FamilyName>Mukherjee</FamilyName>
            <ShowAs>Manas Kr Mukherjee</ShowAs>
            <BillableTime>false</BillableTime>
        </Employee>
    </qbo:CdmCollections>
    <qbo:Count>1</qbo:Count>
    <qbo:CurrentPage>1</qbo:CurrentPage>
</qbo:SearchResults>

トークンを使用するOAuth ヘッダー

"Authorization: OAuth oauth_token="qyprdJUtDSk7owxVfZlq7JeWO1mtpHBkSMD5GhB02PwIC6N0", oauth_consumer_key="qyprdPEfJqU7eOze0Fby9iYhrUS5DQ", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1380089100", oauth_nonce="-1787433535548338293", oauth_signature="Vj67xMVhSKGjVSmGyOxt7SVv0i8%3D"[\r][\n]"

終点 -https://qbo.intuit.com/qbo28/resource/employees/v2/791630875

エンドポイントへのデータの送信:Filter= Name :EQUALS: David Test

コンテンツ タイプ:application/x-www-form-urlencoded

それはうまくいきますありがとう

于 2013-09-25T04:29:20.907 に答える