class OKEX::Client

Attributes

api_key[R]
api_secret[R]
passphrase[R]

Public Class Methods

new(key, secret, passphrase) click to toggle source
# File lib/okex/client.rb, line 8
def initialize(key, secret, passphrase)
  @api_key = key
  @api_secret = secret
  @passphrase = passphrase
end

Public Instance Methods

get(host, path) click to toggle source
# File lib/okex/client.rb, line 14
def get(host, path)
  url = host + path
  ts = timestamp
  sig = sign(ts, "GET", path)
  _h = headers(ts, sig)

  puts "---> GET: url=#{url}, headers=#{_h}" if ENV['OKEX_DEBUG'].to_i > 0

  _resp(Faraday.get(url, nil, _h))
end
post(host, path, payload) click to toggle source
# File lib/okex/client.rb, line 25
def post(host, path, payload)
  if payload.is_a?(Array)
    _json = payload.map do |hx|
      gen_payload(hx)
    end
    payload_json = "[#{_json.join(",")}]"
  else
    payload_json = gen_payload(payload)
  end
  
  url = host + path
  ts = timestamp
  sig = sign(ts, "POST", path + payload_json)
  _h = headers(ts, sig)

  puts "---> POST: url=#{url}, payload=#{payload_json}, headers=#{_h}" if ENV['OKEX_DEBUG'].to_i > 0

  _resp(Faraday.post(url, payload_json, _h))
end

Private Instance Methods

_resp(result) click to toggle source
# File lib/okex/client.rb, line 77
def _resp(result)
  result = JSON.parse(result.body)
  
  code = result['code'].to_i
  if code == 0 && result['msg'].empty?
    return result['data']
  end

  raise OKEX::ApiError.new(code, result['data'], result['msg'])
end
gen_payload(payload) click to toggle source
# File lib/okex/client.rb, line 49
def gen_payload(payload)
  m = payload.map { |k, v| JSON.generate({k => v}, {space: ' '})}
  m2 = m.join(", ").gsub("{", "").gsub("}", "")

  "{#{m2}}"
end
headers(timestamp, sign) click to toggle source
# File lib/okex/client.rb, line 67
def headers(timestamp, sign)
  {
    'OK-ACCESS-KEY': api_key,
    'OK-ACCESS-SIGN': sign,
    'OK-ACCESS-TIMESTAMP': timestamp,
    'OK-ACCESS-PASSPHRASE': passphrase,
    'Content-Type': 'application/json'
  }
end
sign(timestamp, method, path) click to toggle source
# File lib/okex/client.rb, line 56
def sign(timestamp, method, path)
  msg = "#{timestamp}#{method}#{path}"
  digest = OpenSSL::HMAC.digest("sha256", api_secret, msg)

  Base64.strict_encode64(digest)
end
timestamp() click to toggle source
# File lib/okex/client.rb, line 63
def timestamp
  Time.now.utc.iso8601(3)
end