НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
151 of 152 menu

Таблица oc_customer_subscription

Таблица oc_customer_subscription появилась в OpenCart начиная с версии 4.x и предназначена для управления подписками покупателей. Она позволяет организовать систему регулярных платежей (рекуррентные платежи) или подписку на товары с определенной периодичностью.

Поля

Поле Тип данных Описание
customer_subscription_id int Уникальный идентификатор подписки покупателя. Первичный ключ таблицы с автоинкрементом.
order_id int Идентификатор заказа, в рамках которого была создана подписка. Внешний ключ к таблице oc_order.
order_product_id int Идентификатор товара в заказе, на который оформлена подписка. Внешний ключ к таблице oc_order_product.
customer_id int Идентификатор покупателя, оформившего подписку. Внешний ключ к таблице oc_customer.
payment_method varchar(255) Код способа оплаты, используемого для подписки (например, bank_transfer, cheque, или код платежного шлюза).
payment_code varchar(255) Код платежного модуля (расширения), обрабатывающего подписку.
product_name varchar(255) Название товара или услуги, на которую оформлена подписка, на момент создания заказа.
product_id int Идентификатор товара из каталога. Внешний ключ к таблице oc_product.
quantity int Количество товара в подписке.
price decimal(15,4) Цена за единицу товара на момент оформления подписки.
trial_price decimal(15,4) Цена пробного периода подписки, если он предусмотрен.
trial_frequency enum('day', 'week', 'semi_month', 'month', 'year') Периодичность пробного периода (день, неделя, две недели, месяц, год).
trial_cycle int Количество единиц периодичности пробного периода (например, 2 недели).
trial_duration int Общая продолжительность пробного периода в указанных единицах.
trial_remaining int Оставшееся количество платежных циклов пробного периода.
trial_status tinyint(1) Статус пробного периода (1 - активен, 0 - неактивен или завершен).
frequency enum('day', 'week', 'semi_month', 'month', 'year') Периодичность основного платежного цикла подписки.
cycle int Количество единиц периодичности основного цикла (например, 1 месяц).
duration int Общая планируемая продолжительность подписки в количестве циклов. 0 означает бессрочную подписку до отмены.
remaining int Оставшееся количество платежных циклов до окончания подписки.
date_next datetime Дата и время следующего платежа по подписке.
status tinyint(1) Текущий статус подписки (1 - активна, 0 - отключена/приостановлена).
date_added datetime Дата и время создания записи о подписке.

Как это работает

Функционал подписок позволяет покупателям оформлять регулярные заказы на товары или услуги. Процесс начинается с создания обычного заказа, который содержит товар с настроенными опциями подписки (периодичность, длительность, пробный период).

После успешной оплаты начального заказа в таблице oc_customer_subscription создается запись, которая становится основой для управления последующими автоматическими списаниями. Система или администратор вручную отслеживает поле date_next для определения времени следующего платежа.

При наступлении даты следующего платежа система (часто через Cron задание) инициирует процесс списания средств с помощью указанного в payment_code платежного модуля. После успешного списания создается новый заказ, обновляются поля remaining, date_next, а история платежей фиксируется в связанной таблице oc_customer_subscription_transaction.

Поля, связанные с пробным периодом (trial_*), позволяют предлагать клиентам специальные условия на начальном этапе подписки, после чего автоматически переходить на стандартный тариф.

Пример SQL-запроса

Получить список активных подписок с информацией о клиентах и товарах можно следующим запросом:

SELECT cs.customer_subscription_id, cs.product_name, cs.quantity, cs.price, cs.date_next, c.firstname, c.lastname, c.email, p.model as product_model FROM oc_customer_subscription cs LEFT JOIN oc_customer c ON (cs.customer_id = c.customer_id) LEFT JOIN oc_product p ON (cs.product_id = p.product_id) WHERE cs.status = 1 ORDER BY cs.date_next ASC;

Смотрите также

  • таблицу oc_order,
    которая содержит информацию о заказах
  • таблицу oc_customer,
    которая хранит данные покупателей
  • таблицу oc_product,
    которая содержит информацию о товарах
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить