2017-06-01 78 views
0

我想接收通过JSON web服务的请求,并发送一个成功响应消息回来,如果令牌是一些其他标识信息一起正确,否则发送正确的错误信息发送JSON网络挂接响应

post "/hook/foo/bar" do 
puts request.env 

if request.env['TOKEN'] === "secret_code" 
    HTTParty.post("https://hook.com/hooks/catch/foo/bar/", 
    { 
    :body => @info.to_json, 
    :headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json'} 
    }) 

    [200, {}, "Success"] 
else 
    [400, {}, "Authorization Failed"] 
end 

发送挂钩的服务(Zapier)表示它发送成功,但我没有回复任何有意义的数据给他们,我可以使用。我相信我的回复格式是错误的,但我不知道如何。

+0

不知道我理解正确,但您是否期望从POST请求中返回一些响应数据请求? – Shiyason

回答

2

来自Zapier平台团队的David在这里。

每屈docs,可以返回:

具有三个元素的数组:[状态(Fixnum对象),报头(散列),响应体(响应#each)]

所以你发送的内容类型和字符串都没有提示。这是有效的,你的钩子成功了,但你可以做得更好!

Zapier将来自传出钩子的响应解析为JSON,因此最好将其发送回去。

我刚刚测试了以下例子:

require 'sinatra' 
require 'json' 

get '/' do 
    'hello world!' 
end 

post '/hook' do 
    {message: 'great!'}.to_json 
end 

,我的反应是解析! enter image description here

如果你想设置一个状态码,说实话,最简单的方法是使用函数status(400)在返回之前的任何时候。这就是说,一个401可能是你想要的Unauthorized", rather than 400`的代码。无论哪种方式,zapier都会将其标记为错误。

让我知道如果你有任何其他问题!