如何将支付处理与基于GWT / GAE的应用程序集成?

时间:2011-05-23 03:46:59

标签: java google-app-engine gwt payment-processing

我有一个基于GWT的应用程序,它部署在Google App Engine for Java上。该应用使用基于Google帐户的身份验证。我在GAE数据存储区中维护基本用户信息,例如电子邮件ID(来自Google帐户),上次登录日期等。访问该网站是免费的。任何人都可以使用他/她的Google帐户使用它。

展望未来,我想让它成为付费服务。但是,我没有设置和运营电子商务网站的经验。所以我的问题可能有点模糊。我需要一些关于如何去做的指导。

以下是我的一些要求(但我对确切的实施方式很灵活):

  1. 提供2种不同类型的帐户 - 免费和高级。
  2. 我不想在我的系统中维护任何与信用卡相关的信息。我也不想维护精心设计的用户数据库。
  3. 当用户首次登录时,他/她会自动获得一个免费帐户。
  4. 用户必须“升级”到高级帐户才能访问该应用程序的所有功能。
  5. 用户必须支付一次性升级费用。
  6. 鉴于此信息,我有以下问题:

    1. GAE是否符合我的要求?
    2. 哪种支付网关(Paypal,Google Checkout等)最适合我的要求?
    3. 我的应用和支付网关之间需要什么级别的集成?我想在我的应用程序中保留最少的用户信息。我想专注于我的应用程序开发,并希望尽可能少花在用户管理上。
    4. 我是否需要实施自定义身份验证机制或继续使用Google帐户或其他基于OpenID的身份验证?
    5. 我需要考虑哪些其他事项?
    6. 我会很感激你的帮助。感谢。

3 个答案:

答案 0 :(得分:3)

一般来说,绝对没有理由不能保留当前的应用程序及其帐户管理。您可以使用帐户类型字段扩展您的用户帐户,该字段存储用户是否为付费客户。如果您需要发送发票,还要存储用户联系信息(Paypal会将此信息与付款收据一起发送给您)

就具体的支付提供商而言。我只有实际的PayPal实践经验。我不会再次使用它们有几个原因:

  • 他们的API没有很好的文档记录,有些文档是错误的(或过时的)。
  • 如果你是一个小玩家,支持主要是通过论坛。所以基本上这意味着你自己。
  • 有些API存在严重漏洞和功能缺失(例如,您可以创建订阅,但如果您使用的是标准支付API,则不能取消订阅。
  • 在美国和一些幸运国家之外,高级API不可用。所以你坚持实现一个IPN监听器servlet,而更需要在需要时提取信息。

我发现的所有现有PayPal Java库都使用了大多数用户无法使用的Pro功能。因为我无法在其他任何地方找到它,我创建并开源了我自己的IPN servlet,但它还没有完成。如果有需求,我愿意改进它,请告诉我。

此IPN servlet所做的是收听传入的PayPal消息。例如,如果用户订阅,您将收到一条消息。如果用户需要付费(例如按月计费),您将收到一条消息。如果用户取消订阅,您将收到一条消息。这些消息允许您维护用户的帐户类型。

如果我再次这样做,我可能会使用更高级和更高级别的订阅API,例如Spreedly。我听说过关于API的一些好东西,它们非常实惠。我没有Spreedly的实际经验,所以这不是认可。

答案 1 :(得分:1)

GAE支持这种应用程序,没有任何特殊问题;如果你选择的语言是Java,我会用toolkit选择Paypal,因为GAE上的Google Checkout Java API does not seem to work very well

您需要授权机制,以根据用户的权限检查您的用户可以执行的操作。
基本上你需要以下东西:

  1. 标记membership状态,指示用户是否为Premium;这应该在付款通知后设置
  2. 一个授权系统,用于检查是否读取membership标志值 ,当前用户可以使用给定的Web Handler
  3. 查看this精彩的Spring Security教程;它包括:

    • 使用Google帐户进行身份验证。
    • 根据分配给用户的角色设置访问控制限制。

答案 2 :(得分:0)

如果您需要基于订阅的结算,包括免费试用,优惠券,计划升级/降级,催款管理等等,请查看Recurly

您可以选择让客户在Recurly托管的网页上维护其结算信息,或使用他们的透明POST API从您的GAE应用中的网页向其服务器发布结算信息 - 这两种解决方案都避免传递敏感信用通过您的服务器卡数据,这使得PCI合规性变得容易。

Java API尚未完全开发,但使用JAXB可以轻松构建以满足您的特定需求。我没有将我的代码包装到开源项目中,但愿意分享片段。