Я не понимаю, что я делаю неправильно. Я хочу отправить простой запрос к 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.info
lucker@lucker-pc:~/git/paytrace-testh$ ruby integration.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} Traceback (most recent call last): 1: from integration.rb:25:in
<main>' integration.rb:16:inauthorize': undefined method `[]' for nil:NilClass (NoMethodError)





Ваш метод auth_token возвращает не 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
Кажется, в этом коде 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}
основная проблема связана с JSON.parse(response). и нужно добавить require 'json' в заголовок файла rb (если вы запускаете его в изолированном файле, а не в проекте rails). JSON.parse(response) нужно добавить в конец метода для разбора в json.