使用devdefined构建签名

时间:2014-03-11 19:31:51

标签: quickbooks intuit

我正在将现有的应用程序从QBXML转换为使用QBOE API V3来创建QuickBooks Online帐户。我已设法完成OAuth并使用DevDefined工具包获得看似有效的令牌/秘密。我被困在oauth_signature的一代。所有文档都指向我使用Intuit.Ipp DLL但是我不能,因为它写入.net 4.0框架,我的应用程序运行的服务器只加载了2.0。我可以移动我的应用程序,但测试升级将在截止日期(2014年4月16日)之后让我。有没有办法使用DevDefined或其他选项构建签名?

该应用程序在带有ASP.VB的IIS 6.0,DotNet Framework 2.0上运行。

1 个答案:

答案 0 :(得分:1)

截止日期是4/16吗?我没有看到任何地方宣布的。我以为是3/15。

我还没有在.NET 2.0上对此进行过测试,但这只是使用DevDefined而没有任何开销。它将为您处理签名和http请求。

using System.Text;
using DevDefined.OAuth.Consumer;
using DevDefined.OAuth.Framework;
// etc...

    public void doGet()
    {
        IOAuthSession session = CreateSession();
        string resp = session.Request().Get().ForUrl("https://quickbooks.api.intuit.com/v3/company/"
                + realmId + "/query?query=select * from customer where DisplayName='" + name + "'").ToString();
    }

    public void doPost(string Name)
    {
        IOAuthSession session = CreateSession();
        string reqBody = "<Customer xmlns=\"http://schema.intuit.com/finance/v3\" domain=\"QBO\" sparse=\"false\">";
        reqBody += "<DisplayName>" + Name + "</DisplayName>";
        reqBody += "</Customer>";
        byte[] bytes = Encoding.UTF8.GetBytes(reqBody);

        session.ConsumerContext.UseHeaderForOAuthParameters = true;
        IConsumerRequest req = session.Request().WithRawContentType("application/xml").WithRawContent(bytes);
        req = req.WithAcceptHeader("application/xml");
        req = req.ForUrl("https://quickbooks.api.intuit.com/v3/company/"
                + realmI + "/customer");
        string resp = req.Post().ToString();
    }

    private IOAuthSession CreateSession()
    {
        OAuthConsumerContext consumerContext = new OAuthConsumerContext
        {
            ConsumerKey = Properties.Settings.Default.consumerKey,
            ConsumerSecret = Properties.Settings.Default.consumerSecret,
            SignatureMethod = SignatureMethod.HmacSha1
        };
        IOAuthSession session = new OAuthSession(consumerContext);
        session.AccessToken = myAccessToken;
        return session;
    }