2014-02-11 1 views
1

Я пытаюсь получить доступ к балансу учетной записи Bitstamp с API.Подпись протокола Bitstamp в Ruby

secret = "secret" 
key = "key" 
nonce = (1000*Time.now.to_f).to_i.to_s 
client_id = "123123" 

message = nonce + client_id + key 
signature = HMAC::SHA256.hexdigest(secret, message).upcase 

puts open("https://www.bitstamp.net/api/balance/?nonce=#{nonce}&key=#{key}&signature=#{signature}").read 

ясно генерирует все требуемые атрибуты

https://www.bitstamp.net/api/balance/?nonce=1392137355403&key=key&signature=955A3FFC6FEBE69385B9503307873DBCD21E9B7B8EDE67817FFF70961189CE50 

пока ошибка говорит атрибуты отсутствуют, то почему?

{"error": "Missing key, signature and nonce parameters"} 
+1

Я быстро просмотрел API и воспроизвел вашу ошибку. Я думаю, что либо служба работает не так, как предполагалось, либо, скорее всего, сообщение об ошибке просто бесполезно. В документации предлагается использовать POST, но не указывается, как вы должны отправлять или форматировать параметры запроса. Я бы предложил разработчикам Bitstamp получить более подробную документацию, улучшить сообщения об ошибках или, возможно, ссылки клиентов. –

+0

Вот и все, я должен был отправить запрос как POST. – Sergey

+0

@Sergey - Вы решили проблему выше? Я тоже застрял здесь? API плохо документирован. Можете ли вы выслать мне свой код генерации кода и отправить код запроса, если вы решили проблему. – Sam

ответ

2

Проблема была в том, что я отправлял запрос как GET вместо POST. Вот полный код, который я использую сейчас, который работает.

require 'open-uri' 
require 'json' 
require 'base64' 
require 'openssl' 
require 'hmac-sha2' 
require 'net/http' 
require 'net/https' 
require 'uri' 

def bitstamp_private_request(method, attrs = {}) 
    secret = "xxx" 
    key = "xxx" 
    client_id = "xxx" 
    nonce = nonce_generator 

    message = nonce + client_id + key 
    signature = HMAC::SHA256.hexdigest(secret, message).upcase 

    url = URI.parse("https://www.bitstamp.net/api/#{method}/") 
    http = Net::HTTP.new(url.host, url.port) 
    http.use_ssl = true 

    data = { 
    nonce: nonce, 
    key: key, 
    signature: signature 
    } 
    data.merge!(attrs) 
    data = data.map { |k,v| "#{k}=#{v}"}.join('&') 

    headers = { 
    'Content-Type' => 'application/x-www-form-urlencoded' 
    } 

    resp = http.post(url.path, data, headers) 
    console_log "https://www.bitstamp.net/api/#{method}/" 
    resp.body 
end 

def nonce_generator 
    (Time.now.to_f*1000).to_i.to_s 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^