commit 2ede7861579facaf3688edd0d62af1c9346b8569 Author: AnthonyAxenov Date: Thu Apr 25 00:15:47 2019 +0800 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..c829399 --- /dev/null +++ b/README.md @@ -0,0 +1,60 @@ +# Модуль интеграции Dreamkas для OpenCart 3.* + +## Содержимое репозитория + +* `./dreamkas-opencart3.ocmod/` - директория с исходным кодом модуля +* `./dreamkas-opencart3.ocmod.ocmod.zip` - модуль, готовый к установке +* `./dreamkas-f opencart.ocmod.zip` - исходный модуль для OpenCart 2.3, на котором основан данный + +## Описание + +Модуль устанавливается на OpenCart 3.0.2.0, настройки сохраняются, читаются. +Судя по отзывам ([1](http://blog.anthonyaxenov.ru/2018/05/09/%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d1%8c-%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d0%b8-dreamkas-%d0%b4%d0%bb%d1%8f-opencart-3-0-2-0/#comment-103) [2](https://help.dreamkas.ru/hc/ru/articles/115005504689-%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C-%D0%BA%D0%B0%D1%81%D1%81%D1%83-%D0%BA-OpenCart)), модуль рабочий, за исключением одного момента: не отображаются статусы фискализации, но сама фискализация работает. + +У меня лично нет возможности проверить насколько качественно работает этот модуль: для этого нужны реальные заказы и покупки. +Проект, в рамках которого я работал над этим модулем, я больше не поддерживаю. + +Вся основная логика модуля прописана здесь: + +```upload/catalog/controller/extension/module/dreamkas.php``` + +Этот файл я не трогал. +Я лишь восстановил возможность установить, удалить и настроить модуль. + +## Краткая информация + +Основано на модуле *[dreamkas-f opencart.ocmod.zip](https://help.dreamkas.ru/hc/ru/article_attachments/115010763145/dreamkas-f_opencart.ocmod.zip)*. + +Этот архив включен в репозиторий - для истории. +Может кому-нибудь даже будет интересно увидеть в diff-ах точные правки, но ниже я опишу вкратце лишь основные: + +1. Шаблон (`upload/admin/view/template/extension/module/dreamkas.twig`): + 1. переписан с языка php на язык шаблонизатора Twig + 2. изменено расширение с .tpl на .twig +2. Страница настроек: + 1. удалены большие куски закомментированного и нерабочего (?) кода + 2. исправлено получение списка установленных платёжных систем + 3. форматирование кода (`upload/admin/controller/extension/module/dreamkas.php`) +3. Мелкое форматирование и исправление ссылки на сайт разработчика (`install.xml`) + +## Полезные ссылки + +1. История появления модуля: [читать в блоге](http://blog.anthonyaxenov.ru/2018/05/09/модуль-интеграции-dreamkas-для-opencart-3-0-2-0) +2. Открытая документация к Dreamkas API: [kabinet.docs.apiary.io](http://kabinet.docs.apiary.io) +3. [Как подключить интернет-магазин к кассе через Кабинет?](https://help.dreamkas.ru/hc/ru/articles/115005007709) +4. [Подключить кассу к OpenCart](https://help.dreamkas.ru/hc/ru/articles/115005504689-%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C-%D0%BA%D0%B0%D1%81%D1%81%D1%83-%D0%BA-OpenCart) +5. Групповой чат для разработчиков в Telegram: [@apidreamkas](https://t.me/apidreamkas) (если ссылка не работает — ищи через в TG поиск) + +## Лицензия + +Весь исходный код, находящийся в этом репозитории, распространяется по [лицензии WTFPL v2](http://www.wtfpl.net/txt/copying/). + +Причина - отсутствие какой-либо лицензии на исходный модуль `./dreamkas-f opencart.ocmod.zip` и безразличие к моим доработкам. + +## Поддержка + +Отсутствует и не появится. + +Любые манипуляции с модулем - НА ВАШ СТРАХ И РИСК. + +Я НЕ ДАЮ НИКАКИХ ГАРАНТИЙ ЕГО РАБОТОСПОСОБНОСТИ. diff --git a/dreamkas-f opencart.ocmod.zip b/dreamkas-f opencart.ocmod.zip new file mode 100644 index 0000000..c4ff8ae Binary files /dev/null and b/dreamkas-f opencart.ocmod.zip differ diff --git a/dreamkas-opencart3.ocmod.zip b/dreamkas-opencart3.ocmod.zip new file mode 100644 index 0000000..44fe044 Binary files /dev/null and b/dreamkas-opencart3.ocmod.zip differ diff --git a/dreamkas-opencart3.ocmod/install.xml b/dreamkas-opencart3.ocmod/install.xml new file mode 100644 index 0000000..75a4e14 --- /dev/null +++ b/dreamkas-opencart3.ocmod/install.xml @@ -0,0 +1,170 @@ + + + Dreamkas 2.3.x + Dreamkas 2.3.x + 1.00 + Alt-team + https://www.alt-team.ru/ + + + + + ]]> + + +
+ +
+ + ]]>
+
+
+ + + db->query("DELETE FROM " . DB_PREFIX . "product_description WHERE product_id = '" . (int)$product_id . "'"); + ]]> + db->query("UPDATE " . DB_PREFIX . "product SET dk_tax_type = '" . $this->db->escape($data['dk_tax_type']) . "' WHERE product_id = '" . (int)$product_id . "'"); + } + ]]> + + + + + load->model('catalog/recurring'); + ]]> + request->post['dk_tax_type'])) { + $data['dk_tax_type'] = $this->request->post['dk_tax_type']; + } elseif (!empty($product_info['dk_tax_type'])) { + $data['dk_tax_type'] = $product_info['dk_tax_type']; + } else { + $data['dk_tax_type'] = ''; + } + ]]> + + + + + + ]]> + Статус фискализации + ]]> + + + + ]]> + + ]]> + + + + + + ]]> + + + + + + ]]> + + + + + model_sale_order->getOrders($filter_data); + ]]> + db->query("SELECT dk_status FROM " . DB_PREFIX . "dreamkas WHERE order_id = '" . (int)$result['order_id']. "'"); + ]]> + + + $result['shipping_code'],]]> + !empty($dkquery->row['dk_status'])?$dkquery->row['dk_status']:'', + ]]> + + + language->get('tab_additional');]]> + db->query("SELECT order_status_id FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'"); + $status = $query->row['order_status_id']; + + $query = $this->db->query("SELECT payment_code FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'"); + $payment_code = $query->row['payment_code']; + + if ($status == $this->config->get('dreamkas_paid_order') && in_array($payment_code, $this->config->get('dreamkas_payments_ids'))) { + + $query = $this->db->query("SELECT dk_id FROM " . DB_PREFIX . "dreamkas WHERE order_id = '" . (int)$order_id. "'"); + if(!empty($query->row['dk_id'])) { + $dk_id = $query->row['dk_id']; + $ch = curl_init(); + $access_token = $this->config->get('dreamkas_access_token'); + + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + "Content-Type: application/json", + "Authorization: Bearer $access_token" + )); + + curl_setopt($ch, CURLOPT_URL, "https://kabinet.dreamkas.ru/api/operations/".$dk_id); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ch, CURLOPT_HEADER, FALSE); + $response = curl_exec($ch); + curl_close($ch); + + $response = json_decode($response, true); + + if((substr($response['status'], 0, 1)==4)) { + $this->log->write('Dreamkas debug: ' . json_encode($response)); + } elseif(!empty($response['data']['error'])) { + $this->log->write('Dreamkas debug: ' . json_encode($response['data']['error'])); + } else { + $dk_date = empty($response['createdAt'])?$response['completedAt']:$response['createdAt']; + $this->db->query("UPDATE `" . DB_PREFIX . "dreamkas` SET `order_id` = '" . (int)$order_id . "', `dk_id` = '".$response['id']."', `dk_date` ='".$dk_date."', `dk_status` = '" .$response['status']. "' WHERE order_id = '" . (int)$order_id. "'"); + } + } + } + + $query = $this->db->query("SELECT dk_status FROM " . DB_PREFIX . "dreamkas WHERE order_id = '" . (int)$order_id. "'"); + if(!empty($query->row['dk_status'])) { + $data['dk_status'] = $query->row['dk_status']; + } else { + $data['dk_status']=''; + } + $this->load->language('extension/module/dreamkas'); + $data['entry_dk_status'] = $this->language->get('entry_dk_status'); + ]]> + + +
\ No newline at end of file diff --git a/dreamkas-opencart3.ocmod/upload/admin/controller/extension/module/dreamkas.php b/dreamkas-opencart3.ocmod/upload/admin/controller/extension/module/dreamkas.php new file mode 100644 index 0000000..be55078 --- /dev/null +++ b/dreamkas-opencart3.ocmod/upload/admin/controller/extension/module/dreamkas.php @@ -0,0 +1,184 @@ +load->language('extension/module/dreamkas'); + $this->document->setTitle($this->language->get('heading_title')); + $this->load->model('setting/setting'); + + if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { + $this->model_setting_setting->editSetting('dreamkas', $this->request->post); + $this->session->data['success'] = $this->language->get('text_success'); + //$this->response->redirect($this->url->link('extension/extension', 'user_token=' . $this->session->data['user_token'], 'SSL')); + $this->response->redirect($this->url->link('extension/module/dreamkas', 'user_token=' . $this->session->data['user_token'], 'SSL')); + } + + $data['heading_title'] = $this->language->get('heading_title'); + $data['text_edit'] = $this->language->get('text_edit'); + $data['text_enabled'] = $this->language->get('text_enabled'); + $data['text_disabled'] = $this->language->get('text_disabled'); + $data['entry_status'] = $this->language->get('entry_status'); + $data['entry_access_token'] = $this->language->get('entry_access_token'); + $data['entry_device_id'] = $this->language->get('entry_device_id'); + $data['entry_tax_mode'] = $this->language->get('entry_tax_mode'); + $data['entry_tax_type'] = $this->language->get('entry_tax_type'); + $data['entry_payments_ids'] = $this->language->get('entry_payments_ids'); + $data['entry_paid_order'] = $this->language->get('entry_paid_order'); + $data['text_tax_default'] = $this->language->get('text_tax_default'); + $data['text_tax_simple'] = $this->language->get('text_tax_simple'); + $data['text_tax_simple_wo'] = $this->language->get('text_tax_simple_wo'); + $data['text_tax_envd'] = $this->language->get('text_tax_envd'); + $data['text_tax_agricult'] = $this->language->get('text_tax_agricult'); + $data['text_tax_patent'] = $this->language->get('text_tax_patent'); + $data['text_tax_nds_no_tax'] = $this->language->get('text_tax_nds_no_tax'); + $data['text_tax_nds_0'] = $this->language->get('text_tax_nds_0'); + $data['text_tax_nds_10'] = $this->language->get('text_tax_nds_10'); + $data['text_tax_nds_18'] = $this->language->get('text_tax_nds_18'); + $data['text_tax_nds_10_calculated'] = $this->language->get('text_tax_nds_10_calculated'); + $data['text_tax_nds_18_calculated'] = $this->language->get('text_tax_nds_18_calculated'); + + $data['button_save'] = $this->language->get('button_save'); + $data['button_cancel'] = $this->language->get('button_cancel'); + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + if (isset($this->error['access_token'])) { + $data['error_access_token'] = $this->error['access_token']; + } else { + $data['error_access_token'] = ''; + } + + if (isset($this->error['device_id'])) { + $data['error_device_id'] = $this->error['device_id']; + } else { + $data['error_device_id'] = ''; + } + + $data['breadcrumbs'] = array(); + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('text_home'), + 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) + ); + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('text_extension'), + 'href' => $this->url->link('extension/extension', 'user_token=' . $this->session->data['user_token'] . '&type=module', true) + ); + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('heading_title'), + 'href' => $this->url->link('extension/module/dreamkas', 'user_token=' . $this->session->data['user_token'], true) + ); + $data['action'] = $this->url->link('extension/module/dreamkas', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('extension/extension', 'user_token=' . $this->session->data['user_token'] . '&type=module', true); + + if (isset($this->request->get['module_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) { + $module_info = $this->model_extension_module->getModule($this->request->get['module_id']); + } + + if (isset($this->request->post['dreamkas_access_token'])) { + $data['access_token'] = $this->request->post['dreamkas_access_token']; + } else { + $data['access_token'] = $this->config->get('dreamkas_access_token'); + } + + if (isset($this->request->post['dreamkas_device_id'])) { + $data['device_id'] = $this->request->post['dreamkas_device_id']; + } else { + $data['device_id'] = $this->config->get('dreamkas_device_id'); + } + + if (isset($this->request->post['dreamkas_tax_mode'])) { + $data['tax_mode'] = $this->request->post['dreamkas_tax_mode']; + } else { + $data['tax_mode'] = $this->config->get('dreamkas_tax_mode'); + } + + if (isset($this->request->post['dreamkas_tax_type'])) { + $data['tax_type'] = $this->request->post['dreamkas_tax_type']; + } else { + $data['tax_type'] = $this->config->get('dreamkas_tax_type'); + } + + if (isset($this->request->post['dreamkas_payments_ids'])) { + $data['payments_ids'] = $this->request->post['dreamkas_payments_ids']; + } else { + $data['payments_ids'] = $this->config->get('dreamkas_payments_ids'); + } + + if (isset($this->request->post['dreamkas_paid_order'])) { + $data['paid_order'] = $this->request->post['dreamkas_paid_order']; + } else { + $data['paid_order'] = $this->config->get('dreamkas_paid_order'); + } + + if (!isset($data['payments_ids'])) { + $data['payments_ids'] = array(); + } + + $this->load->model('localisation/order_status'); + $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); + + //Get payments + $this->load->model('setting/extension'); + $paymenttypes = $this->model_setting_extension->getInstalled('payment'); + + foreach ($paymenttypes as $type) { + $this->load->language('extension/payment/' . $type, 'extension'); + $data['paymenttypes'][] = array( + 'code' => $type, + 'name' => $this->language->get('extension')->get('heading_title'), + ); + } + + if (isset($this->request->post['dreamkas_status'])) { + $data['status'] = $this->request->post['dreamkas_status']; + } else { + $data['status'] = $this->config->get('dreamkas_status'); + } + $data['header'] = $this->load->controller('common/header'); + $data['column_left'] = $this->load->controller('common/column_left'); + $data['footer'] = $this->load->controller('common/footer'); + $this->response->setOutput($this->load->view('extension/module/dreamkas', $data)); + } + + protected function validate() { + if (!$this->user->hasPermission('modify', 'extension/module/dreamkas')) { + $this->error['warning'] = $this->language->get('error_permission'); + } + if (!$this->request->post['dreamkas_access_token']) { + $this->error['error_access_token'] = $this->language->get('error_access_token'); + } + if (!$this->request->post['dreamkas_device_id']) { + $this->error['error_device_id'] = $this->language->get('error_device_id'); + } + if (!isset($this->request->post['dreamkas_payments_ids'])) { + //$this->error['error_payments_ids'] = $this->language->get('error_payments_ids'); + } + return !$this->error; + } + + public function install() { + $this->load->model('setting/event'); + $this->model_setting_event->addEvent('dreamkas', 'catalog/model/checkout/order/addOrderHistory/after', 'extension/module/dreamkas'); + $this->db->query(" + CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "dreamkas` ( + `order_id` int(11) NOT NULL, + `dk_id` VARCHAR(30) NOT NULL, + `dk_date` VARCHAR(30) NOT NULL, + `dk_status` VARCHAR(30) NOT NULL, + PRIMARY KEY (`order_id`) + ) ENGINE=MyISAM DEFAULT COLLATE=utf8_general_ci + "); + $this->db->query("ALTER TABLE `" . DB_PREFIX . "product` ADD `dk_tax_type` VARCHAR(50) NOT NULL DEFAULT ''"); + } + + public function uninstall() { + $this->load->model('setting/event'); + $this->db->query("ALTER TABLE `" . DB_PREFIX . "product` DROP `dk_tax_type`;"); + $this->model_setting_event->deleteEvent('dreamkas'); + } +} \ No newline at end of file diff --git a/dreamkas-opencart3.ocmod/upload/admin/language/ru-ru/extension/module/dreamkas.php b/dreamkas-opencart3.ocmod/upload/admin/language/ru-ru/extension/module/dreamkas.php new file mode 100644 index 0000000..adff48f --- /dev/null +++ b/dreamkas-opencart3.ocmod/upload/admin/language/ru-ru/extension/module/dreamkas.php @@ -0,0 +1,38 @@ + +
+ +
+ +
+ +
+ +
+
+

+
+
+
+
+ +
+ + +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ + +
+ +
+ +
+
+
+
+
+
+
+ diff --git a/dreamkas-opencart3.ocmod/upload/admin/view/template/extension/module/dreamkas.twig b/dreamkas-opencart3.ocmod/upload/admin/view/template/extension/module/dreamkas.twig new file mode 100644 index 0000000..173f5d0 --- /dev/null +++ b/dreamkas-opencart3.ocmod/upload/admin/view/template/extension/module/dreamkas.twig @@ -0,0 +1,120 @@ +{{ header }} +{{ column_left }} +
+ +
+ {% if error_warning %} +
{{ error_warning }} + +
+ {% endif %} +
+
+

{{ text_edit }}

+
+
+
+ +
+ +
+ + {% if error_access_token %} +
{{ error_access_token }}
+ {% endif %} +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ {% for type in paymenttypes %} +
+ +
+ {% endfor %} +
+
+
+ +
+ +
+ +
+
+
+
+
+
+
+{{ footer }} diff --git a/dreamkas-opencart3.ocmod/upload/catalog/controller/extension/module/dreamkas.php b/dreamkas-opencart3.ocmod/upload/catalog/controller/extension/module/dreamkas.php new file mode 100644 index 0000000..f39ffcf --- /dev/null +++ b/dreamkas-opencart3.ocmod/upload/catalog/controller/extension/module/dreamkas.php @@ -0,0 +1,120 @@ +load->language('extension/module/dreamkas'); + $order_id = $data[0]; + $query = $this->db->query("SELECT order_status_id FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int) $order_id . "'"); + $status = $query->row['order_status_id']; + $query = $this->db->query("SELECT payment_code FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int) $order_id . "'"); + $payment_code = $query->row['payment_code']; + + if ($status == $this->config->get('dreamkas_paid_order') && + in_array($payment_code, $this->config->get('dreamkas_payments_ids'))) + { + $this->load->model('checkout/order'); + $order_info = $this->model_checkout_order->getOrder($order_id); + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int) $order_id . "'"); + $products = $query->rows; + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int) $order_id . "' AND code = 'shipping' ORDER BY sort_order"); + $shipping = $query->rows; + $tax_type = $this->config->get('dreamkas_tax_type'); + $tax_sum = 0; + $items = array(); + foreach ($products as $product) { + $query = $this->db->query("SELECT dk_tax_type FROM " . DB_PREFIX . "product WHERE product_id = '" . (int) $product['product_id'] . "'"); + $dk_tax_type = $query->row; + $product_tax_type = empty($dk_tax_type['dk_tax_type']) ? $tax_type : $dk_tax_type['dk_tax_type']; + $items[] = array( + "name" => $product['name'], + "type" => "COUNTABLE", + "quantity" => $product['quantity'], + "price" => ($product['price'] + $product['tax']) * 100, + "priceSum" => ($product['total'] + $product['tax'] * $product['quantity']) * 100, + "tax" => "$product_tax_type", + "taxSum" => 0, //$product['tax']*100*$product['quantity'] + ); + $tax_sum += $product['tax'] * $product['quantity']; + } + + if (!empty($shipping)) { + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int) $order_id . "' AND code = 'tax' ORDER BY sort_order"); + $tax_total = reset($query->rows); + if (!empty($tax_total['value'])) { + $shipping_tax = $tax_total['value'] - $tax_sum; + } else { + $shipping_tax = 0; + } + foreach ($shipping as $_shipping) { + if ($_shipping['value'] > 0) { + $items[] = array( + "name" => 'Доставка', + "type" => "COUNTABLE", + "quantity" => 1, + "price" => ($_shipping['value'] + $shipping_tax) * 100, + "priceSum" => ($_shipping['value'] + $shipping_tax) * 100, + "tax" => "$tax_type", + "taxSum" => 0, //$shipping_tax*100 + ); + } + } + } + + $request = array( + "deviceId" => $this->config->get('dreamkas_device_id'), + "type" => "SALE", + "timeout" => 180, + "taxMode" => $this->config->get('dreamkas_tax_mode'), + "positions" => $items, + "payments" => array( + array( + "sum" => $order_info['total'] * 100, + "type" => "CASHLESS", + ), + ), + "attributes" => array( + "email" => $order_info['email'], + "phone" => $order_info['telephone'], //"+71239994499" + ), + "total" => array( + "priceSum" => $order_info['total'] * 100, + ), + ); + + $ch = curl_init(); + $access_token = $this->config->get('dreamkas_access_token'); + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + "Content-Type: application/json", + "Authorization: Bearer $access_token", + )); + curl_setopt($ch, CURLOPT_URL, "https://kabinet.dreamkas.ru/api/receipts"); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($request)); + $response = curl_exec($ch); + curl_close($ch); + + if (!empty($response)) { + $response = json_decode($response, true); + if ((substr($response['status'], 0, 1) == 4)) { + $this->log->write('Dreamkas debug: ' . json_encode($response)); + } else { + $dk_date = empty($response['createdAt']) ? $response['completedAt'] : $response['createdAt']; + $query = $this->db->query("SELECT order_id FROM " . DB_PREFIX . "dreamkas WHERE order_id = '" . (int) $order_id . "'"); + $exist_order_id = $query->rows; + if (empty($exist_order_id)) { + $this->db->query("INSERT INTO `" . DB_PREFIX . "dreamkas` SET `order_id` = '" . (int) $order_id . "', `dk_id` = '" . $response['id'] . "', `dk_date` ='" . $dk_date . "', `dk_status` = '" . $response['status'] . "'"); + } else { + $this->db->query("UPDATE `" . DB_PREFIX . "dreamkas` SET `order_id` = '" . (int) $order_id . "', `dk_id` = '" . $response['id'] . "', `dk_date` ='" . $dk_date . "', `dk_status` = '" . $response['status'] . "' WHERE order_id = '" . (int) $order_id . "'"); + } + } + } + } + } + } + +}