Модель подписки 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/8, если только он не возобновит свою подписку. Более того, было бы здорово, если бы у меня было задание cron, проверяющее, использовал ли пользователь свою подписку за текущий месяц, и отправьте электронное письмо с напоминанием «Эй, получите свой продукт в этом месяце».

Это мой первый проект OpenCart, я прошел через документацию и Googled много, я играл с локальной установкой, и я пытаюсь выяснить, возможно ли то, что я прошу, без изменения основного кода, я бы хотел избегайте этого. Однако, если нет другого пути, я понимаю, что OpenCart – это структура MVC (+ L (anguage)), но я не нашел твердой документации о том, как настроить ее функциональность, а только отдельные части для конкретных требований.

Если возможно, я хотел бы записать, что я имею в виду, пожалуйста, сообщите, если это звучит нормально:

  • Я хотел бы добавить еще одну сущность (объект / модель) для хранения подписки, пользователя, которому она принадлежит, дату начала и окончания, и была ли она использована. В принципе, подписка является обычным порядком, и я бы хотел, чтобы она хранилась как одна, мне просто нужно сохранить еще несколько полей. Как я уже сказал, мне нужно выполнить две проверки:
  • Использует ли пользователь свою подписку на текущий месяц? Для этого я думал о наличии поля «isUsed» с флагом, которое можно сбросить с помощью задания cron, каждый раз, когда пользователь достигает своей даты выставления счета. (в нашем примере 23/6, 23/7). В качестве альтернативы я мог бы добавить 3 записи, по одному для каждого биллингового цикла и соответственно обновить их.
  • Срок действия подписки истек? Я могу проверить дату истечения срока подписки.

Я не знаю, как включить эту функциональность во время проверки или как начать ее реализацию.

Я прошел через форум и сильно искал Google, но ответа пока не нашел. Я опытный разработчик Grails / Java EE, поэтому я довольно техничен, если этот пост становится слишком технологичным 🙂

Оказывается ли это выше, и я на правильном пути?

Ура,
Ираклис

Эта функциональность находится вне того, для чего создан 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/8, если только он не возобновит свою подписку. Более того, было бы здорово, если бы у меня было задание cron, проверяющее, использовал ли пользователь свою подписку за текущий месяц, и отправьте электронное письмо с напоминанием «Эй, получите свой продукт в этом месяце».

Я даже не знаю, с чего начать, но если вы готовы заплатить, вы можете отправить за помощью и, вероятно, добавить эту функцию по хорошей цене.

Это мой первый проект OpenCart, я прошел через документацию и Googled много, я играл с локальной установкой, и я пытаюсь выяснить, возможно ли то, что я прошу, без изменения основного кода, я бы хотел избегайте этого. Однако, если нет другого пути, я понимаю, что 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'] = ''; }