我正在按照此处的 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})
但反应是一样的。