2014-02-11 57 views
1

我试图使用API​​访问Bitstamp帐户的余额。Ruby中的Bitstamp API签名

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