php-binance-api icon indicating copy to clipboard operation
php-binance-api copied to clipboard

Websocket UserData Futures

Open faca5 opened this issue 4 years ago • 0 comments

Hello.

How to change PHP code below to start working with FUTURES. Right now it works only on SPOT.

Thank you

PHP code: `/**

  • userData Issues userDataStream token and keepalive, subscribes to userData WebSocket

  • $balance_update = function($api, $balances) {

  • print_r($balances);

  • echo "Balance update".PHP_EOL;

  • };

  • $order_update = function($api, $report) {

  • echo "Order update".PHP_EOL;

  • print_r($report);

  • $price = $report['price'];

  • $quantity = $report['quantity'];

  • $symbol = $report['symbol'];

  • $side = $report['side'];

  • $orderType = $report['orderType'];

  • $orderId = $report['orderId'];

  • $orderStatus = $report['orderStatus'];

  • $executionType = $report['orderStatus'];

  • if( $executionType == "NEW" ) {

  • if( $executionType == "REJECTED" ) {

  • echo "Order Failed! Reason: {$report['rejectReason']}".PHP_EOL;

  • }

  • echo "{$symbol} {$side} {$orderType} ORDER #{$orderId} ({$orderStatus})".PHP_EOL;

  • echo "..price: {$price}, quantity: {$quantity}".PHP_EOL;

  • return;

  • }

  • //NEW, CANCELED, REPLACED, REJECTED, TRADE, EXPIRED

  • echo "{$symbol} {$side} {$executionType} {$orderType} ORDER #{$orderId}".PHP_EOL;

  • };

  • $api->userData($balance_update, $order_update);

  • @param $balance_callback callable function

  • @param bool $execution_callback callable function

  • @return null

  • @throws \Exception */ public function userData(&$balance_callback, &$execution_callback = false) { $response = $this->httpRequest("v1/userDataStream", "POST", []); $this->listenKey = $response['listenKey'];

    $this->info['balanceCallback'] = $balance_callback; $this->info['executionCallback'] = $execution_callback;

    $this->subscriptions['@userdata'] = true;

    $loop = \React\EventLoop\Factory::create(); $loop->addPeriodicTimer(30*60, function () { $listenKey = $this->listenKey; $this->httpRequest("v1/listenKey={$listenKey}", "PUT", []); }); $connector = new \Ratchet\Client\Connector($loop);

    // @codeCoverageIgnoreStart // phpunit can't cover async function $connector($this->getWsEndpoint() . $this->listenKey)->then(function ($ws) { $ws->on('message', function ($data) use ($ws) { if ($this->subscriptions['@userdata'] === false) { //$this->subscriptions[$endpoint] = null; $ws->close(); return; //return $ws->close(); } $json = json_decode($data); $type = $json->e; if ($type === "outboundAccountPosition") { $balances = $this->balanceHandler($json->B); $this->info['balanceCallback']($this, $balances); } elseif ($type === "executionReport") { $report = $this->executionHandler($json); if ($this->info['executionCallback']) { $this->info['executionCallback']($this, $report); } } }); $ws->on('close', function ($code = null, $reason = null) { // WPCS: XSS OK. echo "userData: WebSocket Connection closed! ({$code} - {$reason})" . PHP_EOL; }); }, function ($e) { // WPCS: XSS OK. echo "userData: Could not connect: {$e->getMessage()}" . PHP_EOL; });

    $loop->run(); }`

faca5 avatar Feb 23 '22 14:02 faca5