diff --git a/OpenCart_3/upload/admin/controller/extension/payment/shoputils_ik.php b/OpenCart_3/upload/admin/controller/extension/payment/shoputils_ik.php
new file mode 100644
index 0000000..51dde22
--- /dev/null
+++ b/OpenCart_3/upload/admin/controller/extension/payment/shoputils_ik.php
@@ -0,0 +1,379 @@
+load->language('extension/payment/shoputils_ik');
+ $this->document->setTitle($this->language->get('heading_title'));
+ }
+
+ public function index() {
+ if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) {
+ $this->_trimData(array(
+ 'payment_shoputils_ik_shop_id',
+ 'payment_shoputils_ik_sign_hash',
+ 'payment_shoputils_ik_sign_test_key',
+ 'payment_shoputils_ik_minimal_order',
+ 'payment_shoputils_ik_maximal_order'
+ ));
+
+ $this->_replaceData(',', '.', array(
+ 'payment_shoputils_ik_minimal_order',
+ 'payment_shoputils_ik_maximal_order'
+ ));
+
+ $this->load->model('setting/setting');
+
+ $this->model_setting_setting->editSetting('payment_shoputils_ik', $this->request->post);
+ $this->session->data['success'] = sprintf($this->language->get('text_success'), $this->language->get('heading_title'));
+
+ $this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true));
+ }
+
+ $this->load->model('localisation/currency');
+ $this->load->model('localisation/geo_zone');
+ $this->load->model('localisation/language');
+ $this->load->model('localisation/order_status');
+
+ $ik_currencies = array(
+ '' => $this->language->get('text_currency_auto'),
+ 'RUB' => $this->language->get('text_currency_rub'),
+ 'UAH' => $this->language->get('text_currency_uah'),
+ 'USD' => $this->language->get('text_currency_usd'),
+ 'EUR' => $this->language->get('text_currency_eur')
+ );
+
+ $ik_lifetimes = array(
+ 5 => $this->language->get('text_lifetime_5minuts'),
+ 30 => $this->language->get('text_lifetime_30minuts'),
+ 60 => $this->language->get('text_lifetime_1hour'),
+ 1440 => $this->language->get('text_lifetime_1day'),
+ 10080 => $this->language->get('text_lifetime_1weekly'),
+ 43200 => $this->language->get('text_lifetime_30days')
+ );
+
+ $permission = $this->validatePermission();
+ if (!$permission ) {
+ $this->error['warning'] = sprintf($this->language->get('error_permission'), $this->language->get('heading_title'));
+ }
+
+ $server = isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1')) ? HTTPS_CATALOG : HTTP_CATALOG;
+
+ $data = $this->_setData(array(
+ 'heading_title',
+ 'button_save',
+ 'button_cancel',
+ 'button_clear',
+ 'tab_general',
+ 'tab_emails',
+ 'tab_settings',
+ 'tab_log',
+ 'tab_information',
+ 'lang',
+ 'text_confirm',
+ 'text_enabled',
+ 'text_disabled',
+ 'text_all_zones',
+ 'text_yes',
+ 'text_no',
+ 'text_info',
+ 'text_info_content',
+ 'text_parameters',
+ 'entry_geo_zone',
+ 'entry_status',
+ 'entry_sort_order',
+ 'entry_minimal_order',
+ 'entry_maximal_order',
+ 'entry_order_status',
+ 'entry_order_confirm_status',
+ 'entry_order_fail_status',
+ 'entry_laterpay_mode',
+ 'entry_order_later_status',
+ 'entry_title',
+ 'entry_instruction',
+
+ 'entry_notify_customer_success',
+ 'entry_mail_customer_success_subject',
+ 'entry_mail_customer_success_content',
+ 'entry_notify_customer_fail',
+ 'entry_mail_customer_fail_subject',
+ 'entry_mail_customer_fail_content',
+ 'entry_notify_admin_success',
+ 'entry_mail_admin_success_subject',
+ 'entry_mail_admin_success_content',
+ 'entry_notify_admin_fail',
+ 'entry_mail_admin_fail_subject',
+ 'entry_mail_admin_fail_content',
+
+ 'entry_shop_id',
+ 'entry_sign_hash',
+ 'entry_sign_test_key',
+ 'entry_test_mode',
+ 'entry_currency',
+ 'entry_lifetime',
+ 'entry_success_url',
+ 'entry_fail_url',
+ 'entry_pending_url',
+ 'entry_status_url',
+
+ 'entry_log',
+ 'entry_log_file',
+
+ 'placeholder_instruction',
+
+ 'help_minimal_order',
+ 'help_maximal_order',
+ 'help_order_confirm_status',
+ 'help_order_status',
+ 'help_order_fail_status',
+ 'help_laterpay_mode',
+ 'help_order_later_status',
+ 'help_title',
+ 'help_instruction',
+
+ 'help_notify_customer_success',
+ 'help_mail_customer_success_subject',
+ 'help_mail_customer_success_content',
+ 'help_notify_customer_fail',
+ 'help_mail_customer_fail_subject',
+ 'help_mail_customer_fail_content',
+ 'help_notify_admin_success',
+ 'help_mail_admin_success_subject',
+ 'help_mail_admin_success_content',
+ 'help_notify_admin_fail',
+ 'help_mail_admin_fail_subject',
+ 'help_mail_admin_fail_content',
+
+ 'help_shop_id',
+ 'help_sign_hash',
+ 'help_sign_test_key',
+ 'help_test_mode',
+ 'help_currency',
+ 'help_lifetime',
+ 'help_log_file' => sprintf($this->language->get('help_log_file'), self::MAX_LAST_LOG_LINES),
+ 'help_log' => sprintf($this->language->get('help_log'), self::FILE_NAME_LOG),
+ 'title_default' => explode(',', $this->language->get('heading_title')),
+ 'action' => $this->makeUrl('extension/payment/shoputils_ik'),
+ 'cancel' => $this->makeUrl('extension/extension', 'type=payment'),
+ 'clear_log' => $this->makeUrl('extension/payment/shoputils_ik/clearLog'),
+ 'text_copyright' => sprintf($this->language->get('text_copyright'), $this->language->get('heading_title')),
+ 'payment_shoputils_ik_success_url' => $server . 'index.php?route=extension/payment/shoputils_ik/success',
+ 'payment_shoputils_ik_fail_url' => $server . 'index.php?route=extension/payment/shoputils_ik/fail',
+ 'payment_shoputils_ik_pending_url' => $server . 'index.php?route=extension/payment/shoputils_ik/success',
+ 'payment_shoputils_ik_status_url' => $server . 'index.php?route=extension/payment/shoputils_ik/status',
+ 'permission' => $permission,
+ 'error_warning' => isset($this->error['warning']) ? $this->error['warning'] : '',
+ 'error_shop_id' => isset($this->error['error_shop_id']) ? $this->error['error_shop_id'] : '',
+ 'error_sign_hash' => isset($this->error['error_sign_hash']) ? $this->error['error_sign_hash'] : '',
+ 'error_sign_test_key' => isset($this->error['error_sign_test_key']) ? $this->error['error_sign_test_key'] : '',
+ 'version' => $this->version,
+ 'log_lines' => $this->readLastLines(DIR_LOGS . 'payment_shoputils_ik.log', self::MAX_LAST_LOG_LINES),
+ 'log_filename' => self::FILE_NAME_LOG,
+ 'currencies' => array_intersect_key($ik_currencies, $this->model_localisation_currency->getCurrencies()),
+ 'lifetimes' => $ik_lifetimes,
+ 'geo_zones' => $this->model_localisation_geo_zone->getGeoZones(),
+ 'order_statuses' => array_merge(array(0 => array('order_status_id' => '0', 'name' => $this->language->get('text_order_status_cart'))),
+ $this->model_localisation_order_status->getOrderStatuses()),
+ 'oc_languages' => $this->model_localisation_language->getLanguages()
+ ));
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->makeUrl('common/dashboard'),
+ 'text' => $this->language->get('text_home')
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->makeUrl('extension/extension', 'type=payment'),
+ 'text' => $this->language->get('text_extension')
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->makeUrl('extension/payment/shoputils_ik'),
+ 'text' => $this->language->get('heading_title')
+ );
+
+ $data['logs'] = array(
+ '0' => $this->language->get('text_log_off'),
+ '1' => $this->language->get('text_log_short'),
+ '2' => $this->language->get('text_log_full')
+ );
+
+ $data['test_modes'] = array(
+ '0' => $this->language->get('text_disabled'),
+ '1' => $this->language->get('text_enabled'),
+ );
+
+ $data = array_merge($data, $this->_updateData(
+ array(
+ 'payment_shoputils_ik_geo_zone_id',
+ 'payment_shoputils_ik_sort_order',
+ 'payment_shoputils_ik_status',
+ 'payment_shoputils_ik_minimal_order',
+ 'payment_shoputils_ik_maximal_order',
+ 'payment_shoputils_ik_order_status_id',
+ 'payment_shoputils_ik_order_fail_status_id',
+ 'payment_shoputils_ik_order_confirm_status_id',
+ 'payment_shoputils_ik_langdata',
+
+ 'payment_shoputils_ik_shop_id',
+ 'payment_shoputils_ik_sign_hash',
+ 'payment_shoputils_ik_sign_test_key',
+ 'payment_shoputils_ik_test_mode',
+ 'payment_shoputils_ik_currency',
+ 'payment_shoputils_ik_lifetime',
+ 'payment_shoputils_ik_log'
+ ),
+ array()
+ ));
+
+ $data = array_merge($data, $this->_setData(
+ array(
+ 'header' => $this->load->controller('common/header'),
+ 'column_left' => $this->load->controller('common/column_left'),
+ 'footer' => $this->load->controller('common/footer')
+ )
+ ));
+
+ $this->response->setOutput($this->load->view('extension/payment/shoputils_ik', $data));
+ }
+
+ public function clearLog() {
+ $json = array();
+
+ if ($this->validatePermission()) {
+ if (is_file(DIR_LOGS . self::FILE_NAME_LOG)) {
+ @unlink(DIR_LOGS . self::FILE_NAME_LOG);
+ }
+ $json['success'] = $this->language->get('text_clear_log_success');
+ } else {
+ $json['error'] = $this->language->get('error_clear_log');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ protected function validate() {
+ if (!$this->validatePermission()) {
+ $this->error['warning'] = sprintf($this->language->get('error_permission'), $this->language->get('heading_title'));
+ } else {
+ if (!isset($this->request->post['payment_shoputils_ik_shop_id']) || !trim($this->request->post['payment_shoputils_ik_shop_id'])) {
+ $this->error['warning'] = $this->error['error_shop_id'] = sprintf($this->language->get('error_form'),
+ $this->language->get('entry_shop_id'),
+ $this->language->get('tab_settings'));
+ }
+
+ if (!isset($this->request->post['payment_shoputils_ik_sign_hash']) || !trim($this->request->post['payment_shoputils_ik_sign_hash'])) {
+ $this->error['warning'] = $this->error['error_sign_hash'] = sprintf($this->language->get('error_form'),
+ $this->language->get('entry_sign_hash'),
+ $this->language->get('tab_settings'));
+ }
+
+ if (!isset($this->request->post['payment_shoputils_ik_sign_test_key']) || !trim($this->request->post['payment_shoputils_ik_sign_test_key'])) {
+ $this->error['warning'] = $this->error['error_sign_test_key'] = sprintf($this->language->get('error_form'),
+ $this->language->get('entry_sign_test_key'),
+ $this->language->get('tab_settings'));
+ }
+ }
+
+ return !$this->error;
+ }
+
+ protected function _setData($values) {
+ $data = array();
+ foreach ($values as $key => $value) {
+ if (is_int($key)) {
+ $data[$value] = $this->language->get($value);
+ } else {
+ $data[$key] = $value;
+ }
+ }
+ return $data;
+ }
+
+ protected function _updateData($keys, $info = array()) {
+ $data = array();
+ foreach ($keys as $key) {
+ if (isset($this->request->post[$key])) {
+ $data[$key] = $this->request->post[$key];
+ } elseif (isset($info[$key])) {
+ $data[$key] = $info[$key];
+ } else {
+ $data[$key] = $this->config->get($key);
+ }
+ }
+ return $data;
+ }
+
+ protected function validatePermission() {
+ return $this->user->hasPermission('modify', 'extension/payment/shoputils_ik');
+ }
+
+ protected function _trimData($values) {
+ foreach ($values as $value) {
+ if (isset($this->request->post[$value])) {
+ $this->request->post[$value] = trim($this->request->post[$value]);
+ }
+ }
+ }
+
+ protected function _replaceData($search, $replace, $values) {
+ foreach ($values as $value) {
+ if (isset($this->request->post[$value])) {
+ $this->request->post[$value] = str_replace($search, $replace, $this->request->post[$value]);
+ }
+ }
+ }
+
+ protected function makeUrl($route, $url = '') {
+ return str_replace('&', '&', $this->url->link($route, $url . '&user_token=' . $this->session->data['user_token'], true));
+ }
+
+ protected function readLastLines($filename, $lines) {
+ if (!is_file($filename)) {
+ return array();
+ }
+ $handle = @fopen($filename, "r");
+ if (!$handle) {
+ return array();
+ }
+ $linecounter = $lines;
+ $pos = -1;
+ $beginning = false;
+ $text = array();
+
+ while ($linecounter > 0) {
+ $t = " ";
+
+ while ($t != "\n") {
+ /* if fseek() returns -1 we need to break the cycle*/
+ if (fseek($handle, $pos, SEEK_END) == -1) {
+ $beginning = true;
+ break;
+ }
+ $t = fgetc($handle);
+ $pos--;
+ }
+
+ $linecounter--;
+
+ if ($beginning) {
+ rewind($handle);
+ }
+
+ $text[$lines - $linecounter - 1] = fgets($handle);
+
+ if ($beginning) {
+ break;
+ }
+ }
+ fclose($handle);
+
+ return array_reverse($text);
+ }
+}
+?>
\ No newline at end of file
diff --git a/OpenCart_3/upload/admin/language/en-gb/extension/payment/shoputils_ik.php b/OpenCart_3/upload/admin/language/en-gb/extension/payment/shoputils_ik.php
new file mode 100644
index 0000000..505fd72
--- /dev/null
+++ b/OpenCart_3/upload/admin/language/en-gb/extension/payment/shoputils_ik.php
@@ -0,0 +1,119 @@
+
';
+$_['text_order_status_cart'] = 'Корзина (Ошибочный заказ)';
+$_['text_log_off'] = 'Выключен';
+$_['text_log_short'] = 'Частичный (Только результаты операций)';
+$_['text_log_full'] = 'Полный (Все запросы)';
+
+$_['text_currency_auto'] = 'Определять автоматически';
+$_['text_currency_rub'] = 'Российские рубли (RUB-643)';
+$_['text_currency_uah'] = 'Украинские гривны (UAH-980)';
+$_['text_currency_usd'] = 'Доллары США (USD-840)';
+$_['text_currency_eur'] = 'Евро (EUR-978)';
+$_['text_lifetime_5minuts'] = '5 минут';
+$_['text_lifetime_30minuts'] = '30 минут';
+$_['text_lifetime_1hour'] = '1 час';
+$_['text_lifetime_1day'] = '1 день';
+$_['text_lifetime_1weekly'] = '1 неделя';
+$_['text_lifetime_30days'] = '30 дней';
+$_['text_copyright'] = 'Модуль оплаты "%s" разработан по заказу платежной системы "Interkassa" при поддержке ShopUtils. Если Вам требуется больше возможностей, возможно Вам потребуется более функциональный модуль.';
+$_['text_copyright'] = '© Разработано ShopUtils по заказу платежной системы "Interkassa". Расширенный функционал - в коммерческой версии модуля.';
+$_['text_info'] = 'После регистрации учетной записи интернет-магазина в «INTERKASSA»
+необходимо настроить магазин для приема платежей. Сделать это можно в личном кабинете раздела Мои Кассы, нажав на кнопку "Настройки"
+напротив своего магазина. Данные которые необходимо ввести в настройках магазина:';
+$_['text_info_content'] = 'В разделе "Мои кассы -> Настройки кассы -> Настройки платежей" необходимо установить следующие значения:
+"Проверять уникальность платежей" - вкл.
+"Передавать описание на платежную систему" - вкл.
+"Время жизни платежа (в минутах)" - вкл. "разрешить переопределять в запросе "
+В разделе "Мои кассы -> Настройки кассы -> Интерфейс" необходимо везде установить следующие значения:
+"Тип запроса" - "POST"
+везде выключить "Разрешить переопределять в запросе "
+В разделе "Мои кассы -> Настройки кассы -> Безопасность" необходимо установить следующие значения:
+"Алгоритм подписи" - "MD5"
+"Проверять подпись в форме запроса платежа" - вкл.';
+
+// Text FT
+$_['text_order_id_ft'] = '№ заказа';
+$_['text_store_name_ft'] = 'Название магазина';
+$_['text_logo_ft'] = 'Логотип магазина';
+$_['text_products_ft'] = 'Список купленных товаров';
+$_['text_total_ft'] = 'Итого';
+$_['text_customer_firstname_ft'] = 'Имя Отчество покупателя';
+$_['text_customer_lastname_ft'] = 'Фамилия покупателя';
+$_['text_customer_group_ft'] = 'Группа покупателя';
+$_['text_customer_email_ft'] = 'e-mail покупателя';
+$_['text_customer_telephone_ft'] = 'Телефон покупателя';
+$_['text_order_status_ft'] = 'Статус заказа';
+$_['text_comment_ft'] = 'Комментарий покупателя к заказу';
+$_['text_ip_ft'] = 'IP адрес покупателя';
+$_['text_date_added_ft'] = 'Дата и время добавления заказа';
+$_['text_date_modified_ft'] = 'Дата и время изменения заказа';
+
+// Entry
+$_['entry_status'] = 'Статус';
+$_['entry_order_status'] = 'Статус заказа после оплаты';
+$_['entry_geo_zone'] = 'Географическая зона';
+$_['entry_sort_order'] = 'Порядок сортировки';
+$_['entry_minimal_order'] = 'Минимальная стоимость заказа';
+$_['entry_maximal_order'] = 'Максимальная стоимость заказа';
+$_['entry_order_confirm_status'] = 'Статус заказа после подтверждения';
+$_['entry_order_fail_status'] = 'Статус заказа после неудачной оплаты';
+$_['entry_title'] = 'Название';
+$_['entry_instruction'] = 'Инструкция по оплате';
+
+$_['entry_shop_id'] = 'Идентификатор кассы';
+$_['entry_sign_hash'] = 'Секретный ключ';
+$_['entry_sign_test_key'] = 'Тестовый ключ';
+$_['entry_test_mode'] = 'Тестовый режим';
+$_['entry_currency'] = 'Валюта магазина';
+$_['entry_lifetime'] = 'Время жизни платежа';
+
+$_['entry_log'] = 'Журнал';
+$_['entry_log_file'] = 'Файл журнала';
+
+$_['entry_success_url'] = 'URL успешной оплаты';
+$_['entry_fail_url'] = 'URL неуспешной оплаты';
+$_['entry_pending_url'] = 'URL ожидания проведения платежа';
+$_['entry_status_url'] = 'URL взаимодействия';
+
+// Placeholder
+$_['placeholder_instruction'] = 'Уважаемый покупатель! Просим Вас дождаться звонка от нашего менеджера перед оплатой. Это необходимо для подтверждения наличия товара на складе и возможности доставки в Ваш регион. После чего менеджер отправит Вам письмо со ссылкой на оплату заказа.';
+
+// Help
+$_['help_order_confirm_status'] = 'При нажатии на кнопку "Подтвердить" на последнем этапе оформления заказа, заказу будет установлен выбранный статус';
+$_['help_order_status'] = 'После успешной оплаты заказа, заказу будет установлен выбранный статус.';
+$_['help_minimal_order'] = 'Если сумма заказа меньше указанной суммы, и сумма не пустая и не равна нулю, то этот метод оплаты не будет доступен, при оформлении заказа.
Например: 190.90';
+$_['help_maximal_order'] = 'Если сумма заказа больше указанной суммы, и сумма не пустая и не равна нулю, то этот метод оплаты не будет доступен, при оформлении заказа.
Например: 5000.01';
+$_['help_order_fail_status'] = 'Если Интеркасса вернет покупателя после неудачного платежа, заказу будет установлен выбранный статус.';
+$_['help_laterpay_mode'] = 'При включенном режиме отсроченной (отложенной) оплаты покупатель сможет оплатить заказ только после проверки заказа менеджером магазина.
Если Вам необходимо, чтобы у покупателя была возможность произвести оплату сразу после оформления заказа без подтверждения менеджером - не включайте эту опцию.';
+$_['help_order_later_status'] = 'После проверки заказа менеджер магазина выставит данный статус, покупатель будет уведомлен по e-mail и сможет оплатить заказ. Также, ссылка на оплату появится в личном кабинете покупателя в разделе "Мои заказы".
БУДЬТЕ ВНИМАТЕЛЬНЫ!
Если данный статус будет совпадать со "статус заказа после подтверждения" - режим отсроченной оплаты будет отключен и покупатели будут перенаправляться на сайт "Робокассы" для оплаты сразу после нажатия на кнопку "Оформить заказ".';
+$_['help_title'] = 'Название метода оплаты на странице оформления заказа';
+$_['help_instruction'] = 'Инструкция по оплате выводится при подтверждении заказа. Если поле не заполнено - инструкция по оплате выводиться не будет.';
+
+$_['help_shop_id'] = 'Идентификатор кассы зарегистрированного в системе «INTERKASSA». Узнать его можно в разделе «Мои кассы». Пример: 529a6e08bf4efcae2d1b8488';
+$_['help_sign_hash'] = 'Используется SCI (Интеркассой) при формировании цифровой подписи. Должен совпадать с секретным ключем в разделе "Мои кассы -> Настройки кассы -> Безопасность -> Секретный ключ".';
+$_['help_sign_test_key'] = 'Используется SCI (Интеркассой) при формировании цифровой подписи, если платеж был совершен через тестовую платежную систему. Должен совпадать с тестовым ключем в разделе "Мои кассы -> Настройки кассы -> Безопасность -> Тестовый ключ".';
+$_['help_test_mode'] = 'В тестовом режиме можно проверить настройки модуля и Интеркассы через тестовую валюту Интеркассы, выбрав при оплате "Тестовая платежная система". В этом случае для подписывания ЭЦП (электронной цифровой подписи) используется тестовый ключ. Для приема реальных платежей - тестовый режим необходимо выключить.';
+$_['help_currency'] = 'Валюта, в которой магазин передает сумму платежа на платежный шлюз "Интеркасса". Интеркасса принимает следующие валюты: RUB, UAH, EUR, USD.';
+$_['help_lifetime'] = 'Платеж невозможно будет совершить по истечении срока жизни платежа после его создания.';
+$_['help_log_file'] = 'Последние %d строк из файла журнала.';
+$_['help_log'] = 'Журнал запросов от Интеркассы сохраняется в файле: /system/storage/logs/%s';
+
+// Error
+$_['error_permission'] = 'У Вас нет прав для управления модулем "%s"!';
+$_['error_clear_log'] = 'У Вас нет прав для очистки журнала модуля!';
+$_['error_form'] = 'Необходимо заполнить поле "%s" (вкладка "%s")!';
+?>
\ No newline at end of file
diff --git a/OpenCart_3/upload/admin/language/ru-ru/extension/payment/shoputils_ik.php b/OpenCart_3/upload/admin/language/ru-ru/extension/payment/shoputils_ik.php
new file mode 100644
index 0000000..505fd72
--- /dev/null
+++ b/OpenCart_3/upload/admin/language/ru-ru/extension/payment/shoputils_ik.php
@@ -0,0 +1,119 @@
+
';
+$_['text_order_status_cart'] = 'Корзина (Ошибочный заказ)';
+$_['text_log_off'] = 'Выключен';
+$_['text_log_short'] = 'Частичный (Только результаты операций)';
+$_['text_log_full'] = 'Полный (Все запросы)';
+
+$_['text_currency_auto'] = 'Определять автоматически';
+$_['text_currency_rub'] = 'Российские рубли (RUB-643)';
+$_['text_currency_uah'] = 'Украинские гривны (UAH-980)';
+$_['text_currency_usd'] = 'Доллары США (USD-840)';
+$_['text_currency_eur'] = 'Евро (EUR-978)';
+$_['text_lifetime_5minuts'] = '5 минут';
+$_['text_lifetime_30minuts'] = '30 минут';
+$_['text_lifetime_1hour'] = '1 час';
+$_['text_lifetime_1day'] = '1 день';
+$_['text_lifetime_1weekly'] = '1 неделя';
+$_['text_lifetime_30days'] = '30 дней';
+$_['text_copyright'] = 'Модуль оплаты "%s" разработан по заказу платежной системы "Interkassa" при поддержке ShopUtils. Если Вам требуется больше возможностей, возможно Вам потребуется более функциональный модуль.';
+$_['text_copyright'] = '© Разработано ShopUtils по заказу платежной системы "Interkassa". Расширенный функционал - в коммерческой версии модуля.';
+$_['text_info'] = 'После регистрации учетной записи интернет-магазина в «INTERKASSA»
+необходимо настроить магазин для приема платежей. Сделать это можно в личном кабинете раздела Мои Кассы, нажав на кнопку "Настройки"
+напротив своего магазина. Данные которые необходимо ввести в настройках магазина:';
+$_['text_info_content'] = 'В разделе "Мои кассы -> Настройки кассы -> Настройки платежей" необходимо установить следующие значения:
+"Проверять уникальность платежей" - вкл.
+"Передавать описание на платежную систему" - вкл.
+"Время жизни платежа (в минутах)" - вкл. "разрешить переопределять в запросе "
+В разделе "Мои кассы -> Настройки кассы -> Интерфейс" необходимо везде установить следующие значения:
+"Тип запроса" - "POST"
+везде выключить "Разрешить переопределять в запросе "
+В разделе "Мои кассы -> Настройки кассы -> Безопасность" необходимо установить следующие значения:
+"Алгоритм подписи" - "MD5"
+"Проверять подпись в форме запроса платежа" - вкл.';
+
+// Text FT
+$_['text_order_id_ft'] = '№ заказа';
+$_['text_store_name_ft'] = 'Название магазина';
+$_['text_logo_ft'] = 'Логотип магазина';
+$_['text_products_ft'] = 'Список купленных товаров';
+$_['text_total_ft'] = 'Итого';
+$_['text_customer_firstname_ft'] = 'Имя Отчество покупателя';
+$_['text_customer_lastname_ft'] = 'Фамилия покупателя';
+$_['text_customer_group_ft'] = 'Группа покупателя';
+$_['text_customer_email_ft'] = 'e-mail покупателя';
+$_['text_customer_telephone_ft'] = 'Телефон покупателя';
+$_['text_order_status_ft'] = 'Статус заказа';
+$_['text_comment_ft'] = 'Комментарий покупателя к заказу';
+$_['text_ip_ft'] = 'IP адрес покупателя';
+$_['text_date_added_ft'] = 'Дата и время добавления заказа';
+$_['text_date_modified_ft'] = 'Дата и время изменения заказа';
+
+// Entry
+$_['entry_status'] = 'Статус';
+$_['entry_order_status'] = 'Статус заказа после оплаты';
+$_['entry_geo_zone'] = 'Географическая зона';
+$_['entry_sort_order'] = 'Порядок сортировки';
+$_['entry_minimal_order'] = 'Минимальная стоимость заказа';
+$_['entry_maximal_order'] = 'Максимальная стоимость заказа';
+$_['entry_order_confirm_status'] = 'Статус заказа после подтверждения';
+$_['entry_order_fail_status'] = 'Статус заказа после неудачной оплаты';
+$_['entry_title'] = 'Название';
+$_['entry_instruction'] = 'Инструкция по оплате';
+
+$_['entry_shop_id'] = 'Идентификатор кассы';
+$_['entry_sign_hash'] = 'Секретный ключ';
+$_['entry_sign_test_key'] = 'Тестовый ключ';
+$_['entry_test_mode'] = 'Тестовый режим';
+$_['entry_currency'] = 'Валюта магазина';
+$_['entry_lifetime'] = 'Время жизни платежа';
+
+$_['entry_log'] = 'Журнал';
+$_['entry_log_file'] = 'Файл журнала';
+
+$_['entry_success_url'] = 'URL успешной оплаты';
+$_['entry_fail_url'] = 'URL неуспешной оплаты';
+$_['entry_pending_url'] = 'URL ожидания проведения платежа';
+$_['entry_status_url'] = 'URL взаимодействия';
+
+// Placeholder
+$_['placeholder_instruction'] = 'Уважаемый покупатель! Просим Вас дождаться звонка от нашего менеджера перед оплатой. Это необходимо для подтверждения наличия товара на складе и возможности доставки в Ваш регион. После чего менеджер отправит Вам письмо со ссылкой на оплату заказа.';
+
+// Help
+$_['help_order_confirm_status'] = 'При нажатии на кнопку "Подтвердить" на последнем этапе оформления заказа, заказу будет установлен выбранный статус';
+$_['help_order_status'] = 'После успешной оплаты заказа, заказу будет установлен выбранный статус.';
+$_['help_minimal_order'] = 'Если сумма заказа меньше указанной суммы, и сумма не пустая и не равна нулю, то этот метод оплаты не будет доступен, при оформлении заказа.
Например: 190.90';
+$_['help_maximal_order'] = 'Если сумма заказа больше указанной суммы, и сумма не пустая и не равна нулю, то этот метод оплаты не будет доступен, при оформлении заказа.
Например: 5000.01';
+$_['help_order_fail_status'] = 'Если Интеркасса вернет покупателя после неудачного платежа, заказу будет установлен выбранный статус.';
+$_['help_laterpay_mode'] = 'При включенном режиме отсроченной (отложенной) оплаты покупатель сможет оплатить заказ только после проверки заказа менеджером магазина.
Если Вам необходимо, чтобы у покупателя была возможность произвести оплату сразу после оформления заказа без подтверждения менеджером - не включайте эту опцию.';
+$_['help_order_later_status'] = 'После проверки заказа менеджер магазина выставит данный статус, покупатель будет уведомлен по e-mail и сможет оплатить заказ. Также, ссылка на оплату появится в личном кабинете покупателя в разделе "Мои заказы".
БУДЬТЕ ВНИМАТЕЛЬНЫ!
Если данный статус будет совпадать со "статус заказа после подтверждения" - режим отсроченной оплаты будет отключен и покупатели будут перенаправляться на сайт "Робокассы" для оплаты сразу после нажатия на кнопку "Оформить заказ".';
+$_['help_title'] = 'Название метода оплаты на странице оформления заказа';
+$_['help_instruction'] = 'Инструкция по оплате выводится при подтверждении заказа. Если поле не заполнено - инструкция по оплате выводиться не будет.';
+
+$_['help_shop_id'] = 'Идентификатор кассы зарегистрированного в системе «INTERKASSA». Узнать его можно в разделе «Мои кассы». Пример: 529a6e08bf4efcae2d1b8488';
+$_['help_sign_hash'] = 'Используется SCI (Интеркассой) при формировании цифровой подписи. Должен совпадать с секретным ключем в разделе "Мои кассы -> Настройки кассы -> Безопасность -> Секретный ключ".';
+$_['help_sign_test_key'] = 'Используется SCI (Интеркассой) при формировании цифровой подписи, если платеж был совершен через тестовую платежную систему. Должен совпадать с тестовым ключем в разделе "Мои кассы -> Настройки кассы -> Безопасность -> Тестовый ключ".';
+$_['help_test_mode'] = 'В тестовом режиме можно проверить настройки модуля и Интеркассы через тестовую валюту Интеркассы, выбрав при оплате "Тестовая платежная система". В этом случае для подписывания ЭЦП (электронной цифровой подписи) используется тестовый ключ. Для приема реальных платежей - тестовый режим необходимо выключить.';
+$_['help_currency'] = 'Валюта, в которой магазин передает сумму платежа на платежный шлюз "Интеркасса". Интеркасса принимает следующие валюты: RUB, UAH, EUR, USD.';
+$_['help_lifetime'] = 'Платеж невозможно будет совершить по истечении срока жизни платежа после его создания.';
+$_['help_log_file'] = 'Последние %d строк из файла журнала.';
+$_['help_log'] = 'Журнал запросов от Интеркассы сохраняется в файле: /system/storage/logs/%s';
+
+// Error
+$_['error_permission'] = 'У Вас нет прав для управления модулем "%s"!';
+$_['error_clear_log'] = 'У Вас нет прав для очистки журнала модуля!';
+$_['error_form'] = 'Необходимо заполнить поле "%s" (вкладка "%s")!';
+?>
\ No newline at end of file
diff --git a/OpenCart_3/upload/admin/view/image/payment/shoputils_ik.gif b/OpenCart_3/upload/admin/view/image/payment/shoputils_ik.gif
new file mode 100644
index 0000000..4380be0
Binary files /dev/null and b/OpenCart_3/upload/admin/view/image/payment/shoputils_ik.gif differ
diff --git a/OpenCart_3/upload/admin/view/image/payment/shoputils_ik23x30.gif b/OpenCart_3/upload/admin/view/image/payment/shoputils_ik23x30.gif
new file mode 100644
index 0000000..c88040f
Binary files /dev/null and b/OpenCart_3/upload/admin/view/image/payment/shoputils_ik23x30.gif differ
diff --git a/OpenCart_3/upload/admin/view/template/extension/payment/shoputils_ik.twig b/OpenCart_3/upload/admin/view/template/extension/payment/shoputils_ik.twig
new file mode 100644
index 0000000..0d5cf70
--- /dev/null
+++ b/OpenCart_3/upload/admin/view/template/extension/payment/shoputils_ik.twig
@@ -0,0 +1,386 @@
+{{ header }}{{ column_left }}
+
{{ heading_title }}$error.
+ + "; + } + + protected function sendOk() { + $this->logWrite('OK: ' . http_build_query($this->request->post, '', ','), self::$LOG_SHORT); + $this->response->addHeader('HTTP/1.1 200 OK'); + //header('HTTP/1.1 200 OK'); + echo "
';
+
+$_['text_error_allowed_range_ip'] = 'Удаленный IP шлюза %s не из разрешенного диапазона';
+$_['text_error_post'] = 'Ответ от шлюза не типа POST';
+$_['text_error_ik_sign_hash'] = 'Некорректная подпись сообщения от платёжного шлюза';
+$_['text_error_order_not_found'] = 'Заказ № "%s" не найден';
+?>
\ No newline at end of file
diff --git a/OpenCart_3/upload/catalog/language/ru-ru/extension/payment/shoputils_ik.php b/OpenCart_3/upload/catalog/language/ru-ru/extension/payment/shoputils_ik.php
new file mode 100644
index 0000000..ff74d1e
--- /dev/null
+++ b/OpenCart_3/upload/catalog/language/ru-ru/extension/payment/shoputils_ik.php
@@ -0,0 +1,13 @@
+
';
+
+$_['text_error_allowed_range_ip'] = 'Удаленный IP шлюза %s не из разрешенного диапазона';
+$_['text_error_post'] = 'Ответ от шлюза не типа POST';
+$_['text_error_ik_sign_hash'] = 'Некорректная подпись сообщения от платёжного шлюза';
+$_['text_error_order_not_found'] = 'Заказ № "%s" не найден';
+?>
\ No newline at end of file
diff --git a/OpenCart_3/upload/catalog/model/extension/payment/shoputils_ik.php b/OpenCart_3/upload/catalog/model/extension/payment/shoputils_ik.php
new file mode 100644
index 0000000..53ba2c2
--- /dev/null
+++ b/OpenCart_3/upload/catalog/model/extension/payment/shoputils_ik.php
@@ -0,0 +1,39 @@
+load->language('extension/payment/payment_shoputils_ik');
+
+ if (($this->config->get('payment_shoputils_ik_status')) && ($total) &&
+ (!$this->config->get('payment_shoputils_ik_minimal_order') || ($total >= (float)$this->config->get('payment_shoputils_ik_minimal_order'))) &&
+ (!$this->config->get('payment_shoputils_ik_maximal_order') || ($total <= (float)$this->config->get('payment_shoputils_ik_maximal_order')))) {
+ $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int) $this->config->get('payment_shoputils_ik_geo_zone_id') . "' AND country_id = '" . (int) $address['country_id'] . "' AND (zone_id = '" . (int) $address['zone_id'] . "' OR zone_id = '0')");
+
+ if (!$this->config->get('payment_shoputils_ik_geo_zone_id')) {
+ $status = true;
+ } elseif ($query->num_rows) {
+ $status = true;
+ } else {
+ $status = false;
+ }
+ } else {
+ $status = false;
+ }
+
+ $method_data = array();
+
+ if ($status) {
+ $title = $this->config->get('payment_shoputils_ik_langdata');
+ $server = isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1')) ? $this->config->get('config_ssl') : $this->config->get('config_url');
+
+ $method_data = array(
+ 'code' => 'shoputils_ik',
+ 'title' => $title[$this->config->get('config_language_id')]['title'],
+ 'description' => sprintf($this->language->get('text_description'), $server),
+ 'terms' => '',
+ 'sort_order' => $this->config->get('payment_shoputils_ik_sort_order')
+ );
+ }
+ return $method_data;
+ }
+}
+?>
\ No newline at end of file
diff --git a/OpenCart_3/upload/catalog/view/theme/default/image/shoputils_ik.png b/OpenCart_3/upload/catalog/view/theme/default/image/shoputils_ik.png
new file mode 100644
index 0000000..39e32a8
Binary files /dev/null and b/OpenCart_3/upload/catalog/view/theme/default/image/shoputils_ik.png differ
diff --git a/OpenCart_3/upload/catalog/view/theme/default/template/extension/payment/shoputils_ik.twig b/OpenCart_3/upload/catalog/view/theme/default/template/extension/payment/shoputils_ik.twig
new file mode 100644
index 0000000..6e0ecc1
--- /dev/null
+++ b/OpenCart_3/upload/catalog/view/theme/default/template/extension/payment/shoputils_ik.twig
@@ -0,0 +1,38 @@
+{% if instruction %}
+ {{ instruction }}