-
Notifications
You must be signed in to change notification settings - Fork 0
/
ApiBase.php
143 lines (121 loc) · 3.71 KB
/
ApiBase.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?php
/**
* @author Semenov Alexander <semenov@skeeks.com>
* @link http://skeeks.com/
* @copyright 2010 SkeekS (СкикС)
* @date 15.09.2016
*/
namespace v3toys\v3project\api;
use skeeks\cms\helpers\StringHelper;
use v3toys\v3project\api\helpers\ApiResponse;
use v3toys\v3project\api\helpers\ApiResponseError;
use v3toys\v3project\api\helpers\ApiResponseOk;
use yii\base\Component;
use yii\helpers\ArrayHelper;
use yii\helpers\Json;
use yii\httpclient\Client;
/**
* Class ApiBase
* @property string $version read-only
* @property string $baseUrl read-only
*
* @see http://api.v3project.ru/v5/schema.yaml
* @package v3toys\v3project\api
*/
abstract class ApiBase extends Component
{
/**
* версия api, на настоящий момент v5
*/
const VERSION = 'v5';
/**
* @var string
*/
public $schema = 'https://';
/**
* @var string
*/
public $host = 'api.v3project.ru';
/**
* @var null|string ключ аффилиата в системе V3Project, если он передается то контроль доступа происходит по IP+"affiliate_key"
*/
public $affiliate_key = '';
/**
* @var int set timeout to 15 seconds for the case server is not responding
*/
public $timeout = 2;
/**
* @var bool
*/
public $isDev = false;
/**
* Коды ответа на запрос
*
* @var array
*/
static public $errorStatuses = [
'404' => 'Запрошенный метод апи не существует',
'500' => 'Произошла внутренняя ошибка сервиса во время обработки',
];
/**
* @param $method вызываемый метод, список приведен далее
* @param array $params параметры соответствующие методу запроса
*
* @return ApiResponse
*/
public function send($apiMethod, array $params = [])
{
$apiUrl = $this->baseUrl . $apiMethod . "?aff_key=" . $this->affiliate_key;
$client = new Client([
'requestConfig' => [
'format' => Client::FORMAT_JSON
]
]);
$httpRequest = $client->createRequest()
->setMethod("POST")
->setUrl($apiUrl)
->addHeaders(['Content-type' => 'application/json'])
->addHeaders(['user-agent' => 'JSON-RPC PHP Client'])
->setData($params)
->setOptions([
'timeout' => $this->timeout
]);
$httpResponse = $httpRequest->send();
$apiResponse = new ApiResponse([
'api' => $this,
'httpClientRequest' => $httpRequest,
'httpClientResponse' => $httpResponse,
'apiMethod' => $apiMethod,
]);
return $apiResponse;
}
/**
* @return string
*/
public function getVersion()
{
return static::VERSION;
}
/**
* @return string
*/
public function getBaseUrl()
{
if ($this->isDev)
{
return $this->schema . $this->host . "/indev.php/" . $this->version;
} else
{
return $this->schema . $this->host . "/" . $this->version;
}
}
/**
* @param $httpStatusCode
*
* @return string
*/
public function getMessageByStatusCode($httpStatusCode)
{
return (string) ArrayHelper::getValue(static::$errorStatuses, (string) $httpStatusCode);
}
}