1 | <?php |
||
21 | class Curl |
||
22 | { |
||
23 | /** |
||
24 | * Получение ответа от сервера API |
||
25 | * |
||
26 | * @param string $host Домен сервера API |
||
27 | * @param string $url Урл ресурса API |
||
28 | * @param string $method Метод http-запроса (GET|POST|PUT|DELETE) |
||
29 | * @param string $token Токен клиента |
||
30 | * @param array $params Параметры, переданные серверу API |
||
31 | * |
||
32 | * @return array|mixed |
||
33 | * |
||
34 | * @throws Exception |
||
35 | */ |
||
36 | 10 | public static function getResponse($host, $url, $method, $token, array $params) |
|
37 | { |
||
38 | 10 | $curl = curl_init(); |
|
39 | |||
40 | switch ($method) { |
||
41 | 10 | case 'GET': |
|
42 | 9 | if (!empty($params)) { |
|
43 | 7 | $url = sprintf("%s?%s", $url, http_build_query($params, '', '&')); |
|
44 | }; |
||
45 | |||
46 | 9 | break; |
|
47 | 1 | case 'POST': |
|
48 | case 'PUT': |
||
49 | case 'DELETE': |
||
50 | 1 | if (!empty($params)) { |
|
51 | 1 | curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params, '', '&')); |
|
52 | } |
||
53 | 1 | break; |
|
54 | default: |
||
55 | throw new Exception('Method ' . $method . ' unknown'); |
||
56 | } |
||
57 | |||
58 | // $url = html_entity_decode($url); |
||
59 | |||
60 | $headers = array( |
||
61 | 10 | 'X-Auth-Token: ' . $token, |
|
62 | 10 | 'Content-Type: application/x-www-form-urlencoded; charset=utf-8', |
|
63 | 10 | 'Accept: application/json' |
|
64 | ); |
||
65 | |||
66 | 10 | curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); |
|
67 | 10 | curl_setopt($curl, CURLOPT_URL, $host . $url); |
|
68 | 10 | curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
69 | 10 | curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); |
|
70 | 10 | curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
71 | |||
72 | // $fp = fopen(__DIR__ . '/errorlog.txt', 'w'); |
||
73 | // curl_setopt($curl, CURLOPT_VERBOSE, 1); |
||
74 | // curl_setopt($curl, CURLOPT_STDERR, $fp); |
||
75 | |||
76 | //Debuger::dump($method . ' ' . $host . $url . ' ' . ($method === 'POST' || $method === 'PUT' || $method === 'DELETE' ? Curl::arrayPrettyPrint($params) : '')); |
||
77 | |||
78 | 10 | $curlResult = curl_exec($curl); |
|
79 | |||
80 | //Debuger::dump('Response code: ' . (curl_errno($curl) ? '!!! Error !!!' : curl_getinfo($curl)['http_code']) . "\n"); |
||
81 | |||
82 | 10 | if (curl_errno($curl)) { |
|
83 | return Curl::getError('Curl error ' . curl_errno($curl) . ': ' . curl_error($curl), 500); |
||
84 | } |
||
85 | |||
86 | 10 | $response = json_decode($curlResult, true); |
|
87 | |||
88 | 10 | if (json_last_error()) { |
|
89 | return Curl::getError('JSON error ' . json_last_error() . ': ' . json_last_error_msg() . "\n" . $curlResult, curl_getinfo($curl)['http_code']); |
||
90 | } |
||
91 | |||
92 | 10 | if (empty($response)) { |
|
93 | return Curl::getError('Response is empty', curl_getinfo($curl)['http_code']); |
||
94 | } |
||
95 | |||
96 | 10 | return $response; |
|
97 | } |
||
98 | |||
99 | /** |
||
100 | * Получение массива как строку |
||
101 | * |
||
102 | * @param array $array Данные массива |
||
103 | * |
||
104 | * @return mixed |
||
105 | */ |
||
106 | private static function arrayPrettyPrint(array $array) |
||
|
|||
107 | { |
||
108 | return str_replace('Array (', '(', preg_replace('/\s{2,}/', ' ', preg_replace('/[\x00-\x1F\x7F ]/', ' ', print_r($array, true)))); |
||
109 | } |
||
110 | |||
111 | /** |
||
112 | * Дефолтный ответ при ошибке |
||
113 | * |
||
114 | * @param string $message Сообщение об ошибке |
||
115 | * @param int $code Статус код ошибки |
||
116 | * |
||
117 | * @return array |
||
118 | */ |
||
119 | private static function getError($message, $code) |
||
129 | } |