Модель подписки OpenCart (х месяцев)

Я настраиваю сайт электронной коммерции, используя 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

Пользователь не должен иметь возможность заказывать более одного продукта в месяц, а также он не должен иметь возможность получать какие-либо продукты после 22 августа, если он не продлит свою подписку. Кроме того, было бы замечательно, если бы я мог получить работу cron, проверяя, использовал ли пользователь свою подписку на текущий месяц, и отправил "Привет, получи свой продукт на этот месяц". вид напоминания по электронной почте.

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

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

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 whether it has been utilized. Basically, a subscription is a normal order and I would like it to be stored like one, I just need to persist a few more fields. As I said, I need to run two checks: Has the user utilized his subscription for the current month? For this I was thinking about having a flag "isUsed" field, which can be reset with a cron job, everytime a user reaches his billing date. (in our example 23/6, 23/7). Alternatively I could add 3 entries, one for each billing cycle and update them accordingly. Has the subscription expired? I could check against the expiry date of the subscription.

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

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

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

Ура,
Ираклис

 Waleed Farrukh12 июл. 2012 г., 15:05
Вы смогли это сделать? Пожалуйста, поделитесь, как вы это сделали, если вы сделали это расширением для opencart, было бы здорово, если бы вы поделились со всеми нами.

Ответы на вопрос(1)

для чего построен Opencart, но если вы немного знакомы с PHP / CodeIgniter, то вы сможете сделать большинство / все моды. Также будет полезно знать SQL, но если вы уже этого не сделаете, его быстро освоить.

Я бы сказал, что ваши моды состоят из 2 частей, каждая со своим уровнем сложности.

I am setting up an e-commerce site using OpenCart and I want to offer subscriptions. Specifically 3/6/12 months subscriptions. I am NOT interested in recurring billing (I am aware that there are modules for PayPal and Authorize.net). I want users to pay once in advance. Does this translate to 3 pseudo-products from a configuration point of view? I guess this is feasible, so far, just with product configuration. 3 products, each with one price.

Here comes the tricky part. For every month the users have paid they have access to order a product, only once a month, within their "billing cycle". So, if a user pays for a 3 month subscription on 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 в базе данных в каталоге файлов & gt; checkout & gt; order.php (или любой другой модели, которую вы выберете), затем вызвать его и добавить данные в каталог & gt; controller & gt; checkout & gt. ; Success.php.

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

Чтобы гарантировать, что они получают только 1 товар в месяц, вам нужно написать скрипт в начало каталога & gt; controller & gt; checkout & gt; checkout.php, чтобы перенаправить их на сообщение об ошибке, если они пытаются получить товары слишком часто.

A user should not be able to order more than one products per month, and he should not also be able to get any products after 22/8, unless he renews his subscription. Moreover, it would be awesome if I could have a cron job, checking if a user has utilized his subscription for the current month, and send a "Hey, get your product for this month" kind of reminder email.

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

This is my first OpenCart project, I have gone through the documentation and Googled a lot, I have played with a local installation, and I am trying to figure out if what I am asking is feasible without modifying the core code, I would like to avoid that. However, if there is no other way, I understand that OpenCart is an MVC(+L(anguage)) framework, but I haven't found any solid documentation on how to customize its functionality, only bit ans pieces for specific requirements.

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

If I may, I would like to write down, what I have in mind, please, advise if this sounds OK:

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

whether it has been utilized. Basically, a subscription is a normal order and I would like it to be stored like one, I just need to persist a few more fields.

Я бы добавил их в качестве атрибутов, вы можете сделать это в администрировании на задней стороне каталога каталога & gt; атрибуты, каталог & gt; атрибуты групп и каталог & gt; продукты на вкладке атрибутов.

As I said, I need to run two checks: Has the user utilized his subscription for the current month? For this I was thinking about having a flag "isUsed" field, which can be reset with a cron job, everytime a user reaches his billing date. (in our example 23/6, 23/7). Alternatively I could add 3 entries, one for each billing cycle and update them accordingly. Has the subscription expired? I could check against the expiry date of the subscription.

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

Надеюсь, это поможет вам с вашими ожиданиями!

UPDATE

Чтобы вставить данные в базу данных, вы можете повторить что-то вроде функции 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'] = '';
}
 06 июл. 2012 г., 00:47
Я думаю, что это будет хороший метод, если вы сможете заставить его работать. Вы можете вручную добавить новые таблицы и поля в SQL, а затем вставить новые строки, используя код после обновления. Это определенно выполнимо, но потребует изменений в широком диапазоне файлов.
 13 июл. 2012 г., 10:33
@herc ты смог сделать это успешно? было бы здорово, если бы вы могли рассказать нам всем, как вы это сделали.
 Iraklis01 июл. 2012 г., 09:43
Таким образом, у меня все еще будет кредит в магазине, который я смогу использовать для вознаграждения пользователей и не испорчу свои отчеты (мне придется разделить подписку на обычный кредит), я смогу проверить, имеет ли подписка был найден соответствующий элемент в таблице подписок для текущей даты на момент оформления заказа, плюс я смогу добавить задание cron для неиспользованных подписок. Еще один вопрос - могу ли я пропустить корзину и сразу перейти к оформлению заказа, когда пользователь покупает подписку.
 Iraklis01 июл. 2012 г., 09:41
Спасибо за ваш ответ. Вот что я должен сделать: создать 3 продукта, один для подписок на 3/6/12 месяцев. Когда пользователь покупает любой из них, я создаю новую запись в новой сущности, которую я хочу создать (могу ли я на самом деле создавать новые сущности / таблицы SQL в OpenCart? Я также нашел, как создать запись в панели администратора,stackoverflow.com/questions/10700761/…). Таким образом, после успешного заказа я должен добавить новую подписку (id, subscription_id, purchase_id, start_date, end_date, is_used?) Purchase_id должен дать мне идентификатор пользователя / продукта.

Ваш ответ на вопрос