You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R语言中实现Yobit交易API的认证请求?

在R语言中调用Yobit Trade API的认证实现

没问题,我来给你详细拆解Yobit Trade API的认证规则,以及在R里的具体实现方法,核心就是把签名生成和nonce的逻辑处理好。

核心认证规则

首先得把Yobit的认证要求摸清楚:

  • 所有Trade API请求都必须带两个HTTP请求头:
    • Key:就是你的Yobit API密钥,比如示例里的FAF816D16FFDFBD1D46EEF5D5B10D8A2
    • Sign:用HMAC-SHA512算法生成的数字签名,签名的内容是POST参数拼接成的字符串(格式类似param0=val0&param1=val1&nonce=1),签名时要用你的API密钥(注意是密钥,不是Key)作为加密密钥
  • nonce参数是必须项:最小值是1,最大值是2147483646,而且每次请求的nonce必须比上一次的大,绝对不能重复或者递减,否则请求会直接被拒绝

R语言实现步骤

接下来一步步来实现:

  1. 准备API凭证:先在Yobit后台生成你的Key和对应的密钥,记住密钥要妥善保管,绝对不能泄露给别人
  2. 生成合法的nonce:最简单的方式是用当前时间戳的整数部分,要是你在短时间内有多次请求,可以在时间戳基础上加个自增计数器,确保每次都递增
  3. 构造参数串:把所有请求参数(包括nonce)拼接成key=value&连接的字符串
  4. 生成签名:用R的openssl包来生成HMAC-SHA512签名
  5. 设置请求头并发送请求:用httr包来构造POST请求,带上KeySign头,以及参数串

完整代码示例

这里给你一个可直接参考的代码模板:

# 先加载需要的包,如果没装的话先执行install.packages(c("httr", "openssl"))
library(httr)
library(openssl)

# 从环境变量读取API凭证(强烈建议这么做,别直接写在代码里!)
api_key <- Sys.getenv("YOBIT_API_KEY")
api_secret <- Sys.getenv("YOBIT_API_SECRET")

# 生成nonce的函数:用时间戳+自增计数器,避免同一秒内请求重复
nonce_counter <- 0
get_valid_nonce <- function() {
  nonce_counter <<- nonce_counter + 1
  as.integer(Sys.time()) * 1000 + nonce_counter
}

# 封装Yobit Trade API调用函数
call_yobit_trade <- function(endpoint, params = list()) {
  # 强制添加nonce参数
  params$nonce <- get_valid_nonce()
  
  # 把参数按名称排序后拼接成字符串(确保签名生成和请求参数顺序一致)
  sorted_params <- params[order(names(params))]
  param_string <- paste0(names(sorted_params), "=", unlist(sorted_params), collapse = "&")
  
  # 生成HMAC-SHA512签名
  signature <- hmac(api_secret, param_string, algo = "sha512") %>% as.character()
  
  # 设置请求头
  request_headers <- add_headers(
    "Key" = api_key,
    "Sign" = signature
  )
  
  # 发送POST请求,Yobit Trade API的基础地址是https://yobit.net/tapi/
  response <- POST(
    url = paste0("https://yobit.net/tapi/", endpoint),
    body = param_string,
    encode = "form",
    request_headers
  )
  
  # 解析并返回响应结果
  content(response, "parsed")
}

# 示例:调用获取账户信息的接口(需要认证)
account_details <- call_yobit_trade("getInfo")
print(account_details)

注意事项

  • 一定要区分Keyapi_secretKey是放在请求头里的标识,api_secret是用来生成签名的加密密钥,别搞混了
  • nonce必须严格递增,用时间戳+计数器的方式能避免短时间内请求重复的问题
  • 参数拼接时最好按名称排序,这样能保证签名生成和请求参数的顺序完全一致,避免因为顺序问题导致签名验证失败
  • 绝对不要把API凭证硬编码在代码里,用环境变量读取是最安全的方式

内容的提问来源于stack exchange,提问作者Nikita Bessonov

火山引擎 最新活动