3

场景是 Web 应用程序的用户可以购买数字商品。Web 应用程序将使用Paypal Instant Payment Notification

IPN 协议由三个步骤组成:

  1. PayPal 向您的 IPN 侦听器发送一条消息,通知您该事件

  2. 您的听众将完整的未更改消息发送回 PayPal;消息必须以相同的顺序包含相同的字段,并以与原始消息相同的方式进行编码

  3. PayPal 会返回一个单词,如果消息来自 PayPal,则该单词已验证,如果与最初发送的消息有任何差异,则该单词为无效。

假设是VERIFIED,如果用户在他/她的贝宝中使用其他电子邮件地址,我怎么知道谁完成了交易或购买了商品(网络应用程序的用户)?我已经存储了用户的电子邮件地址,session但如果他/她有不同的贝宝电子邮件怎么办?Paypal 电子邮件包含在 IPN 消息中。

对于其他可能没有用的细节,该应用程序是用 Google-App-Engine 中的 Struts2 编写的。

4

2 回答 2

1

您需要一种方法来将返回的 IPN 数据与用户关联起来。通过要求他们提供他们的贝宝电子邮件或使用 IPN 服务中的用户名/密码生成工具。这是一种有点不雅但实用的方法:

  • 当 IPN 离线时,持久保存 paypal 生成的用户名/密码和 payer_id(可能在数据存储中)。
  • 如果您无法通过电子邮件进行关联,那么当用户返回您的站点时,请求他们输入一次从 paypal 站点生成的用户名/密码(只是为了关联)。
  • 查找用户名/密码,然后将他们的用户 ID 从 UserService 关联回 payerid。

使用 IPN 的原因是订阅服务,因为您可以在订阅终止、取消或付款时收到 IPN 消息(对于停止付款的帐户)。

要考虑的最重要的事情是如何将您网站的用户与用于支付他们正在使用的服务的 payer_id(在某些情况下甚至是 payer_ids)相关联。

另一方面,我不会使用会话来存储 IPN 回调的信息,这些实际上有时会花费很长时间(例如当 x.com 会议开始并且每个人都在敲击贝宝时)。

如果您有一个正在运行的应用程序或更好的外观描述,我可能会提出更优雅的建议。让我知道这是否有帮助。

于 2012-07-20T21:50:50.080 回答
0

为什么不使用 PayPal 的快速结账?这样您就可以与 server2server 协商一个令牌,然后您可以在用户返回时使用 PayPal 检查该令牌的结果。如果用户直接从您的应用程序中购买,则更容易实现。而且我认为它比您使用的方法更强大(我以前从未听说过:D)

于 2012-07-16T17:05:58.030 回答