#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
Я не понимаю, что я делаю не так. Я хочу отправить простой запрос в API, и это не сработало:
class Paytrace
require 'rest-client'
attr_reader :auth_token, :authorize
def initialize()
@auth_token = auth_token
end
def auth_token
response = RestClient.post 'https://api.paytrace.com/oauth/token', { grant_type: :password, username: "loginname", password: "htmlkoi8r" }
puts response
end
def authorize
headers = {:Authorization => "Bearer #{auth_token['access_token']}"}
response1 = RestClient.get('https://api.paytrace.com/v1/transactions/sale/keyed', headers)
puts response1
end
end
a = Paytrace.new
a.authorize
console.log
lucker@lucker-pc:~/git/paytrace-протестируйте интеграцию ruby.rb {«access_token»:»c6d69786f6075633:8647d6c6b6f6968327:092e8cfc553726d2b8198577ea2836f41173aae68a53aa1d2af2b2c7f65dcdc7″,»token_type»:»Bearer»,»expires_in»:7200,»created_at»:1556098344 } {«access_token»:»c6d69786f6075633:8647d6c6b6f6968327:232c92f977a301d033eec321c3d82b73bb65ebec33f9fcc8f6c2d7575c8b0d88″,»token_type»:»Bearer»,»expires_in»:7200,»created_at»:1556098346 } Обратная трассировка (последний последний вызов): 1: из integration.rb:25:в
<main>' integration.rb:16:in
авторизовать’: неопределенный метод `[]’ для nil:NilClass (NoMethodError)
- Почему access_token генерируется дважды?
- Почему существует неопределенный метод ‘[]’ для nil:NilClass?
Комментарии:
1. основная проблема, связанная с JSON.parse(ответ). и нужно добавить require ‘json’ в заголовок файла rb (если вы запускаете его в изолированном файле, а не в проекте rails). JSON.parse(ответ) нужно добавить в низ метода для разбора в json.
Ответ №1:
Ваш метод auth_token
возвращает не a response
, а nil
( puts
возвращает nil
).
Кстати, вам не нужно attr_reader :authorize
, поскольку у вас есть метод с таким именем.
Кроме того, как вы настраиваете attr_reader :auth_token
, метод auth_token
должен быть переименован (и, возможно, стать private
).
Измените свой код на:
class Paytrace
require 'rest-client'
attr_reader :auth_token
def initialize()
@auth_token = get_auth_token
end
def authorize
headers = {:Authorization => "Bearer #{auth_token['access_token']}"}
RestClient.get('https://api.paytrace.com/v1/transactions/sale/keyed', headers)
end
private
def get_auth_token
RestClient.post 'https://api.paytrace.com/oauth/token', { grant_type: :password, username: "loginname", password: "htmlkoi8r" }
end
end
a = Paytrace.new
puts a.auth_token
puts a.authorize
Ответ №2:
Похоже, что в этом коде 3 ошибки, которые ставит 2. строки 12 и 20
и
headers = {:Authorization => "Bearer #{auth_token['access_token']}"}
должно быть
headers = {:Authorization => "Bearer #{auth_token[:access_token]}"}
или
headers = {:Authorization => "Bearer #{@auth_token[:access_token]}"}
попробуйте этот код
class Paytrace
require 'rest-client'
attr_reader :auth_token, :authorize
def initialize()
@auth_token = auth_token
end
def auth_token
response = RestClient.post 'https://api.paytrace.com/oauth/token', { grant_type: :password, username: "loginname", password: "htmlkoi8r" }
# puts response
end
def authorize
headers = {:Authorization => "Bearer #{@auth_token[:access_token]}"}
response1 = RestClient.get('https://api.paytrace.com/v1/transactions/sale/keyed', headers)
# puts response1
end
end
a = Paytrace.new
a.authorize
позаботьтесь о хэше вашего ответа, если вы проверяете
{:access_token=>"c6d69786f6075633:8647d6c6b6f6968327:092e8cfc553726d2b8198577ea2836f41173aae68a53aa1d2af2b2c7f65dcdc7",
:token_type=>"Bearer",
:expires_in=>7200,
:created_at=>1556098344}
и не
{"access_token":"c6d69786f6075633:8647d6c6b6f6968327:092e8cfc553726d2b8198577ea2836f41173aae68a53aa1d2af2b2c7f65dcdc7","token_type":"Bearer","expires_in":7200,"created_at":1556098344}