Я следую руководству OAuth here, чтобы получить код доступа, чтобы аутентифицировать мои запросы API в онлайн-программу учета Точный онлайн.Невозможно получить токен доступа для ExactOnline с OAuth
Однако я застрял на шаге 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
Я не понимаю, почему это происходит. При взгляде на список кодов ответа here, код означает:
Запрос не может быть понят сервером из-за некорректного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений .
Что я делаю неправильно?
Update # 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})
Но ответ тот же.
Я также попытался использовать параметр 'body:', см. Обновленный вопрос выше, но результат тот же ... – narzero
Значение «code» - одноразовое использование и имеет короткое время жизни; убедитесь, что вы используете только что полученный –
Все работает сейчас! Пожалуйста, обновите свой ответ, чтобы я мог принять – narzero