【问题标题】:How to integrate payment processing with GWT / GAE based app?如何将支付处理与基于 GWT / GAE 的应用程序集成?
【发布时间】:2011-08-30 20:40:00
【问题描述】:

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

今后,我希望将其设为付费服务。但是,我对建立和运营电子商务网站的经验为零。所以我的问题可能有点模糊。我需要一些关于如何去做的指导。

以下是我的一些要求(但我在具体实施上很灵活):

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

鉴于此信息,我有以下问题:

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

我会很感激这方面的任何帮助。谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    就特定的支付提供商而言。我只有 PayPal 的实际动手经验。我不会再使用它们有几个原因:

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

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

    这个 IPN servlet 的作用是监听传入的 PayPal 消息。例如,如果用户订阅,您将收到一条消息。如果向用户收费(例如按月计费),您会收到一条消息。如果用户取消订阅,您会收到一条消息。这些消息允许您维护用户的帐户类型。

    如果我再做一次,我可能会使用更高级和更高级别的订阅 API,例如 Spreedly。我听说过一些关于 API 的好消息,而且价格相当实惠。我没有使用 Spreedly 的实际经验,所以这不是一种认可。

    【讨论】:

    • @Peter - 非常感谢您对我在您博客上的评论的跟进。我浏览了您博客​​上所有与 Paypal 相关的帖子,发现它们很有用。我还浏览了 PaypalX GAE Toolkit 并找到了相关的示例。但我的基本疑问 - 为什么使用自适应支付 API 而非带有重定向的标准按钮 - 仍然存在。请参阅我在上一个答案下方的评论(上图)。如果有机会,请分享您的想法。无论哪种方式,我认为我都会使用您的 IPN Servlet。因此,您所做的任何改进都将受到高度赞赏。谢谢。
    • 我对各种 API 做了一些初步研究,但由于我只能使用标准的 API,所以我没有完全研究过其他任何 API。自适应支付 API 是一个完整的网络服务。如果你使用那个,就不需要重定向或回调 IPN servlet。它将使您的代码更简洁、更容易。据我所知,自适应支付也是最现代的 PayPal API。请记住,这可能会花费您一点。如果您想要标准 API,但需要更多的余地,请查看 Express Checkout API。See NVP library
    • 我还在熟悉 Paypal 术语。 1. 你所说的“标准”是什么意思? 2. 为什么我不能使用网站支付标准按钮?这就是你说的标准吗? 3. 关于 Adaptive Payments API,您看过 Paypalx GAE Toolkit 提供的示例吗?他们正在使用重定向和 IPN Servlet click here。我觉得“支付”API 应该适合我。 4. 使用自适应支付是否会产生费用?我没有看到任何这方面的信息。你能澄清一下吗?我将阅读有关 Express Checkout 和 NVP 库的更多信息。谢谢。
    • 1.有一个“专业”和一个“标准”支付 API。 Pro 提供了更丰富的 API。 2. 您可以使用按钮,它们只是指向 PayPal 服务器上的支付屏幕。 3. 我没有调查 PayPal X 工具包,因为我在比利时无法使用 Adaptive Payments API。我相信您可以将 IPN servlet 与任何支付表单或 API 结合使用。基本上,PayPal 会将状态更新发送到 servlet。 4. 再说一次,我没有进一步研究这个,因为我不能使用它,但我相信你需要一个更昂贵的帐户类型才能使用自适应付款
    • 现在情况越来越清楚了。我找到了this thread,这表明使用自适应 API 没有特殊费用。在这一点上,我倾向于使用一个简单的按钮,但如果由于某种原因这不起作用,那么我将尝试使用自适应 API。在这两种情况下,我可能都会使用您的 IPN Servlet。现在我有2个问题。 1、你的IPN Servlet需要什么样的更新(你说没完成)? 2. 如果我使用按钮,我可以将 user_id 作为“自定义”参数传递并在 IPN 中取回以识别系统中的用户吗?谢谢。
    【解决方案2】:

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

    您需要一个授权机制来检查您的用户根据他们的权限可以做什么。
    基本上你需要以下东西:

    1. 标志membership 状态,指示用户是否为高级用户;这应该在付款通知之后设置
    2. 一个授权系统检查是否读取membership标志值 , 给定的 Web Handler 可以被当前用户消费

    看看this很棒的Spring Security教程;它涵盖:

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

    【讨论】:

    • 您好 systempuntoout,感谢您的回复。它使我向前迈出了一步。我已经看过 Spring Security 教程,但我不确定它是否适合我只有 2 个角色的简单应用程序(不包括应用程序引擎自动提供的 ADMIN 角色)。在这一点上,我有 2 个问题。 1. 如果我的应用程序非常简单,我可以不以编程方式(开始)管理授权吗?如果我遗漏了什么,请告诉我。我将在单独的评论中发布第二个问题。
    • 2.我需要更详细地研究 Paypal X API,但在这一点上,我无法弄清楚 Google Accounts Id(电子邮件 Id)如何与用户的 Paypal Id 相关联。我的理解是 - 一个新用户登录到我的应用程序。用户单击应用程序中的“立即升级”链接。此链接将用户带到用户付款的 Paypal。 Paypal 将成功付款的通知发送回我的应用程序。该应用程序将用户角色更新为 PREMIUM。如果这是它的工作方式,那么我的应用程序向 Paypal 发出的请求以及 Paypal 的响应如何识别用户?谢谢。
    • 1.你可以编写一个装饰器或一个简单的方法来检查成员标志 2。你应该使用 user_id 来识别用户而不是电子邮件(可能会改变)
    • 在 #2 上,我可以使用 user_id 来识别用户,但我的疑问仍然存在。让我再解释一下。假设用户 1 点击“立即升级”,转到 Paypal,使用电子邮件地址 xyz@hotmail.com 进行付款,我从 Paypal 获得交易详情,告诉电子邮件 ID 为 xyz@hotmail.com 的人已完成付款。现在我怎么知道电子邮件地址 xyz@hotmail.com 属于 user1?用户可能没有在我的应用程序中预先注册他/她的 Paypal 用户 ID。谢谢。
    • @DFB 你研究过 Paypal X API 吗?您确定可以将额外的 user_ID 参数传递给 Paypal 调用吗?通过这种方式,您可以将回调关联到特定用户。
    【解决方案3】:

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

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

    Java API 尚未完全开发,但使用 JAXB 很容易根据您的特定要求进行构建。我没有将我的代码打包到开源项目中,但愿意分享 sn-ps。

    【讨论】:

    • 您好,Rori,目前我还没有计划使其成为基于订阅的服务。这是我第一次尝试做这样的事情。所以,我把它作为一个试点项目。我不想注册自带订阅费的第三方服务。但我感谢你的帮助。对于我未来的项目,我会记住你的建议。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 2021-07-24
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多