Использование API Postmates в приложении rails с HTTParty

Я работаю над интеграцией Postmates с моим приложением электронной коммерции rails для доставки по требованию. Я создал контроллер и представление для целей тестирования и настроил его в своем файле маршрутов (построенном в моей среде разработки). Для справки, вот документация от Postmates: docs и технический блог: блог

Файл маршрутов:

resources :postmates do
    member do 
        post 'get_delivery'
    end
  end

Контроллер:

require 'httparty'
require 'json'

class PostmatesController < ApplicationController

  def get_delivery
    api_key = **hidden**
    @customer = 'cus_K8mRn4ovuNyNKV'
    @urlstring_to_post = 'https://api.postmates.com/v1/customers/' + @customer + '/delivery_quotes'

    @result = HTTParty.post(@urlstring_to_post.to_str,
      :body => { :dropoff_address => "205 E 95th Street, New York, NY 10128", 
                 :pickup_address => "619 W 54th St, New York, NY 10019" 
                }.to_json,
      :basic_auth => { :username => api_key },
      :headers => { 'Content-Type' => 'application/json' })
  end

end

Вид:

<div class="container">
  <%= form_tag url_for(:controller => 'postmates', :action => 'get_delivery'), :method => 'post' do %>
  <%= submit_tag "Get Delivery", :action => 'get_delivery', :controller => 'postmates'%>  
  <% end %>
</div>

<p>Result: <%= @result %></p>

Вот ответ от API:

{"kind"=>"error", "code"=>"invalid_params", "params"=>{"dropoff_address"=>"This field is required.", "pickup_address"=>"This field is required."}, "message"=>"The parameters of your request were invalid."}

Мне кажется, что адрес высадки и получения не передается в HTTP-запросе. Может ли кто-нибудь сказать мне, делаю ли я небольшую синтаксическую ошибку или что-то в этом роде? Тот факт, что я получаю этот ответ, означает, что моя аутентификация в порядке, как и URL-адрес. Есть идеи?

Спасибо.


person Haymaker87    schedule 08.01.2015    source источник


Ответы (2)


Похоже, вы отправляете данные JSON в API, а документация (https://postmates.com/developer/docs#basics) говорит, что вы должны отправить данные как application/x-www-form-urlencoded

Я не совсем знаком с HTTParty, но вы, вероятно, можете просто удалить .to_json и не указывать заголовок типа контента.

person rhettg    schedule 09.01.2015
comment
Потрясающий человек, который работал! Большое спасибо! Это была моя первая попытка использовать API, так что это была борьба. Надеюсь, это поможет другим неопытным разработчикам рельсов, которые хотят использовать Postmates. - person Haymaker87; 09.01.2015

Не имеет отношения к вашему вопросу, но вы не должны публично публиковать свой ключ API. ;)

person soarescode    schedule 09.01.2015