“无效签名”错误在使用Coinbase Pro API时是一个常见问题,这通常意味着客户端发送的请求签名与服务器端计算的签名不匹配。以下是关于这个问题的基础概念、原因、解决方案以及相关的技术细节。
Coinbase Pro API使用OAuth 2.0进行身份验证,并要求所有请求都必须包含一个签名,以确保请求的完整性和安全性。签名是通过将请求参数与API密钥结合,并使用HMAC-SHA256算法生成的。
以下是一个Ruby示例代码,展示了如何正确生成Coinbase Pro API请求的签名:
require 'base64'
require 'openssl'
require 'time'
require 'net/http'
require 'uri'
# Coinbase Pro API配置
api_key = 'YOUR_API_KEY'
api_secret = 'YOUR_API_SECRET'
passphrase = 'YOUR_PASSPHRASE'
base_url = 'https://api.pro.coinbase.com'
# 请求参数
method = 'GET'
endpoint = '/accounts'
timestamp = Time.now.to_i * 1000
message = "#{timestamp}#{method.upcase}#{endpoint}"
# 生成签名
hash = OpenSSL::HMAC.digest('sha256', api_secret, message)
signature = Base64.strict_encode64(hash)
# 构建请求头
headers = {
'CB-ACCESS-KEY' => api_key,
'CB-ACCESS-SIGN' => signature,
'CB-ACCESS-TIMESTAMP' => timestamp.to_s,
'CB-ACCESS-PASSPHRASE' => passphrase,
'Content-Type' => 'application/json'
}
# 发送请求
uri = URI.parse(base_url + endpoint)
req = Net::HTTP::Get.new(uri, headers)
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end
puts res.body
此解决方案适用于任何需要通过Coinbase Pro API进行身份验证的场景,包括但不限于查询账户信息、交易记录、下单等。
通过以上步骤,可以有效解决“无效签名”的问题。如果问题仍然存在,建议检查API密钥和密钥的状态,并确保客户端和服务器的时间同步。
领取专属 10元无门槛券
手把手带您无忧上云