This v3 websoket code is correct?

Get Code

<?php // Step 1: Exchange code for access_token $code = '*****'; // Replace with your fresh authorization code from the "Get Code" button $client_id = '**************************'; $client_secret = '***********'; $redirect_uri = '**************'; $url = 'https://api-v2.upstox.com/login/authorization/token'; $postData = http_build_query([ 'code' => $code, 'client_id' => $client_id, 'client_secret' => $client_secret, 'redirect_uri' => $redirect_uri, 'grant_type' => 'authorization_code', ]); $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postData, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Content-Type: application/x-www-form-urlencoded' ], ]); $response = curl_exec($ch); curl_close($ch); if (!$response) { die("❌ Failed to get access token.\n"); } $data = json_decode($response, true); if (!isset($data['access_token'])) { die("❌ Error fetching token: " . $response . "\n"); } $accessToken = $data['access_token']; echo "✅ Access token obtained\n"; // Step 2: Include composer autoload (adjust path if needed) //require_once __DIR__ . '/vendor/autoload.php'; $autoloadPath = dirname(__DIR__, 5) . '/upstox-php-master/vendor/autoload.php'; require_once $autoloadPath; use function Amp\Websocket\Client\connect; use Com\Upstox\Marketdatafeederv3udapi\Rpc\Proto\FeedResponse; /** * Decode Protobuf message from server */ function decodeProtobuf($buffer) { $feedResponse = new FeedResponse(); if ($buffer !== null && $buffer !== '') { $feedResponse->mergeFromString($buffer); } else { echo "⚠️ Empty message received.\n"; } return $feedResponse; } /** * Get WebSocket authorization URL */ function getMarketDataFeedAuthorize($accessToken) { $url = 'https://api.upstox.com/v3/feed/market-data-feed/authorize'; $headers = [ 'Accept: application/json', 'Authorization: Bearer ' . $accessToken ]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); curl_close($ch); $decoded = json_decode($response, true); if (!isset($decoded['data']['authorized_redirect_uri'])) { echo "❌ Failed to authorize WebSocket feed:\n"; print_r($decoded); exit; } return $decoded['data']['authorized_redirect_uri']; } /** * Connect and stream market data */ function fetchMarketUpdates($accessToken) { $wsUrl = getMarketDataFeedAuthorize($accessToken); echo "🔗 Connecting to WebSocket: $wsUrl\n"; $connection = connect($wsUrl); echo "✅ WebSocket connected!\n"; // Prepare subscription payload $data = [ "guid" => uniqid(), "method" => "sub", "data" => [ "mode" => "full", "instrumentKeys" => [ "NSE_INDEX|Nifty 50", "BSE_INDEX|SENSEX" ] ] ]; $binaryData = json_encode($data); $connection->sendBinary($binaryData); // Listen for messages foreach ($connection as $message) { $payload = $message->buffer(); if ($payload === '100') { echo "✅ Session ended by server.\n"; $connection->close(); break; } if (!empty($payload)) { $decoded = decodeProtobuf($payload); echo $decoded->serializeToJsonString() . "\n"; } } } // Run the WebSocket listener fetchMarketUpdates($accessToken);