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