2015-01-08 4 views
2

나는 주문형 전송을 위해 전자 상거래 레일 애플리케이션과 Postmates를 통합하려고 노력했습니다. 테스트 용으로 컨트롤러와 뷰를 빌드하고 내 경로 파일 (내 dev 환경에 빌드 됨)에 구성했습니다. 참고로, 여기 Postmates의 설명서입니다 : docs은 여기에 기술적 인 블로그 게시물입니다 : blogHTTParty 레일 앱에서 Postmates API 사용

경로 파일 :

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

IT는 하차 및 픽업 주소가 HTTP 요청 제출되지 않는 나에게 보인다. 누구든지 내가 사소한 구문 오류 또는 뭔가 만들고있어 말해 줄 수 있습니까? 이 응답을 받는다는 사실은 내 인증이 잘되고 URL도 그렇다는 것을 의미합니다. 어떤 아이디어?

감사합니다.

답변

4
문서 ( https://postmates.com/developer/docs#basics가) 당신은 내가 HTTParty 정말 익숙하지 않다 application/x-www-form-urlencoded

로 데이터를 POST해야한다고 말했습니다 동안, API에 JSON 데이터를 게시하는,하지만 당신은 아마 제거 할 수 있습니다처럼 보이는

.to_json이며 content-type 헤더를 지정하지 마십시오.

+2

굉장한 남자는 일했다! 고마워요! 이것이 API 사용에 대한 나의 첫 시도 였기 때문에 투쟁이었습니다. 다행히도 이것은 우발적 인 사람을 사용하고자하는 다른 미숙 한 레일 개발자에게 도움이 될 것입니다. – Haymaker87

3

질문과 관련이 없지만 API 키를 공개적으로 게시해서는 안됩니다. ;)