Passed
Push — master ( 5f4c59...0a76e5 )
by Fabian
01:35
created

KrakenApi::doRequest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 7
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\Assets\AssetsRequest;
15
use HanischIt\KrakenApi\Model\Assets\AssetsResponse;
16
use HanischIt\KrakenApi\Model\GetTicker\TickerRequest;
17
use HanischIt\KrakenApi\Model\GetTicker\TickerResponse;
18
use HanischIt\KrakenApi\Model\Header;
19
use HanischIt\KrakenApi\Model\RequestInterface;
20
use HanischIt\KrakenApi\Model\RequestOptions;
21
use HanischIt\KrakenApi\Model\ResponseInterface;
22
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeRequest;
23
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeResponse;
24
use HanischIt\KrakenApi\Service\RequestService\Request;
25
use HanischIt\KrakenApi\Service\RequestService\RequestHeader;
26
27
/**
28
 * Class KrakenApi
29
 *
30
 * @package HanischIt\KrakenApi
31
 */
32
class KrakenApi
33
{
34
    /**
35
     * @var HttpClient
36
     */
37
    private $httpClient;
38
    /**
39
     * @var RequestHeader
40
     */
41
    private $requestHeader;
42
    /**
43
     * @var string
44
     */
45
    private $apiKey;
46
    /**
47
     * @var string
48
     */
49
    private $apiSign;
50
    /**
51
     * @var string
52
     */
53
    private $version;
54
55
    /**
56
     * KrakenApi constructor.
57
     *
58
     * @param string $apiKey
59
     * @param string $apiSign
60
     */
61
    public function __construct($apiKey, $apiSign)
62
    {
63
        $this->httpClient = new HttpClient(['verify' => false]);
64
        $this->requestHeader = new RequestHeader();
65
        $this->endpoint = 'https://api.kraken.com/';
0 ignored issues
show
Bug Best Practice introduced by
The property endpoint does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
66
        $this->version = '0';
67
        $this->apiKey = $apiKey;
68
        $this->apiSign = $apiSign;
69
    }
70
71
    /**
72
     * @return ServerTimeResponse|ResponseInterface
73
     */
74
    public function getServerTime()
75
    {
76
        $serverTimeRequest = new ServerTimeRequest();
77
78
        return $this->doRequest($serverTimeRequest);
79
    }
80
81
    /**
82
     * @return AccountBalanceResponse|ResponseInterface
83
     */
84
    public function getAccountBalance()
85
    {
86
        $accountBalanceRequest = new AccountBalanceRequest();
87
88
        return $this->doRequest($accountBalanceRequest);
89
    }
90
91
    /**
92
     * @param string     $pair
93
     * @param string     $type
94
     * @param string     $orderType
95
     * @param null|float $price
96
     * @param null|float $volume
97
     *
98
     * @return ResponseInterface
99
     */
100
    public function addOrder($pair, $type, $orderType, $price = null, $volume = null)
101
    {
102
        $addOrderRequest = new AddOrderRequest($pair, $type, $orderType, $price, $volume);
103
104
        return $this->doRequest($addOrderRequest);
105
    }
106
107
    /**
108
     * @return ResponseInterface|AssetsResponse
109
     */
110
    public function getAssets()
111
    {
112
        $assetsRequest = new AssetsRequest();
113
114
        return $this->doRequest($assetsRequest);
115
    }
116
117
    /**
118
     * @param array $assetNames
119
     *
120
     * @return ResponseInterface|TickerResponse
121
     */
122
    public function getTicker(array $assetNames)
123
    {
124
        $tickerRequest = new TickerRequest($assetNames);
125
126
        return $this->doRequest($tickerRequest);
127
    }
128
129
    /**
130
     * @param RequestInterface $requestInterface
131
     *
132
     * @return ResponseInterface
133
     */
134
    private function doRequest(RequestInterface $requestInterface)
135
    {
136
        $requestOptions = new RequestOptions($this->endpoint, $this->version);
0 ignored issues
show
Bug Best Practice introduced by
The property endpoint does not exist on HanischIt\KrakenApi\KrakenApi. Did you maybe forget to declare it?
Loading history...
137
        $header = new Header($this->apiKey, $this->apiSign);
138
        $request = new Request($this->httpClient, $this->requestHeader);
139
140
        return $request->execute($requestInterface, $requestOptions, $header);
141
    }
142
}
143