Любая интеграция со сторонним сервисом начинается с документации к API, получения ключей доступа и первыъ элементарных запросов к API на тестовом окружении. В этой статье пройдем первый шаг интеграции с биржей Bybit. Тестовое окружение этой биржи можно найти тут https://testnet.bybit.com/.
Проходим регистрацию и заходим в личный кадинет https://testnet.bybit.com/app/user/api-management для создания ключей API.
Если вы только. зарегистрировались, придется включить 2х факторную аутентификацию. Идем в личный кабинет https://testnet.bybit.com/app/user/security и подключаем.
На странице ключей нажимаем "Создать новый ключ" и получаем предложение выбрать, каким способом создать ключ:
- API ключи, созданные системой (генерирует ByBit)
- Ключи API, сгенерированные самостоятельно (генерируем самостоятельно)
Способ первый: API ключи, созданные системой
Самый простой и быстрый способ, не покидая сайта. Подходящий вариант для использования в тестовой сети и просто "поиграться с API".
ByBit поясняет как это работает:
API ключ, который генерирует система Bybit, работает на базе механизма HMAC. Вы получите пару ключей — публичный и приватный. Это пароли. Храните их в безопасности.
Нажимаем вариант API ключи, созданные системой и попадаем на страницу https://testnet.bybit.com/app/user/add-secret-key?type=system.
Выбираем параметры ключа. Оставляем вариант использования ключа "Транзакция API". Придумываем название. В секции "Разрешения API ключа" меняем на "Чтение и запись", ограничени по IP оставляем "Нет ограничений по IP" и выбираем все типы разрешений (кроме Вывода монет, он не совместим с неограниченным количеством IP)
Готово. Нажимаем Отправить, заверяем 2FA кодом и получаем готовую пару ключей с необходимыми параметрами доступа.
Получаем пару ключей:
- API ключ - это идентификатор нашего ключа
- API секрет - секретная HMAC ключ
Сохраняем их и никому не показываем.
Проверка системного HMAC ключа
Для проверки системного ключа попробуем сделать curl запрос.
Открываем документацию к API последней версии. На данный момент это v5 https://bybit-exchange.github.io/docs/v5/intro.
Видим, что надо подключаться к тестовой сети по адресу https://api-testnet.bybit.com.
- Testnet:
https://api-testnet.bybit.com - Mainnet (both endpoints are available):
https://api.bybit.com
https://api.bytick.com
Ниже находим инструкцию, что для аутентификации надо передавать следующие заголовки:
- X-BAPI-API-KEY - API ключ
- X-BAPI-TIMESTAMP - временная метка в UTC в милисекундах
- X-BAPI-SIGN - подпись параметров сделанная секретным HMAC ключем.
- X-BAPI-RECV-WINDOW - время жизни сессии, рекомендуется 5000 мс
Самое важное, это понять как подписывать сообщение, какие параметры и как надо объединить для шифрования секретным ключем. Ниже на странице видим инструкцию, пример генерации подписи и пример запроса:
Правило построения сообщения для подписи такое:
<timestamp><api_key><recv_window><queryString>
- timestamp - временная метка в UTC в милисекундах
- api_key - API ключ
- recv_window - время жизни сессии, по умолчанию 5000 мс
- queryString - параметры самого запроса; для GET-параметры URL запроса; для POST - json тело запроса, в том же формате, который передается в запросе.
Если возникли трудности, можете подсмотреть примеры генерации подписи на разных языках от разработчиков ByBit https://github.com/bybit-exchange/api-usage-examples. К сожалению, примеры только на API v3, но способ шифрования подписи одинаковый и подходит для v5.
Попробуем получить BTC баланс аккаунта сделав GET запрос к /v5/account/wallet-balance
Скопируйте этот bash скрипт в файл test-bybit-system.sh, вставьте туда ваши "API ключ" и "API секрет" в API_KEY и SECRET соответственно. Сохраните файл и дайте права на выполнение.
Запускаем наш скрипт и должны получить подобный ответ в случае успеха:
$ ./test-bybit-system.sh
[GET] v5/account/wallet-balance?accountType=SPOT&coin=BTC
{"retCode":0,"retMsg":"OK","result":{"list":[{"accountType":"SPOT","accountIMRate":"","accountMMRate":"","accountLTV":"","totalEquity":"","totalWalletBalance":"","totalMarginBalance":"","totalAvailableBalance":"","totalPerpUPL":"","totalInitialMargin":"","totalMaintenanceMargin":"","coin":[]}]},"retExtInfo":{},"time":1680818525265}
Мой баланс спотового BTC кошелька на нуле, как видно.
Если же ответ получили подобный:
$ ./test-bybit-system.sh
[GET] v5/account/wallet-balance?accountType=SPOT&coin=BTC
{"retCode":10004,"retMsg":"Signature for this request is not valid.","result":{},"retExtInfo":{},"time":1680818279398}
то внимательно проверьте способ создания строки для подписи, передаете ли все необходимые заголовки в запросе и сравните с примерами от разработчиков ByBit https://github.com/bybit-exchange/api-usage-examples.
Способ второй: API ключи, сгенерированные самостоятельно
Более продвинутый способ, не покидая сайта. Подходит для использования в боевой сети. Более безопасный, так как секретный ключ остается у вас.
Самогенерируемые API-ключи работают с RSA-шифрованием. Вы должны создать ваши публичные и приватные ключи с помощью программного обеспечения, и только после этого предоставить ваш публичный ключ Bybit. Мы не храним ваш приватный ключ ни при каких обстоятельствах. В настоящее время поддерживается API v3 и v5.
Выбираем Ключи API, сгенерированные самостоятельно.
Для этого способа запускаем в терминале всего 2 команды для генерации приватного RSA ключа:
$ openssl genrsa -out test-bybit-prv.pem 2048
И для генерации по нему публичного ключа:
$ openssl rsa -in test-bybit-prv.pem -pubout -outform PEM -out test-bybit-pub.pem
После этого у нас в дериктории должно лежать 2 файла:
- test-bybit-prv.pem - секретный RSA ключ в 2048 бит
- test-bybit-pub.pem - публичный ключ, для проверки подписи
Копируем содержимое файла test-bybit-pub.pem.
Возврщаемся на страницу добавления RSA ключа https://testnet.bybit.com/app/user/add-secret-key?type=auto.
Выбираем параметры ключа. Оставляем вариант использования ключа "Транзакция API". Придумываем название. В поле "Ваш публичный ключ" вставляем сожержимое файла test-bybit-pub.pem.
В секции "Разрешения API ключа" меняем на "Чтение и запись", ограничени по IP оставляем "Нет ограничений по IP" и выбираем все типы разрешений (кроме Вывода монет, он не совместим с неограниченным количеством IP)
Нажимаем Отправить, заверяем 2FA кодом и получаем API ключ для нашего публичного RSA ключа с необходимыми параметрами доступа.
Сохраняем его для использования в запросах.
Проверка сгенерированного RSA ключа
Действия аналогичные инструкции для системного HMAC ключа выше, но способ создания подписи немного иной, с использованием файла с приватной частью ключа.
Скопируйте себе файл test-bybit-generated.sh
вставьте туда ваш "API ключ" в переменную API_KEY. Сохраните файл и дайте права на выполнение.
Запускаем наш скрипт и должны получить подобный ответ в случае успеха:
$ ./test-bybit-system.sh
[GET] v5/account/wallet-balance?accountType=SPOT&coin=BTC
{"retCode":0,"retMsg":"OK","result":{"list":[{"accountType":"SPOT","accountIMRate":"","accountMMRate":"","accountLTV":"","totalEquity":"","totalWalletBalance":"","totalMarginBalance":"","totalAvailableBalance":"","totalPerpUPL":"","totalInitialMargin":"","totalMaintenanceMargin":"","coin":[]}]},"retExtInfo":{},"time":1680818525265}
Вот и всё. Мы смогли создать ключи для интеграции с API биржы Bybit и проверили их работоспособность.
Если у вас возникли проблемы или вопросы, оставляейте комментарий. Подписывайтесь на мой канал в ожидании новых публикаций.