php - 当数据存储在我们的网站上并且用户被带到 PayPal 并返回时的数据完整性?

标签 php paypal

我最近开发的一个网络应用程序是这样工作的:

  1. 用户选择订阅级别
  2. 用户在网站上输入各种自定义/个人数据并选择某些选项
  3. 用户确认他们的数据
  4. 系统将此数据存储在一个数组中,并设置了一个标志来指定数据不完整
  5. 用户被引导至 PayPal 进行支付
  6. PayPal 发出 IPN 请求,我们获取包含他们信息的行 ID 并填写其余字段,从而有效地完成流程。

现在,显然这种方法存在一些问题。

<强>1。这些行是在用户访问表单时创建的,并且可以快速加起来

我通过添加作为时间戳的 last_touched 列解决了这个问题,并且我经常删除超过 48 小时的记录(足够完成 PayPal 交易的时间)。

<强>2。由于上述原因,用户可能可以使用 PayPal 成功结账,但数据库中没有任何行

我使用 PayPal 自定义字段传输订阅包 ID 等基本信息,如果在我请求 IPN 时该行不存在,我将使用提供给 PayPal 的数据填写空白并来自自定义字段。

<强>3。用户输入的用户名理论上可以在他们结帐时使用

我通过检查用户名是否已被占用解决了这个问题,如果是,我会向其添加一个数字并不断递增该数字,直到我获得可用的用户名。


我不确定这是否是处理给定情况的最佳方式,或者是否有更好的选择(不涉及 PayPal Payments Pro)。在什么情况下,此类系统的潜在问题会超过 PayPal Payments Pro 的成本?

最佳答案

最好的办法是将所有帐户信息存储在您的数据库中,就好像用户在将它们发送到 PayPal 之前创建帐户一样。

因此,在允许他们继续结帐之前,请存储包括用户名在内的所有内容。这使您能够在他们转到 PayPal 之前验证他们的信息和用户名。然后你将它全部缓存 48 小时,以确保他们在结账时不会丢失用户名。您还可以利用 PHP 的 session 支持来跟踪用户是否在第二天碰巧回来购买。只要他们没有清除他们的 cookie/缓存并且您的 session 生命周期没有在 session 服务器端过期,他们应该能够从他们中断的地方继续 session 并直接转到 PayPal。

我仍然会将所有重要数据发送到 PayPal,以防万一用户以某种方式设法在 PayPal 的支付页面上停留一周,然后决定输入 CC 信息。

您还可以使用该系统“检查”用户是否已经开始付款。或许要求他们先输入电子邮件地址。将所有数据关联到该电子邮件和用户的 IP 地址($_SERVER['REMOTE_ADDR'])。如果您没有用户的 session 并发性,但他们输入了数据库中已有的电子邮件地址。检查他们的 IP(如果您想真正了解它,甚至可能还要检查浏览器),如果匹配,请告诉用户“看起来您之前已经开始结帐但从未完成。要继续吗?”让他们从中断的地方继续。显然不要以这种方式存储任何敏感信息,并且只将其缓存在用于 paypal 的临时表中,因此它最多只能持续 2 天。

这样,用户可以单击"is",他们不必再次选择订阅并再次进行所有选择/决定。如果用户说“不,我想重新开始”,那么只需删除临时表中的行并为他们创建一个新行。

关于php - 当数据存储在我们的网站上并且用户被带到 PayPal 并返回时的数据完整性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6920861/

相关文章:

php - Paypal IPN 脚本,feof 和 fgets 问题

ruby-on-rails - ActiveMerchant:将商品详细信息发送到 Paypal 网址

php - PHP/MySQL 消息系统

php - 如何使用 gd 库在图像中显示平方根符号

php - 为什么这个查询不起作用?

paypal - 快速结帐数字商品 : Proxy Error on sandbox. paypal.com/incontext

magento - 使用 Paypal 快速结帐完成付款后如何获取授权ID

php - 带有 order by rand 函数的 where 语句不起作用

php - 使用代码高亮显示代码

php - 持续时间后支付网关更改方法