rails api как заполнить заголовки в запросе

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

  1. Почему access_token генерируется дважды?
  2. Почему существует неопределенный метод ‘[]’ для 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}