开始使用
REST 请求验证

REST 请求验证#

发起请求#

所有 REST 私有请求头都必须包含以下内容:

  • OK-ACCESS-KEY 字符串类型的 APIKey (遵循这个指南来生成一个 API 密钥)
  • OK-ACCESS-SIGN 使用 HMAC SHA256 哈希函数获得哈希值,再使用 Base-64 编码(请参阅签名)
  • OK-ACCESS-TIMESTAMP 发起请求的时间(UTC),如:2020-12-08T09:08:57.715Z
  • OK-ACCESS-PASSPHRASE 你在创建 API 密钥时指定的 Passphrase

一些端点,例如 WaaS,需要额外的标头:

  • OK-ACCESS-PROJECT 你的项目的项目 ID(可在项目详细信息下找到)

所有请求都应该含有application/json类型内容,并且是有效的 JSON。

签名#

OK-ACCESS-SIGN的请求头:

  • 是对timestamp + method + requestPath + body字符串(+表示字符串连接),以及 SecretKey,使用 HMAC SHA256 方法加密,通过 Base-64 编码输出而得到的。
  • 准备 Secret Key(在创建 API key 时生成)。
  • 使用 HMAC SHA256 使用密钥对预哈希字符串进行签名。
  • 以 Base64 格式对签名进行编码。

例子: sign=CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(timestamp + 'GET' + '/api/v5/account/balance?ccy=BTC', SecretKey))

  • 其中,timestamp的值与OK-ACCESS-TIMESTAMP请求头相同,为 ISO 格式
    • 如:2020-12-08T09:08:57.715Z
  • method 是请求方法,字母全部大写
    • 如:GET/POST
  • requestPath 是请求接口路径
    • 如:/api/v5/account/balance
  • body 是指请求主体的字符串,如果请求没有主体(通常为 GET 请求)则 body 可省略
    • 如:{"instId":"BTC-USDT","lever":"5","mgnMode":"isolated"}
    • GET请求参数是算作 requestPath,不算 body

Postman 例子#

Postman 是一款流行的 API 开发和测试工具,允许开发人员设计、测试和记录 API。它提供了对用户友好的图形界面,用于向 API 发送 HTTP 请求。

如果你还没有安装 Postman,你可以免费从 Postman 网站下载它:https://www.postman.com/

提示
这个示例需要你具备对 Postman 的基础理解。

添加参数#

  • 这通常适用于 GET 请求。
  • 如果你的请求需要查询参数,你可以在 Params 选项卡下添加它们。在这里,你可以添加查询参数的 key-value pair。

图片

设置标题#

Headers 选项卡下,添加以下键-值对:

  • OK-ACCESS-KEY
  • OK-ACCESS-PASSPHRASE
  • OK-ACCESS-PROJECT(如果需要)

图片

添加正文#

  • 这通常适用于 POST 请求。
  • 如果你的请求需要一个请求主体,你可以在 Body 选项卡下添加它们。
  • 在下拉菜单中选择 rawJSON
  • 使用 JSON 格式输入你的请求主体。

图片

设置预请求脚本#

  • 用于生成所需的签名(OK-ACCESS-SIGN)和时间戳(OK-ACCESS-TIMESTAMP)。
  • Pre-request Script 选项卡下,插入与请求类型相对应的脚本。
  • 在生成预哈希字符串时,GET 请求会排除请求主体。
  • 根据需要编辑密钥。

GET 请求:

var method = pm.request.method;
var now = new Date();
var isoString = now.toISOString();
var path = pm.request.url.getPathWithQuery();
var sign=CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(isoString + method + path, pm.variables.replaceIn('{{secret_key}}')));

pm.request.headers.add({
    key: 'OK-ACCESS-SIGN',
    value: sign
});

pm.request.headers.add({
    key: 'OK-ACCESS-TIMESTAMP',
    value: isoString
});

POST 请求:

var method = pm.request.method;
var now = new Date();
var isoString = now.toISOString();
var path = pm.request.url.getPathWithQuery();
var bodyStr = pm.request.body.raw;
var sign=CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(isoString + method + path + bodyStr, pm.variables.replaceIn('{{secret_key}}')))

pm.request.headers.add({
    key: 'OK-ACCESS-SIGN',
    value: sign
});

pm.request.headers.add({
    key: 'OK-ACCESS-TIMESTAMP',
    value: isoString
});