R GDAX-API删除请求

时间:2017-12-28 17:42:17

标签: r rcurl httr coinbase-api gdax-api

我在使用R中的DELETE个请求时遇到问题。我已成功使用以下代码发出GETPOST个请求。任何帮助/指针将不胜感激。

需要api.keysecret&来自GDAX的passphrase工作。

这是我的功能:

library(RCurl)
library(jsonlite)
library(httr)
library(digest)

cancel_order <- function(api.key,
                         secret,
                         passphrase) {
  api.url <- "https://api.gdax.com"

  #get url extension----
  req.url <- "/orders/"

  #define method----
  method = "DELETE"

  url <- paste0(api.url, req.url)

  timestamp <-
    format(as.numeric(Sys.time()), digits = 13) # create nonce
  key <- base64Decode(secret, mode = "raw") # encode api secret

  #create final end point----
  what <- paste0(timestamp, method, req.url)

  #create encoded signature----
  sign <-
    base64Encode(hmac(key, what, algo = "sha256", raw = TRUE)) # hash

  #define headers----
  httpheader <- list(
    'CB-ACCESS-KEY' = api.key,
    'CB-ACCESS-SIGN' = sign,
    'CB-ACCESS-TIMESTAMP' = timestamp,
    'CB-ACCESS-PASSPHRASE' = passphrase,
    'Content-Type' = 'application/json'
  )
  ##------------------------------------------------
  response <- getURL(
    url = url,
    curl = getCurlHandle(useragent = "R"),
    httpheader = httpheader
  )
  print(rawToChar(response)) #rawToChar only on macOS and not on Win
}

我得到的错误是"{\"message\":\"invalid signature\"}",即使相同的命令将代码和签名将与GET&amp; POST

参考: GDAX API DOCs

2 个答案:

答案 0 :(得分:0)

只是一个猜测因为我不熟悉API,但也许你错过了&#39; order-id&#39; ...

看看:https://docs.gdax.com/?javascript#cancel-an-order

答案 1 :(得分:0)

确定。我根据他对requestbin的反馈,接受了@ mrflick的建议并指出我与different but related question的联系。

经过仔细检查后,我意识到由于某种原因我的请求被视为POST请求,而不是DELETE请求。因此,我决定将getURL函数替换为RCurl中的另一个更高级函数,以使其正常工作。

response <- httpDELETE(
  url = url,
  curl = getCurlHandle(useragent = "R"),
  httpheader = httpheader
)

其他一切都是一样的。显然,签名从未出现过问题。

我现在已将此功能添加到我的非官方包装rgdax

修改::
非正式的包装现在是正式的,并且在CRAN上。