【问题标题】:Whats the program workflow for paid membership on sites?网站上付费会员的计划工作流程是什么?
【发布时间】:2011-07-28 12:44:00
【问题描述】:

我正在使用 Zend 框架在 php 中构建一个付费会员网站。我需要制定一个向用户收费的工作流程。我们有许多月度套餐,每个套餐都提供不同程度的服务。举个例子:

允许用户创建一个工作区和一个用户的免费计划

一个基本计划,允许创建 5 个工作区和 3 个用户,每月花费 15 美元

高级计划,允许创建 20 个工作区和 10 个用户,每月收费 35 美元

允许创建 50 个工作区和 30 个用户的重型计划,每月花费 65 美元

我现在很可能会与像 AlertPay 这样的第三方网关集成 - 但是这些套餐是每月的,并且 :( 很抱歉,到目前为止我还没有真正注册任何每月会员服务网站,想知道你怎么样每月递增地向用户收费。

您是坚持让他们每个月输入他们的信用卡详细信息,还是您实际上要求他们提供一次详细信息然后您按月收费 - 老实说,我什至怀疑后者是否可以考虑。

或者用户是否提前支付他们希望使用的月数——通常是如何完成的。

此外,我想在注册后为我的用户提供 10 天免费试用所有付费套餐。我将如何在代码中实现这一点。我已经设置了我的应用程序并且正在运行,就好像所有用户都是管理员一样,即没有任何东西,现在想要建立限制以实现货币化,但在工作流程以及代码实现和数据设计上有点迷失了这样做.

提醒我是否有任何在线服务或开源应用程序可用于插入我的应用程序并为我处理网站的这一方面?

更新 ==========================

非常全面的答案,但在开发层面 - 我应该在我的数据库中存储什么以及我将如何设计所需的表。我不明白,每月订阅的每个月都会对我提供网关的 url 进行回发。就像数据库的基本要素一样。

【问题讨论】:

    标签: zend-framework e-commerce membership paypal-subscriptions


    【解决方案1】:

    嗯,你问了两个问题。

    如何逐步向用户收费 每个月?

    您正在寻找的是定期付款,大多数支付网关都提供此类选项(Paypal 提供)。基本上,它将信用卡信息存储在安全数据库中,并每天运行一个 cron 来检查重复配置文件并请求授权。但是,我实际上不建议您自己做,这很困难,而且在大多数国家/地区都是非法的。 (您不能自己存储 CC 号码)。

    有些网站会向您收取一次 n 个月的费用,但从用户的角度来看,它可能会让他们害怕。

    我将如何在代码中实现这一点?

    Zend Framework 提供了一个组件 (Zend_Acl),它将帮助您构建一个 Access Control List

    您可以为每种订阅类型创建一个“角色”,每个角色对不同资源具有不同的权限。

    如果你知道MoSCOW method,它有点相似:

    • (角色)免费计划可以(特权)注册(资源)网站。
    • (角色)基本计划可以(权限)创建5个(资源)工作区。

    请注意,大多数时候,有一种Privilege Escalation,因为关于如何继承角色。

    您需要隔离并找到您的资源,资源可以是您想要的任何东西,甚至是动态的和动态创建的。

    使用断言,您应该能够限制每个角色的工作区数量。

    Class WorkspaceCountAssertion {
    
        const MAX_WORKSPACE = 5;
    
        public function assert(Zend_Acl $acl,
                               Zend_Acl_Role_Interface $role = null,
                               Zend_Acl_Resource_Interface $resource = null,
                               $privilege = null)
        {
            //retrieve the current workspace count
            if ($workspaceCount > self::MAX_WORKSPACE) {
                return false;
            }
    
            return true;
        }
    }
    
    $acl->allow('basic', 'workspace', 'create', new WorkspaceCountAssertion());
    

    它给了你想法。

    请注意,我从未使用过用户、控制器等术语,您实际上需要考虑角色、资源、权限。


    您需要以简单的多对一关系存储角色及其关联帐户。
    每个帐户可以有一个角色。付款停止时如何更新?取决于,但在大多数情况下,您需要运行一个 cron 来检查是否结束订阅并检查是否定期付款,具体取决于支付网关,它要么回发生成的交易,要么直接通过网络服务返回。如果付款失败或被拒绝,您可以将角色改回免费帐户。

    有几种方法可以做到这一点,这取决于您的应用程序和要求。

    您可能希望存储每个月度订阅,或更新关联的帐户/订阅行。

    【讨论】:

      【解决方案2】:

      大多数支付网关会为您管理您的订阅,并通过回发机制通知您的网站。即,

      1. 用户访问您的网站
      2. 用户为您网站上的订阅付费
      3. 用户被重定向到由您自己或支付网关(取决于网关)托管的支付表单。
      4. 用户在表单上输入他们的信用卡信息并提交到支付网关。
      5. 支付网关启动订阅并通过回发通知您的网站(在后台)。
      6. 根据用户支付表单是在本地托管并且您只是将提交内容发布到支付网关,或者支付网关正在处理表单,您的用户可能需要被重定向回成功/失败页面,或者只是显示适当的响应。

      当订阅发生更改时,即重新计费、取消、拒付,您的支付网关会启动另一个回发以通知您有新事件。然后,您的应用程序将负责适当地更新用户状态。

      这是非常笼统的信息,尽管它大致是大多数支付网关所遵循的步骤。

      【讨论】:

      • 谢谢,请检查我更新的问题,我需要在这里处理数据库架构
      猜你喜欢
      • 1970-01-01
      • 2018-12-01
      • 2011-10-22
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多