kucoin / kucoin-php-sdk
PHP SDK for KuCoin API
Installs: 41 021
Dependents: 0
Suggesters: 0
Security: 0
Stars: 79
Watchers: 12
Forks: 41
Open Issues: 5
Requires
- php: >=5.5.0
- ext-json: *
- guzzlehttp/guzzle: ^6.0|^7.0
- monolog/monolog: ~1.0|~2.0|~3.0
- ratchet/pawl: ^0.4.1
Requires (Dev)
- phpunit/phpunit: ^5.7
- dev-master
- v1.1.32
- v1.1.31
- v1.1.30
- v1.1.29
- v1.1.28
- v1.1.27
- v1.1.26
- v1.1.25
- v1.1.24
- v1.1.23
- v1.1.22
- v1.1.21
- v1.1.20
- v1.1.19
- 1.1.18
- v1.1.17
- v1.1.16
- v1.1.15
- v1.1.14
- v1.1.13
- v1.1.12
- v1.1.11
- v1.1.10
- v1.1.9
- v1.1.8
- v1.1.7
- v1.1.6
- v1.1.5
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.12
- v1.0.11
- v1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-feature/enhance-websocket
- dev-revert-137-master
- dev-revert-138-master
This package is auto-updated.
Last update: 2024-10-23 09:12:06 UTC
README
The detailed document https://docs.kucoin.com, in order to receive the latest API change notifications, please
Watch
this repository.
Requirements
Install
Install package via Composer.
composer require "kucoin/kucoin-php-sdk:~1.1.0"
Usage
Choose environment
// Switch to the sandbox environment KuCoinApi::setBaseUri('https://api.kucoin.com');
Debug mode & logging
// Debug mode will record the logs of API and WebSocket to files in the directory "KuCoinApi::getLogPath()" according to the minimum log level "KuCoinApi::getLogLevel()". KuCoinApi::setDebugMode(true); // Logging in your code // KuCoinApi::setLogPath('/tmp'); // KuCoinApi::setLogLevel(Monolog\Logger::DEBUG); KuCoinApi::getLogger()->debug("I'm a debug message");
Examples
See the test case for more examples.
Example of API without
authentication
use KuCoin\SDK\PublicApi\Time; $api = new Time(); $timestamp = $api->timestamp(); var_dump($timestamp);
Note
To reinforce the security of the API, KuCoin upgraded the API key to version 2.0, the validation logic has also been changed. It is recommended to create(https://www.kucoin.com/account/api) and update your API key to version 2.0. The API key of version 1.0 will be still valid until May 1, 2021
Example of API with
authentication
use KuCoin\SDK\PrivateApi\Account; use KuCoin\SDK\Exceptions\HttpException; use KuCoin\SDK\Exceptions\BusinessException; use KuCoin\SDK\Auth; // Auth version v2 (recommend) $auth = new Auth('key', 'secret', 'passphrase', Auth::API_KEY_VERSION_V2); // Auth version v1 // $auth = new Auth('key', 'secret', 'passphrase'); $api = new Account($auth); try { $result = $api->getList(['type' => 'main']); var_dump($result); } catch (HttpException $e) { var_dump($e->getMessage()); } catch (BusinessException $e) { var_dump($e->getMessage()); }
Example of WebSocket feed
use KuCoin\SDK\Auth; use KuCoin\SDK\PrivateApi\WebSocketFeed; use Ratchet\Client\WebSocket; use React\EventLoop\Loop; use React\EventLoop\LoopInterface; $auth = null; // Need to pass the Auth parameter when subscribing to a private channel($api->subscribePrivateChannel()). // $auth = new Auth('key', 'secret', 'passphrase'); $api = new WebSocketFeed($auth); // Use a custom event loop instance if you like //$loop = Loop::get(); //$loop->addPeriodicTimer(1, function () { // var_dump(date('Y-m-d H:i:s')); //}); //$api->setLoop($loop); $query = ['connectId' => uniqid('', true)]; $channels = [ ['topic' => '/market/ticker:KCS-BTC'], // Subscribe multiple channels ['topic' => '/market/ticker:ETH-BTC'], ]; $api->subscribePublicChannels($query, $channels, function (array $message, WebSocket $ws, LoopInterface $loop) use ($api) { var_dump($message); // Subscribe another channel // $ws->send(json_encode($api->createSubscribeMessage('/market/ticker:LTC-BTC'))); // Unsubscribe the channel // $ws->send(json_encode($api->createUnsubscribeMessage('/market/ticker:ETH-BTC'))); // Stop loop // $loop->stop(); }, function ($code, $reason) { echo "OnClose: {$code} {$reason}\n"; });
Add custom options
use KuCoin\SDK\PublicApi\Time; $api = new Time(null, new GuzzleHttp([ 'curl' => [ // custom cURL options: https://www.php.net/manual/en/function.curl-setopt CURLOPT_TCP_NODELAY => true, // Disable TCP's Nagle algorithm, which tries to minimize the number of small packets on the network. // ... ], ])); $timestamp = $api->timestamp(); var_dump($timestamp);
use KuCoin\SDK\Auth; use KuCoin\SDK\Http\GuzzleHttp; use KuCoin\SDK\KuCoinApi; use KuCoin\SDK\PrivateApi\WebSocketFeed; use Ratchet\Client\WebSocket; use React\EventLoop\Factory; use React\EventLoop\LoopInterface; $api = new WebSocketFeed( null, new GuzzleHttp([ 'curl' => [ // Custom cURL options: https://www.php.net/manual/en/function.curl-setopt CURLOPT_TCP_NODELAY => true, // Disable TCP's Nagle algorithm, which tries to minimize the number of small packets on the network. // ... ], ]) ); $query = ['connectId' => uniqid('', true)]; $channels = [ ['topic' => '/market/ticker:KCS-BTC'], ['topic' => '/market/ticker:ETH-BTC'], ]; $options = ['tcp' => ['tcp_nodelay' => true]]; // Custom socket context options: https://www.php.net/manual/zh/context.socket $api->subscribePublicChannels($query, $channels, function (array $message, WebSocket $ws, LoopInterface $loop) use ($api) { var_dump($message); }, function ($code, $reason) { echo "OnClose: {$code} {$reason}\n"; }, $options);
⚡️Coroutine HTTP client for asynchronous IO
See the benchmark, almost
20x
faster thancurl
.
pecl install swoole composer require swlib/saber
use KuCoin\SDK\Auth; use KuCoin\SDK\Http\SwooleHttp; use KuCoin\SDK\KuCoinApi; use KuCoin\SDK\PrivateApi\Order; use KuCoin\SDK\PublicApi\Time; // Require PHP 7.1+ and Swoole 2.1.2+ // Require running in cli mode go(function () { $api = new Time(null, new SwooleHttp); $timestamp = $api->timestamp(); var_dump($timestamp); }); go(function () { // Auth version v2 (recommend) $auth = new Auth('key', 'secret', 'passphrase', Auth::API_KEY_VERSION_V2); // Auth version v1 // $auth = new Auth('key', 'secret', 'passphrase'); $api = new Order($auth, new SwooleHttp); // Create 50 orders CONCURRENTLY in 1 second for ($i = 0; $i < 50; $i++) { go(function () use ($api, $i) { $order = [ 'clientOid' => uniqid(), 'price' => '1', 'size' => '1', 'symbol' => 'BTC-USDT', 'type' => 'limit', 'side' => 'buy', 'remark' => 'ORDER#' . $i, ]; try { $result = $api->create($order); var_dump($result); } catch (\Throwable $e) { var_dump($e->getMessage()); } }); } });
API list
KuCoin\SDK\PrivateApi\Account
KuCoin\SDK\PrivateApi\Deposit
KuCoin\SDK\PrivateApi\TradeFee
KuCoin\SDK\PrivateApi\Symbol
KuCoin\SDK\PrivateApi\Order
KuCoin\SDK\PrivateApi\OrderTest
KuCoin\SDK\PrivateApi\OcoOrder
KuCoin\SDK\PrivateApi\Earn
KuCoin\SDK\PrivateApi\StopOrder
KuCoin\SDK\PrivateApi\Fill
KuCoin\SDK\PrivateApi\WebSocketFeed
KuCoin\SDK\PrivateApi\Withdrawal
KuCoin\SDK\PublicApi\Currency
KuCoin\SDK\PublicApi\Symbol
KuCoin\SDK\PrivateApi\Margin
KuCoin\SDK\PrivateApi\Lend
KuCoin\SDK\PrivateApi\IsolatedMargin
KuCoin\SDK\PublicApi\Time
KuCoin\SDK\PublicApi\ServiceStatus
Run tests
Modify your API key in
phpunit.xml
first.
# Add your API configuration items into the environmental variable first export API_BASE_URI=https://api.kucoin.com export API_KEY=key export API_SECRET=secret export API_PASSPHRASE=passphrase export API_KEY_VERSION=2 composer test