2016-05-02 4 views
0

Я хочу, чтобы преобразовать этот пост запрос, написанный на скручивание (GoPay платежный шлюз) для моего приложения Rails:запрос локон пост в контроллере рельсы

curl -v https://gw.sandbox.gopay.com/api/oauth2/token \ 
-X "POST" \ 
-H "Accept: application/json" \ 
-H "Content-Type: application/x-www-form-urlencoded" \ 
-u "<Client ID>:<Client Secret>" \ 
-d "grant_type=client_credentials&scope=payment-create" 

я пытаюсь делать в контроллере рельсы, используя камень rest-client. Я сделал что-то вроде этого и модифицирования много раз, но не мог сделать это работает:

RestClient::Request.execute(method: :post, 
          url: "https://gw.sandbox.gopay.com/api/oauth2/token", 
          "#{ENV['GOPAY_CLIENT_ID']}": "#{ENV['GOPAY_CLIENT_SECRET']}" 
          data: "grant_type=client_credentials&scope=payment-create" 
          ) 

Как я могу преобразовать запрос локона поста для отдыха-клиента (или аналогичного)?

EDIT: Это показывает код состояния 409: конфликтовать с дополнительной информацией

edit1 - РГО Модифицированная код работает, спасибо:

RestClient.post "https://#{ENV['GOPAY_CLIENT_ID']}:#{ENV['GOPAY_CLIENT_SECRET']}@gw.sandbox.gopay.com/api/oauth2/token", 
    { grant_type: 'client_credentials', scope: 'payment-create'}, 
    content_type: :json, accept: :json 

ответ

1

Я не пользователь RestClient но после чтения документация [1] Я думаю, что преобразовали Curl запрос на RestClient:

RestClient.post "http://#{ENV['GOPAY_CLIENT_ID']}:#{ENV['GOPAY_CLIENT_SECRET']}@https://gw.sandbox.gopay.com/api/oauth2/token", 
       { grant_type: 'client_credentials', scope: 'payment-create'}, 
       content_type: :json, 
       accept: :json 

Как вы можете видеть, что я передать полномочия в URL, потому что это базовая аутентификация. Данные (grant_type и scope) передаются как хэш, а затем преобразуются в JSON. Затем мы устанавливаем клиент отдыха для отправки и получения JSON.

Я надеюсь, что это помогает вам

[1] https://github.com/rest-client/rest-client#usage-raw-url

+0

Прохладный! После того, как я забрал расширение .to_json, он работает. Спасибо! – Dudis

+0

Отвечено обновлено, как вы сказали: .to_json звонок удален – rgo

0

Вы не упомянули, что именно не работает или что ошибка, что вы видите. Однако параметр -u для curl используется для передачи имени пользователя и пароля для basic authentication.

Эквивалент для RestClient заключается в том, чтобы использовать опции user и password, например.

RestClient::Request.execute(
    method: :post, 
    url: "https://gw.sandbox.gopay.com/api/oauth2/token", 
    user: "#{ENV['GOPAY_CLIENT_ID']}", 
    password: "#{ENV['GOPAY_CLIENT_SECRET']}" 
    data: "grant_type=client_credentials&scope=payment-create", 
    headers: { "Accept" => "application/json", "Content-Type" => "application/x-www-form-urlencode" } 
) 
+0

Извините, я обновил свой пост. Моя попытка, как и эта, показывает конфликт 409: *** RestClient :: Conflict Exception: 409 Conflict – Dudis

+0

Проверка документов GoPay https://doc.gopay.com/en/#access-token Accept и Content- Заголовки типов требуются, поэтому попробуйте добавить их. Теперь от ноутбука, но должен быть чем-то вроде обновленного ответа. – mikej

Смежные вопросы