Данная статья посвящена уникальному идентификатору заказа (MdOrder) в плагине RBSPayment (в платёжной системе Cбер) и его записи в базу данных MySQLi на CMS Opencart.

Зачем это нужно? Иногда бухгалтерам бывает недостаточно данных о заказе из коробки Опенкарта, чтобы проверить платеж клиента необходима знать уникальный номер заказа в Сбер эквайринге. Это может пригодится, как для вывода данных в админ-панели сайта, так и для интеграции с различными CRM-системами.
Приступим к работе: для начала нам нужно создать таблицу с любым названием, куда мы будем записывать эти данные. В примере ниже указано название oc_order_rbs, но вы можете выбрать любое другое. Я уже описывал способ создания таблиц в данной статье, но сегодня все будет немного проще. Создаем необходимые поля (столбцы таблицы) — order_id (порядковый номер заказа в CMS Opencart) и md_order (Номер заказа, уникален в пределах системы. Отсутствует, если регистрация заказа не удалась по причине ошибки).
Пишем запрос SQL:
CREATE TABLE `oc_order_rbs` (
`order_id` int(20) NOT NULL PRIMARY KEY,
`md_order` varchar(255) NOT NULL
)
Следующим этапом будет изменение контроллера плагина, путь к файлу:
/catalog/controller/extension/payment/rbs.php
Находим строку № 219, где начинается комментарий — «Колбек для возвращения покупателя из ПШ в магазин». Заменяем всю функцию после комментария на следующий код:
public function callback()
{
// переместил переменные выше для дальнейшей записи order_number в бд
$this->load->model('checkout/order');
$order_number = $this->session->data['order_id'];
$order_info = $this->model_checkout_order->getOrder($order_number);
if (isset($this->request->get['orderId'])) {
$order_id = $this->request->get['orderId'];
// заполните данные вашей бд, данный фрагмент отвечает за подключение к бд
$conn = new mysqli("localhost", "username", "password", "dbname", "port");
if ($conn->connect_error) {
die("Ошибка: " . $conn->connect_error);
}
// подготавливаем наши данные для записи в таблицы
$md_order = $conn->real_escape_string($order_id);
$oc_order_id = $conn->real_escape_string($order_number);
// производим запись наших данных
$sql = "INSERT INTO oc_order_sber (order_id, md_order) VALUES ('$oc_order_id ', '$md_order')";
if ($conn->query($sql)) {
$mdconn = "Данные успешно добавлены";
} else {
$mdconn = "Ошибка: " . $conn->error;
}
$conn->close();
} else {
die('Illegal Access');
}
if ($order_info) {
$this->initializeRbs();
$response = $this->rbs->get_order_status($order_id);
if (($response['errorCode'] == 0) && (($response['orderStatus'] == 1) || ($response['orderStatus'] == 2))) {
// set order status
$this->model_checkout_order->addOrderHistory($order_number, $this->config->get('rbs_order_status_id'));
$this->response->redirect($this->url->link('checkout/success', '', true));
} else {
$this->response->redirect($this->url->link('checkout/failure', '', true));
}
}
}
Внимательно смотрите комментарии в коде, не забывайте заполнить данные для подключения к вашей базе данных MySQLi. И не оставляйте скобки { } открытыми.
Готово, ваш уникальный номер заказа в системе эквайринга Сбера теперь успешно записывается на стороне вашего сайта после совершения оплаты клиентом. Теперь можно смело выводить эти данные, например, в админ-панели в разделе просмотра заказа.
Протестировано на OcStore 2.3
Дата создания статьи: 17.11.2022
Рубрика: Веб-разработка