Підписка з підтвердженням (Double Opt-In) для OpenCart
Що включено в ліцензії
| Функція | Free | Pro |
|---|---|---|
| Підписка активується лише після переходу за посиланням із власної пошти | ✔ | ✔ |
| Запис згоди: джерело, IP, user-agent, час заявки і час підтвердження | ✔ | ✔ |
| Підпорядковує штатну галочку OpenCart у реєстрації та кабінеті | ✔ | ✔ |
| Відписка в один клік з будь-якого листа | ✔ | ✔ |
| Чотири листи: підтвердження, вітальний, нагадування, прощальний | ✔ | ✔ |
| Редагування текстів листів окремо для кожної мови магазину | — | ✔ |
| Одне нагадування непідтвердженим за розкладом | — | ✔ |
| Грід підписників з фільтрами за станом, джерелом і періодом | ✔ | ✔ |
| Експорт CSV з доказом згоди, UTF-8 з BOM | ✔ | ✔ |
| Honeypot, підписаний штамп часу і ліміт заявок з однієї IP | ✔ | ✔ |
| Автовидалення непідтверджених заявок за N днів | ✔ | ✔ |
| Разовий імпорт наявних підписників — кнопкою, не на інсталяції | ✔ | ✔ |
Штатний OpenCart вважає згодою саму галочку. Покупець поставив «Підписатися на новини» під час реєстрації — і в базі одразу зʼявляється customer.newsletter = 1. Ні підтвердження, ні дати, ні сліду, звідки та згода взялася. Адресу, яку хтось вписав у чужу форму реєстрації, зі списку вже не прибрати, а довести, що людина справді погоджувалась, нічим.
Модуль перетворює цю галочку на заявку. Прапорець піднімається лише після того, як людина перейшла за посиланням із власної поштової скриньки — і саме тоді в базі зʼявляється запис про згоду з часом, джерелом та IP.
Живе демо
Демо-магазин: oc.catcode.com.ua (OpenCart 4.1.0.3). Введіть адресу у форму підписки — прийде лист із підтвердженням; доки ви не натиснете посилання в ньому, статус у адмінці лишається «Очікує», і жоден лист розсилки на цю адресу не піде.
Адмінка демо: Розширення → Модулі → Підписка з підтвердженням. Там видно грід підписників зі станом, джерелом і обома датами.
Як це виглядає для покупця

У підвалі (або там, де ви поставите форму) — поле e-mail, за бажанням поле імені й кнопка. Після відправки людина одразу бачить: «Майже готово — перевірте пошту і перейдіть за посиланням у листі. До того ми нічого вам не надсилатимемо».
У листі одна дія — посилання підтвердження. Після кліку відкривається сторінка магазину у вашій темі (використовується штатний шаблон common/success, тож вигляд успадковується від теми) з текстом «Підписку підтверджено». Слідом приходить короткий вітальний лист, у якому вже є посилання на відписку в один клік.
Якщо людина вводить адресу, яка вже підтверджена, вона бачить «Ця адреса вже підписана» — і жодного зайвого листа не отримує. Це навмисно: інакше будь-хто міг би засипати чужу скриньку «підтвердженнями», просто вводячи її у форму.
Що отримує адмін


Окремий грід підписників у налаштуваннях модуля: адреса, імʼя, стан (очікує / підтверджено / відписаний / помилка), джерело (форма, кабінет, адмінка, імпорт), мова, IP, дата заявки і дата підтвердження. Фільтри за станом, джерелом, адресою і періодом.
Кнопка «Надіслати ще раз» для тих, хто не підтвердив. Експорт CSV усіх підтверджених адрес — разом із доказом згоди (джерело, IP, обидві дати), у UTF-8 з BOM, щоб Excel не перетворив українські імена на кракозябри.
Лічильники по кожному стану на видноті, щоб було видно реальний розмір списку, а не «скільки колись поставили галочку».
Як це працює — крок за кроком
- Людина залишає адресу — у формі модуля або штатною галочкою при реєстрації чи в кабінеті.
- Створюється рядок у власній таблиці зі станом «очікує», токеном, IP, user-agent, мовою та джерелом. Якщо галочку поставили у штатній формі, модуль опускає
customer.newsletterназад у 0 — доки згоди нема, її нема і в базі. - Іде лист із підтвердженням мовою тієї версії сайту, з якої прийшла заявка.
- Перехід за посиланням переводить рядок у «підтверджено», ставить дату і піднімає штатний прапорець
customer.newsletter, щоб решта магазину бачила ту саму картину. - Через задану кількість годин тим, хто не підтвердив, іде рівно одне нагадування. Рядок позначається як «нагадано» незалежно від того, чи лист дійшов, — щоб мертва адреса не крутилася в циклі.
- Непідтверджені заявки, старші за N днів, видаляються самі. Адреса, яка не підтвердила, — не підписник, і тримати її вічно немає підстав.
Відписка працює в один клік із будь-якого листа: перехід за посиланням переводить рядок у «відписаний», опускає штатний прапорець і (за бажанням) надсилає коротке підтвердження, щоб у людини лишався письмовий доказ.
Що включено в ліцензії
Free — повний цикл підтвердження: форма, лист-підтвердження, вітальний лист, відписка в один клік, підпорядкування штатної галочки, грід підписників, експорт CSV, honeypot і ліміт заявок з однієї IP, ретенція. Обмеження одне — до 200 підтверджених підписників.
Pro — знімає ліміт на кількість підписників, додає автоматичне нагадування непідтвердженим і редагування текстів усіх чотирьох листів окремо для кожної мови магазину.
Ліцензія разова, привʼязується до домену. Ліцензія назавжди: оплачуєте один раз, без щорічних платежів.
Скільки коштує
Базова версія — безкоштовно, без реєстрації й без обмеження в часі. Pro — 1 290 грн разово за домен. Тестовий період Pro — 7 днів, вмикається однією кнопкою в налаштуваннях, ключ приходить на пошту.
Технічні вимоги
- OpenCart 4.0.2 – 4.1.x (версії для 3.x і 2.3 — у розробці).
- PHP 7.4+ (працює і на 8.0–8.3).
- MySQL/MariaDB з підтримкою InnoDB і utf8mb4.
- Налаштована пошта магазину (Система → Налаштування → Пошта): модуль надсилає листи тим самим транспортом, що й решта магазину, — окремих доступів заводити не треба.
Що під капотом
Одна власна таблиця cc_news_subscriber: рядок на пару (магазин, адреса), зі станом, токеном і доказом згоди. Унікальний ключ по парі не дає задвоєнь, а повторна заявка від тієї самої адреси оживляє той самий рядок із новим токеном — тож посилання зі старого листа перестає діяти.
Токен — 48 шістнадцяткових символів із random_bytes. Один і той самий токен обслуговує і підтвердження, і відписку: після підтвердження він навмисно не змінюється, бо саме на ньому їде посилання «відписатися» в усіх майбутніх листах.
Захист форми — прихований honeypot поза потоком документа й поза табуляцією, плюс підписаний штамп часу (HMAC від параметрів інсталяції), який не переписати з боку клієнта. Штамп живий добу, тож форма переживає повне кешування сторінки. Додатково — ліміт заявок з однієї IP за годину і, за бажанням, штатна капча магазину.
Тексти листів живуть у бібліотеці, а не в мовних файлах: лист складається з трьох різних контекстів (вітрина, адмінка, запуск за розкладом), і мова листа — це мова підписника, а не мова поточного запиту. Порожнє поле шаблону завжди відкочується на вбудований текст, невідома мова — на англійську.
Модуль не чіпає жодного файлу ядра: працює через штатні події OpenCart і власні маршрути вітрини.
Як встановити
- Розширення → Встановлення розширень → завантажити zip.
- Розширення → Модулі → знайти «Підписка з підтвердженням (Double Opt-In)» → натиснути «+». На цьому кроці створюється таблиця й реєструються події та завдання за розкладом.
- Відкрити налаштування, увімкнути модуль і зберегти.
- Вставити форму в потрібне місце теми:
{{ cc_newsletter }}у будь-якому Twig-шаблоні. - Якщо в магазині вже є підписники зі штатною галочкою — натиснути «Імпортувати наявних підписників». Імпорт виконується один раз і тільки вручну: він заводить їх як підтверджених, бо магазин уже вважає їх підписниками, і ніколи не повертає тих, хто відписався.
Історія версій
1.0.0 — перший реліз: повний цикл double opt-in, підпорядкування штатної галочки, чотири листи з редагуванням по мовах, грід підписників з доказом згоди, експорт CSV, нагадування і ретенція за розкладом, разовий імпорт наявних підписників.
Часті питання
Чи зламається моя реєстрація?
Ні. Обробник подій обгорнутий так, що будь-яка помилка в ньому не доходить до покупця.
А якщо я не хочу, щоб модуль чіпав штатну галочку?
У налаштуваннях є перемикач «Не чіпати» — тоді працює лише власна форма модуля.
Що станеться зі старими підписниками?
Нічого, доки ви самі не натиснете кнопку імпорту. На інсталяції модуль не імпортує нікого.
Скільки живе посилання підтвердження?
За замовчуванням 72 години, налаштовується.
Чи видаляться дані при видаленні модуля?
Ні. Таблиця підписників навмисно лишається — це доказ згоди по кожній адресі.
Питання щодо модуля?
Пишіть у Telegram — відповімо протягом робочого дня. Допоможемо з налаштуванням, сумісністю та активацією ключа.
Поки що жодного відгуку. Будь першим — нижче.
Залишити відгук
Відгук модерується перед публікацією — це звичайно займає до 24 годин.
Поки питань немає. Запитай — ми відповімо протягом 24 годин.
Поставити питання
Зазвичай відповідаємо протягом 24 годин у робочий час.
Купівля модуля
—