Таблица oc_order_subscription
Таблица oc_order_subscription хранит данные о подписках, созданных из заказов. Каждая запись представляет собой отдельную подписку на товар, которая может иметь свой собственный график платежей и статус.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
order_subscription_id |
int |
Уникальный идентификатор подписки. |
order_id |
int |
Идентификатор заказа, из которого была создана подписка. Внешний ключ для таблицы oc_order.
|
order_product_id |
int |
Идентификатор товара в заказе. Внешний ключ для таблицы oc_order_product.
|
subscription_plan_id |
int |
Идентификатор плана подписки. Внешний ключ для таблицы oc_subscription_plan.
|
trial_price |
decimal(10,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 - неактивен).
|
price |
decimal(10,4) |
Основная цена подписки после пробного периода. |
frequency |
enum('day', 'week', 'semi_month', 'month', 'year') |
Частота оплаты для основного периода подписки. |
cycle |
int |
Количество интервалов основного периода. |
duration |
int |
Продолжительность основного периода в указанных интервалах. |
remaining |
int |
Количество оставшихся платежей основного периода. |
date_next |
datetime |
Дата следующего платежа по подписке. |
status |
tinyint(1) |
Общий статус подписки (1 - активна, 0 - неактивна).
|
Как это работает
Когда клиент оформляет заказ с товаром, который имеет подписку, система создает запись в таблице oc_order_subscription. Эта запись содержит все параметры подписки: цену, частоту платежей, продолжительность, а также информацию о пробном периоде, если он предусмотрен.
Система регулярных платежей OpenCart использует эту таблицу для управления подписками. Cron-задача или другой механизм планирования проверяет таблицу на наличие подписок, у которых наступила дата следующего платежа (date_next), и инициирует процесс списания средств.
После успешного платежа система обновляет поля remaining (уменьшает количество оставшихся платежей) и date_next (устанавливает новую дату следующего платежа в соответствии с настройками частоты).
Когда количество оставшихся платежей (remaining) достигает 0, подписка автоматически переходит в неактивный статус.
Пример SQL-запроса
Получить все активные подписки с информацией о заказе и товаре:
SELECT os.*, o.order_id, o.email, op.name as product_name
FROM oc_order_subscription os
LEFT JOIN oc_order o ON (os.order_id = o.order_id)
LEFT JOIN oc_order_product op ON (os.order_product_id = op.order_product_id)
WHERE os.status = 1;
Смотрите также
-
таблицу
oc_order,
которая хранит информацию о заказах -
таблицу
oc_order_product,
которая содержит товары в заказах -
таблицу
oc_subscription_plan,
которая хранит планы подписок -
таблицу
oc_subscription_status,
которая содержит статусы подписок