Я настраиваю сайт электронной коммерции с помощью OpenCart, и я хочу предлагать подписки. В частности, подписки на 3/6/12 месяцев. Я НЕ заинтересован в повторном выставлении счетов (я знаю, что есть модули для PayPal и Authorize.net). Я хочу, чтобы пользователи платили один раз заранее. Означает ли это перевод на 3 псевдопродукции с точки зрения конфигурации? Думаю, это возможно, пока что с конфигурацией продукта. 3 продукта, каждая с одной ценой.
Здесь идет сложная часть. За каждый месяц, которые пользователи заплатили, у них есть доступ к заказу продукта, только один раз в месяц, в рамках своего «биллингового цикла». Итак, если пользователь платит за 3-месячную подписку на 23/5:
Пользователь не должен иметь возможность заказывать более одного продукта в месяц, и он не должен также получать любые товары после 22/8, если только он не возобновит свою подписку. Более того, было бы здорово, если бы у меня было задание cron, проверяющее, использовал ли пользователь свою подписку за текущий месяц, и отправьте электронное письмо с напоминанием «Эй, получите свой продукт в этом месяце».
Это мой первый проект OpenCart, я прошел через документацию и Googled много, я играл с локальной установкой, и я пытаюсь выяснить, возможно ли то, что я прошу, без изменения основного кода, я бы хотел избегайте этого. Однако, если нет другого пути, я понимаю, что OpenCart – это структура MVC (+ L (anguage)), но я не нашел твердой документации о том, как настроить ее функциональность, а только отдельные части для конкретных требований.
Если возможно, я хотел бы записать, что я имею в виду, пожалуйста, сообщите, если это звучит нормально:
Я не знаю, как включить эту функциональность во время проверки или как начать ее реализацию.
Я прошел через форум и сильно искал 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'] = ''; }