Использование httr для размещения заказов через API BitMex

Я пытаюсь использовать пакет httr R для размещения заказов на BitMex через их API.

Здесь я нашел некоторые рекомендации, и после указания и моего API-ключа, и секретного в соответственно объектах K и S, я попробовал следующее

verb <- 'POST'
expires <- floor(as.numeric(Sys.time() + 10000))
path <- '/api/v1/order'
data <- '{"symbol":"XBTUSD","price":4500,"orderQty":10}'

body <- paste0(verb, path, expires, data)
signature <- hmac(S, body, algo = 'sha256')

body_l <- list(verb = verb, expires = expires, path = path, data = data)

И тогда оба:

msg <- POST('https://www.bitmex.com/api/v1/order', encode = 'json', body = body_l, add_headers('api-key' = K, 'api-signature' = signature, 'api-expires' = expires))

а также:

msg <- POST('https://www.bitmex.com/api/v1/order', body = body, add_headers('api-key' = K, 'api-signature' = signature, 'api-expires' = expires))

Дайте мне то же сообщение об ошибке при проверке:

rawToChar(msg$content)
[1] "{\"error\":{\"message\":\"Signature not valid.\",\"name\":\"HTTPError\"}}"

Я пытался настроить его в соответствии с тем, как BitMex объясняет использование их API, но мне кажется, что-то не хватает. Они перечисляют пару проблем, которые могут лежать в основе моей недействительной проблемы с подписью, но, похоже, они мне не помогают. Следуя их примеру, я получаю точно такие же хеши, так что, похоже, в порядке.

0 ответов

Немного опоздал на вечеринку здесь, но, надеюсь, это поможет!

Ваш POST-вызов требует лишь незначительных изменений:

  • Добавить content_type_json()

  • включают .headers = c('the headers') в add_headers(). См. Пример ниже:

library(httr)
library(digest)

S <- "your api secret"
K <- "your api key"

verb <- 'POST'
expires <- floor(as.numeric(Sys.time() + 10))
path <- '/api/v1/order'
data <- '{"symbol":"XBTUSD","price":4500,"orderQty":10}'

body <- paste0(verb, path, expires, data)
signature <- hmac(S, body, algo = 'sha256')

msg <- POST('https://www.bitmex.com/api/v1/order', 
            encode = 'json', 
            body = data, 
            content_type_json(),
            add_headers(.headers = c('api-key' = K, 
                        'api-signature' = signature, 
                        'api-expires' = expires)))

content(msg, "text")

У меня есть пакет для CRAN - bitmexr - который предоставляет оболочку для большинства конечных точек API BitMEX, которые могут вас заинтересовать. Все еще довольно "молодой" пакет, поэтому я буду приветствовать любые отзывы!

Другие вопросы по тегам