OpenCart订阅模型(x个月)

时间:2012-06-28 12:05:42

标签: php opencart subscription

我正在使用OpenCart建立一个电子商务网站,我想提供订阅。具体为3/6/12个月订阅。我对重复计费不感兴趣(我知道PayPal和Authorize.net有模块)。我希望用户提前支付一次。从配置的角度来看,这是否转化为3个伪产品?我想这是可行的,到目前为止,仅仅是产品配置。 3个产品,每个都有一个价格。

这是棘手的部分。对于用户已经付款的每个月,他们都可以在“结算周期”内每月订购一次产品。因此,如果用户在23/5上支付3个月的订阅费用:

  • 他可以在23 / 5-22 / 6期间获得一件产品,
  • 23 / 6-22 / 7中的一个,
  • 一个23 / 7-22 / 8

用户不应该每月订购多个产品,除非他续订订阅,否则他不应该在22/8之后获得任何产品。此外,如果我可以有一个cron工作,检查用户是否已经使用他当前月份的订阅,并发送“嘿,获取本月的产品”类型的提醒电子邮件,那将是非常棒的。

这是我的第一个OpenCart项目,我已经浏览了很多文档和Google搜索,我玩了一个本地安装,我试图弄清楚如果不修改核心代码我的问题是否可行,我我想避免这种情况。但是,如果没有其他方法,我理解OpenCart是一个MVC(+ L(anguage))框架,但我没有找到任何关于如何定制其功能的实体文档,只是针对特定要求的问题。

如果可以的话,我想写下来,请记住,请告知这听起来不错:

  • 我想再添加一个实体(对象/模型)来存储 订阅,它所属的用户,开始和结束日期和 是否已被利用。基本上,订阅是正常的 订单,我希望它像一个存储,我只需要 坚持更多的领域。正如我所说,我需要进行两次检查:
  • 用户是否在当月使用了他的订阅?对于 我正在考虑有一个标志“isUsed”字段,可以 每次用户到达其结算日期时,使用cron作业重置。 (在 我们的例子23 / 6,23 / 7)。或者我可以添加3个条目,一个用于 每个结算周期并相应地更新它们。
  • 订阅是否已过期?我可以检查有效期 订阅。

我不知道如何在结帐时插入此功能,或者如何开始实现此功能。

我已经通过论坛和谷歌搜索了很多,但我还没有找到答案。我是一位经验丰富的Grails / Java EE开发人员,所以我很技术,以防这个帖子太技术了:-)

上述声音是否可行,我是否走在正确的轨道上?

干杯,
伊拿克里斯

1 个答案:

答案 0 :(得分:2)

这个功能超出了Opencart的构建范围,但是如果你对PHP / CodeIgniter有一定的了解,那么你应该能够完成大部分/全部的mod。 SQL也很有用,但如果你还没有,那么学习起来很快。

我会说你的mod有两个部分,每个部分都有自己的难度。

  

我正在使用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

我认为我要为此做的是为每个订阅长度添加一个产品,并且每个产品都会向他们发放相应的帐户信用额度,并且这个信用额度是每月购买一个产品的完美数量。 / p>

为此,我建议添加一个函数,将资金添加到文件目录> model> checkout> order.php(或您选择的任何模型)的数据库的customer_transaction字段中,然后调用它并在目录>中添加数据。控制器>结帐> success.php

我认为验证客户是否购买了相应的订阅产品并验证该购买的信用额度已经很明智。

为了确保每月只获得1个产品,您需要在目录> controller> checkout> checkout.php的开头编写脚本,以便在他们尝试过于频繁地获取产品时将其重定向到错误消息。

  

用户不应该每月订购多个产品,   并且他不应该在22/8之后获得任何产品,除非   他更新了他的订阅。而且,如果可以的话,它会很棒   有一个cron工作,检查用户是否已使用他的订阅   当前月份,发送一个"嘿,这个月得到你的产品"   提醒电子邮件。

我甚至不知道从哪里开始,但是如果你愿意付钱,你可以发帖寻求帮助,并且可能以合理的价格添加这个功能。

  

这是我的第一个OpenCart项目,我已经完成了   文档和Google搜索了很多,我和当地人一起玩过   安装,我想弄清楚我要问的是什么   在不修改核心代码的情况下可行,我想避免这种情况。   但是,如果没有别的办法,我明白OpenCart是一个   MVC(+ L(anguage))框架,但我还没有找到任何实体   关于如何自定义其功能的文档,只有位ans   具体要求的作品。

同样,这超出了Opencart的构建范围,需要进行多次修改。至于如何使用Opencart脚本工作以及如何定制它的文档,我还没有找到任何一个。在过去的两个月里,我一直在努力学习我所拥有的东西,但如果你的问题很短,通常可以让人们在你需要的时候帮助你。

  

如果可以,我想写下来,请记住,请,   建议这听起来不错:

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作业。

希望这可以帮助您满足您的期望!

<强>更新

要将数据插入数据库,您可以复制admin / model / sale / customer.php中的addTransaction()函数

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'] = '';
}