繁体   English   中英

无法使用OAuth获取ExactOnline的访问令牌

[英]Can't get access token for ExactOnline with OAuth

我正在这里的OAuth教程中获取访问代码,以便对在线会计软件Exact Online的API请求进行身份验证。

但是,我陷入了第3步,在那里我使用第2步中返回的授权代码来获取访问令牌。

这是我正在尝试的:

require 'httparty'

EXACT_CLIENT_ID = '<REDACTED>'
EXACT_CLIENT_SECRET = '<REDACTED>'
EXACT_SERVER_BASE_URL = 'https://start.exactonline.nl'
EXACT_AUTH_CODE = '<REDACTED>'

response = HTTParty.post("#{EXACT_SERVER_BASE_URL}/api/oauth2/token", headers: {'Content-Type' => 'application/x-www-form-urlencoded'}, query: {code: EXACT_AUTH_CODE, redirect_uri: 'http://<REDACTED>.runscope.net/', grant_type: 'authorization_code', client_id: EXACT_CLIENT_ID, client_secret: EXACT_CLIENT_SECRET})

puts response
# => 'Bad request'

puts response.code
# => 400

我不明白为什么会这样。 在查看此处的响应代码列表时,该代码表示​​:

由于语法格式错误,服务器无法理解该请求。 客户不应在没有修改的情况下重复请求。

我究竟做错了什么?

更新#1:

我也尝试过:

response_2 = HTTParty.post("#{EXACT_SERVER_BASE_URL}/api/oauth2/token", :headers => {'Content-Type' => 'application/x-www-form-urlencoded'}, :body => {'code' => EXACT_AUTH_CODE, 'redirect_uri' => 'http://<REDACED>.runscope.net/', 'grant_type' => 'authorization_code', 'client_id' => EXACT_CLIENT_ID, 'client_secret' => EXACT_CLIENT_SECRET})

但是反应是一样的。

即使使用HTTP POST方法,您也可以通过将值提供给.post方法的query:参数来提供值作为查询参数。 相反,您应该在body:参数中提供它们,请参阅: 如何使用HTTParty实现此POST请求?

还有你的语法重新。 body: :body应该是固定的,所以看起来像:

response_2 = HTTParty.post("#{EXACT_SERVER_BASE_URL}/api/oauth2/token", :headers => {'Content-Type' => 'application/x-www-form-urlencoded'}, :body => {'code' => EXACT_AUTH_CODE, 'redirect_uri' => 'http://<REDACED>.runscope.net/', 'grant_type' => 'authorization_code', 'client_id' => EXACT_CLIENT_ID, 'client_secret' => EXACT_CLIENT_SECRET})

最后但并非最不重要的一点:该代码值仅是一次性使用,并且寿命很短; 确保您使用的是新鲜获得的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM