我正在使用Zend Framework在php中构建一个付费会员网站。我需要制定一个为用户收费的工作流程。我们有许多月度套餐,每个套餐提供不同程度的服务。举个例子:
允许用户创建一个工作区和一个用户的免费计划
一项基本计划,允许创建5个工作区和3个用户,费用为15美元/月
高级计划,允许创建20个工作区和10个用户,成本为35美元/月
重型计划,允许创建50个工作区和30个用户,每月花费65美元
我最喜欢现在正在与像AlertPay这样的第三方网关集成 - 不过这些套餐是按月计算的:(很遗憾地说到目前为止我还没有在任何月度会员服务网站上注册,并且想知道你是怎么做的每月逐步向用户收费。
你是否坚持要求他们每个月输入他们的信用卡详细信息,或者你实际上是要求他们一次性扣留,然后你每月收费 - 我真的怀疑后者甚至可以被考虑。
或者用户是否需要提前支付他们希望使用的月数 - 如何正常完成。
此外,我想在注册时向我的用户提供所有付费套餐的10天免费试用。我将如何在代码中实现它。我已经设置了我的应用程序并且正在运行,好像所有用户都是管理员,即没有任何保留,现在想要建立限制货币化但是在工作流程和代码实现以及数据设计方面有点丢失
提醒我是否有任何在线服务或开源应用程序可以用来插入我的应用程序并为我处理网站的这个方面?
更新=========================
非常全面的答案,但是在开发级别 - 我应该在我的数据库中存储什么以及如何设计所需的表。我不明白,每个月订阅一次,我会提供网关的回复。就像数据库中最基本的东西一样。
答案 0 :(得分:1)
嗯,你问两个问题。
如何逐步向用户收费 每个月?
您正在寻找的是定期付款,大多数支付网关都提供此类选项(Paypal确实如此)。基本上,它将信用卡信息存储在安全的数据库中,并且每天运行一个cron来检查重复的配置文件并请求授权。但是,我实际上不建议你自己去做,这很困难,而且在大多数国家都是非法的。 (你不能自己存储CC号码。)
某些网站会在 n 月份向您收取一次费用,但从用户角度来看,它可能会让他们感到害怕。
我将如何在代码中实现此功能?
Zend Framework附带了一个组件(Zend_Acl
),可帮助您构建Access Control List。
您可以为每个订阅类型创建一个“角色”,每个角色对不同的资源具有不同的权限。
如果你知道MoSCOW method,那就有点类似了:
注意,大多数时候,有一种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,它将检查结束订阅并检查定期付款,具体取决于支付网关,它将回发生成的交易,或直接使用Web服务返回。如果付款失败或被拒绝,则您可以将该角色更改为免费帐户。
有几种方法可以做到这一点,这取决于您的应用和要求。
您可能希望存储每月订阅,或更新关联的帐户/订阅行。
答案 1 :(得分:0)
大多数支付网关都会为您管理您的订阅,并通过回发机制通知您的网站。即,
当订阅发生变更(即重新签发,取消,退款)时,您的支付网关会启动另一个回发以通知您新的事件。然后,您的应用程序将负责适当地更新用户状态。
这是非常一般的信息,尽管大致是大多数支付网关遵循的步骤。