Адрес: г. Москва, Варшавское шоссе, д. 150,, этаж 3, помещение XI, 8,
РЕЖИМ РАБОТЫ: 09:00 - 21:00 (ежедневно)
process($_GET, file_get_contents('php://input')); class service { /** * @var string Auth login */ private $login; /** * @var string Auth pwd */ private $secret; /** * @var string Base Url for API 2.0 Production */ private $baseUrl; /** * @var string Auth Token */ private $authToken; /** * @var array Data From Request */ private $requestData; public function __construct($login, $secret, $baseUrl = 'https://api.cdek.ru/v2') { $this->login = $login; $this->secret = $secret; $this->baseUrl = $baseUrl; } public function process($requestData, $body) { $this->requestData = array_merge($requestData, json_decode($body, true) ?: array()); if (!isset($this->requestData['action'])) { $this->sendValidationError('Action is required'); } $this->getAuthToken(); switch ($this->requestData['action']) { case 'offices': $this->sendResponse($this->getOffices()); case 'calculate': $this->sendResponse($this->calculate()); default: $this->sendValidationError('Unknown action'); } } private function sendValidationError($message) { $this->http_response_code(400); header('Content-Type: application/json'); header('X-Service-Version: 3.9.6'); echo json_encode(array('message' => $message)); exit(); } private function http_response_code($code) { switch ($code) { case 100: $text = 'Continue'; break; case 101: $text = 'Switching Protocols'; break; case 200: $text = 'OK'; break; case 201: $text = 'Created'; break; case 202: $text = 'Accepted'; break; case 203: $text = 'Non-Authoritative Information'; break; case 204: $text = 'No Content'; break; case 205: $text = 'Reset Content'; break; case 206: $text = 'Partial Content'; break; case 300: $text = 'Multiple Choices'; break; case 301: $text = 'Moved Permanently'; break; case 302: $text = 'Moved Temporarily'; break; case 303: $text = 'See Other'; break; case 304: $text = 'Not Modified'; break; case 305: $text = 'Use Proxy'; break; case 400: $text = 'Bad Request'; break; case 401: $text = 'Unauthorized'; break; case 402: $text = 'Payment Required'; break; case 403: $text = 'Forbidden'; break; case 404: $text = 'Not Found'; break; case 405: $text = 'Method Not Allowed'; break; case 406: $text = 'Not Acceptable'; break; case 407: $text = 'Proxy Authentication Required'; break; case 408: $text = 'Request Time-out'; break; case 409: $text = 'Conflict'; break; case 410: $text = 'Gone'; break; case 411: $text = 'Length Required'; break; case 412: $text = 'Precondition Failed'; break; case 413: $text = 'Request Entity Too Large'; break; case 414: $text = 'Request-URI Too Large'; break; case 415: $text = 'Unsupported Media Type'; break; case 500: $text = 'Internal Server Error'; break; case 501: $text = 'Not Implemented'; break; case 502: $text = 'Bad Gateway'; break; case 503: $text = 'Service Unavailable'; break; case 504: $text = 'Gateway Time-out'; break; case 505: $text = 'HTTP Version not supported'; break; default: exit('Unknown http status code "' . htmlentities($code) . '"'); break; } $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'); header($protocol . ' ' . $code . ' ' . $text); $GLOBALS['http_response_code'] = $code; } private function getAuthToken() { $token = $this->httpRequest('oauth/token', array( 'grant_type' => 'client_credentials', 'client_id' => $this->login, 'client_secret' => $this->secret, ), true); $result = json_decode($token['result'], true); if (!isset($result['access_token'])) { throw new RuntimeException('Server not authorized to CDEK API'); } $this->authToken = $result['access_token']; } private function httpRequest($method, $data, $useFormData = false, $useJson = false) { $ch = curl_init("$this->baseUrl/$method"); $headers = array( 'Accept: application/json', 'X-App-Name: widget_pvz', ); if ($this->authToken) { $headers[] = "Authorization: Bearer $this->authToken"; } if ($useFormData) { curl_setopt_array($ch, array( CURLOPT_POST => true, CURLOPT_POSTFIELDS => $data, )); } elseif ($useJson) { $headers[] = 'Content-Type: application/json'; curl_setopt_array($ch, array( CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($data), )); } else { curl_setopt($ch, CURLOPT_URL, "$this->baseUrl/$method?" . http_build_query($data)); } curl_setopt_array($ch, array( CURLOPT_USERAGENT => 'widget/3.9.6', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => true, )); $response = curl_exec($ch); $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $headerSize); $result = substr($response, $headerSize); $addedHeaders = $this->getHeaderValue($headers); if ($result === false) { throw new RuntimeException(curl_error($ch), curl_errno($ch)); } return array('result' => $result, 'addedHeaders' => $addedHeaders); } private function getHeaderValue($headers) { $headerLines = explode("\r\n", $headers); return array_filter($headerLines, static function ($line) { return !empty($line) && stripos($line, 'X-') !== false; }); } private function sendResponse($data) { $this->http_response_code(200); header('Content-Type: application/json'); header('X-Service-Version: 3.9.6'); if (!empty($data['addedHeaders'])) { foreach ($data['addedHeaders'] as $header) { header($header); } } echo $data['result']; exit(); } protected function getOffices() { return $this->httpRequest('deliverypoints', $this->requestData); } protected function calculate() { return $this->httpRequest('calculator/tarifflist', $this->requestData, false, true); } }


Мы прилагаем все усилия для обеспечения актуальности и достоверности информации на нашем сайте. Однако, мы не несем ответственности за возможные ошибки или упущения, которые могут возникнуть. Вся информация на сайте носит исключительно информационный характер и может быть изменена или обновлена без предварительного уведомления. Для получения точной информации о наших услугах, стоимости и прочих условиях, пожалуйста, обращайтесь к нашим представителям напрямую. Мы всегда готовы предоставить вам подробную консультацию и ответить на все ваши вопросы. Мы ценим ваше понимание и готовы оказать вам профессиональные услуги в области проверки и замены счетчиков. Благодарим за интерес к нашей компании и надеемся на взаимовыгодное сотрудничество.
Компания "Проф Поверка" рада предложить свои услуги по проверке счетчиков в любой удобный для вас день во всех районах Москвы. - Выхино-Жулебино - Капотня - Кузьминки - Лефортово - Люблино - Марьино - Некрасовка - Нижегородский - Печатники - Рязанский - Текстильщики - Южнопортовый
Мы гарантируем высокое качество услуг, профессионализм наших сотрудников и точность проведения поверки счетчиков . Вы можете выбрать удобное для вас время для проведения работ, и наша команда прибудет к вам по указанному адресу в назначенный день.
Необходимо только связаться с нами и оставить заявку на поверку счетчиков в любом районе Москвы. Мы с радостью поможем вам в поддержании точности измерений и надежности вашего счетчика..

Напишите нам

Ищите в соц.сетях

Офис ООО "ПрофПоверка"