diff --git a/config/bitunix-api.php b/config/bitunix-api.php index b9ffe0e..b0bbf2a 100644 --- a/config/bitunix-api.php +++ b/config/bitunix-api.php @@ -3,4 +3,5 @@ // config for Msr/LaravelBitunixApi return [ + 'future_base_uri' => 'https://fapi.bitunix.com/', ]; diff --git a/src/LaravelBitunixApi.php b/src/LaravelBitunixApi.php index 823fc07..90e4075 100644 --- a/src/LaravelBitunixApi.php +++ b/src/LaravelBitunixApi.php @@ -2,4 +2,34 @@ namespace Msr\LaravelBitunixApi; -class LaravelBitunixApi {} +use GuzzleHttp\Client; +use Msr\LaravelBitunixApi\Requests\FutureKLineRequestContract; +use Psr\Http\Message\ResponseInterface; + +class LaravelBitunixApi implements FutureKLineRequestContract +{ + private Client $publicFutureClient; + + public function __construct() + { + $this->publicFutureClient = new Client([ + 'base_uri' => config('bitunix-api.future_base_uri') . '/api/v1/futures/market/', + ]); + } + + public function getFutureKline(string $symbol, string $interval, int $limit = 100, ?int $startTime = null, ?int $endTime = null, string $type = 'LAST_PRICE'): ResponseInterface + { + $response = $this->publicFutureClient->get('kline', [ + 'query' => [ + 'symbol' => $symbol, + 'interval' => $interval, + 'limit' => $limit, + 'startTime' => $startTime, + 'endTime' => $endTime, + 'type' => $type, + ] + ]); + + return $response; + } +} diff --git a/src/LaravelBitunixApiServiceProvider.php b/src/LaravelBitunixApiServiceProvider.php index c30e13b..b8aa134 100644 --- a/src/LaravelBitunixApiServiceProvider.php +++ b/src/LaravelBitunixApiServiceProvider.php @@ -2,6 +2,7 @@ namespace Msr\LaravelBitunixApi; +use Msr\LaravelBitunixApi\Requests\FutureKLineRequestContract; use Spatie\LaravelPackageTools\Package; use Spatie\LaravelPackageTools\PackageServiceProvider; use Msr\LaravelBitunixApi\Commands\LaravelBitunixApiCommand; @@ -22,4 +23,11 @@ class LaravelBitunixApiServiceProvider extends PackageServiceProvider ->hasMigration('create_laravel_bitunix_api_table') ->hasCommand(LaravelBitunixApiCommand::class); } + + public function packageRegistered(): void + { + parent::packageRegistered(); + + $this->app->bind(FutureKLineRequestContract::class, LaravelBitunixApi::class); + } } diff --git a/src/Requests/FutureKLineRequestContract.php b/src/Requests/FutureKLineRequestContract.php new file mode 100644 index 0000000..2e36784 --- /dev/null +++ b/src/Requests/FutureKLineRequestContract.php @@ -0,0 +1,30 @@ +getFutureKline('BTCUSDT', '1h', 100, now()->subHours(6)->milliseconds, now()->milliseconds); + expect($response->getStatusCode()) + ->toBe(200) + ->and(json_decode($response->getBody()->getContents())) + ->toHaveKeys(['code', 'data', 'msg']); +});