R Запрос на удаление GDAX-API

У меня проблемы с запросами DELETE в R. Мне удалось выполнить запросы GET и POST, используя приведенный ниже код. Любая помощь/указатели будут оценены.

Для работы потребуются api.key, secret и passphrase из GDAX.

Вот моя функция:

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 и POST.

Ссылка: документы GDAX API


person Drj    schedule 28.12.2017    source источник


Ответы (2)


просто предположение, поскольку я не знаком с API, но, возможно, вам не хватает «идентификатора заказа» ...

посмотрите: https://docs.gdax.com/?javascript#cancel-an-order

person AlphaDrivers    schedule 28.12.2017
comment
Есть две конечные точки. Один, чтобы отменить все, а другой, чтобы отменить заказ. Если бы я пропустил идентификатор заказа, у меня был бы неверный запрос, а не недействительная подпись. - person Drj; 29.12.2017

В порядке. Я последовал совету @mrflick и указал свое подключение к requestbin на основании его отзыва о другой, но связанный вопрос.

После тщательной проверки я понял, что мой запрос по какой-то причине был обработан как запрос POST, а не запрос DELETE. Поэтому я решил заменить функцию getURL другой функцией более высокого уровня из RCurl, чтобы она работала.

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

Все остальное остается прежним. Судя по всему, проблем с подписью никогда не было.

Я добавил эту функцию в свою неофициальную оболочку rgdax.

EDIT::
Неофициальная оболочка теперь является официальной и находится в CRAN.

person Drj    schedule 29.12.2017