service.php

Видео отзывы
<?РНР
заголовок ('Access-Control-Allow-Origin: *');
error_reporting(0);
ISDEKservice:: setTarifPriority(
 антенная решетка(233, 137, 139, 16, 18, 11, 1, 3, 61, 60, 59, 58, 57, 83),
 антенная решетка(234, 136, 138, 15, 17, 10, 12, 5, 62, 63)
);

$action = $_REQUEST ['isdek_action'];
if (method_exists ('ISDEKservice', $action)) {
 ISDEKservice::$action($_REQUEST);
}

класс ISDEKservice
{
 // автор
 protected static $account = false; //укажите логин
 protected static $key = false; //укажите ключ
 

 защищенный статический $tarifPriority = false;

 // Тренировка
 публичная статическая функция setTarifPriority($arCourier, $arPickup)
 {
 self::$tarifPriority = массив(
 'courier' = > $arCourier,
 'pickup' = > $arPickup
 );
 }

 публичная статическая функция getPVZ()
 {
 $arPVZ = self:: getPVZFile();
 если ($arPVZ) {
 self:: toAnswer (array ('pvz' = > $arPVZ));
 }
 self:: printAnswer();
 }

 публичная статическая функция getLang()
 {
 self:: toAnswer (array ('LANG' = > self:: getLangArray()));
 self:: printAnswer();
 }

 публичная статическая функция calc($data)
 {
 если (!$data ['отгрузка'] ['tarifList']) {
 $data ['shipment'] ['tariffList'] = self::$tarifPriority[$data ['shipment'] ['type']];
 }
 if (isset ($_SERVER ['HTTP_REFERER'])&& !пусто($_SERVER ['HTTP_REFERER'])) $data ['shipment'] ['ref'] = $_SERVER ['HTTP_REFERER'];

 если (!$data ['отгрузка'] ['cityToId']) {
 $cityTo = self:: sendToCity ($data ['отгрузка'] ['cityTo']);
 if ($cityTo && $cityTo ['code'] = = = 200) {
 $pretendents = json_decode ($cityTo ['result']);
 если ($pretendents & & isset ($pretendents - >geonames)) {
 $data ['shipment'] ['cityToId'] = $pretendents->geonames[0] - > > id;
 }
 }
 }

 если ($data ['отгрузка'] ['cityToId']) {
 $answer = self:: calculate ($data ['отгрузка']);

 если ($answer) {
 $answer ['type'] = $data ['shipment'] ['type'];
 если ($data ['отгрузка'] ['отметка времени']) {
 $answer ['timestamp'] = $data ['shipment'] ['timestamp'];
 }
 self:: toAnswer($answer);
 }
 } еще {
 self:: toAnswer (array ('error' = > 'City to not found'));
 }

 self:: printAnswer();
 }

 публичная статическая функция getCity($data)
 {
 if ($data ['city']) {
 $result = self:: sendToCity ($data ['city']);
 если ($result && $result ['code'] = = 200) {
 $result = json_decode ($result ['result']);
 если (!isset ($result - >geonames)) {
 self:: toAnswer (array ('error' = > 'города не найдены'));
 } еще {
 self:: toAnswer (массив(
 'id' = > $result - >>geonames[0] - >>>id,
 'city' = > $result - >>geonames[0]->> > cityName,
 'region' = > $result - >>geonames[0]->>>regionName,
 'country' = > $result - >>geonames[0]->> > countryName
 ));
 }
 } еще {
 self:: toAnswer (array ('error' = > ' неверный код ответа с сервера:'. $result ['code']));
 }
 } еще {
 self:: toAnswer (array ('error' = > 'no city to search given'));
 }

 self:: printAnswer();
 }

 // PVZ
 защищенная статическая функция getPVZFile()
 {

 $arPVZ = self:: requestPVZ();

 возврат $arPVZ;
 }

 защищенная статическая функция requestPVZ()
 {
 если (!function_exists ('simplexml_load_string')) {
 self:: toAnswer (array ('error' = > 'No php simplexml-library installed on server'));
 возвращать false;
 }

 $request = self:: sendToSDEK ('pvzlist', false, 'type=ALL'.(isset ($_REQUEST ['lang'])? '&Ленг='.$_REQUEST ['lang']:") );
 $arLL = массив();
 if ($request && $request ['code'] = = 200) {
 $xml = simplexml_load_string($request ['result']);

 $arList = array ('PVZ' = > array (), 'CITY' = > > array (), 'REGIONS' = > > > array (), 'CITYFULL' = > > > array (), 'COUNTRIES' = > > > > > array());

 foreach ($xml as $key = > $val) {

 если ($_REQUEST ['country'] & & $_REQUEST ['country']!= 'all' & & ((string)$val ['CountryName']!= $_REQUEST ['страна'])) {
 продолжить;
 }

 $cityCode = (строка)$val ['CityCode'];
 $type = 'PVZ';
 $city = (строка)$val ["City"];
 если (strpos ($city,' ('))!== ложный)
 $city = trim (substr ($city, 0, strpos ($city,' (')));
 если (strpos ($city,',')!== ложный)
 $city = trim (substr ($city, 0, strpos ($city,',')));
 $code = (строка)$val ["Code"];

 $arList[$type][$cityCode][$code] = массив(
 'Name' = > (строка)$val ['Name'],
 'WorkTime' = > (строка)$val ['WorkTime'],
 'Address' = > (строка)$val ['Address'],
 'Phone' = > (строка)$val ['Phone'],
 'Note' = > (string)$val ['Note'],
 'cX' = > (строка)$val ['coordX'],
 'cY' = > (string)$val ['coordY'],
 'Dressing' = > ($val ['IsDressingRoom'] = = 'true'),
 'Cash' = > ($val ['HaveCashless'] = = 'true'),
 'Station' = > (string)$val ['NearestStation'],
 'Site' = > (string)$val ['Site'],
 'Metro' = > (string)$val ['MetroStation'],
 'AddressComment' = > (string)$val ['AddressComment'],
 'CityCode' = > (string)$val ['CityCode'],
 );
 если ($val - >WeightLimit) {
 $arList[$type][$cityCode][$code] ['WeightLim'] = массив(
 'MIN' = > (float)$val - >>WeightLimit ['WeightMin'],
 'MAX' = > (float)$val - >>WeightLimit ['WeightMax']
 );
 }

 $arImgs = массив();
 если (!is_array ($val - >OfficeImage)) {
 $arToCheck = array(array ('url' = > (string)$val->>OfficeImage ['url']));
 } еще {
 $arToCheck = $val - >OfficeImage;
 }

 foreach ($val - >OfficeImage as $img) {
 если (strstr ($_tmpUrl = (string)$img ['url'], 'http') = = = false) {
 продолжить;
 }
 $arImgs [] = (строка)$img ['url'];
 }

 if (count ($arImgs = array_filter ($arImgs)))
 $arList[$type][$cityCode][$code] ['Picture'] = $arImgs;
 если ($val - >OfficeHowGo)
 $arList[$type][$cityCode][$code] ['Path'] = (string)$val - >OfficeHowGo ['url'];

 если (!array_key_exists ($cityCode, $arList ['CITY'])) {
 $arList ['CITY'] [$cityCode] = $city;
 $arList ['CITYFULL'] [$cityCode] = (string)$val ['CountryName']. ' ' . (строка)$val ['RegionName']. ' ' . $город;
 $arList ['REGIONS'] [$cityCode] = implode ( ' ,', array_filter (array ((string)$val ['RegionName'], (string)$val ['CountryName'])));
 }

 }

 krsort ($arList ['PVZ']);

 возврат $arList;
 } elseif ($request) {
 self:: toAnswer (array ('error' = > ' неверный код ответа с сервера:'. $request ['code']));
 возвращать false;
 }
 }

 // Расчет
 защищенная статическая функция высчитывает ($пересылка)
 {
 $headers = self:: getHeaders();

 $arData = массив(
 'dateExecute' = > $headers ['date'],
 'version' = > '1.0',
 'authLogin' = > $headers ['account'],
 'secure' = > $headers ['secure'],
 'senderCityId' = > $отгрузка ['cityFromId'],
 'receiverCityId' = > $shipment ['cityToId'],
 'ref' = > $ отгрузка ['ref],
 'widget' = > 1,
 'tariffId' = > ($отгрузка ['tariffId'])? $ отгрузка ['tariffId']: false
 );

 если ($отгрузка ['tariffList']) {
 foreach ($shipment ['tariffList'] as $priority => $tarif) {
 $tarif = intval($tarif);
 $arData ['tariffList'] [] = массив(
 'priority' = > $priority + 1,
 'id' = > $ tarif
 );
 }
 }

 если ($отгрузка ['товар']) {
 $arData ['goods'] = массив();
 foreach ($shipment ['goods'] as $arGood) {
 $arData ['goods'] [] = массив(
 'weight' = > $arGood ['weight'],
 'length' = > $arGood ['length'],
 'width' = > $arGood ['width'],
 'height' = > $arGood ['height']
 );
 }
 }

 $result = self:: sendToCalculate($arData);

 если ($result && $result ['code'] = = 200) {
 если (!is_null(json_decode ($result ['result']))) {
 возврат json_decode ($result ['result'], true);
 } еще {
 self:: toAnswer (array ('error' = > 'неверный ответ сервера'));
 возвращать false;
 }
 } еще {
 self:: toAnswer (array ('error' = > ' неверный код ответа с сервера:'. $result ['code']));
 возвращать false;
 }
 }

 // ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
 защищенная статическая функция sendToSDEK ($where, $XML = false, $get = false)
 {
 $где .= '.php' . (($get)? "?" . $получить : '');
 $where = 'https://integration.cdek.ru/' . $где;

 если ($XML)
 $XML = массив ('xml_request' = > $XML);

 возвратите self:: client($where, $XML);
 }

 защищенные статические гетеадеры функции()
 {
 $date = дата ('Y-m-d');
 $arHe = массив(
 'date' = > $date
 );
 если (self::$account & & self::$key) {
 $arHe = массив(
 'date' = > $date,
 'account' = > self::$account,
 'secure' = > md5 ($date . "&" . self::$key)
 );
 }
 возврат $arHe;
 }

 защищенная статическая функция sendToCalculate($data)
 {
 $result = self:: client(
 'http://api.cdek.ru/calculator/calculate_price_by_json_request.php',
 массив ('json' = > json_encode ($data))
 );
 возвращаемый результат;
 }

 защищенная статическая функция sendToCity ($data)
 {
 $result = self:: client(
 'http://api.cdek.ru/city/getListByTerm/json.php?q='. urlencode ($data)
 );
 возвращаемый результат;
 }

 защищенная статическая функция client ($where, $data = false)
 {
 если (!function_exists ('curl_init')) {
 self:: toAnswer (array ('error' = > 'No php CURL-library installed on server'));
 возвращать false;
 }

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $where);
 curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
 если ($data) {
 curl_setopt ($ch, CURLOPT_POST, TRUE);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 curl_setopt ($ch, CURLOPT_REFERER, ' http://'. $_SERVER ['HTTP_HOST']. $_SERVER ['SCRIPT_NAME']);
 }
 $result = curl_exec($ch);
 $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 curl_close($ch);
 возвращаемый массив(
 'code' = > $code,
 'result' = > $result
 );
 }

 // ЛЕНГ
 защищенная статическая функция getLangArray()
 {
 $tanslate = массив(
 'rus' = > массив(
 'YOURCITY' => 'Ваш город',
 'COURIER' => 'Курьер',
 'PICKUP' => 'Самовывоз',
 'TERM' => 'Срок',
 'PRICE' => 'Стоимость',
 'DAY' => 'дн.',
 'RUB' => 'руб.',
 'NODELIV' => 'Нет доставки',
 'CITYSEARCH' => 'Поиск города',
 'ALL' => 'Все',
 'PVZ' => 'Пункты выдачи',
 'MOSCOW' => 'Москва',
 'RUSSIA' => 'Россия',
 'COUNTING' => 'Идет расчет',

 'NO_AVAIL' => 'Нет доступных способов доставки',
 'CHOOSE_TYPE_AVAIL' => 'Выберите способ доставки',
 'CHOOSE_OTHER_CITY' => 'Выберите другой населенный пункт',

 'L_ADDRESS' => 'Адрес пункта выдачи заказов',
 'L_TIME' => 'Время работы',
 'L_WAY' => 'Как к нам проехать',
 'L_CHOOSE' => 'Выбрать',

 'H_LIST' => 'Список пунктов выдачи заказов',
 'H_PROFILE' => 'Способ доставки',
 'H_CASH' => 'Расчет картой',
 'H_DRESS' => 'С примеркой',
 'H_SUPPORT' => 'Служба поддержки',
 'H_QUESTIONS' => 'Если у вас есть вопросы, можете<br> задать их нашим специалистам',
 ),
 'eng' = > массив(
 'YOURCITY' = > 'Ваш город',
 'COURIER' = > 'Курьер',
 'PICKUP' = > 'пикап',
 'TERM' = > 'термин',
 'PRICE' = > 'Цена',
 'DAY' = > 'дни',
 'RUB' = > 'РУБИТЬ',
 'NODELIV' = > 'не доставка',
 'CITYSEARCH' = > 'Поиск города',
 'ALL' = > 'все',
 'PVZ' = > 'пункты самовывоза',
 'MOSCOW' = > 'Москва',
 'RUSSIA' = > 'россия',
 'Подсчет' = > 'расчет',

 'NO_AVAIL' = > 'нет доступных методов доставки',
 'CHOOSE_TYPE_AVAIL' = > 'выберите способ доставки',
 'CHOOSE_OTHER_CITY' = > 'выберите другое место',

 'L_ADDRESS' = > 'адрес самовывоза',
 'L_TIME' = > 'часы работы',
 'L_WAY' = > 'Как добраться до нас',
 'L_CHOOSE' = > 'выбрать',

 'H_LIST' = > 'список самовывозов',
 'H_PROFILE' = > 'способ доставки',
 'H_CASH' = > 'оплата картой',
 'H_DRESS' = > 'гардеробная',
 'H_SUPPORT' = > 'поддержка',
 'H_QUESTIONS' = > 'если у вас есть какие-либо вопросы, > <br> вы можете задать их нашим специалистам',
 )

 );
 если (isset ($_REQUEST['lang']) && isset ($tanslate[$_REQUEST['lang']]) ) вернуть $tanslate[$_REQUEST ['lang']];
 в противном случае верните $tanslate ['ru'];
 }

 // автоответчик
 защищенный статический $ответ = false;

 защищенная статическая функция toAnswer($wat)
 {
 $stucked = array ('error');
 если (!is_array($wat)) {
 $wat = массив ('info' = > $wat);
 }
 если (!is_array (self::$answer)) {
 self::$answer = массив();
 }
 foreach ($wat as $key = > $sign) {
 if (in_array ($key, $stucked)) {
 если (!array_key_exists($key, self::$answer)) {
 self::$answer[$key] = массив();
 }
 self::$answer[$key] [] = $sign;
 } еще {
 self::$answer[$key] = $sign;
 }
 }
 }

 защищенная статическая функция printAnswer()
 {
 echo json_encode(self::$answer);
 }
}

?>