Passed
Push — master ( bba056...1b0f90 )
by Fabian
02:22
created

KrakenApi::getClosedOrders()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 6
dl 0
loc 5
ccs 0
cts 4
cp 0
crap 2
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
 * @author  Fabian Hanisch
4
 * @since   16.07.2017 02:56
5
 * @version 1.0
6
 */
7
8
namespace HanischIt\KrakenApi;
9
10
use HanischIt\KrakenApi\External\HttpClient;
11
use HanischIt\KrakenApi\Model\AccountBalance\AccountBalanceRequest;
12
use HanischIt\KrakenApi\Model\AccountBalance\AccountBalanceResponse;
13
use HanischIt\KrakenApi\Model\AddOrder\AddOrderRequest;
14
use HanischIt\KrakenApi\Model\AddOrder\AddOrderResponse;
15
use HanischIt\KrakenApi\Model\Assets\AssetsRequest;
16
use HanischIt\KrakenApi\Model\Assets\AssetsResponse;
17
use HanischIt\KrakenApi\Model\ClosedOrders\ClosedOrdersRequest;
18
use HanischIt\KrakenApi\Model\ClosedOrders\ClosedOrdersResponse;
19
use HanischIt\KrakenApi\Model\GetTicker\TickerRequest;
20
use HanischIt\KrakenApi\Model\GetTicker\TickerResponse;
21
use HanischIt\KrakenApi\Model\Header;
22
use HanischIt\KrakenApi\Model\OpenOrders\OpenOrdersRequest;
23
use HanischIt\KrakenApi\Model\OpenOrders\OpenOrdersResponse;
24
use HanischIt\KrakenApi\Model\OrderBook\OrderBookRequest;
25
use HanischIt\KrakenApi\Model\OrderBook\OrderBookResponse;
26
use HanischIt\KrakenApi\Model\RequestInterface;
27
use HanischIt\KrakenApi\Model\RequestOptions;
28
use HanischIt\KrakenApi\Model\ResponseInterface;
29
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeRequest;
30
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeResponse;
31
use HanischIt\KrakenApi\Service\RequestService\Nonce;
32
use HanischIt\KrakenApi\Service\RequestService\Request;
33
use HanischIt\KrakenApi\Service\RequestService\RequestHeader;
34
35
/**
36
 * Class KrakenApi
37
 *
38
 * @package HanischIt\KrakenApi
39
 */
40
class KrakenApi
41
{
42
    /**
43
     * @var HttpClient
44
     */
45
    private $httpClient;
46
    /**
47
     * @var RequestHeader
48
     */
49
    private $requestHeader;
50
    /**
51
     * @var string
52
     */
53
    private $apiKey;
54
    /**
55
     * @var string
56
     */
57
    private $apiSign;
58
    /**
59
     * @var string
60
     */
61
    private $version;
62
    /**
63
     * @var string
64
     */
65
    private $endpoint;
66
67
    /**
68
     * KrakenApi constructor.
69
     *
70
     * @param string $apiKey
71
     * @param string $apiSign
72
     */
73
    public function __construct($apiKey, $apiSign)
74
    {
75
        $this->httpClient = new HttpClient(['verify' => false]);
76
        $this->requestHeader = new RequestHeader();
77
        $this->endpoint = 'https://api.kraken.com/';
78
        $this->version = '0';
79
        $this->apiKey = $apiKey;
80
        $this->apiSign = $apiSign;
81
    }
82
83
    /**
84
     * @return ServerTimeResponse|ResponseInterface
85
     */
86
    public function getServerTime()
87
    {
88
        $serverTimeRequest = new ServerTimeRequest();
89
90
        return $this->doRequest($serverTimeRequest);
91
    }
92
93
    /**
94
     * @return AccountBalanceResponse|ResponseInterface
95
     */
96
    public function getAccountBalance()
97
    {
98
        $accountBalanceRequest = new AccountBalanceRequest();
99
100
        return $this->doRequest($accountBalanceRequest);
101
    }
102
103
    /**
104
     * @param string     $pair
105
     * @param string     $type
106
     * @param string     $orderType
107
     * @param null|float $price
108
     * @param null|float $volume
109
     *
110
     * @return ResponseInterface|AddOrderResponse
111
     */
112
    public function addOrder($pair, $type, $orderType, $price = null, $volume = null)
113
    {
114
        $addOrderRequest = new AddOrderRequest($pair, $type, $orderType, $price, $volume);
115
116
        return $this->doRequest($addOrderRequest);
117
    }
118
119
    /**
120
     * @return ResponseInterface|AssetsResponse
121
     */
122
    public function getAssets()
123
    {
124
        $assetsRequest = new AssetsRequest();
125
126
        return $this->doRequest($assetsRequest);
127
    }
128
129
    /**
130
     * @param array $assetNames
131
     *
132
     * @return ResponseInterface|TickerResponse
133
     */
134
    public function getTicker(array $assetNames)
135
    {
136
        $tickerRequest = new TickerRequest($assetNames);
137
138
        return $this->doRequest($tickerRequest);
139
    }
140
141
    /**
142
     * @param string   $assetPair
143
     * @param int|null $count
144
     *
145
     * @return ResponseInterface|OrderBookResponse
146
     */
147
    public function getOrderBook($assetPair, $count = null)
148
    {
149
        $orderBookRequest = new OrderBookRequest($assetPair, $count);
0 ignored issues
show
Bug introduced by
It seems like $count can also be of type integer; however, parameter $count of HanischIt\KrakenApi\Mode...kRequest::__construct() does only seem to accept null, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

149
        $orderBookRequest = new OrderBookRequest($assetPair, /** @scrutinizer ignore-type */ $count);
Loading history...
150
151
        return $this->doRequest($orderBookRequest);
152
    }
153
154
    /**
155
     * @param bool $trades
156
     * @param null $userref
157
     *
158
     * @return ResponseInterface|OpenOrdersResponse
159
     */
160
    public function getOpenOrders($trades = false, $userref = null)
161
    {
162
        $orderBookRequest = new OpenOrdersRequest($trades, $userref);
163
164
        return $this->doRequest($orderBookRequest);
165
    }
166
167
    /**
168
     * @param bool        $trades
169
     * @param null        $userref
170
     * @param null|string $start
171
     * @param null|string $end
172
     * @param null|int    $ofs
173
     * @param null|string $closetime
174
     *
175
     * @return ClosedOrdersResponse|ResponseInterface
176
     */
177
    public function getClosedOrders($trades = false, $userref = null, $start = null, $end = null, $ofs = null, $closetime = null)
178
    {
179
        $orderBookRequest = new ClosedOrdersRequest($trades, $userref, $start, $end, $ofs, $closetime);
180
181
        return $this->doRequest($orderBookRequest);
182
    }
183
184
    /**
185
     * @param RequestInterface $requestInterface
186
     *
187
     * @return ResponseInterface
188
     */
189
    private function doRequest(RequestInterface $requestInterface)
190
    {
191
        $requestOptions = new RequestOptions($this->endpoint, $this->version);
192
        $header = new Header($this->apiKey, $this->apiSign);
193
        $nonce = new Nonce();
194
        $request = new Request($this->httpClient, $this->requestHeader, $nonce);
195
196
        return $request->execute($requestInterface, $requestOptions, $header);
197
    }
198
}
199