В OpenCart есть довольно полезный инструмент BlackList (Чёрный список). Правда он немного примитивен, но как минимум позволяет по IP-адресу выявить недобросовестного покупателя. Конечно список IP-адресов необходимо знать заранее, что не совсем удобно, поскольку современные мошенники редко используют одни и те же адреса. Однако некоторые не стесняются открыто заявлять о себе и рассчитывают, прежде всего, на невнимательность владельца магазина. Целью мошенников обычно является сам заказ, а точнее его сумма. Зная программные недоработки или уязвимости в OpenCart, они могут подменить стоимость покупки. В этой статье речь пойдёт о решении, которое можно использовать поверх стандартного Черного списка.
Для начала вспомним как работает BlackList. После того, как покупатель заполнил все необходимые формы, ему будет предложено подтвердить заказ. После нажатия соответствующей кнопки в интерфейсе магазина, в базе данных будет создан журнал истории заказа со статусом по умолчанию. Этот статус выставляется в настройках магазина через переменную
config_order_status_id. Проверка в Черном списке как раз осуществляется на этапе создания журнала, однако как показала практика, она бесполезна - при обнаружении в Черном списке записи о покупателе, заказу присваивается тот же статус, по умолчанию. Т.е. владелец магазина не сможет определить по статусу заказа его фиктивность. Возможно разработчики OpenCart недоработали этот механизм или он реализован в коммерческих версиях, в любом случае, будем это исправлять.
На примере переменной
config_order_status_id в файлах
./admin/controller/setting/setting.php и
./admin/view/template/setting/setting.tpl создадим аналогичную переменную, например
config_blocked_order_status_id. Далее в файле
./catalog/model/checkout/order.php находим следующий код:
if ($status) {
$order_status_id = $this->config->get(' config_order_status_id ');
}
и заменяем его на код ниже:
if ($status) {
$order_status_id = $this->config->get('config_blocked_order_status_id');
}
В настройках магазина определим новый статус для подозрительных заказов, например Блокирован. Теперь владелец магазина или менеджер будут видеть статус у заказа, если IP-адрес покупателя находится в стоплисте. На основе этой информации можно отказать в заказе или провести тщательную проверку заказа и самого покупателя.
Собственно мы на этом не остановились и решили продолжить доработку Черного списка. В частности, в расширенной версии можно указывать не только IP-адреса, но и имена хостов, причём как для IP, так и для хоста допустимо указывать их части, т.е. будет сравнение по частям строк. Это позволяет "подозревать" целые подсети и страны по TLD (домен верхнего уровня). В поле IP можно также указывать и адрес в формате CIDR: