future-public: add kline request

This commit is contained in:
mahdi msr 2025-09-26 16:22:44 +03:30
parent 429c956e37
commit 0503da7349
5 changed files with 83 additions and 1 deletions

View File

@ -3,4 +3,5 @@
// config for Msr/LaravelBitunixApi // config for Msr/LaravelBitunixApi
return [ return [
'future_base_uri' => 'https://fapi.bitunix.com/',
]; ];

View File

@ -2,4 +2,34 @@
namespace Msr\LaravelBitunixApi; 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;
}
}

View File

@ -2,6 +2,7 @@
namespace Msr\LaravelBitunixApi; namespace Msr\LaravelBitunixApi;
use Msr\LaravelBitunixApi\Requests\FutureKLineRequestContract;
use Spatie\LaravelPackageTools\Package; use Spatie\LaravelPackageTools\Package;
use Spatie\LaravelPackageTools\PackageServiceProvider; use Spatie\LaravelPackageTools\PackageServiceProvider;
use Msr\LaravelBitunixApi\Commands\LaravelBitunixApiCommand; use Msr\LaravelBitunixApi\Commands\LaravelBitunixApiCommand;
@ -22,4 +23,11 @@ class LaravelBitunixApiServiceProvider extends PackageServiceProvider
->hasMigration('create_laravel_bitunix_api_table') ->hasMigration('create_laravel_bitunix_api_table')
->hasCommand(LaravelBitunixApiCommand::class); ->hasCommand(LaravelBitunixApiCommand::class);
} }
public function packageRegistered(): void
{
parent::packageRegistered();
$this->app->bind(FutureKLineRequestContract::class, LaravelBitunixApi::class);
}
} }

View File

@ -0,0 +1,30 @@
<?php
namespace Msr\LaravelBitunixApi\Requests;
use Psr\Http\Message\ResponseInterface;
interface FutureKLineRequestContract
{
/**
* @param string $symbol
* @param string $interval
* @param int $limit
* @param int|null $startTime
* @param int|null $endTime
* @param string $type
* @return ResponseInterface
*
* interval could be: 1m 5m 15m 30m 1h 2h 4h 6h 8h 12h 1d 3d 1w 1M
* limit: max is 200
* startTime : milliseconds format
* endTime : milliseconds format
* type could be: LAST_PRICE, MARK_PRICE
*/
public function getFutureKline(string $symbol,
string $interval,
int $limit = 100,
?int $startTime = null,
?int $endTime = null,
string $type = 'LAST_PRICE'): ResponseInterface;
}

13
tests/KLineTest.php Normal file
View File

@ -0,0 +1,13 @@
<?php
use Msr\LaravelBitunixApi\Requests\FutureKLineRequestContract;
it('check kline request response code', function () {
$bootedClass = app(FutureKLineRequestContract::class);
$response = $bootedClass->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']);
});