Я пытался реализовать клиент для частного API Kraken (https://www.kraken.com/help/api), и, поскольку у меня возникли некоторые проблемы с этим, я пытался получить доступ к тому же самому API с CURL.
Тем не менее, я не могу заставить себя работать, и я думаю, что я не использую правильные инструменты командной строки для генерации хешей и дайджестов.
При доступе к частному API к запросу необходимо добавить следующие заголовки:
API-Key = «key»
API-Sign = Message signature using HMAC-SHA512 of (URI path + SHA256(nonce + POST data)) and base64 decoded «secret»
В командной строке я делаю следующие шаги:
echo -n "123nonce=123" | openssl sha256
результат: (stdin)= 353f9df92ab1d5e5afe06bb7d1bb42a8ef6654b633d94818007aeafbaf03ca3d
echo -n "/0/private/Balance353f9df92ab1d5e5afe06bb7d1bb42a8ef6654b633d94818007aeafbaf03ca3d" | openssl sha512 -hmac $(echo -n "wqtzZWNyZXTCuw==" | base64 -d)
результат: (stdin)= 6f19f8f058b0e6dc835692840ccdebc1c415f00d42b75b3d3c21ef5fd43f006e30cc9b51c63aba3268a534bf68978d60d2362bffd31c8125553fb8ec41b2f64d
echo -n "6f19f8f058b0e6dc835692840ccdebc1c415f00d42b75b3d3c21ef5fd43f006e30cc9b51c63aba3268a534bf68978d60d2362bffd31c8125553fb8ec41b2f64d" | base64
результат:
NmYxOWY4ZjA1OGIwZTZkYzgzNTY5Mjg0MGNjZGViYzFjNDE1ZjAwZDQyYjc1YjNkM2MyMWVmNWZk
NDNmMDA2ZTMwY2M5YjUxYzYzYWJhMzI2OGE1MzRiZjY4OTc4ZDYwZDIzNjJiZmZkMzFjODEyNTU1
M2ZiOGVjNDFiMmY2NGQ=
curl -X POST -H "Accept: application/json" -H "API-Key: «key»" -H "API-Sign: NmYxOWY4ZjA1OGIwZTZkYzgzNTY5Mjg0MGNjZGViYzFjNDE1ZjAwZDQyYjc1YjNkM2MyMWVmNWZkNDNmMDA2ZTMwY2M5YjUxYzYzYWJhMzI2OGE1MzRiZjY4OTc4ZDYwZDIzNjJiZmZkMzFjODEyNTU1M2ZiOGVjNDFiMmY2NGQ=" -d "nonce=123" https://api.kraken.com/0/private/Balance
результат (предполагая действительные "ключ" и "секрет"): {"error":["EAPI:Invalid signature"]}
Но независимо от того, какие перестановки я пробую, я получаю ошибку "Неверная подпись".
Эти перестановки включают, но не ограничиваются:
- Base64, кодирующее значение API-Sign (это делают все общедоступные клиенты Kraken),
- верхний регистр, который должен быть закодирован в Base64,
- опуская "/" перед путем URI,
- оставив фактический номер nonce на передней панели SHA256.