OpenCart 订阅模式(x 个月)

2023-12-02

我正在使用 OpenCart 设置一个电子商务网站,并且我想提供订阅。特别是 3/6/12 个月的订阅。我对定期计费不感兴趣(我知道有 PayPal 和 Authorize.net 的模块)。我希望用户提前付款一次。从配置的角度来看,这是否会转化为 3 个伪产品?到目前为止,我认为这是可行的,只是通过产品配置。 3 个产品,每个产品一个价格。

棘手的部分来了。用户每月付费后,就可以在“计费周期”内每月订购一次产品。因此,如果用户在 23/5 支付 3 个月的订阅费用:

  • 他可以在23/5-22/6期间获得一件产品,
  • 23/6-22/7 1 次,以及
  • 23/7-22/8 之一

用户每月不应订购超过一种产品,并且在 22/8 之后他也不应能够获得任何产品,除非他续订。此外,如果我能有一个 cron 作业,检查用户是否使用了当月的订阅,并发送“嘿,获取本月的产品”之类的提醒电子邮件,那就太棒了。

这是我的第一个 OpenCart 项目,我浏览了文档并谷歌搜索了很多,我玩过本地安装,我试图弄清楚我所要求的在不修改核心代码的情况下是否可行,我想避免这种情况。但是,如果没有其他方法,我知道 OpenCart 是一个 MVC(+L(anguage)) 框架,但我还没有找到任何关于如何自定义其功能的可靠文档,只有针对特定要求的一些内容。

如果可以的话,我想写下我的想法,请告诉我这听起来是否可以:

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

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

我已经浏览了论坛并大量搜索了谷歌,但我还没有找到答案。我是一位经验丰富的 Grails/Java EE 开发人员,因此我非常注重技术,以防这篇文章变得过于技术性:-)

上述听起来可行吗?我走在正确的道路上吗?

Cheers,
Iraklis


此功能远远超出了 Opencart 的构建目的,但如果您对 PHP/CodeIgniter 有一定的了解,那么您应该能够完成大多数/所有的 mods。了解 SQL 也很有好处,但如果您还不了解,那么学习起来会很快。

我想说你的模组分为两部分,每个部分都有自己的难度级别。

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

我认为我要做的就是为每个订阅长度添加一个产品,并且每个产品都向它们发放适当的帐户信用额度,并让该信用额度在订阅长度内每月购买一个产品的完美金额。

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

我认为明智的做法是验证客户是否已购买了适当的订阅产品,并验证该购买是否还没有信用。

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

用户每月不能订购超过一种产品, 并且他在 22/8 之后也不应该能够获得任何产品,除非 他续订了他的订阅。此外,如果我可以的话那就太棒了 有一个 cron 作业,检查用户是否已使用他的订阅 当月,并发送“嘿,获取本月的产品” 一种提醒电子邮件。

我什至不知道从哪里开始,但如果您愿意付费,您可以发帖寻求帮助,并且可能会以优惠的价格添加此功能。

这是我的第一个 OpenCart 项目,我经历了 文档和谷歌搜索了很多,我和当地人一起玩过 安装,我想弄清楚我要问的是 在不修改核心代码的情况下可行,我想避免这种情况。 但是,如果没有其他办法,我明白 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 作业。

希望这对您的期望有所帮助!

UPDATE

要将数据插入数据库,您可以复制 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'] = '';
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCart 订阅模式(x 个月) 的相关文章

  • 设置大型电子邮件通知系统有哪些方法?

    我的公司有一个用 PHP 构建的网站 我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件 这是一个糟糕的主意 它堵塞了我们的服务器 并且需要几个小时才能完成整个批次 现在我已经研究过像 MailChimp 这样的群发邮件服务
  • 使用 file_get_content 发布数据

    我已经做了一些关于如何使用的研究file get content与帖子 我也读过this one https stackoverflow com questions 2445276 how to post data in php using
  • 使用 MYSQL 将 h:mm pm/am 时间格式插入数据库

    我正在尝试将以 h mm am pm 格式写入的时间插入到存储为标准 DATETIME 格式 hh mm ss 的数据库中 但我不知道如何将发布的时间转换为标准格式所以数据库会接受它 这是我到目前为止一直在尝试的 title POST in
  • Laravel Auth:attempt() 不会持久登录

    我在网上找到了许多有类似问题的资源 但似乎没有一个解决方案可以解决我的问题 当我使用以下代码登录用户时 一切看起来都很好 email Input get email password Input get password if Auth a
  • 选择一组数字以达到最小总数的算法

    给定 一组数字n 1 n 2 n 3 n x 还有一个数字M 我想找到最好的组合 n a n b n c n gt M 该组合应达到达到或超过 M 所需的最小值 没有其他组合可以提供更好的结果 将在 PHP 中执行此操作 因此可以使用 PH
  • 如何让Apache服务index.php而不是index.html?

    如果我将以下行放入index html文件 使 Apache 包含index php file 参观index html页面向我显示了这个 这是为什么 为什么它实际上不包含 PHP 文件 正如其他人指出的那样 您很可能没有 html设置为处
  • 尝试使用 php 发送 POST 请求,无论我做什么,我都会收到“HTTP ERROR 500”

    为了发出 HTTP 请求 有人建议我尝试使用 PHP 并给了我一段代码 url https example com dashboard api data array to gt PHONE NUMBER from gt SENDER ID
  • 使用 ImageMagick 和 PHP 将 PNG 转换为 JPG 并将透明背景设置为白色

    将图像从 PNG 转换为 JPEG 时 如何使用 ImageMagick 带有 php 扩展 将透明背景设置为白色 在撰写本文时 您尚未指定正在使用哪个扩展 但如果您使用命令行 则命令将是 convert image png backgro
  • 如何检测字符串中的非 ASCII 字符?

    如果我有一个 PHP 字符串 如何以有效的方式确定它是否至少包含一个非 ASCII 字符 我所说的非 ASCII 字符是指不属于该表的任何字符 http www asciitable com http www asciitable com
  • 媒体的 Google Cloud Storage 签名网址

    我已经建立了一个视频网站 为用户提供 m3u8 和关联的 ts 文件 我不希望媒体文件免费可用 所以我所做的是 当用户在网站上时 在 mysql 中使用他们的 IP 和令牌创建一个会话 当他们请求特定媒体子域 mp4 domain com
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • 编辑 HTACCESS 文件以防止直接访问特定文件夹中的特定文件

    我试图阻止直接访问子文件夹中的特定文件 我意识到这个论坛上有很多描述类似问题的主题 但是 我的似乎有点尴尬 由于我已经存在 HTACCESS 文件 这是文件的文件路径 www example com PRINCIPAL PROJECTS m
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 重写 URL,将 ID 替换为查询字符串中的标题

    我对 mod rewrite 很陌生 但我做了一些搜索 但找不到这个问题的答案 我有一个网站 它只有一个 PHP 页面 根据查询字符串中传递给它的 ID 提供数十页内容 我想重写 URL 以便此 ID消失并替换为从数据库中提取的页面标题 例
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • Facebook PHP SDK - 如何获取访问令牌?

    我正在尝试从我的应用程序在用户的 Facebook 墙上发帖 用户授予应用程序在他的墙上发布的权限 并且我在数据库中有用户ID 我需要自动发送帖子 而无需用户再次登录 我的代码是 try require once dirname FILE
  • Ebay api GetSellerList,解析响应 XML

    我正在使用 eBay 交易 api 来获取当前列出的卖家股票 我正在使用 GetSellerList 调用 我在解析 xml 时遇到问题 然后将其插入到网站商店中 这是 xml 请求
  • ZF3/2 - 如何捕获 EVENT_DISPATCH 侦听器中引发的异常?

    有什么方法可以在 EVENT DISPATCH 监听器中抛出异常吗 class Module public function onBootstrap EventInterface event application event gt get
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function

随机推荐

  • 如何检查 pandas DataFrame 是否为空?

    如何检查是否有熊猫DataFrame是空的 我想在终端中打印一些消息 如果DataFrame是空的 您可以使用该属性df empty检查它是否为空 if df empty print DataFrame is empty Source 熊猫
  • OpenCV / Python:用于实时面部识别的多线程

    我正在使用 OpenCv 和 Dlib 来执行面部识别带地标 来自网络摄像头流 语言是Python 它在我的 MacBook 笔记本电脑上运行良好 但我需要它从台式计算机 24 7 运行 该计算机是一台运行 Debian Jessie 的
  • 在烧瓶中发送发布请求时出现错误(python)

    我正在向协程函数发送一个发布请求 但出现以下错误 Traceback most recent call last File usr local lib python3 4 site packages flask app py line 19
  • 为 Cygwin 启用本机 NTFS 符号链接

    最近的 NTFS 和 Windows 实现了符号链接 NTFS连接点自 NTFS 3 0 Windows 2000 起可用作目录符号链接linkd or junction tools NTFS 符号链接也可以用作符号链接 对于文件和目录 因
  • app.config

    假设我有一个使用 VS2008 针对 NET 2 0 构建和编译的 WinForms 应用程序 据我了解 在运行时 应用程序将首先尝试加载 NET 2 0 CLR 因为这是它的编译对象 不管app config 文件的任何 supporte
  • Windows Phone 8.1 从代码发送 HTML 邮件

    我试图打开邮件应用程序 其内容在代码中定义 但是当我发送它时 gmail oulook 显示为纯文本而不是 HTML private async void SendEmail string url EmailMessage mail new
  • C# 将日期时间转换为自定义格式

    我正在查询一个datetime dd mm YYYY hh mm ss 数据库中的值并将其插入到列表中 如下所示 ord invoiceDate dt Rows i invoicedate ToString 如何将此字符串转换为自定义格式
  • 在matlab中使用bitshift绘制RGB直方图

    我正在尝试在 Matlab 中创建马赛克图像 该数据库主要由 RGB 图像组成 但也包含一些灰度图像 我需要计算直方图 就像维基百科文章的示例中关于颜色直方图 对于 RGB 图像 考虑使用 Matlab 中的位移运算符来组合 R G 和 B
  • HTML5 - mp4 视频无法在 IE9 中播放

    我有一个 mp4 视频 我想使用 HTML5 在 IE9 中播放
  • startManagingCursor() 在服务中?

    有没有办法在服务中而不是活动中使用 startManagingCursor 并获得相同的结果 如图所示here 更具体地说 我想根据服务的生命周期管理给定游标的生命周期 例如 当服务被销毁时 它将自动对给定的 Cursor 调用 deact
  • 如何传递非静态函数作为回调? [复制]

    这个问题在这里已经有答案了 我目前正在使用 Qt 和图形引擎 在 QGLWidget 实例的初始化期间 我需要将一些函数指针传递给我的引擎 寻找回调的函数是 virtual void Buffer CreateCustom byte get
  • 如何创建带有图像的单选按钮

    我想要一个带有图像而不是文本的单选按钮 所以我想要一个男性和女性的图像 而不是男性和女性的文本 这实际上可以使用标准 HTML 来完成还是必须使用 jQuery 我该怎么做呢 Use
  • 编译器是否允许回收释放的指针变量?

    有人声称 a compiler is free to reuse the pointer variable for some other purpose after the realloc being freed so you have n
  • 升级 ColdFusion 使用的 JRE

    我有一个 ColdFusion 8 1 应用程序 它被大量使用 我看到 jrun exe 在任务管理器中的内存使用率非常高 这是一个 32 位 Windows 2003 服务器 当 Jrun 达到大量内存使用量时 ColdFusion 将在
  • 如何在node.js中将类似字符串的数组转换为数组?

    实际上我得到了arraylist从 Android 设备中node js 但由于它是字符串形式 所以我想将其转换为array 为此 我在中提到了很多类似的问题SO但他们都没有帮助 我也尝试使用JSON parse 但这没有帮助 我正在以表格
  • 如何以通用方式检测位置缺失:固定?

    在iPad等移动设备上 我想禁用仅在支持position fixed时才有效的功能 有没有一种方法可以在不使用用户代理字符串的情况下检测这些设备 原因是我想尽可能避免搜索 iPad iPhone iPod Android 等 运行以下函数来
  • Webstorm IDE 缺少 Node.js Boilerplate 项目类型

    所以我专门检索了webstorm来学习和使用node js进行开发 似乎 Webstorm 的所有文档都指向现有项目类型 其中包含样板 Node js 设置 而没有所有 Web 配置等 我想使用这个样板模板 而不是带有一堆网络垃圾和不必要的
  • 为什么一个特征没有为一个明确实现了它的类型实现?

    我正在尝试使用Diesel查询 MySQL 数据库并使用 Handlebars 模板显示结果Rocket 我有这个模型 rs derive Queryable Serialize pub struct Post pub id i32 pub
  • 如何从 Java 的标准输入读取整数数组?

    在标准输入的一行中 我有 3 种类型的整数 第一个整数是 id 第二个整数是 N 某个数字 之后是 N 个整数 用一个空格分隔 我想将其存储在数组或 ArrayList 中 我如何使用 BufferedReader 来做到这一点 我有以下代
  • OpenCart 订阅模式(x 个月)

    我正在使用 OpenCart 设置一个电子商务网站 并且我想提供订阅 特别是 3 6 12 个月的订阅 我对定期计费不感兴趣 我知道有 PayPal 和 Authorize net 的模块 我希望用户提前付款一次 从配置的角度来看 这是否会