Модель подписки OpenCart (х месяцев)
Я настраиваю сайт электронной коммерции, используя OpenCart, и хочу предложить подписку. Конкретно 3/6/12 месяцев подписки. Я НЕ заинтересован в регулярном выставлении счетов (я знаю, что существуют модули для PayPal и Authorize.net). Я хочу, чтобы пользователи платили один раз заранее. Это переводит на 3 псевдопродукта с точки зрения конфигурации? Я думаю, что пока это возможно, только с помощью конфигурации продукта. 3 продукта, каждый по одной цене.
Здесь начинается сложная часть. За каждый месяц, когда пользователи платят, они имеют доступ к заказу товара, только один раз в месяц, в рамках своего "биллингового цикла". Итак, если пользователь оплачивает 3-месячную подписку 23/5:
- он может получить один товар в период 23/5-22/6,
- один в 23/6-22/7, и
- один в 23/7-22/8
Пользователь не должен иметь возможность заказывать более одного продукта в месяц, а также он не должен иметь возможность получать какие-либо продукты после 22 августа, если он не продлит свою подписку. Более того, было бы замечательно, если бы я мог получить работу cron, проверить, использовал ли пользователь свою подписку на текущий месяц, и отправить электронное письмо с напоминанием "Эй, получи свой продукт на этот месяц".
Это мой первый проект OpenCart, я просмотрел документацию и много гуглил, я играл с локальной установкой, и я пытаюсь выяснить, возможно ли то, что я спрашиваю, без изменения кода ядра, я хотел бы Избегайте этого. Тем не менее, если нет другого пути, я понимаю, что OpenCart - это фреймворк MVC(+L(anguage)), но я не нашел какой-либо надежной документации о том, как настроить его функциональность, только отдельные кусочки для конкретных требований.
Если можно, я хотел бы записать, что я имею в виду, пожалуйста, сообщите, если это звучит нормально:
- Я хотел бы добавить еще одну сущность (объект / модель) для хранения подписки, пользователя, которому она принадлежит, даты начала и окончания, а также того, была ли она использована. По сути, подписка - это нормальный порядок, и я хотел бы, чтобы она сохранялась как единое целое, мне просто нужно сохранить еще несколько полей. Как я уже сказал, мне нужно выполнить две проверки:
- Использовал ли пользователь свою подписку на текущий месяц? Для этого я думал о наличии поля флага "isUsed", которое можно сбросить с помощью задания cron каждый раз, когда пользователь достигает своей даты выставления счета. (в нашем примере 23/6, 23/7). В качестве альтернативы я мог бы добавить 3 записи, по одной для каждого цикла выставления счетов, и соответственно обновить их.
- Срок действия подписки истек? Я мог бы проверить срок действия подписки.
Я понятия не имею, как подключить эту функцию во время оформления заказа или как начать реализацию этого.
Я прошел через форум и много гуглил, но ответа пока не нашел. Я опытный разработчик Grails/Java EE, поэтому я достаточно техничен, если этот пост слишком техничный:-)
Означает ли вышеприведенное звучание выполнимо, и я на правильном пути?
Ура,
Ираклис
1 ответ
Эта функциональность далеко за пределами того, для чего построен Opencart, но если вы немного знакомы с PHP/CodeIgniter, то вы сможете сделать большинство / все моды. Также будет полезно знать SQL, но если вы еще этого не сделаете, его быстро освоить.
Я бы сказал, что ваши моды состоят из 2 частей, каждая со своим уровнем сложности.
Я настраиваю сайт электронной коммерции, используя OpenCart, и хочу предложить подписку. Конкретно 3/6/12 месяцев подписки. Я НЕ заинтересован в регулярном выставлении счетов (я знаю, что существуют модули для PayPal и Authorize.net). Я хочу, чтобы пользователи платили один раз заранее. Это переводит на 3 псевдопродукта с точки зрения конфигурации? Я думаю, что пока это возможно, только с помощью конфигурации продукта. 3 продукта, каждый по одной цене.
Здесь начинается сложная часть. За каждый месяц, когда пользователи платят, они имеют доступ к заказу товара, только один раз в месяц, в рамках своего "биллингового цикла". Итак, если пользователь оплачивает 3-месячную подписку 23/5:
he can get one product in the period 23/5-22/6, one in 23/6-22/7, and one in 23/7-22/8
Я думаю, что я бы сделал для этого, добавив продукт для каждой длины подписки, и каждый продукт выдал им соответствующий кредит учетной записи, и у этого кредита есть идеальная сумма, чтобы купить один продукт в месяц для длины подписки.
Для этого я рекомендую добавить функцию для добавления средств в поле customer_transaction в базе данных в каталоге файлов>model>checkout>order.php (или любой другой модели, которую вы выберете), затем вызвать ее и добавить данные в каталог>controller>checkout> Success.php.
Я думаю, что было бы разумно проверить, что клиент приобрел соответствующий продукт подписки, и убедиться, что на эту покупку уже не было кредита.
Чтобы гарантировать, что они получают только 1 продукт в месяц, вам нужно написать скрипт в начало каталога>controller>checkout>checkout.php, чтобы перенаправить их на сообщение об ошибке, если они пытаются получить продукты слишком часто.
Пользователь не должен иметь возможность заказывать более одного продукта в месяц, а также он не должен иметь возможность получать какие-либо продукты после 22 августа, если он не продлит свою подписку. Более того, было бы замечательно, если бы я мог получить работу cron, проверить, использовал ли пользователь свою подписку на текущий месяц, и отправить электронное письмо с напоминанием "Эй, получи свой продукт на этот месяц".
Я даже не знаю, с чего начать, но если вы готовы платить, вы можете написать о помощи и, возможно, добавить эту функцию за хорошую цену.
Это мой первый проект OpenCart, я просмотрел документацию и много гуглил, я играл с локальной установкой, и я пытаюсь выяснить, возможно ли то, что я спрашиваю, без изменения кода ядра, я хотел бы Избегайте этого. Тем не менее, если нет другого пути, я понимаю, что OpenCart - это фреймворк MVC(+L(anguage)), но я не нашел какой-либо надежной документации о том, как настроить его функциональность, только отдельные кусочки для конкретных требований.
Опять же, это далеко за пределы того, для чего создан Opencart, и потребует нескольких модификаций. Что касается документации о том, как работает сценарий Opencart и как его настроить, я тоже не нашел. Мне было очень трудно узнать, что у меня есть за последние 2 месяца, но если ваши вопросы короткие, вы обычно можете попросить людей помочь вам по пути, когда вам это нужно.
Если можно, я хотел бы записать, что я имею в виду, пожалуйста, сообщите, если это звучит нормально:
I would like to add one more entity (object/model) for storing the subscription, the user to which it belongs, start and end date and
было ли оно использовано. По сути, подписка - это нормальный порядок, и я хотел бы, чтобы она сохранялась как единое целое, мне просто нужно сохранить еще несколько полей.
Я хотел бы добавить их в качестве атрибутов, вы можете сделать это в администрировании в конце каталога сайта> атрибуты, каталог> группы атрибутов и каталог> продукты на вкладке атрибутов.
Как я уже сказал, мне нужно выполнить две проверки: использовал ли пользователь свою подписку на текущий месяц? Для этого я думал о наличии поля флага "isUsed", которое можно сбросить с помощью задания cron каждый раз, когда пользователь достигает своей даты выставления счета. (в нашем примере 23/6, 23/7). В качестве альтернативы я мог бы добавить 3 записи, по одной для каждого цикла выставления счетов, и соответственно обновить их. Срок действия подписки истек? Я мог бы проверить срок действия подписки.
Я не знаю, как выполнить эту работу cron, но если вы сможете это выяснить, вы можете найти в базе данных имена и значения атрибутов, а затем применить вашу работу cron, если значения находятся в пределах вашего диапазона.
Надеюсь, это поможет вам с вашими ожиданиями!
ОБНОВИТЬ
Чтобы вставить данные в базу данных, вы можете повторить что-то вроде функции addTransaction () в admin/model/sale/customer.php
public function addTransaction($customer_id, $description = '', $amount = '', $order_id = 0) {
$customer_info = $this->getCustomer($customer_id);
if ($customer_info) {
$this->db->query("INSERT INTO " . DB_PREFIX . "customer_transaction
SET customer_id = '" . (int)$customer_id . "',
order_id = '" . (int)$order_id . "',
description = '" . $this->db->escape($description) . "',
amount = '" . (float)$amount . "',
date_added = NOW()");
}
И это в admin/controller/sale/customer.php
$this->load->model('sale/customer');
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->user->hasPermission('modify', 'sale/customer')) {
$this->model_sale_customer->addTransaction($this->request->get['customer_id'],
$this->request->post['description'], $this->request->post['amount']);
$this->data['success'] = $this->language->get('text_success');
} else {
$this->data['success'] = '';
}