0

我正在尝试调用数据服务,但每次都收到 500 错误。当我在 API Explorer 中使用“试用”按钮进行测试时,它起作用了。反应很好。但在我的应用程序中,它无法连接。相同的 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;
}

我已经尝试了静态 baseURL,它也给出了 500 错误。 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 对象,尝试调用任何端点并检查它是否工作正常。如果它有效,请使用 fiddler 等工具捕获原始 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 对应于您公司的 relam。参考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 回答
0

您可以从以下网址下载 dotnet 的示例应用程序: https ://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits/sample_code

只需在 web.config 中输入您的键值,您就应该进行设置。

于 2013-07-18T05:32:41.563 回答