2

有人可以在任何地方使用 ruby​​ 和 httparty 在 quickbooks/intuit 中发布创建记录的示例吗?

我正在使用 intuit 在任何地方集成到 ruby​​ on rails 应用程序,并且在尝试创建新记录时遇到了我的 POST 请求的问题。我已经能够使用 POST 命令成功检索数据(客户),该命令不需要请求正文中的 XML 数据,但是在尝试创建具有需要传入的必填字段的新记录时遇到了麻烦请求正文中的 XML。

在我尝试为其创建记录的任何实体中,我都会遇到相同的错误:无效或缺少必填字段。在我看来,正文中的 XML(添加了必填字段的数据)要么被忽略(格式不正确?),要么没有被附加。

我希望其他熟悉 ruby​​ 的人可以发布使用 httparty 创建记录的示例。如果我能看到如何使用 httparty 正确传递 XML,我可以自己解决我的问题。

我一直在使用 customer.com 示例(https://code.intuit.com/integration/viewvc/viewvc.cgi/IntuitAnywhere-Ruby/customer.com/?root=intuitanywhere&system=exsy1003),其中有一些使其在 Rails 3.1 中工作所需的无关修改。我正在使用示例中提供的数据拉取和处理,它看起来像一个使用 httparty 构建的非常标准的 API 包装器。

我正在使用类似于 company_controller 客户方法中的拉动。以下是我尝试提交 XML 的两种不同方式:

#########################################
#Example 1 - XML

e = @company.intuit_token.post("https://qbo.intuit.com/qbo1/resource/account/v2/#{@company.realm}",
    { :body => 
        "<Account xmlns:ns2=\"http://www.intuit.com/sb/cdm/qbo\" xmlns=\"http://www.intuit.com/sb/cdm/v2\">
            <Name>Test Account 2</Name>
            <Desc>Test Account</Desc>
            <Subtype>Savings</Subtype>
            <AcctNum>5001</AcctNum>
            <OpeningBalanceDate>2010-05-14</OpeningBalanceDate>
        </Account>",
    :headers => {
        "Content-Type" => "application/xml"
    }}
)

#########################################
#Example 2 - hash

e = @company.intuit_token.post("https://qbo.intuit.com/qbo1/resource/account/v2/#{@company.realm}",
    { :body => { 
        :Account => {
            :Name => "Loan Account 2",
            :Desc  => "Loac Account 2",
            :Subtype     => "Savings",
            :AcctNum    => "5001",
            :OpeningBalanceDate    => "2011-04-22"
        }
    },
    :headers => {
        "Content-Type" => "application/xml"
    }}
)
4

1 回答 1

1

我错误地认为 intuit 提供的 customer.com 示例使用 httparty gem 进行 POST 调用,因此我使用了错误的语法。他们实际上是在使用 OAuth gem 的 POST 调用,其语法可以在这里找到:http: //oauth.rubyforge.org/rdoc/classes/OAuth/AccessToken.html

我还必须修改标头以使 Intuit Anywhere 服务接受 XML 正文。这是最终帮助我在任何地方使用 intuit 在快速手册中创建记录的代码:

    e = @company.intuit_token.post("https://qbo.intuit.com/qbo1/resource/account/v2/#{@company.realm}", "<Account xmlns:ns2=\"http://www.intuit.com/sb/cdm/qbo\" xmlns=\"http://www.intuit.com/sb/cdm/v2\"><Name>Test Account </Name><Desc>Test Account</Desc><Subtype>Savings</Subtype><AcctNum>5002</AcctNum><OpeningBalanceDate>2010-05-14</OpeningBalanceDate></Account>", {"Content-Type" => "application/xml", "standalone" => "yes", "encoding" => "UTF-8"})
于 2012-02-08T20:34:35.380 回答