Создать пример записи для Quickbooks Online и Intuit Anywhere, используя Ruby и httparty?

Кто-нибудь может где-нибудь выложить пример создания записи в quickbooks online/intuit, используя ruby ​​и httparty?

Я работаю над интеграцией в приложение ruby ​​on rails, используя intuit в любом месте, и у меня возникла проблема с моим запросом POST при попытке создать новую запись. Мне удалось успешно получить данные (клиенты) с помощью команды POST, которая не требует данных XML в теле запроса, но у меня возникают проблемы при попытке создать новые записи с обязательными полями, которые необходимо передать в XML в теле запроса.

Я получаю один и тот же вид ошибки в любом объекте, для которого я пытаюсь создать запись: недопустимое или отсутствующее обязательное поле. Мне кажется, что XML в теле (где добавляются данные для обязательных полей) либо игнорируется (неверное форматирование?), либо не прикрепляется.

Я надеялся, что кто-то еще, знакомый с ruby, может опубликовать пример создания записи с использованием httparty. Если бы я мог видеть, как правильно передавать XML с помощью httparty, я мог бы решить свою проблему сам.

Я использовал пример с customer.com (https://code.intuit.com/integration/viewvc/viewvc.cgi/IntuitAnywhere-Ruby/customer.com/?root=intuitanywhere&system=exsy1003) в основном так, как опубликовано, с несколькими не относящимися к делу изменениями необходимо, чтобы заставить его работать в Rails 3.1. Я использую извлечение и обработку данных, представленные в примере, который выглядит как довольно стандартная оболочка API, созданная с использованием httparty.

Я использую извлечение, подобное тому, которое найдено в методе клиентов 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"
    }}
)

person numbersnelson    schedule 07.02.2012    source источник


Ответы (1)


Я ошибочно предположил, что пример customer.com, предоставленный intuit, использует гем httparty для вызова POST, поэтому я использовал неправильный синтаксис. На самом деле они используют вызов POST гема OAuth, синтаксис которого можно найти здесь: 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"})
person numbersnelson    schedule 08.02.2012
comment
можете ли вы опубликовать здесь код для создания токена и создания API-интерфейса счета с использованием XML ИЛИ JSON, используя сообщение с rubyonrails? - person harsh4u; 14.03.2014