Создать пример записи для Quickbooks Online и Intuit Anywhere с использованием Ruby и httparty? - PullRequest
2 голосов
/ 08 февраля 2012

Может кто-нибудь опубликовать пример создания записи в быстрых книгах онлайн / интуитивно в любом месте, используя ruby ​​и httparty?

Я работаю над интеграцией в приложение ruby ​​on rails, используя везде интуит, и сталкиваюсь с проблемой с моим запросом 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"
    }}
)

1 Ответ

1 голос
/ 09 февраля 2012

Я неправильно предположил, что пример customer.com, предоставленный intuit, использовал гем httparty для выполнения вызова POST, поэтому я использовал неправильный синтаксис.На самом деле они используют вызов POST для гема OAuth, синтаксис которого можно найти здесь: http://oauth.rubyforge.org/rdoc/classes/OAuth/AccessToken.html

Мне также пришлось изменить заголовки, чтобы служба Intuit Anywhere принимала тело XML.Вот код, который, в конце концов, помог мне создать запись в онлайн-книгах с помощью интуитивных средств в любом месте:

    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"})
...