好的,大约一年前我写了一个网络应用程序,帮助组织我爸爸公司的约会。他现在“没有它就无法开展业务”。我已经决定要从中构建SAAS订阅模型并向公众开放。
它目前建立在codeigniter和php上,我认为它不适合SAAS版本。我计划在laravel 4中从头开始重建它,并使用stripe作为支付网关。
我关心的是如何最好地处理多个客户端的数据库/应用程序结构。目前,它只服务于一个企业,并且非常抽象,并且特定于我父亲公司的需求。我需要它能够处理不同的数据,具体取决于使用它的业务。
我已经研究过多租户,但我不确定这是否正确。我认为'gmail'风格的方法会更好。一个应用程序/域,登录后用户将看到他们自定义的仪表板,只看到他们的数据。
在我遇到编码之前,我需要弄清楚如何最好地处理一个数据库上的多个“帐户”。我不想为每个用户创建一个表,也不想为每个用户创建一个数据库。
我想我的问题是,任何人都可以指出我在Laravel中如何最好地处理每月付款订阅的正确方向吗?与我正在进行的代码并不是那么多,而是我需要构建什么来处理每月向客户收费并在计费失败时拒绝他们访问等。
由于
答案 0 :(得分:37)
你有很多阅读和大量的工作!
首先,让我们完全忽略现在的计费方面 - 在一天结束时,该部分应用程序真的相当简单。从37signals Rework(第93页和第94页)中取出页面,然后在开始实施之前启动30天免费试用产品(到那时您应该知道如何实施)。
其次,为什么你认为“gmail”不使用多租户,URI结构不提供底层数据库结构。我非常有信心他们没有为每个客户克隆数据库架构。因此,您可能已经回答了自己的问题 - 您希望实施多租户。
你想要抽象你的数据库(和应用程序架构),老实说没有比Taylor Otwell(Laravel的创建者)书Laravel: From Apprentice To Artisan更好的资源来帮助你做到这一点。他的书不适合初学者,当你读完它时,你应该能够自己回答这个问题。
您不会为每个用户创建表或数据库,您甚至不会为每个组织创建一个表或数据库。相反,您将在代码中创建抽象数据库结构,这将把您的用户数据从数据库中拉出来。
考虑检查访问组织的权限,作为另一层用户身份验证。在每个请求中,您将检查该用户是否可以访问特定组织。您可能还会检查以确保该组织仍处于活动状态(它是否已过期,因为它们没有付费?)这将在每次请求时再次发生,并且可能会filter within laravel。
这确实导致了开发SaaS应用程序的下一个非常重要的因素。
我不了解您,但我是偏执狂,如果我不确定用户编号4506
无法看到组织的数据,我晚上睡不好他不属于。确保这一点的唯一非常好的方法是通过单元测试,如果你还没有,我强烈建议学习。
在Laravel 4中执行此操作的最佳方法是阅读Jeffrey Way的书Laravel Testing Decoded。这本书非常先进,但如果你能很好地掌握基础知识,那么这本书仍然很容易理解。
最后但并非最不重要的是,最重要的是参与社区 - 我建议这样做的最简单方法就是#laravel IRC channel(freenode)闲置。提出一些问题,或许回答一些问题,渠道中的每个人都非常友善和敏感。
你肯定是在冒险,不要害怕提问和犯错误。祝你好运。
答案 1 :(得分:3)
作为一个粗略的概述,我将有一个客户表和一个订阅表。需要存储的任何其他数据(如联系人或约会)可以使用外键与客户端表关联。
在laravel中,您可以使用ORM获取当前登录的客户端,然后通过关系获取约会和属于他们的联系人。
在cartalyst.com上有一些有用的laravel工具,包括用户身份的哨兵和哨兵社交,以及将用户帐户与facebook / google / twitter等集成。
Stripe将允许您配置定期付款,并会在每次付款尝试时通过网络挂钩通知您。您可以在支付表中记录这些,并将它们与用户/客户关联。您可以使用它来跟踪谁已付款,以及最近如何。
另外,请记住,您可能不希望在付款失败时立即取消帐户。
条纹将重新尝试,可能是您的最佳回复是在迟到两三天后,或者您收到无效的卡通知,与客户取得联系并提示他们更新其付款详细信息。
它也可能是一个检查他们上次登录时间的机会。 如果超过一个月前,您可以免费获得一个月的积分,并提醒他们您的应用可以为他们做多少。 通过这样做,您可以让人们继续使用(并支付)他们忘记订阅的东西。