Rails和ActiveMerchant实现循环计费:最佳实践,注意事项,陷阱?

33
我们正在准备发布一款大型Web应用程序,该应用程序已经开发了一年。我们即将开始整合ActiveMerchant以处理服务的定期订阅费用。
针对我们的要求(以下列出),我正在寻找任何最佳实践方面的建议,以及有关常见陷阱或应特别考虑的特定问题的任何其他提示。我们将使用PaymentExpress作为支付网关,因为它是少数支持具有定期计费并且没有任何特殊条件限制美国以外公司的支持网关之一。该应用程序的背后业务总部位于英国。
应用程序的用户可以使用子域名创建帐户,他们可以在其中访问和自定义应用程序和数据。以下是可能对计费方式产生影响的要求/功能:
  • 所有用户都享有30天试用期
  • 有不同的计划,包括免费版
  • 更高价格的计划有更大的数据使用限制(例如用户、项目等)
  • 计费周期将是每月一次,从试用期后开始计算
  • 将提供折扣/优惠码以获得年度计划等的正常价格的百分比折扣。
  • 随着添加功能,计划定价将会改变
我能预见到的特定障碍包括以下内容:
  • 当他们违反较低级别计划的限制时,如何处理降级
  • 信用卡过期或付款未成功时的行为(可能强制进入只读模式)
  • 当计划定价更改时,我们希望对现有用户尊重以前的价格一段时间(例如6个月),然后开始收取更高的费用。如果计划价格下降,它将立即生效。
其他有用的建议包括应用程序流程方面的任何内容。用户应如何呈现计费表单?什么时候需要信用卡信息?发票应如何发送、存储和访问?

我需要说明的是,我们计划在很大程度上基于SaaSy的代码库。SaaSy被设计成一个独立的Rails应用程序,处理所有注册和账户管理方面的事情。然而,这对我们来说不起作用,因为我们从一开始就没有计划这样做,而且要使我们的应用程序像那样工作将是一个繁琐的过程。因此,我们将从SaaSy中提取代码和思想,并将它们合并到我们的应用程序中,这是一项相对不那么繁琐的任务。

4个回答

8

我想补充一点:请记住,您无需使用内置于网关中的重复计费功能。通常这些系统是遗留问题,非常难以处理,我们在Rails世界里变得很容易满足。

只需将其用于一个目的(为信用卡收费,可能还要存储符合PCI合规性的信用卡),您就可以获得更多的灵活性。然后,在您的Rails应用程序中使用cron作业、付款日期字段以及每个人支付的金额(以防他们使用优惠券)等自己编写定期计费。

一个小例子:有时人们会在月底取消订阅。他们想确保在下次付款前不要忘记取消。我见过的大多数网关重复计费都会立即终止账户(或发送消息指示此事)。实际上,用户已经支付到月底,应该再给予两周的访问权限。如果您已经在Rails中自己编写了定期计费,那么您可以这样做,但如果您使用网关重复计费,则不能。这只是一个小例子。


5

RailsKits有一个软件即服务工具包,可以满足您的需求。它内置了免费试用、升级、降级、计划限制等支持,并支持PaymentExpress(以及其他一些)。

我已经为自己的项目研究过这个工具包,但我还没有购买,所以不能保证其质量。不过,我看到了一些博客文章赞扬这个工具包。

虽然与您自己实现所有功能相比,RailsKit相对便宜,但也有一些开源版本旨在实现相同的功能。 我记得其中之一叫Freemium

编辑:我忘记提到Ryan Bates在他最近的Railscast中说,他的下一集或两集将涉及循环计费,所以请注意。他通常每周做一个剧集,自12月22日以来他做了五个剧集,都涵盖了处理不同类型付款的内容。


是的,我一直在关注Ryan的屏幕录像和RailsKit。问题在于RailsKit被设计为应用程序的起点,而不是现有应用程序的补充。我的问题不是技术问题,而是架构/设计最佳实践问题。谢谢! - Bo Jeanes
顺便说一句,很多人会在现有的应用程序中使用SaaS Rails Kit...他们只需复制模型、控制器等即可。因此,您不必从头开始使用它。 - Benjamin Curtis

4

我正在建立一个基于订阅的网站,以下是我们目前的要求。这些要求可能有助于您了解最佳实践:

  • 用户将能够选择其中一个订阅计划。
  • 用户需要输入他们的信用卡详细信息来注册他们选择的计划。
  • 必须接受所有主要的信用和借记卡,包括Maestro和美国运通卡。
  • 每个计划都将有30天的免费试用期,因此用户的信用卡应该只在30天后才会被收取。但是,在注册时应检查信用卡的有效性。
  • 用户的信用卡即将被收取款项时,将在几天前通过电子邮件通知他们,除非他们取消账户。如果他们在30天免费试用期内取消了账户,则不应收取他们的信用卡费用。
  • 任何免费试用期之后,用户将预付使用系统的费用。
  • 用户将自动按其选择的计划每月收费。每个月,用户将在几天前收到一封电子邮件通知他们即将收费。一旦付款完成,用户将收到一封显示已收到付款的发票电子邮件。
  • 用户可以随时升级或降级他们的账户。当用户升级/降级时,他们下一个订阅费用将按照新费率计算。用户只能将其帐户降级到可以处理其数据的计划。例如,如果他们目前有10个活动项目,则不能将其帐户降级到基础计划,因为基础计划仅允许5个项目。他们必须删除或存档5个项目,然后才能将其降级到基础计划。
  • 用户将能够登录其帐户并更改或更新其信用卡详细信息。
  • 用户可以随时取消他们的帐户。用户取消帐户后不会再有订阅费用。但是,用户将不会退还他们已经支付的部分月份的费用。
  • 支付系统的所有部分必须100%符合PCI DSS标准,包括任何第三方系统。
  • 支付系统必须支持自动通知和重试失败的订阅续订。
  • 支付系统必须支持具有到期日期的折扣券。
  • 信用卡详细信息不得由我们的服务器处理或存储
  • 它们应始终由我们的第三方付款处理合作伙伴处理/存储。我们不想对保护这些详细信息并遵守法律规定负责。
  • 用户将能够登录其帐户并查看完整的账单历史记录,包括付款日期和金额。我们还需要能够登录系统以查看客户付款计划和付款历史记录。这对于客户服务至关重要。

我们也一直在关注http://chargify.com/,它似乎可以节省大量编码时间。


4

我已经看了这本书,但我想要更多的内容。 - Bo Jeanes
这本书提供了整个过程的很好概述,并包含许多代码片段。作者还介绍了如何创建单元测试。书中还附有一个样例应用程序:moneyhats。非常实惠,内容丰富,物超所值。 - Philippe Monnet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接