首页
学习
活动
专区
圈层
工具
发布

Coinbase Pro API“无效签名”RUBY

“无效签名”错误在使用Coinbase Pro API时是一个常见问题,这通常意味着客户端发送的请求签名与服务器端计算的签名不匹配。以下是关于这个问题的基础概念、原因、解决方案以及相关的技术细节。

基础概念

Coinbase Pro API使用OAuth 2.0进行身份验证,并要求所有请求都必须包含一个签名,以确保请求的完整性和安全性。签名是通过将请求参数与API密钥结合,并使用HMAC-SHA256算法生成的。

原因

  1. 时间不同步:客户端和服务器的时间差异可能导致签名无效。
  2. 参数排序错误:请求参数必须按字典顺序排序后才能进行签名。
  3. API密钥或密钥错误:使用了错误的API密钥或密钥已被禁用。
  4. 请求URL或方法错误:请求的URL或HTTP方法与API文档不符。
  5. 编码问题:参数编码不正确,如使用了错误的字符集。

解决方案

以下是一个Ruby示例代码,展示了如何正确生成Coinbase Pro API请求的签名:

代码语言:txt
复制
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

关键点解释

  1. 时间戳:使用毫秒级的时间戳。
  2. 消息格式:将时间戳、HTTP方法和请求路径拼接成一条消息。
  3. 签名生成:使用HMAC-SHA256算法和API密钥生成签名,并进行Base64编码。
  4. 请求头:将生成的签名和其他必要信息添加到HTTP请求头中。

应用场景

此解决方案适用于任何需要通过Coinbase Pro API进行身份验证的场景,包括但不限于查询账户信息、交易记录、下单等。

通过以上步骤,可以有效解决“无效签名”的问题。如果问题仍然存在,建议检查API密钥和密钥的状态,并确保客户端和服务器的时间同步。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券