使用ruby curb gem访问paypal api

时间:2013-03-26 09:15:27

标签: ruby curl paypal curb

按照Paypal Developer中的说明“拨打第一个电话”:

curl https://api.sandbox.paypal.com/v1/oauth2/token \
 -H "Accept: application/json" \
 -H "Accept-Language: en_US" \
 -u "EOJ2S-Z6OoN_le_KS1d75wsZ6y0SFdVsY9183IvxFyZp:EClusMEUk8e9ihI7ZdVLF5cZ6y0SFdVsY9183IvxFyZp" \
 -d "grant_type=client_credentials"

它正在工作并获得预期结果,如指令状态,但我更喜欢使用ruby curb gem:

require 'curl'

paypal_result = Curl::Easy.http_post("https://api.sandbox.paypal.com/v1/oauth2/token", "grant_type=client_credentials") do |http|
  http.headers['Accept'] = "application/json"
  http.headers['Accept-Language'] = "en_US"
  http.username = "EOJ2S-Z6OoN_le_KS1d75wsZ6y0SFdVsY9183IvxFyZp:EClusMEUk8e9ihI7ZdVLF5cZ6y0SFdVsY9183IvxFyZp"
end

puts paypal_result.body_str

但是我得到了以下内容:

{"error":"invalid_client","error_description":"The basic auth authorization header cannot be decoded"}

这肯定是错误的,但是我的curb语法出了什么问题?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我无法确切地告诉你什么是错的,但我可以告诉你如何看待发生了什么。尝试将其置于详细模式,这样您就可以看到实际发送的数据和标题:

curl = Curl::Easy.new

# Make it verbose, prints to stderr
curl.verbose = true

paypal_result = curl.http_post("https://api.sandbox.paypal.com/v1/oauth2/token", "grant_type=client_credentials") do |http|
  # etc.
end

您可以使用-v标志与CLI版本进行比较。

希望能帮助您发现差异。