carpenstar/bybitapi-sdk-websockets-v5

5.0.1.0 2025-04-13 22:34 UTC

This package is auto-updated.

Last update: 2025-04-17 20:32:35 UTC


README

Important

This is an unofficial SDK for interacting with the ByBit exchange.
Development is maintained by a single individual on a voluntary basis as time permits.
Contact support:

Note

This package extends bybitapi-sdk-core

📡 Available Data Streams

Public Streams

Name Documentation Function Call Example
Kline Docs go go
Orderbook Docs go go
Trade Docs go go
Ticker Docs In development... In development...
All Liquidation Docs In development... In development...
LT Kline Docs In development... In development...
LT Ticker Docs In development... In development...
LT Nav Docs In development... In development...

Private Streams

Name Documentation Function Call Example
Position Docs In development... In development...
Execution Docs In development... In development...
Fast Execution Docs In development... In development...
Order Docs In development... In development...
Wallet Docs In development... In development...
Greek Docs In development... In development...

🛠 Installation

composer require carpenstar/bybitapi-sdk-websockets-v5

Requirements:

  • PHP ≥ 7.4
  • posix extension
  • pcntl extension

🚀 Basic Guide

1. Establishing Connection

// bybit-kline.php
use Carpenstar\ByBitAPI\BybitAPI;

require_once('vendor/autoload.php');

$websocket = (new BybitAPI())
    ->setCredentials('ws://stream.bybit.com/v5')
    ->websockets();

2. Subscribing to Data Stream (Kline Example)

use Carpenstar\ByBitAPI\Core\Enums\WebSocketsIntervalEnum;
use Carpenstar\ByBitAPI\Core\Objects\WebSockets\Channels\DefaultCallbackHandler;

$websocket->klinePerpetual(
    ['BTCUSDT'],                      // Trading instruments
    WebSocketsIntervalEnum::KLINE_1_MINUTE,  // Interval
    new DefaultCallbackHandler()       // Message handler
);

3. Message Handler

Example handler (recommended for testing):

namespace Carpenstar\ByBitAPI\Core\Objects\WebSockets\Channels;

class DefaultCallbackHandler extends ChannelHandler
{
    public function apiExceptionHandler(ExceptionResponse $dtoMessage, TcpConnection $connection): void
    {
        throw new ApiException($dtoMessage->getReturnMessage());
    }

    public function connectionHandle(WebSocketConnectionResponse $message, TcpConnection $connection): void
    {
        var_dump($message);
    }

    public function handle(IResponseDataInterface $message, TcpConnection $connection): void
    {
        var_dump($message);
    }
}

4. Starting Connection

use Carpenstar\ByBitAPI\BybitAPI;
use Carpenstar\ByBitAPI\Core\Objects\WebSockets\Channels\DefaultCallbackHandler;
use Carpenstar\ByBitAPI\Core\Enums\WebSocketsIntervalEnum;

require_once('vendor/autoload.php');

(new BybitAPI())
    ->setCredentials('ws://stream.bybit.com/v5')
    ->websockets()
    ->klinePerpetual(['BTCUSDT'], WebSocketsIntervalEnum::KLINE_1_MINUTE, new DefaultCallbackHandler())
    ->execute(); // Initiate connection to the data stream

5. Running the Script:

php ./bybit-kline.php start

🎯 Successful Connection Example

JohnDoe@0b9374c43827:/var/www/html# php bybit-kline.php start
Workerman[index.php] start in DEBUG mode
-------------------------------------------- WORKERMAN --------------------------------------------
Workerman version:4.1.15          PHP version:7.4.33           Event-Loop:\Workerman\Events\Select
--------------------------------------------- WORKERS ---------------------------------------------
proto   user            worker          listen          processes    status           
tcp     root            none            none            1             [OK]            
---------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
object(Carpenstar\ByBitAPI\WebSocketsV5\PublicStream\Kline\Message\KlineMessage)#13 (4) {
  ["topic"]=>
  string(15) "kline.1.BTCUSDT"
  ["type"]=>
  string(8) "snapshot"
  ["timestamp"]=>
  object(DateTime)#15 (3) {
    ["date"]=>
    string(26) "2025-04-11 18:21:04.000000"
    ["timezone_type"]=>
    int(3)
    ["timezone"]=>
    string(3) "UTC"
  }
  ["data"]=>
  object(Carpenstar\ByBitAPI\Core\Objects\Collection\EntityCollection)#14 (1) {
    ["collection":protected]=>
    array(1) {
      [0]=>
      object(Carpenstar\ByBitAPI\WebSocketsV5\PublicStream\Kline\Message\KlineItemMessage)#17 (11) {
        ["start"]=>
        object(DateTime)#18 (3) {
          ["date"]=>
          string(26) "2025-04-11 18:21:00.000000"
          ["timezone_type"]=>
          int(3)
          ["timezone"]=>
          string(3) "UTC"
        }
        ["end"]=>
        object(DateTime)#19 (3) {
          ["date"]=>
          string(26) "2025-04-11 18:21:59.000000"
          ["timezone_type"]=>
          int(3)
          ["timezone"]=>
          string(3) "UTC"
        }
        ["interval"]=>
        string(1) "1"
        ["open"]=>
        float(83734.1)
        ["close"]=>
        float(83708.7)
        ["high"]=>
        float(83734.1)
        ["low"]=>
        float(83708.7)
        ["volume"]=>
        float(19.33)
        ["turnover"]=>
        float(1618253.6326)
        ["isConfirm"]=>
        bool(false)
        ["timestamp"]=>
        object(DateTime)#20 (3) {
          ["date"]=>
          string(26) "2025-04-11 18:21:04.000000"
          ["timezone_type"]=>
          int(3)
          ["timezone"]=>
          string(3) "UTC"
        }
      }
    }
  }
}
object(Carpenstar\ByBitAPI\Core\Objects\WebSockets\Entity\WebSocketConnectionResponse)#13 (5) {
  ["success":"Carpenstar\ByBitAPI\Core\Objects\WebSockets\Entity\WebSocketConnectionResponse":private]=>
  bool(true)
  ["returnMessage":"Carpenstar\ByBitAPI\Core\Objects\WebSockets\Entity\WebSocketConnectionResponse":private]=>
  string(0) ""
  ["connectionId":"Carpenstar\ByBitAPI\Core\Objects\WebSockets\Entity\WebSocketConnectionResponse":private]=>
  string(36) "55f0974c-0e78-4f93-8a30-d2ce115d9da7"
  ["reqId":"Carpenstar\ByBitAPI\Core\Objects\WebSockets\Entity\WebSocketConnectionResponse":private]=>
  string(0) ""
  ["operation":"Carpenstar\ByBitAPI\Core\Objects\WebSockets\Entity\WebSocketConnectionResponse":private]=>
  string(9) "subscribe"
}

❓ Support

For any issues: Create a GitHub Issue or contact me on Telegram: @novisad0189 (please include "BybitSDK" in your first message)