From 6af19ad178c415f6c55e834f3e8f2560425d1099 Mon Sep 17 00:00:00 2001 From: Potalius Date: Tue, 19 Sep 2017 10:02:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20README.md.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D0=B2=20=D0=BD=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B9=D0=BA=D0=B0=D1=85=20=D0=BF=D0=BB=D0=B0=D0=B3?= =?UTF-8?q?=D0=B8=D0=BD=D0=B0=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D1=82=D1=8C?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=BA=D0=B0=D0=BA=D0=BE=D0=B9=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=82=D1=83=D1=81=20=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7=D0=B0?= =?UTF-8?q?=20=D1=80=D0=B5=D0=B0=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B4=D0=BB=D1=8F=20=D1=84=D0=B8=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 63 ++++++++++++++++++- includes/class-komtetkassa-admin-settings.php | 3 +- includes/class-komtetkassa-admin.php | 4 +- includes/class-komtetkassa-install.php | 15 +++-- includes/class-komtetkassa-report.php | 9 +-- includes/views/html-admin-settings.php | 16 +++++ komtetkassa.php | 52 +++++++-------- uninstall.php | 5 +- 8 files changed, 121 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index fe5b9d1..041628d 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,61 @@ -# komtet-kassa-woocommerce -Модуль КОМТЕТ Кассы для WordPress и WooCommerce 3.x +# КОМТЕТ Касса для WooCommerce + +Данное решение позволяет подключить Ваш интернет-магазин к облачному сервису КОМТЕТ Касса с целью соответствия требованиям 54-ФЗ для регистрации расчетов с использованием электронного средства платежа в сети Интернет. + +Возможности плагина + + - автоматическая фискализация платежей; + - фискализация в ручном режиме. + +Описание работы + +Плагин реагирует на событие статуса заказа, которое возникает, когда клиент совершает оплату через один из подключенных плагинов приема платежей, например, PayPal или Robokassa. + +По событию «Заказ оплачен» статус заказа изменяется на «Обработка» после чего информации о заказе формируется и отправляется запрос на фискализацию платежа в систему КОМТЕТ Касса. Вы сможете увидеть список всех запросов на фискализацию в личном кабинете на сайте КОМТЕТ Касса в разделе «История». + +Как только данные по заказу появляются в системе КОМТЕТ Касса, формируется чек, который записывается на фискальный накопитель кассового аппарата и он же отправляется в ОФД (Оператор Фискальных Данных). Если указано в настройках, аппарат может распечатать бланк чека. + +Важно! 54-ФЗ обязует выдать электронный чек клиенту, для того чтобы электронный чек был выслан клиенту на электронную почту необходимо сделать обязательным поле email на форме оформления заказа. + +Так же статус заказа «Обработка» возникает, когда в разделе администратора магазина для заказа вы устанвливате статус «Обработка» и нажимаете кнопкк «Обновить». Это позволит провести фискализацию вручную. + +Таким образом вы можете использовать разделе администратора магазина для печати чека по любому заказу. + +### Установка +Для установки плагина нужно выполнить слудующие действия: +1. Войти в админ панель WordPress и открыть вкладку Плагины — Добавить новый (Plugins tab — Add New): +2. Вверху нажать кнопку Загрузить плагин (Upload plugin). +3. Кликнуть Обзор (Browse) и выбрать .zip архив плагина. Когда вы нашли необходимый архив плагина, нужно нажать кнопку Открыть (Open), а затем кликнуть Установить сейчас (Install Now). +4. Когда плагин будет загружен, нужно активировать его, кликнув по ссылке Активировать плагин (Activate Plugin): + +Также можно установить плагин через админ панель, используя форму поиска плагинов. +1. Откройте вкладку Плагины (Plugins), кликните Добавить новый (Add New), в строке поиска введите название плагина, КОМТЕТ Касса, и нажмите кнопку Enter на клавиатуре: +2. Вы можете видеть плагин КОМТЕТ Касса в списке результатов поиска. Чтобы установить данный плагин, нажмите кнопку Установить сейчас (Install now). +3. Когда плагин будет установлен, кликните ссылку Активировать плагин (Activate Plugin). + +### Настройка плагина + +Прежде чем приступить к настройке плагина вам потребуется зарегистрировать в [личном кабинете на сайте КОМТЕТ Касса](https://kassa.komtet.ru/signup). + +Для настройки плагин нужно открыть вкладку КОМТЕТ Касса - Настройки + +В настройках плагина необходимо указать: +1. URL по которому система КОМТЕТ Касса принимает данные для фискализации. Актуальный адрес указан по умолчанию. +2. Идентификатор магазина. В личном кабинете на сайте КОМТЕТ Касса зайдите в меню «Магазины» (слева), далее выберете нужный магазин и зайдите в его настройки, там вы и найдете необходимое значение (ShopId). +3. Секретный ключ магазина. Аналогично предыдущему (Secret). +4. Включить или отключить печать бумажного чека. +5. Указать систему налогообложения вашей компании. Данные о системе налогообложения будут использованы при формировании чека. +6. Выбрать статус заказа, при при котором формируется и отправляется запрос на фискализацию платежа в систему КОМТЕТ Касса. +7. Скопировать в настройках плагина данные из полей Success url (http://your_domain/?komtet-kassa=success) и Failure url (http://your_domain/?komtet-kassa=fail), и записать их в соответствующие поля в настройках магазина в личном кабинете КОМТЕТ Касса + +### Будет сделано + + - Возврат чека + - Локализация + - Логирование + +License +---- + +MIT + diff --git a/includes/class-komtetkassa-admin-settings.php b/includes/class-komtetkassa-admin-settings.php index 294df05..5e78043 100644 --- a/includes/class-komtetkassa-admin-settings.php +++ b/includes/class-komtetkassa-admin-settings.php @@ -8,7 +8,8 @@ final class KomtetKassa_AdminSettings { 'komtetkassa_secret_key' => 'string', 'komtetkassa_should_print' => 'bool', 'komtetkassa_queue_id' => 'string', - 'komtetkassa_tax_system' => 'integer' + 'komtetkassa_tax_system' => 'integer', + 'komtetkassa_fiscalize_on_order_status' => 'string' ); public static function out() { diff --git a/includes/class-komtetkassa-admin.php b/includes/class-komtetkassa-admin.php index 9510b84..791c5e6 100644 --- a/includes/class-komtetkassa-admin.php +++ b/includes/class-komtetkassa-admin.php @@ -21,7 +21,7 @@ public static function add_menu() { array(__CLASS__, 'settings_page'), null, '56.2' - ); + ); } public static function add_menu_settings() { @@ -61,4 +61,4 @@ public static function settings_page() { public static function reports_page() { KomtetKassa_AdminReports::out(); } -} \ No newline at end of file +} diff --git a/includes/class-komtetkassa-install.php b/includes/class-komtetkassa-install.php index c1b4382..12c1c2d 100644 --- a/includes/class-komtetkassa-install.php +++ b/includes/class-komtetkassa-install.php @@ -5,8 +5,7 @@ final class KomtetKassa_Install { const OPTION_DB_VERSION_KEY = 'komtetkassa_db_version'; private static $db_migrations = array( - '1.0.0' => 'komtetkassa_0001_create_tables', - '1.0.1' => 'komtetkassa_0002_create_tables' + '1.0.0' => 'komtetkassa_0001_create_tables' ); public static function init() @@ -17,15 +16,15 @@ public static function init() public static function activation() { self::db_migrations(); - } + } public static function db_migrations() { $current_db_version = get_option(self::OPTION_DB_VERSION_KEY, null); if (!is_null($db_version) && version_compare($db_version, max(array_keys(self::$db_migrations)), '<' ) ) { - return; - } + return; + } include_once(dirname(__FILE__) . '/db-migrations.php'); @@ -39,8 +38,8 @@ public static function db_migrations() } public static function update_db_version($version=null) { - delete_option(self::OPTION_DB_VERSION_KEY); - add_option(self::OPTION_DB_VERSION_KEY, is_null($version) ? Komtet_Kassa()->version : $version); + delete_option(self::OPTION_DB_VERSION_KEY); + add_option(self::OPTION_DB_VERSION_KEY, is_null($version) ? Komtet_Kassa()->version : $version); } public static function plugin_action_links($links) @@ -53,4 +52,4 @@ public static function plugin_action_links($links) } } -KomtetKassa_Install::init(); \ No newline at end of file +KomtetKassa_Install::init(); diff --git a/includes/class-komtetkassa-report.php b/includes/class-komtetkassa-report.php index 34979d4..cbe6678 100644 --- a/includes/class-komtetkassa-report.php +++ b/includes/class-komtetkassa-report.php @@ -52,15 +52,16 @@ public function no_items() { echo '
Список пуст
'; } - public function column_default( $item, $column_name ) { + public function column_default($item, $column_name) { switch ( $column_name ) { case 'report_id': case 'order_id': + return $item[$column_name]; case 'status': $statuses = array( - 'new' => "Новая", - 'error' => "Ошибка", - 'done' => "Выполнена" + 'new' => "Новая", + 'error' => "Ошибка", + 'done' => "Выполнена" ); return $statuses[$item[$column_name]]; case 'created_at': diff --git a/includes/views/html-admin-settings.php b/includes/views/html-admin-settings.php index 3112ae6..e33954c 100644 --- a/includes/views/html-admin-settings.php +++ b/includes/views/html-admin-settings.php @@ -61,6 +61,22 @@ + + + + + + + +

diff --git a/komtetkassa.php b/komtetkassa.php index 33f4e07..ac4329c 100644 --- a/komtetkassa.php +++ b/komtetkassa.php @@ -1,8 +1,9 @@ define('KOMTETKASSA_ABSPATH', plugin_dir_path( __FILE__)); $this->define('KOMTETKASSA_ABSPATH_VIEWS', plugin_dir_path( __FILE__) . 'includes/views/'); $this->define('KOMTETKASSA_BASENAME', plugin_basename( __FILE__ )); - + $this->includes(); $this->hooks(); $this->wp_hooks(); @@ -49,7 +50,7 @@ public function __construct() public function wp_hooks() { register_activation_hook( __FILE__, array('KomtetKassa_Install', 'activation')); - add_action('woocommerce_order_status_completed', array($this, 'fiscalize')); + add_action('woocommerce_order_status_' . get_option('komtetkassa_fiscalize_on_order_status'), array($this, 'fiscalize')); } public function wp_endpoints() @@ -61,7 +62,7 @@ public function wp_endpoints() public function hooks() { - add_action('komtet_kassa_action_success', array($this, 'action_success')); + add_action('komtet_kassa_action_success', array($this, 'action_success')); add_action('komtet_kassa_action_fail', array($this, 'action_fail')); add_action('komtet_kassa_report_create', array($this, 'report_create'), 10, 4); add_action('komtet_kassa_report_update', array($this, 'report_update'), 10, 3); @@ -72,7 +73,7 @@ public function includes() require_once(KOMTETKASSA_ABSPATH . 'includes/class-komtetkassa-install.php'); require_once(KOMTETKASSA_ABSPATH . 'includes/class-komtetkassa-report.php'); require_once(KOMTETKASSA_ABSPATH . 'includes/libs/komtet-kassa-php-sdk/autoload.php'); - + if (is_admin()) { require_once(KOMTETKASSA_ABSPATH . 'includes/class-komtetkassa-admin.php'); add_action('init', array( 'KomtetKassa_Admin', 'init')); @@ -81,9 +82,9 @@ public function includes() private function define($name, $value) { - if (!defined( $name )) { - define( $name, $value ); - } + if (!defined( $name )) { + define( $name, $value ); + } } public function load_options() { @@ -92,7 +93,7 @@ public function load_options() { $this->secret_key = get_option('komtetkassa_secret_key'); $this->queue_id = get_option('komtetkassa_queue_id'); } - + public function init() { do_action('before_komtetkassa_init'); @@ -130,14 +131,13 @@ public function fiscalize($order_id) $check->setShouldPrint(get_option('komtetkassa_should_print')); if (sizeof($order->get_items()) > 0 ) { - // products foreach ($order->get_items('line_item') as $item) { $check->addPosition(new Position( $item->get_name(), - $order->get_item_total($item, false, true), + $order->get_item_total($item, true, true), $item->get_quantity(), - $item->get_total(), - $order->get_item_subtotal($item, false, true) - $order->get_item_total($item, false, true), + $order->get_line_total($item, true, true), + $order->get_line_subtotal($item, false, true) - $order->get_item_total($item, false, true), new Vat(Vat::RATE_NO) )); } @@ -145,9 +145,9 @@ public function fiscalize($order_id) foreach ($order->get_items('shipping') as $item) { $check->addPosition(new Position( $item->get_name(), - $order->get_item_total($item, false, true), + $order->get_item_total($item, true, true), $item->get_quantity(), - floatval($item->get_total()), + $order->get_line_total($item, true, true), self::DISCOUNT_NOT_AVAILABLE, new Vat(Vat::RATE_NO) )); @@ -174,7 +174,7 @@ public function add_query_vars($vars) { public static function add_endpoint() { add_rewrite_endpoint('komtet-kassa', EP_ALL); } - + public function handle_requests() { global $wp; @@ -219,14 +219,14 @@ public function handle_action($action) { $scheme = array_key_exists('HTTPS', $_SERVER) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http'; $url = sprintf('%s://%s%s', $scheme, $_SERVER['SERVER_NAME'], $_SERVER['REQUEST_URI']); $data = file_get_contents('php://input'); - + $signature = hash_hmac('md5', $_SERVER['REQUEST_METHOD'] . $url . $data, $this->secret_key); if ($signature != $this->request->server['HTTP_X_HMAC_SIGNATURE']) { - // status_header(403); - // exit(); + status_header(403); + exit(); } - + $data = json_decode($data, true); foreach (array('external_id', 'state') as $key) { diff --git a/uninstall.php b/uninstall.php index a5c1b63..f4d0573 100644 --- a/uninstall.php +++ b/uninstall.php @@ -6,7 +6,6 @@ global $wpdb; +include_once(dirname( __FILE__ ).'/includes/class-komtetkassa-install.php'); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}komtetkassa_reports"); - - - \ No newline at end of file +delete_option(KomtetKassa_Install::OPTION_DB_VERSION_KEY);