Использование ruby ​​curb gem для доступа к PayPal API

Следуйте инструкциям в 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"

Он работает и дает ожидаемый результат, как указано в инструкции, но я предпочитаю использовать рубиновый бордюр:

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

Это точно ошибка, но что не так с моим синтаксисом бордюра? Есть идеи?


person Chuyi Huang    schedule 26.03.2013    source источник
comment
спасибо Джонатан. Я использую подробный и заменил имя пользователя на userpwd, но это не работает :(   -  person Chuyi Huang    schedule 26.03.2013
comment
Вы можете использовать гем paypal-sdk-rest, чтобы упростить код.   -  person siddick    schedule 27.03.2013


Ответы (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

Вы можете сравнить с версией CLI, используя флаг -v.

Надеюсь, это поможет вам обнаружить разницу.

person Jon Cairns    schedule 26.03.2013
comment
Наконец-то я нашел проблему... Мне нужно установить http_auth_types = 'basic', ваше предложение подробного описания действительно мне очень помогло. - person Chuyi Huang; 26.03.2013