| name | ccxt-php |
| description | CCXT cryptocurrency exchange library for PHP developers. Covers both REST API (standard) and WebSocket API (real-time). Helps install CCXT, connect to exchanges, fetch market data, place orders, stream live tickers/orderbooks, handle authentication, and manage errors in PHP 8.1+. Use when working with crypto exchanges in PHP projects, trading bots, or web applications. Supports both sync and async (ReactPHP) usage. Use when this capability is needed. |
| metadata | {"author":"ccxt"} |
CCXT for PHP
A comprehensive guide to using CCXT in PHP projects for cryptocurrency exchange integration.
Installation
Via Composer (REST and WebSocket)
composer require ccxt/ccxt
Required PHP Extensions
- cURL
- mbstring (UTF-8)
- PCRE
- iconv
- gmp (for some exchanges)
Optional for Async/WebSocket
- ReactPHP (installed automatically with ccxt)
Quick Start
REST API - Synchronous
<?php
date_default_timezone_set('UTC');
require_once 'vendor/autoload.php';
$exchange = new \ccxt\binance();
$exchange->load_markets();
$ticker = $exchange->fetch_ticker('BTC/USDT');
print_r($ticker);
REST API - Asynchronous (ReactPHP)
<?php
use function React\Async\await;
date_default_timezone_set('UTC');
require_once 'vendor/autoload.php';
$exchange = new \ccxt\async\binance();
$ticker = await($exchange->fetch_ticker('BTC/USDT'));
print_r($ticker);
WebSocket API - Real-time Updates
<?php
use function React\Async\await;
use function React\Async\async;
date_default_timezone_set('UTC');
require_once 'vendor/autoload.php';
$exchange = new \ccxt\pro\binance();
while (true) {
$ticker = await($exchange->watch_ticker('BTC/USDT'));
print_r($ticker);
}
await($exchange->close());
REST vs WebSocket
| Mode | REST | WebSocket |
|---|
| Sync | \ccxt\binance() | (WebSocket requires async) |
| Async | \ccxt\async\binance() | \ccxt\pro\binance() |
| Feature | REST API | WebSocket API |
|---|
| Use for | One-time queries, placing orders | Real-time monitoring, live price feeds |
| Method prefix | fetch_* (fetch_ticker, fetch_order_book) | watch_* (watch_ticker, watch_order_book) |
| Speed | Slower (HTTP request/response) | Faster (persistent connection) |
| Rate limits | Strict (1-2 req/sec) | More lenient (continuous stream) |
| Best for | Trading, account management | Price monitoring, arbitrage detection |
Creating Exchange Instance
REST API - Synchronous
<?php
date_default_timezone_set('UTC');
require_once 'vendor/autoload.php';
$exchange = new \ccxt\binance([
'enableRateLimit' => true // Recommended!
]);
$exchange = new \ccxt\binance([
'apiKey' => 'YOUR_API_KEY',
'secret' => 'YOUR_SECRET',
'enableRateLimit' => true
]);
REST API - Asynchronous
<?php
use function React\Async\await;
$exchange = new \ccxt\async\binance([
'enableRateLimit' => true
]);
$ticker = await($exchange->fetch_ticker('BTC/USDT'));
WebSocket API
<?php
use function React\Async\await;
$exchange = new \ccxt\pro\binance();
$exchange = new \ccxt\pro\binance([
'apiKey' => 'YOUR_API_KEY',
'secret' => 'YOUR_SECRET'
]);
await($exchange->close());
Common REST Operations
Loading Markets
$exchange->load_markets();
$btc_market = $exchange->market('BTC/USDT');
print_r($btc_market['limits']['amount']['min']);
Fetching Ticker
$ticker = $exchange->fetch_ticker('BTC/USDT');
print_r($ticker['last']);
print_r($ticker['bid']);
print_r($ticker['ask']);
print_r($ticker['volume']);
$tickers = $exchange->fetch_tickers(['BTC/USDT', 'ETH/USDT']);
Fetching Order Book
$orderbook = $exchange->fetch_order_book('BTC/USDT');
print_r($orderbook['bids'][0]);
print_r($orderbook['asks'][0]);
$orderbook = $exchange->fetch_order_book('BTC/USDT', 5);
Creating Orders
Limit Order
$order = $exchange->create_limit_buy_order('BTC/USDT', 0.01, 50000);
print_r($order['id']);
$order = $exchange->create_limit_sell_order('BTC/USDT', 0.01, 60000);
$order = $exchange->create_order('BTC/USDT', 'limit', 'buy', 0.01, 50000);
Market Order
$order = $exchange->create_market_buy_order('BTC/USDT', 0.01);
$order = $exchange->create_market_sell_order('BTC/USDT', 0.01);
$order = $exchange->create_order('BTC/USDT', 'market', 'sell', 0.01);
Fetching Balance
$balance = $exchange->fetch_balance();
print_r($balance['BTC']['free']);
print_r($balance['BTC']['used']);
print_r($balance['BTC']['total']);
Fetching Orders
$open_orders = $exchange->fetch_open_orders('BTC/USDT');
$closed_orders = $exchange->fetch_closed_orders('BTC/USDT');
$all_orders = $exchange->fetch_orders('BTC/USDT');
$order = $exchange->fetch_order($order_id, 'BTC/USDT');
Fetching Trades
$trades = $exchange->fetch_trades('BTC/USDT', null, 10);
$my_trades = $exchange->fetch_my_trades('BTC/USDT');
Canceling Orders
$exchange->cancel_order($order_id, 'BTC/USDT');
$exchange->cancel_all_orders('BTC/USDT');
WebSocket Operations (Real-time)
Watching Ticker (Live Price Updates)
<?php
use function React\Async\await;
$exchange = new \ccxt\pro\binance();
while (true) {
$ticker = await($exchange->watch_ticker('BTC/USDT'));
print_r($ticker['last']);
}
await($exchange->close());
Watching Order Book (Live Depth Updates)
<?php
use function React\Async\await;
$exchange = new \ccxt\pro\binance();
while (true) {
$orderbook = await($exchange->watch_order_book('BTC/USDT'));
print_r('Best bid: ' . $orderbook['bids'][0][0]);
print_r('Best ask: ' . $orderbook['asks'][0][0]);
}
await($exchange->close());
Watching Trades (Live Trade Stream)
<?php
use function React\Async\await;
$exchange = new \ccxt\pro\binance();
while (true) {
$trades = await($exchange->watch_trades('BTC/USDT'));
foreach ($trades as $trade) {
print_r($trade['price'] . ' ' . $trade['amount'] . ' ' . $trade['side']);
}
}
await($exchange->close());
Watching Your Orders (Live Order Updates)
<?php
use function React\Async\await;
$exchange = new \ccxt\pro\binance([
'apiKey' => 'YOUR_API_KEY',
'secret' => 'YOUR_SECRET'
]);
while (true) {
$orders = await($exchange->watch_orders('BTC/USDT'));
foreach ($orders as $order) {
print_r($order['id'] . ' ' . $order['status'] . ' ' . $order['filled']);
}
}
await($exchange->close());
Watching Balance (Live Balance Updates)
<?php
use function React\Async\await;
$exchange = new \ccxt\pro\binance([
'apiKey' => 'YOUR_API_KEY',
'secret' => 'YOUR_SECRET'
]);
while (true) {
$balance = await($exchange->watch_balance());
print_r('BTC: ' . $balance['BTC']['total']);
}
await($exchange->close());
Complete Method Reference
Market Data Methods
Tickers & Prices
fetchTicker(symbol) - Fetch ticker for one symbol
fetchTickers([symbols]) - Fetch multiple tickers at once
fetchBidsAsks([symbols]) - Fetch best bid/ask for multiple symbols
fetchLastPrices([symbols]) - Fetch last prices
fetchMarkPrices([symbols]) - Fetch mark prices (derivatives)