在rails控制器中卷曲请求

时间:2016-05-02 20:53:46

标签: ruby-on-rails ruby curl

我想将使用curl(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"

我正在尝试使用gem rest-client 在我的rails控制器中执行。我已经完成了类似的事情并且多次修改但无法使其正常工作:

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

如何转换rest-client(或类似)的curl post请求?

编辑:显示状态代码409:冲突,没有进一步的信息

EDIT1 - rgo的修改代码有效,谢谢:

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

2 个答案:

答案 0 :(得分: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。然后我们将rest客户端设置为发送和接收JSON。

我希望它可以帮到你

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

答案 1 :(得分:0)

你没有提到究竟什么不起作用或你看到的错误。但是,curl的-u选项用于传递basic authentication的用户名和密码。

RestClient的等效项是使用userpassword选项,例如。

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