0

データ サービスを呼び出そうとしていますが、毎回 500 エラーが発生します。API Explorer の [Try it] ボタンを使用してテストしたところ、機能しました。ちゃんと返事が返ってきました。しかし、私のアプリでは、接続に失敗しました。同じ OAuth ヘッダーが API に対して機能しましたが、アプリ内では機能しませんでした。

String urlReq = "https://qbo.sbfinance.intuit.com/resource/companymetadata/v2/" + intuitRealmID; //static baseURL
Uri uriToIntuit = new Uri(urlReq);
HttpWebRequest intuitReq = (HttpWebRequest)WebRequest.Create(uriToIntuit);
intuitReq.Method = "GET";
intuitReq.ContentType = "text/xml";
intuitReq.ContentLength = 0;
intuitReq.Accept = "text/xml";
OAuthUtils.signRequest(intuitReq, ap.ConsumerKey, ap.ConsumerSecret, rToken.Token,rToken.TokenSecret);

HttpWebResponse httpResponse = (HttpWebResponse)(intuitReq.GetResponse());

...

public static void signRequest(HttpWebRequest request, string consumerKey, string consumerSecret, string token, string tokenSecret)
{
    string normalizedUrl;
    string normalizedRequestParameters;

    string timeStamp = OAuthUtils.GenerateTimeStamp();
    string nonce = OAuthUtils.GenerateNonce();

    OAuthConsumerBase consumerBase = new OAuthConsumerBase();
    string signature = consumerBase.GenerateSignature(
        request.RequestUri,
        null,           // callback,
        null,           // verifier,
        consumerKey,
        consumerSecret,
        token,          // token,
        null,           // type,
        tokenSecret,    // tokenSecret,
        request.Method,
        timeStamp,
        nonce,
        null,           // status,
        out normalizedUrl,
        out normalizedRequestParameters
    );

    string authHeader = OAuthRequest.GenerateAuthHeader(
            nonce,
            timeStamp,
            signature,
            token,
            consumerKey,
            null,           // verifier
            null,           // callback
            "HMAC-SHA1",    // signature type
            "1.0"           // version
        );

    request.Headers[HttpRequestHeader.Authorization] = authHeader;
}

500エラーも発生する静的baseURLを試しました。 https://qbo.intuit.com/qbo1/rest/user/v2/

OAuth oauth_version=\"1.0\", oauth_nonce=\"c830ffa8338b4d6fa0b3e8d03f144642\", oauth_timestamp=\"1374015013\", oauth_consumer_key=\"qyprdpwcmwYdE7nfBkG4Mb0t65ufH8\", oauth_token=\"qyprdTnNWcIBorQk9L93o8ERKPZI3ELoBUHBrULzvsxPsPMU\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"Ws0WpQmV9aAzaFHw%2B6wMC5aidBk%3D\""       string
4

2 に答える 2

0

エンドポイントを直接呼び出す代わりに、C# devkit を試すことができます。(このアプローチに関連するいくつかのコードも共有しようとします)。

IDS Devkit ダウンロード - https://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits/0100_ipp_.net_devkit/0100_installing_the_ipp_.net_devkit

using Intuit.Ipp.Core;
using Intuit.Ipp.Security;
using Intuit.Ipp.Services;
using Intuit.Ipp.Data;
using Intuit.Ipp.AsyncServices;
using Intuit.Ipp.Data.Qbo; 

OAuthRequestValidator oauthValidator = new OAuthRequestValidator(
"a",
"b",
"c",
"d"
);
ServiceContext context = new ServiceContext (oauthValidator, companyID, IntuitServicesType.QBO);
DataServices objDataService = new DataServices(context);

この dataServices オブジェクトを使用して、任意のエンドポイントを呼び出して、正常に機能しているかどうかを確認してください。動作する場合は、フィドラーなどのツールを使用して生の http リクエストをキャプチャしてください。これは、以前のアプローチと同じものと比較できます。

同期呼び出し - https://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits/0100_ipp_.net_devkit/0299_synchronous_calls/0001_data_service_apis

非同期呼び出し - https://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits/0100_ipp_.net_devkit/0300_asynchronous_calls/0001_data_service_apis

7.0 以降で搭載されたアプリは静的ベース URL を使用する必要がありますが、会社のレルムに対応する動的 URL を取得していることを確認できます。参照https://developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/v2/0400_quickbooks_online/0100_calling_data_services/0010_getting_the_base_url#Getting_the_Base_URL_at_Runtime

それがどうなるか教えてください。

ありがとう

于 2013-07-18T05:18:22.703 に答える