Связаться
  • OpenCart
  • Продажи и конверсия
  • v1.0.3

Подписка с подтверждением (Double Opt-In) для OpenCart

Модуль double opt-in для OpenCart: подписка активируется только после перехода по ссылке из письма. Запись согласия с IP и датой, отписка в клик, экспорт CSV. Free до 200 подписчиков, Pro — без лимита.

Pro 1 290 грн навсегда
Скачать Free
Совместимость
OpenCart 4.0.2 – 4.1.x
PHP
7.4 и новее
Лицензия
один сайт, навсегда
Триал
7 дней, без карты, один на сайт
Обновлено
26.09.2026
Или все 144 Pro-модулей в All Access — 4 990 ₴ / год

Что есть во Free,
а что даёт Pro

Бесплатная версия работает без ограничения по времени. Pro добавляет остальные функции из таблицы.

Функция Free Pro
Подписка активируется только после перехода по ссылке из собственной почты ✔ ✔
Запись согласия: источник, IP, user-agent, время заявки и время подтверждения ✔ ✔
Подчиняет штатную галочку OpenCart в регистрации и кабинете ✔ ✔
Отписка в один клик из любого письма ✔ ✔
Четыре письма: подтверждение, приветственное, напоминание, прощальное ✔ ✔
Грид подписчиков с фильтрами по состоянию, источнику и периоду ✔ ✔
Экспорт CSV с доказательством согласия, UTF-8 с BOM ✔ ✔
Honeypot, подписанный штамп времени и лимит заявок с одного IP ✔ ✔
Автоудаление неподтверждённых заявок через N дней ✔ ✔
Разовый импорт существующих подписчиков — кнопкой, не при инсталляции ✔ ✔
Редактирование текстов писем отдельно для каждого языка магазина — ✔
Одно напоминание неподтверждённым по расписанию — ✔

Как это выглядит

Страница после перехода по ссылке из письма. Рендерится штатным шаблоном магазина, поэтому внешний вид наследуется от вашей темы.
Страница после перехода по ссылке из письма. Рендерится штатным шаблоном магазина, поэтому внешний вид наследуется от вашей темы.
Грид подписчиков: состояние, источник (форма / кабинет), IP, дата заявки и дата подтверждения — то самое доказательство согласия, которое уходит в CSV.
Грид подписчиков: состояние, источник (форма / кабинет), IP, дата заявки и дата подтверждения — то самое доказательство согласия, которое уходит в CSV.
Настройки модуля в админке OpenCart 4.1: штатная галочка рассылки подчинена подтверждению, срок действия ссылки и сниппет формы для темы.
Настройки модуля в админке OpenCart 4.1: штатная галочка рассылки подчинена подтверждению, срок действия ссылки и сниппет формы для темы.

Триал стартует, когда вы попросите

Свежая установка — бесплатная версия, ничего не включается само. Кнопка «Попробовать Pro 7 дней» → e-mail → ключ сразу в окне и письмом.

Один ключ — один сайт

Переносите магазин — отвяжите лицензию на старом домене и активируйте на новом сами. Если наш сервер недоступен, Pro работает ещё 14 дней.

Технические требования

  • OpenCart 4.0.2 – 4.1.x (версии для 3.x и 2.3 — в разработке).
  • PHP 7.4+ (работает и на 8.0–8.3).
  • MySQL/MariaDB с поддержкой InnoDB и utf8mb4.
  • Настроенная почта магазина (Система → Настройки → Почта): модуль отправляет письма тем же транспортом, что и остальной магазин, — отдельные доступы заводить не нужно.

История версий

v1.0.3 Текущая 26.09.2026

Список подписчиков с фильтром снова открывается на драйвере базы PDO.

v1.0.2

Ссылки «подтвердить подписку» и «отписаться» больше не срабатывают от почтового сканера.

v1.0.1

Купленный ключ остаётся вашим: как только наш сервер подтвердил оплату, Pro работает дальше.

Все версии (4)
v1.0.0 Первый релиз

Полный цикл double opt-in, подчинение штатной галочки, четыре письма с редактированием по языкам, грид подписчиков с доказательством согласия, экспорт CSV, напоминание и ретенция по…

Вместе с Подписка с подтверждением (Double Opt-In) для OpenCart покупают

4 модуля одним заказом — на 40% дешевле, чем по отдельности

Набор «Старт магазина» Подписка с подтверждением (Double Opt-In) Nova Poshta Premium LiqPay Telegram-уведомления и Viber/SMS покупателям Нужно больше — все 144 модулей в All Access за 4 990 ₴.
3 790 ₴ навсегда вместо 6 260 ₴ поштучно
Купить набор →

Полное описание модуля

Штатный OpenCart считает согласием саму галочку. Покупатель поставил «Подписаться на новости» при регистрации — и в базе сразу появляется customer.newsletter = 1. Ни подтверждения, ни даты, ни следа, откуда это согласие взялось. Адрес, который кто-то вписал в чужую форму регистрации, из списка уже не убрать, а доказать, что человек действительно соглашался, нечем.

Модуль превращает эту галочку в заявку. Флажок поднимается только после того, как человек перешёл по ссылке из собственного почтового ящика — и именно тогда в базе появляется запись о согласии со временем, источником и IP.

Как это выглядит для покупателя

В подвале (или там, где вы поставите форму) — поле e-mail, по желанию поле имени и кнопка. После отправки человек сразу видит: «Почти готово — проверьте почту и перейдите по ссылке в письме. До этого мы ничего вам не будем отправлять».

В письме одно действие — ссылка подтверждения. После клика открывается страница магазина в вашей теме (используется штатный шаблон common/success, поэтому вид наследуется от темы) с текстом «Подписка подтверждена». Следом приходит короткое приветственное письмо, в котором уже есть ссылка на отписку в один клик.

Если человек вводит адрес, который уже подтверждён, он видит «Этот адрес уже подписан» — и ни одного лишнего письма не получает. Это намеренно: иначе любой мог бы засыпать чужой ящик «подтверждениями», просто вводя его в форму.

Что получает админ

Отдельный грид подписчиков в настройках модуля: адрес, имя, состояние (ожидает / подтверждено / отписан / ошибка), источник (форма, кабинет, админка, импорт), язык, IP, дата заявки и дата подтверждения. Фильтры по состоянию, источнику, адресу и периоду.

Кнопка «Отправить ещё раз» для тех, кто не подтвердил. Экспорт CSV всех подтверждённых адресов — вместе с доказательством согласия (источник, IP, обе даты), в UTF-8 с BOM, чтобы Excel не превратил украинские имена в кракозябры.

Счётчики по каждому состоянию на виду, чтобы был виден реальный размер списка, а не «сколько когда-то поставили галочку».

Как это работает — шаг за шагом

  1. Человек оставляет адрес — в форме модуля или штатной галочкой при регистрации или в кабинете.
  2. Создаётся строка в собственной таблице с состоянием «ожидает», токеном, IP, user-agent, языком и источником. Если галочку поставили в штатной форме, модуль опускает customer.newsletter обратно в 0 — пока согласия нет, его нет и в базе.
  3. Уходит письмо с подтверждением на языке той версии сайта, с которой пришла заявка.
  4. Переход по ссылке переводит строку в «подтверждено», ставит дату и поднимает штатный флажок customer.newsletter, чтобы остальной магазин видел ту же картину.
  5. Через заданное количество часов тем, кто не подтвердил, уходит ровно одно напоминание. Строка помечается как «напомнено» независимо от того, дошло ли письмо, — чтобы мёртвый адрес не крутился в цикле.
  6. Неподтверждённые заявки старше N дней удаляются сами. Адрес, который не подтвердил, — не подписчик, и держать его вечно нет оснований.

Отписка работает в один клик из любого письма: переход по ссылке переводит строку в «отписан», опускает штатный флажок и (по желанию) отправляет короткое подтверждение, чтобы у человека оставалось письменное доказательство.

Что под капотом

Одна собственная таблица cc_news_subscriber: строка на пару (магазин, адрес), с состоянием, токеном и доказательством согласия. Уникальный ключ по паре не даёт задвоений, а повторная заявка от того же адреса оживляет ту же строку с новым токеном — поэтому ссылка из старого письма перестаёт действовать.

Токен — 48 шестнадцатеричных символов из random_bytes. Один и тот же токен обслуживает и подтверждение, и отписку: после подтверждения он намеренно не меняется, потому что именно на нём держится ссылка «отписаться» во всех будущих письмах.

Защита формы — скрытый honeypot вне потока документа и вне табуляции, плюс подписанный штамп времени (HMAC от параметров инсталляции), который не переписать со стороны клиента. Штамп живёт сутки, поэтому форма переживает полное кэширование страницы. Дополнительно — лимит заявок с одного IP в час и, по желанию, штатная капча магазина.

Тексты писем живут в библиотеке, а не в языковых файлах: письмо собирается из трёх разных контекстов (витрина, админка, запуск по расписанию), и язык письма — это язык подписчика, а не язык текущего запроса. Пустое поле шаблона всегда откатывается на встроенный текст, неизвестный язык — на английский.

Модуль не трогает ни одного файла ядра: работает через штатные события OpenCart и собственные маршруты витрины.

Как установить

  1. Расширения → Установка расширений → загрузить zip.
  2. Расширения → Модули → найти «Подписка с подтверждением (Double Opt-In)» → нажать «+». На этом шаге создаётся таблица и регистрируются события и задания по расписанию.
  3. Открыть настройки, включить модуль и сохранить.
  4. Вставить форму в нужное место темы: {{ cc_newsletter }} в любом Twig-шаблоне.
  5. Если в магазине уже есть подписчики со штатной галочкой — нажать «Импортировать существующих подписчиков». Импорт выполняется один раз и только вручную: он заводит их как подтверждённых, потому что магазин уже считает их подписчиками, и никогда не возвращает тех, кто отписался.

Вопросы
о модуле

Не нашли ответ? Напишите в Telegram — ответим в течение рабочего дня.

@catcode_support Настройка, совместимость, активация
Не сломается ли моя регистрация?

Нет. Обработчик событий обёрнут так, что любая ошибка в нём не доходит до покупателя.

А если я не хочу, чтобы модуль трогал штатную галочку?

В настройках есть переключатель «Не трогать» — тогда работает только собственная форма модуля.

Что станет со старыми подписчиками?

Ничего, пока вы сами не нажмёте кнопку импорта. При инсталляции модуль не импортирует никого.

Сколько живёт ссылка подтверждения?

По умолчанию 72 часа, настраивается.

Удалятся ли данные при удалении модуля?

Нет. Таблица подписчиков намеренно остаётся — это доказательство согласия по каждому адресу.

Не тот вариант, что искали?

Делаем кастомные модули под WordPress, WooCommerce, OpenCart и Shopify. Расскажите о задаче — подготовим оценку.

Заказать кастомный модуль