📜  coinbase pro API 签名示例 (1)

📅  最后修改于: 2023-12-03 14:40:09.165000             🧑  作者: Mango

Coinbase Pro API 签名示例

简介

Coinbase Pro 是 Coinbase 公司运营的数字货币交易所,提供了 WebSocket、REST 等多种 API 接口。其中,REST API 可以使用 HTTP(S) 请求方式与交易所通信,但需要使用签名来保证安全性。

本文将介绍 Coinbase Pro API 的签名方式及示例代码。

签名方式

Coinbase Pro API 使用的签名方式是使用请求参数在服务器端生成的 HMAC-SHA256 摘要。具体步骤如下:

  1. 将请求参数按键名排序(字典序)。

  2. 将排序后的键值对以 key=value 的形式拼成一个字符串。

  3. 在字符串前面添加 HTTP 请求方式及请求路径(不包含主机名)。

  4. 在字符串后面添加 Unix 时间戳(秒),注意要使用整型,不要使用浮点型。

  5. 使用 Coinbase Pro API 密钥的 Secret 对上一步生成的字符串进行 HMAC-SHA256 摘要。摘要的结果即为签名(signature)。

  6. 在请求头(HTTP Header)中添加以下四项:

    • CB-ACCESS-KEY:Coinbase Pro API 密钥的 Access Key。
    • CB-ACCESS-SIGN:前一步生成的签名。
    • CB-ACCESS-TIMESTAMP:Unix 时间戳(秒)。
    • CB-ACCESS-PASSPHRASE:Coinbase Pro API 密钥的 Passphrase。
示例代码

以下是一个 Python 3.x 版本的 Coinbase Pro API 签名示例代码。

import hmac
import hashlib
import time
import base64
import requests

# Coinbase Pro API 密钥
API_KEY = 'your_api_key'
API_SECRET = 'your_api_secret'
API_PASSPHRASE = 'your_api_passphrase'

# 请求地址和请求参数
url = 'https://api.pro.coinbase.com/accounts'
params = {'currency': 'BTC', 'limit': 10}

# 构造请求头
timestamp = str(int(time.time()))
message = timestamp + 'GET' + '/accounts'
encoded_secret = base64.b64decode(API_SECRET)
signature = hmac.new(encoded_secret, message.encode('ascii'), hashlib.sha256).digest()
signature_b64 = base64.b64encode(signature).decode('utf-8').rstrip('\n')
headers = {
    'CB-ACCESS-KEY': API_KEY,
    'CB-ACCESS-SIGN': signature_b64,
    'CB-ACCESS-TIMESTAMP': timestamp,
    'CB-ACCESS-PASSPHRASE': API_PASSPHRASE,
}

# 发送请求
response = requests.get(url, headers=headers, params=params)
print(response.json())

该例子演示了如何使用 Coinbase Pro API 的 REST 接口获取当前用户的 BTC 账户信息,其中:

  • API_KEY、API_SECRET 和 API_PASSPHRASE 是 Coinbase Pro API 密钥的 Access Key、Secret 和 Passphrase。
  • url 指定了目标 URL。
  • params 包含了请求参数,其中包括了 currency(货币类型)和 limit(返回结果的数量限制)。
  • 签名过程中,CB-ACCESS-KEY、CB-ACCESS-TIMESTAMP 和 CB-ACCESS-PASSPHRASE 都被包含在了签名的 message 中,CB-ACCESS-SIGN 作为签名结果添加到了请求头中。