Курсы по JavaScript
Менторство: 100$ за курс. Репетиторство: 20$ за занятие 1.5 часа. Жми для подробностей!
139 of 152 menu
Бесплатная онлайн лекция "Работа с AJAX в JavaScript". Начало: 4 февраля в 20.00. Продолжительность: 1-2 часа. Жми для записи!

Таблица oc_subscription

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

Поля

Поле Тип данных Описание
subscription_id int Уникальный идентификатор подписки. Первичный ключ таблицы.
order_id int ID заказа, в рамках которого была создана подписка. Внешний ключ для таблицы oc_order.
order_product_id int ID товара в заказе, на который оформлена подписка. Ссылается на oc_order_product.
customer_id int ID клиента, оформившего подписку. Внешний ключ для таблицы oc_customer.
payment_method text Данные о способе оплаты, используемом для подписки. Обычно хранится в формате JSON, включая код платежного модуля и название метода.
payment_code varchar(128) Код платежного модуля (например, pp_express для PayPal Express Checkout), который обрабатывает recurring-платежи.
shipping_method text Данные о способе доставки для подписки. Хранится в формате JSON.
product_name varchar(255) Название товара на момент создания подписки (дублируется из заказа для исторической сохранности).
product_id int ID товара из каталога. Внешний ключ для таблицы oc_product.
quantity int Количество товара в подписке.
trial_price decimal(10,4) Цена пробного периода подписки.
trial_frequency enum('day', 'week', 'semi_month', 'month', 'year') Периодичность платежей в пробном периоде (день, неделя, две недели, месяц, год).
trial_cycle int Количество интервалов (trial_frequency) между платежами в пробном периоде. Например, при trial_frequency = 'week' и trial_cycle = 2, платежи будут раз в 2 недели.
trial_duration int Продолжительность пробного периода. Определяет, сколько раз будет совершен платеж в пробном периоде.
trial_remaining int Оставшееся количество платежей в пробном периоде.
trial_status tinyint(1) Статус пробного периода (1 - активен, 0 - неактивен/завершен).
price decimal(10,4) Основная цена подписки (после пробного периода).
frequency enum('day', 'week', 'semi_month', 'month', 'year') Периодичность основных платежей подписки.
cycle int Количество интервалов (frequency) между основными платежами.
duration int Общая продолжительность подписки. Количество основных платежей, которые будут совершены. 0 означает бессрочную подписку до отмены.
remaining int Оставшееся количество платежей по подписке.
date_next datetime Дата и время следующего платежа по подписке.
comment text Комментарий к подписке (может использоваться администратором или платежной системой).
subscription_status_id int ID статуса подписки. Внешний ключ для таблицы oc_subscription_status.
date_added datetime Дата и время создания подписки.
date_modified datetime Дата и время последнего изменения подписки.

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

Когда клиент покупает товар, для которого в карточке товара (вкладка Recurring) настроен профиль recurring-платежей, в момент оформления заказа создается запись в таблице oc_subscription. Эта запись связывает товар, заказ, клиента и платежный метод.

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

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

Клиент и администратор могут просматривать статус подписки и управлять ею (например, приостанавливать или отменять) через панель управления OpenCart.

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

Выбрать все активные подписки с информацией о клиенте и статусе:

SELECT s.subscription_id, s.product_name, s.quantity, s.price, s.frequency, s.remaining, s.date_next, c.email, c.customer_id, ss.name as status_name FROM oc_subscription s LEFT JOIN oc_customer c ON (s.customer_id = c.customer_id) LEFT JOIN oc_subscription_status ss ON (s.subscription_status_id = ss.subscription_status_id) WHERE ss.language_id = 1 AND s.subscription_status_id IN (1, 2) -- Активные статусы ORDER BY s.date_next ASC;

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

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