ok
Direktori : /home2/selectio/www/myclassicfit.com-1/vendor/mercadopago/dx-php/src/MercadoPago/ |
Current File : //home2/selectio/www/myclassicfit.com-1/vendor/mercadopago/dx-php/src/MercadoPago/RestClient.php |
<?php namespace MercadoPago; use Exception; /** * MercadoPago cURL RestClient */ class RestClient { /** * */ protected static $verbArray = [ 'get' => 'GET', 'post' => 'POST', 'put' => 'PUT', 'delete' => 'DELETE' ]; /** * @var Http\CurlRequest|null */ protected $httpRequest = null; /** * @var array */ protected static $defaultParams = []; protected $customParams = []; /** * RestClient constructor. */ public function __construct() { $this->httpRequest = new Http\CurlRequest(); } /** * @param Http\HttpRequest $connect * @param $headers */ protected function setHeaders(Http\HttpRequest $connect, $customHeaders) { $default_header = array( 'Content-Type' => 'application/json', 'User-Agent' => 'MercadoPago DX-PHP SDK/ v' . Version::$_VERSION, 'x-product-id' => 'BC32A7RU643001OI3940', 'x-tracking-id' => 'platform:' . PHP_MAJOR_VERSION .'|' . PHP_VERSION . ',type:SDK' . Version::$_VERSION . ',so;' ); if ($customHeaders) { $default_header = array_merge($default_header, $customHeaders); } if(!isset($default_header['Authorization'])){ $default_header['Authorization'] = 'Bearer '.SDK::getAccessToken(); } foreach ($default_header as $key => $value) { $headers[] = $key . ': ' . $value; } $connect->setOption(CURLOPT_HTTPHEADER, $headers); } /** * @param Http\HttpRequest $connect * @param $data * @param string $content_type * * @throws Exception */ protected function setData(Http\HttpRequest $connect, $data, $content_type = '') { if ($content_type == "application/json") { if (gettype($data) == "string") { json_decode($data, true); } else { $data = json_encode($data); } if (function_exists('json_last_error')) { $json_error = json_last_error(); if ($json_error != JSON_ERROR_NONE) { throw new Exception("JSON Error [{$json_error}] - Data: {$data}"); } } } if ($data != "[]") { $connect->setOption(CURLOPT_POSTFIELDS, $data); } else { $connect->setOption(CURLOPT_POSTFIELDS, ""); } } /** * @param $request */ public function setHttpRequest($request) { $this->httpRequest = $request; } /** * @return Http\CurlRequest|null */ public function getHttpRequest() { return $this->httpRequest; } /** * @param $options * * @return array * @throws Exception */ protected function exec($options) { $method = key($options); $requestPath = reset($options); $verb = self::$verbArray[$method]; $headers = $this->getArrayValue($options, 'headers'); $url_query = $this->getArrayValue($options, 'url_query'); $formData = $this->getArrayValue($options, 'form_data'); $jsonData = $this->getArrayValue($options, 'json_data'); $defaultHttpParams = self::$defaultParams; $connectionParams = array_merge($defaultHttpParams, $this->customParams); $query = ''; if ($url_query > 0) { $query = http_build_query($url_query); } $address = $this->getArrayValue($connectionParams, 'address'); $uri = $address . $requestPath; if ($query != '') { if (parse_url($uri, PHP_URL_QUERY)) { $uri .= '&' . $query; } else { $uri .= '?' . $query; } } $connect = $this->getHttpRequest(); $connect->setOption(CURLOPT_URL, $uri); if ($userAgent = $this->getArrayValue($connectionParams, 'user_agent')) { $connect->setOption(CURLOPT_USERAGENT, $userAgent); } $connect->setOption(CURLOPT_RETURNTRANSFER, true); $connect->setOption(CURLOPT_CUSTOMREQUEST, $verb); $this->setHeaders($connect, $headers); $proxyAddress = $this->getArrayValue($connectionParams, 'proxy_addr'); $proxyPort = $this->getArrayValue($connectionParams, 'proxy_port'); if (!empty($proxyAddress)) { $connect->setOption(CURLOPT_PROXY, $proxyAddress); $connect->setOption(CURLOPT_PROXYPORT, $proxyPort); } if ($useSsl = $this->getArrayValue($connectionParams, 'use_ssl')) { $connect->setOption(CURLOPT_SSL_VERIFYPEER, $useSsl); } if ($sslVersion = $this->getArrayValue($connectionParams, 'ssl_version')) { $connect->setOption(CURLOPT_SSLVERSION, $sslVersion); } if ($verifyMode = $this->getArrayValue($connectionParams, 'verify_mode')) { $connect->setOption(CURLOPT_SSL_VERIFYHOST, $verifyMode); } if ($caFile = $this->getArrayValue($connectionParams, 'ca_file')) { $connect->setOption(CURLOPT_CAPATH, $caFile); } $connect->setOption(CURLOPT_FOLLOWLOCATION, true); if ($formData) { $this->setData($connect, $formData); } if ($jsonData) { $this->setData($connect, $jsonData, "application/json"); } $apiResult = $connect->execute(); $apiHttpCode = $connect->getInfo(CURLINFO_HTTP_CODE); if ($apiResult === false) { throw new Exception ($connect->error()); } $response['response'] = []; if ($apiHttpCode != "200" && $apiHttpCode != "201") { error_log($apiResult); } $response['response'] = json_decode($apiResult, true); $response['code'] = $apiHttpCode; $connect->error(); return ['code' => $response['code'], 'body' => $response['response']]; } /** * @param $uri * @param array $options * * @return array * @throws Exception */ public function get($uri, $options = []) { return $this->exec(array_merge(['get' => $uri], $options)); } /** * @param $uri * @param array $options * * @return array * @throws Exception */ public function post($uri, $options = []) { return $this->exec(array_merge(['post' => $uri], $options)); } /** * @param $uri * @param array $options * * @return array * @throws Exception */ public function put($uri, $options = []) { return $this->exec(array_merge(['put' => $uri], $options)); } /** * @param $uri * @param array $options * * @return array * @throws Exception */ public function delete($uri, $options = []) { return $this->exec(array_merge(['delete' => $uri], $options)); } /** * @param $param * @param $value */ public function setHttpParam($param, $value) { self::$defaultParams[$param] = $value; } /** * @param $array * @param $key * * @return bool */ protected function getArrayValue($array, $key) { if (array_key_exists($key, $array)) { return $array[$key]; } else { return false; } } }