Completed
Push — master ( ddb885...bba056 )
by Fabian
02:59
created

KrakenApi::getOpenOrders()   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 2
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\GetTicker\TickerRequest;
18
use HanischIt\KrakenApi\Model\GetTicker\TickerResponse;
19
use HanischIt\KrakenApi\Model\Header;
20
use HanischIt\KrakenApi\Model\OpenOrders\OpenOrdersRequest;
21
use HanischIt\KrakenApi\Model\OpenOrders\OpenOrdersResponse;
22
use HanischIt\KrakenApi\Model\OrderBook\OrderBookRequest;
23
use HanischIt\KrakenApi\Model\OrderBook\OrderBookResponse;
24
use HanischIt\KrakenApi\Model\RequestInterface;
25
use HanischIt\KrakenApi\Model\RequestOptions;
26
use HanischIt\KrakenApi\Model\ResponseInterface;
27
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeRequest;
28
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeResponse;
29
use HanischIt\KrakenApi\Service\RequestService\Nonce;
30
use HanischIt\KrakenApi\Service\RequestService\Request;
31
use HanischIt\KrakenApi\Service\RequestService\RequestHeader;
32
33
/**
34
 * Class KrakenApi
35
 *
36
 * @package HanischIt\KrakenApi
37
 */
38
class KrakenApi
39
{
40
    /**
41
     * @var HttpClient
42
     */
43
    private $httpClient;
44
    /**
45
     * @var RequestHeader
46
     */
47
    private $requestHeader;
48
    /**
49
     * @var string
50
     */
51
    private $apiKey;
52
    /**
53
     * @var string
54
     */
55
    private $apiSign;
56
    /**
57
     * @var string
58
     */
59
    private $version;
60
    /**
61
     * @var string
62
     */
63
    private $endpoint;
64
65
    /**
66
     * KrakenApi constructor.
67
     *
68
     * @param string $apiKey
69
     * @param string $apiSign
70
     */
71
    public function __construct($apiKey, $apiSign)
72
    {
73
        $this->httpClient = new HttpClient(['verify' => false]);
74
        $this->requestHeader = new RequestHeader();
75
        $this->endpoint = 'https://api.kraken.com/';
76
        $this->version = '0';
77
        $this->apiKey = $apiKey;
78
        $this->apiSign = $apiSign;
79
    }
80
81
    /**
82
     * @return ServerTimeResponse|ResponseInterface
83
     */
84
    public function getServerTime()
85
    {
86
        $serverTimeRequest = new ServerTimeRequest();
87
88
        return $this->doRequest($serverTimeRequest);
89
    }
90
91
    /**
92
     * @return AccountBalanceResponse|ResponseInterface
93
     */
94
    public function getAccountBalance()
95
    {
96
        $accountBalanceRequest = new AccountBalanceRequest();
97
98
        return $this->doRequest($accountBalanceRequest);
99
    }
100
101
    /**
102
     * @param string     $pair
103
     * @param string     $type
104
     * @param string     $orderType
105
     * @param null|float $price
106
     * @param null|float $volume
107
     *
108
     * @return ResponseInterface|AddOrderResponse
109
     */
110
    public function addOrder($pair, $type, $orderType, $price = null, $volume = null)
111
    {
112
        $addOrderRequest = new AddOrderRequest($pair, $type, $orderType, $price, $volume);
113
114
        return $this->doRequest($addOrderRequest);
115
    }
116
117
    /**
118
     * @return ResponseInterface|AssetsResponse
119
     */
120
    public function getAssets()
121
    {
122
        $assetsRequest = new AssetsRequest();
123
124
        return $this->doRequest($assetsRequest);
125
    }
126
127
    /**
128
     * @param array $assetNames
129
     *
130
     * @return ResponseInterface|TickerResponse
131
     */
132
    public function getTicker(array $assetNames)
133
    {
134
        $tickerRequest = new TickerRequest($assetNames);
135
136
        return $this->doRequest($tickerRequest);
137
    }
138
139
    /**
140
     * @param string   $assetPair
141
     * @param int|null $count
142
     *
143
     * @return ResponseInterface|OrderBookResponse
144
     */
145
    public function getOrderBook($assetPair, $count = null)
146
    {
147
        $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

147
        $orderBookRequest = new OrderBookRequest($assetPair, /** @scrutinizer ignore-type */ $count);
Loading history...
148
149
        return $this->doRequest($orderBookRequest);
150
    }
151
152
    /**
153
     * @param bool $trades
154
     * @param null $userref
155
     *
156
     * @return ResponseInterface|OpenOrdersResponse
157
     */
158
    public function getOpenOrders($trades = false, $userref = null)
159
    {
160
        $orderBookRequest = new OpenOrdersRequest($trades, $userref);
161
162
        return $this->doRequest($orderBookRequest);
163
    }
164
165
    /**
166
     * @param RequestInterface $requestInterface
167
     *
168
     * @return ResponseInterface
169
     */
170
    private function doRequest(RequestInterface $requestInterface)
171
    {
172
        $requestOptions = new RequestOptions($this->endpoint, $this->version);
173
        $header = new Header($this->apiKey, $this->apiSign);
174
        $nonce = new Nonce();
175
        $request = new Request($this->httpClient, $this->requestHeader, $nonce);
176
177
        return $request->execute($requestInterface, $requestOptions, $header);
178
    }
179
}
180