Как отформатировать / сделать аутентифицированный POST-запрос в Ruby? - PullRequest
0 голосов
/ 30 мая 2019

Я хочу использовать API и получить информацию.

Мой пример - Coinbase, но я думаю, что это также применимо шире и поможет другим.

У меня есть несколько частей информации.

Я знаю, что мне нужно подписать сообщение.
Инструкции для этого кажутся относительно ясными, хотя поле «пароль» не отображается (для ввода) на веб-сайте. Я предполагаю «пока».

Итак, как я могу выдать 'POST' с этой подписью ...
предположительно используя CoinbaseExchange.new.signature для поля подписи

Как мне отформатировать POST, чтобы сделать это в Ruby, то есть использовать эту подпись?

Резюме с сайта:

Создание запроса Все запросы REST должны содержать следующее заголовки:

CB-ACCESS-KEY The api key as a string.
CB-ACCESS-SIGN The base64-encoded signature (see Signing a Message).
CB-ACCESS-TIMESTAMP A timestamp for your request.
CB-ACCESS-PASSPHRASE The passphrase you specified when creating the API key.
All request bodies should have content type application/json and be valid JSON.

Подписание сообщения

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

class CoinbaseExchange
    def initialize(key, secret, passphrase)
      @key = key
      @secret = secret
      @passphrase = passphrase
    end

    def signature(request_path='', body='', timestamp=nil, method='GET')
      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(@secret)
      hash  = OpenSSL::HMAC.digest('sha256', secret, what)
      Base64.strict_encode64(hash)
    end
end
...