Petr
Petr

Reputation: 2099

curl post request in rails controller

I want to convert this post request written in curl (GoPay payment gateway) to my Rails application:

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"

I am trying to do in my rails controller by using a gem rest-client. I've done something like this and was modifiying many times but couldn't make it works:

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" 
                             )

How I can convert the curl post request for the rest-client (or similar)?

EDIT: It is showing a status code 409: Conflict with no further information

EDIT1 - rgo's modified code works, thank you:

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

Upvotes: 1

Views: 3477

Answers (2)

rgo
rgo

Reputation: 316

I'm not a RestClient user but after reading the documentation[1] I think I transformed your cURL request to 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

As you can see I pass the credentials in the URL because is a basic authentication. Data(grant_type and scope) is passed as hash and then converted to JSON. Then we set rest client to send and receive JSON.

I hope it helps you

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

Upvotes: 2

mikej
mikej

Reputation: 66263

You didn't mention exactly what doesn't work or what error you're seeing. However, the -u option for curl is used to pass the username and password for basic authentication.

The equivalent for RestClient is to use the user and password options e.g.

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" }
)

Upvotes: 0

Related Questions