Подключение к Coinbase API с помощью Ruby и проблема с подключением. фарадей - PullRequest
0 голосов
/ 23 апреля 2019

Попытка подключиться к API песочницы Coinbase GDAX с помощью Ruby.В настоящее время использую Фарадей, но приветствуются рекомендации HTTParty или Ruby Core API.

Мне трудно отправлять запросы и, похоже, не могу сказать, где я все испортил.

Aсписок ошибок отображается, но верхний:

/ Система / Библиотека / Каркасы / Ruby.framework / Версии / 2.3 / usr / lib / ruby ​​/ 2.3.0 / net / http / header.rb: 18: в block in initialize_http_header': undefined method strip 'для 1556021965: Fixnum (NoMethodError)

Документы Coinbase: https://docs.pro.coinbase.com/?ruby#signing-a-message

Мой вызов API в двух словах.

payload = { 
            "data": "DATA"        
        }

        url = 'https://api-public.sandbox.gdax.com/orders'
        conn = Faraday.new      
        response = conn.post do |req|           
            req.url url
            req.headers['REQ-HEADER-1'] = "FOO",
            req.headers['REQ-HEADER-1'] = "BAR",           
            req.body = payload      
        end

        puts response

Полный код

require 'Faraday' require 'base64' require 'openssl' require 'json'


class foo


    def initialize
        @api_key = '25b1d259417d159443c03ed14eb9ee49'       
        @api_secret = 'trBTZUj4zLfHEBfbQy3+LeLOaAeAbfG/zCqIvzu3RyiKhqf5y85NYqqZi7GUSBCzhryud1pyOs5idibzdOx/tw=='        
        @api_pass = '7zkf0bvr6q4'       
    end         

    def signature(request_path='', body='', timestamp=nil, method='POST')
      body = body.to_json if body.is_a?(Hash)
      timestamp = Time.now.to_i if !timestamp

      what = "#{timestamp}#{method}#{request_path}#{body}";

      # create a sha256 hmac with the secret
      secret = Base64.decode64(@api_secret)
      hash  = OpenSSL::HMAC.digest('sha256', secret, what)
      Base64.strict_encode64(hash)
    end

    def post_buy

        usd = get_usd_available         
        usd = usd / 2       

        payload = { 
            "funds": usd.to_s,
            "product_id": "BTC-USD",
            "side": "buy",
            "type": "market"        
        }

        url = 'https://api-public.sandbox.gdax.com/orders'
        conn = Faraday.new      
        response = conn.post do |req|           
            req.url url
            req.headers['CB-ACCESS-KEY'] = @api_key,
            req.headers['CB-ACCESS-SIGN'] = signature( url, payload),
            req.headers['CB-ACCESS-TIMESTAMP'] = Time.now.to_i,
            req.headers['CB-ACCESS-PASSPHRASE'] = @passphrase,           
            req.body = payload      
        end

        puts response

    end

end

foo.new.post_buy

1 Ответ

1 голос
/ 23 апреля 2019

Вы можете проверить код на http / header.rb : он вызывает strip для каждого заголовка, поэтому каждое значение заголовка должно быть строкой.

Я думаю, что это оскорбительная строка, вы указываете здесь целое число в качестве значения заголовка:

req.headers['CB-ACCESS-TIMESTAMP'] = Time.now.to_i

Преобразование в строку должно исправить это:

req.headers['CB-ACCESS-TIMESTAMP'] = Time.now.to_i.to_s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...