场景是网络应用的用户可以购买数字元素。 Web 应用程序将使用 Paypal Instant Payment Notification .
IPN 协议(protocol)包括三个步骤:
PayPal 向您的 IPN 监听器发送一条消息,通知您该事件
您的监听器将完整的未更改消息发送回 PayPal;消息必须包含相同顺序的相同字段,并以与原始消息相同的方式进行编码
PayPal 发回一个单词,如果消息源自 PayPal,则为已验证,如果与最初发送的内容有任何差异,则为无效。
假设它是 VERIFIED
,如果用户在他/她的 paypal 中使用其他电子邮件地址,我怎么知道谁完成了交易或购买了该项目(网络应用程序的用户)?我已将用户的电子邮件地址存储在 session
中,但如果他/她有不同的 paypal 电子邮件怎么办? Paypal 电子邮件包含在 IPN 消息中。
对于其他细节,可能没有用,该应用程序是在 Google-App-Engine 中用 Struts2 编写的。
最佳答案
您需要一种方法将返回的 IPN 数据与用户相关联。通过要求他们提供他们的 Paypal 电子邮件或使用 IPN 服务中的用户名/密码生成工具。这是一个有点不优雅但实用的方法:
- 当 IPN 离线时,保留 Paypal 生成的用户名/密码和 payer_id(可能在数据存储中)。
- 如果您无法通过电子邮件关联,则当用户返回您的网站时,请求他们输入从 paypal 网站生成的用户名/密码一次(只是为了关联)。
- 查找用户名/密码,然后将他们的用户 ID 从 UserService 关联回付款人 ID。
使用 IPN 的原因是订阅服务,因为当订阅终止、取消或收到付款时(对于停止付款的帐户),您可以收到 IPN 消息。
要考虑的最重要的事情是如何将您网站的用户与用于支付他们正在使用的服务的 payer_id(在某些情况下甚至是 payer_id)相关联。
另一方面,我不会使用 session 来存储 IPN 回调的信息,这些实际上有时会花费很长时间(比如 x.com session 开始并且每个人都在敲打 paypal 时)。
如果您有正在运行的应用程序或对外观的更好描述,我可能会提出更优雅的建议。让我知道这是否有帮助。
关于google-app-engine - Web 应用程序中的 Paypal 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11467613/