From 4a766b2aa9c10a8e57a1be0b7811a0de6ac0e309 Mon Sep 17 00:00:00 2001 From: Sergey Tolkachyov Date: Mon, 18 Nov 2024 20:00:10 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A7=D0=B0=D1=81=D1=82=D1=8C=20=D1=81=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D0=B5=D0=BC=D0=BD=D1=8B=D1=85=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9=20=D1=80=D0=B5=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D1=8F=D0=B7=D1=8B?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=D1=8B=D0=BC=D0=B8=20=D0=BA=D0=BE=D0=BD=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D1=82=D0=B0=D0=BC=D0=B8.=20=D0=9F=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BA=D0=B0=20=D1=81=D1=81=D1=8B=D0=BB=D0=BE=D0=BA?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=86=D0=B8=D1=8E=20=D0=B2=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D1=8F=D1=85=20=D0=BA?= =?UTF-8?q?=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=D0=BC=20=D0=B1=D0=B8?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- language/ru-RU/pkg_lib_wtcdek.sys.ini | 6 +- .../language/en-GB/lib_webtolk_cdekapi.ini | 18 ++++- .../language/ru-RU/lib_webtolk_cdekapi.ini | 17 ++++- lib_webtolk_wtcdek/src/Cdek.php | 65 +++++++++++-------- 4 files changed, 73 insertions(+), 33 deletions(-) diff --git a/language/ru-RU/pkg_lib_wtcdek.sys.ini b/language/ru-RU/pkg_lib_wtcdek.sys.ini index e069870..accb6e8 100644 --- a/language/ru-RU/pkg_lib_wtcdek.sys.ini +++ b/language/ru-RU/pkg_lib_wtcdek.sys.ini @@ -4,9 +4,9 @@ PKG_LIB_WTCDEK_AFTER_INSTALL = "Спасибо за установку расш PKG_LIB_WTCDEK_AFTER_DISCOVER_INSTALL = "Спасибо за установку расширения" PKG_LIB_WTCDEK_AFTER_UPDATE = "Спасибо за обновление расширения" PKG_LIB_WTCDEK_AFTER_UNINSTALL = ":(" -PKG_LIB_WTCDEK_MAYBE_INTERESTING="

Может быть интересно

" -PKG_LIB_WTCDEK_WHATS_NEW="

v.1.1.0 Что нового?

Если название города содержит пробел

Исправлена ошибка, возникавшая в тех случаях, когда название города содержало пробел: Нижний Новгород, Новый Уренгой и так далее.

Копирование и обновление данных CDEK в локальную базу данных

Добавлен плагин стандартного планировщика задач Joomla, который позволяет копировать и обновлять по расписанию списки стран и регионов доставки, населенных пунктов, а так же пунктов выдачи заказа. Эти данные вы можете использовать затем в своих расширениях. Рекомендуется настроить выполнение задач планировщика Joomla с помощью серверного CRON, так как некоторые справочники довольно большого объёма и их обновление может занимать продолжительное время. Также будьте внимательны, на некоторых хостингах существует ограничение на занимаемый объём базы данных.

Метод getLocationPostalCodes()

Добавлен метод getLocationPostalCodes, который получает список почтовых индексов для населенного пункта по его коду.

" -PKG_LIB_WTCDEK_JOOMLARU_TELEGRAM_CHAT="Joomla сообщество в Телеграм" +PKG_LIB_WTCDEK_MAYBE_INTERESTING = "

Может быть интересно

" +PKG_LIB_WTCDEK_WHATS_NEW = "

v.1.1.0 Что нового?

Если название города содержит пробел

Исправлена ошибка, возникавшая в тех случаях, когда название города содержало пробел: Нижний Новгород, Новый Уренгой и так далее.

Копирование и обновление данных CDEK в локальную базу данных

Добавлен плагин стандартного планировщика задач Joomla, который позволяет копировать и обновлять по расписанию списки стран и регионов доставки, населенных пунктов, а так же пунктов выдачи заказа. Эти данные вы можете использовать затем в своих расширениях. Рекомендуется настроить выполнение задач планировщика Joomla с помощью серверного CRON, так как некоторые справочники довольно большого объёма и их обновление может занимать продолжительное время. Также будьте внимательны, на некоторых хостингах существует ограничение на занимаемый объём базы данных.

Метод getLocationPostalCodes()

Добавлен метод getLocationPostalCodes, который получает список почтовых индексов для населенного пункта по его коду.

" +PKG_LIB_WTCDEK_JOOMLARU_TELEGRAM_CHAT = "Joomla сообщество в Телеграм" PKG_LIB_WTCDEK_WEBTOLK_TELEGRAM_CHANNEL = "@WebTolkRu в Telegram" PKG_LIB_WTCDEK_ERROR_COMPATIBLE_JOOMLA = "Эта версия совместима только с Joomla %s и выше." PKG_LIB_WTCDEK_ERROR_COMPATIBLE_PHP = "Эта версия совместима только с PHP %s и выше." \ No newline at end of file diff --git a/lib_webtolk_wtcdek/language/en-GB/lib_webtolk_cdekapi.ini b/lib_webtolk_wtcdek/language/en-GB/lib_webtolk_cdekapi.ini index dd7b393..ceba235 100644 --- a/lib_webtolk_wtcdek/language/en-GB/lib_webtolk_cdekapi.ini +++ b/lib_webtolk_wtcdek/language/en-GB/lib_webtolk_cdekapi.ini @@ -1,4 +1,20 @@ WT_CDEK_SM_DAY_0="day" WT_CDEK_SM_DAY_1="day" WT_CDEK_SM_DAY_2="days" -WT_CDEK_SM_DAY_MORE="days" \ No newline at end of file +WT_CDEK_SM_DAY_MORE="days" + +PKG_LIB_WTCDEK_ERROR_GETRESPONSE_CANT_DO_REQUEST = "WT Cdek library can't do request. See logs for more details." +PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_NO_CODE = "No code" +PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_NO_ERROR_DESC = "No error description" +PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_ERROR = "WT Cdek library %s Error: %s" +PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_ERROR_500 = "CDEK server is gone with response code 500. Cdek API response: %s" + +PKG_LIB_WTCDEK_ERROR_AUTHORIZE_NO_TOKEN = "Cdek response doesn't contain token" +PKG_LIB_WTCDEK_ERROR_AUTHORIZE = "Error while trying to authorize to CDEK API" + +PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_TARIFF_CODE = "Cdek::getCalculatorTariff. There is no tariff code. Specify it, please." +PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_FROM_LOCATION = "Cdek::getCalculatorTariff. There is no from_location. Specify it, please" +PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_TO_LOCATION = "Cdek::getCalculatorTariff. There is no to_location. Specify it, please." +PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_PACKAGES = "Cdek::getCalculatorTarifflist. There is no packages array in request options array. Specify it, please." +PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_PACKAGES_WEIGHT = "Cdek::getCalculatorTariff. There is no weight specified in one of your packages in request options array. Specify it, please." + diff --git a/lib_webtolk_wtcdek/language/ru-RU/lib_webtolk_cdekapi.ini b/lib_webtolk_wtcdek/language/ru-RU/lib_webtolk_cdekapi.ini index 49a6ba6..d94fa8c 100644 --- a/lib_webtolk_wtcdek/language/ru-RU/lib_webtolk_cdekapi.ini +++ b/lib_webtolk_wtcdek/language/ru-RU/lib_webtolk_cdekapi.ini @@ -1,4 +1,19 @@ WT_CDEK_SM_DAY_0="дней" WT_CDEK_SM_DAY_1="день" WT_CDEK_SM_DAY_2="дня" -WT_CDEK_SM_DAY_MORE="дней" \ No newline at end of file +WT_CDEK_SM_DAY_MORE="дней" + +PKG_LIB_WTCDEK_ERROR_GETRESPONSE_CANT_DO_REQUEST = "WT Cdek library не может выполнить запрос. Смотрите детали в логах." +PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_NO_CODE = "Нет кода ошибки" +PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_NO_ERROR_DESC = "Нет описания ошибки" +PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_ERROR_400 = "WT Cdek library %s Ошибка: %s" +PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_ERROR_500 = "Сервер CDEK отвечает кодом ошибки 500. Ответ API CDEK: %s" + +PKG_LIB_WTCDEK_ERROR_AUTHORIZE_NO_TOKEN = "Ответ API CDEK не содержит токен" +PKG_LIB_WTCDEK_ERROR_AUTHORIZE = "Ошибка авторизации в CDEK API" + +PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_TARIFF_CODE = "Cdek::getCalculatorTariff. Не указан код тарифа CDEK. Укажите его, пожалуйста." +PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_FROM_LOCATION = "Cdek::getCalculatorTariff. Не указано поле from_location в запросе. Укажите его, пожалуйста." +PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_TO_LOCATION = "Cdek::getCalculatorTariff. Не указано поле to_location в запросе. Укажите его, пожалуйста." +PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_PACKAGES = "Cdek::getCalculatorTarifflist. Не указано поле packages в массиве параметров запроса. Укажите его, пожалуйста." +PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_PACKAGES_WEIGHT = "Cdek::getCalculatorTariff. Не указан вес в одном из элементов массива packages в массиве параметров запроса. Укажите его, пожалуйста." \ No newline at end of file diff --git a/lib_webtolk_wtcdek/src/Cdek.php b/lib_webtolk_wtcdek/src/Cdek.php index c99a66a..b6c5d4f 100644 --- a/lib_webtolk_wtcdek/src/Cdek.php +++ b/lib_webtolk_wtcdek/src/Cdek.php @@ -18,6 +18,7 @@ use Joomla\CMS\Cache\CacheControllerFactoryInterface; use Joomla\CMS\Cache\Controller\OutputController; use Joomla\CMS\Factory; +use Joomla\CMS\Language\Text; use Joomla\CMS\Plugin\PluginHelper; use Joomla\CMS\Http\HttpFactory; use Joomla\Http\Response; @@ -99,6 +100,11 @@ public function __construct(?bool $test_mode = false, ?string $client_id = '', ? self::$client_id = $client_id ?? $client_id; self::$client_secret = $client_secret ?? $client_secret; self::$test_mode = $test_mode ?? $test_mode; + + $lang = Factory::getApplication()->getLanguage(); + $extension = 'lib_webtolk_cdekapi'; + $base_dir = JPATH_SITE; + $lang->load($extension, $base_dir); } @@ -123,7 +129,7 @@ public function getResponse(string $method = '', array $data = [], string $reque { return [ 'error_code' => 400, - 'error_message' => 'WT Cdek library can\'t do request. See logs for more details.' + 'error_message' => Text::_('PKG_LIB_WTCDEK_ERROR_GETRESPONSE_CANT_DO_REQUEST') ]; } @@ -232,8 +238,8 @@ private function responseHandler(Response $response, $method_name = ''): array { $error_array = [ - 'error_code' => 'no code', - 'error_message' => 'no error description' + 'error_code' => Text::_('PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_NO_CODE'), + 'error_message' => Text::_('PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_NO_ERROR_DESC') ]; $error_message = ''; @@ -273,7 +279,10 @@ private function responseHandler(Response $response, $method_name = ''): array $error_message = (string) $response->body; } - $error_message = 'WT Cdek library. ' . (!empty($method_name) ? 'REST API method: '.$method_name.'.' . ':' : '') . ' Error: '.$error_message; + $error_message = Text::sprintf(Text::_('PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_ERROR_400'), + (!empty($method_name) ? 'REST API method: '.$method_name.'.' . ':' : ''), + $error_message + ); Factory::getApplication()->enqueueMessage($error_message,'error'); $this->saveToLog($error_message, 'ERROR'); @@ -287,7 +296,7 @@ private function responseHandler(Response $response, $method_name = ''): array // API не работает, сервер лёг. В $response->body отдаётся HTML $this->saveToLog('Error while trying to calculate delivery cost via Cdek. Cdek API response: ' . print_r($body, true), 'ERROR'); $error_array['error_code'] = $response->code; - $error_array['error_message'] = 'Error while trying to calculate delivery cost via Cdek. Cdek API response: ' . print_r($body, true); + $error_array['error_message'] = Text::_('PKG_LIB_WTCDEK_ERROR_RESPONSEHANDLER_ERROR_500', print_r($body, true)); return $error_array; } @@ -387,11 +396,11 @@ private function authorize(): array $response = $this->getResponse('/oauth/token', $authorize_data,'POST'); if(!array_key_exists('access_token',$response)) { - $this->saveToLog('Cdek response doesn\'t contain token.','ERROR'); + $this->saveToLog(Text::_('PKG_LIB_WTCDEK_ERROR_AUTHORIZE_NO_TOKEN'),'ERROR'); $error_array = [ 'error_code' => 401, - 'error_message' => 'Cdek response doesn\'t contain token.' + 'error_message' => Text::_('PKG_LIB_WTCDEK_ERROR_AUTHORIZE_NO_TOKEN') ]; return $error_array; @@ -433,7 +442,7 @@ private function authorize(): array } catch (CdekClientException $e) { - throw new CdekClientException('Error while trying to authorize to CDEK API', 500, $e); + throw new CdekClientException(Text::_('PKG_LIB_WTCDEK_ERROR_AUTHORIZE'), 500, $e); } } @@ -617,7 +626,7 @@ public function getCache(array $cache_options = []) : OutputController * * * @return array|object - * @link https://web-tolk.ru + * @see https://api-docs.cdek.ru/36982648.html * @since 1.0.0 */ public function getDeliveryPoints(array $request_options = []) : array @@ -691,7 +700,7 @@ public function getDeliveryPoints(array $request_options = []) : array * - string|null $lang Локализация. По умолчанию "rus" * * @return array|object - * @link https://web-tolk.ru + * @see https://api-docs.cdek.ru/33829418.html * @since 1.0.0 */ public function getLocationRegions(array $request_options = []) : array @@ -732,7 +741,7 @@ public function getLocationRegions(array $request_options = []) : array * * * @return array - * @link https://web-tolk.ru + * @see https://api-docs.cdek.ru/33829437.html * @since 1.0.0 */ public function getLocationCities(array $request_options = []) : array @@ -767,7 +776,7 @@ public function getLocationCities(array $request_options = []) : array * @return array|string[] * * @since 1.1.0 - * @link https://api-docs.cdek.ru/133171036.html + * @see https://api-docs.cdek.ru/133171036.html */ public function getLocationPostalCodes(int $city_code) : array { @@ -869,7 +878,7 @@ public function getLocationPostalCodes(int $city_code) : array * - int $packages['height'] Габариты упаковки. Высота (в сантиметрах) * * @return array - * @link https://web-tolk.ru + * @see https://api-docs.cdek.ru/63345430.html * @since 1.0.0 */ public function getCalculatorTariff(array $request_options = []) : array @@ -879,10 +888,10 @@ public function getCalculatorTariff(array $request_options = []) : array // tariff_code - обязательный параметр if (!$request_options['tariff_code'] || empty($request_options['tariff_code'])) { - $this->saveToLog('Cdek::getCalculatorTariff. There is no tariff code. Specify it, please.', 'ERROR'); + $this->saveToLog(Text::_('PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_TARIFF_CODE'), 'ERROR'); $error_array = array( 'error_code' => '500', - 'error_message' => 'Cdek::getCalculatorTariff. There is no tariff code. Specify it, please.' + 'error_message' => Text::_('PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_TARIFF_CODE') ); return $error_array; @@ -899,10 +908,10 @@ public function getCalculatorTariff(array $request_options = []) : array ) ) { - $this->saveToLog('Cdek::getCalculatorTariff. There is no from_location. Specify it, please.', 'ERROR'); + $this->saveToLog(Text::_('PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_FROM_LOCATION'), 'ERROR'); $error_array = array( 'error_code' => '500', - 'error_message' => 'Cdek::getCalculatorTariff. There is no from_location. Specify it, please.' + 'error_message' => Text::_('PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_FROM_LOCATION') ); return $error_array; @@ -919,10 +928,10 @@ public function getCalculatorTariff(array $request_options = []) : array ) ) { - $this->saveToLog('Cdek::getCalculatorTariff. There is no to_location. Specify it, please.', 'ERROR'); + $this->saveToLog(Text::_('PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_TO_LOCATION'), 'ERROR'); $error_array = [ 'error_code' => '500', - 'error_message' => 'Cdek::getCalculatorTariff. There is no to_location. Specify it, please.' + 'error_message' => Text::_('PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_TO_LOCATION') ]; return $error_array; @@ -931,10 +940,10 @@ public function getCalculatorTariff(array $request_options = []) : array // packages - обязательный параметр if (!$request_options['packages'] || empty($request_options['packages'])) { - $this->saveToLog('Cdek::getCalculatorTarifflist. There is no packages array in request options array. Specify it, please.', 'ERROR'); + $this->saveToLog(Text::_('PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_PACKAGES'), 'ERROR'); $error_array = [ 'error_code' => '500', - 'error_message' => 'Cdek::getCalculatorTarifflist. There is no packages array in request options array. Specify it, please.' + 'error_message' => Text::_('PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_PACKAGES') ]; return $error_array; @@ -945,10 +954,10 @@ public function getCalculatorTariff(array $request_options = []) : array { if (!$package['weight'] || empty($package['weight'])) { - $this->saveToLog('Cdek::getCalculatorTariff. There is no weight specified in one of your packages in request options array. Specify it, please.', 'ERROR'); + $this->saveToLog(Text::_('PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_PACKAGES_WEIGHT'), 'ERROR'); $error_array = [ 'error_code' => '500', - 'error_message' => 'Cdek::getCalculatorTariff. There is no weight specified in one of your packages in request options array. Specify it, please.' + 'error_message' => Text::_('PKG_LIB_WTCDEK_ERROR_GETCALCULATORTARIFF_NO_PACKAGES_WEIGHT') ]; return $error_array; @@ -1052,7 +1061,7 @@ public function getCalculatorTariff(array $request_options = []) : array * - int $packages['height'] Габариты упаковки. Высота (в сантиметрах) * * @return array|object - * @link https://web-tolk.ru + * @see https://api-docs.cdek.ru/63345519.html * @since 1.0.0 */ public function getCalculatorTarifflist(array $request_options = []):array @@ -1167,7 +1176,7 @@ public function getCalculatorTarifflist(array $request_options = []):array * - DOWNLOAD_PHOTO - получение фото документов по заказам * * @return array|object - * @link https://web-tolk.ru + * @see https://api-docs.cdek.ru/29934408.html * @since 1.0.0 */ public function subscribeToWebhook(string $url, string $type):array @@ -1317,7 +1326,7 @@ public function subscribeToWebhook(string $url, string $type):array * @param array $request_options Массив параметров, описанных ниже * * @return array|object - * @link https://web-tolk.ru + * @see https://api-docs.cdek.ru/29923926.html * @since 1.0.0 */ public function createOrder(array $request_options) : array @@ -2117,7 +2126,7 @@ public function getTariffListDostavka(): array * @return mixed|object * * @since 1.0.0 - * @link https://web-tolk.ru + * @see https://api-docs.cdek.ru/29923975.html */ public function getOrderInfo(?string $uuid = '', ?string $cdek_number = '', ?string $im_number = ''):array { @@ -2126,7 +2135,7 @@ public function getOrderInfo(?string $uuid = '', ?string $cdek_number = '', ?str { return [ 'error_code' => '500', - 'error_message' => 'There is no ordre UUID or Cdek order number or Joomla side order id specified' + 'error_message' => 'There is no order UUID or Cdek order number or Joomla side order id specified' ]; } if (!empty($uuid))