繁体   English   中英

使用数据库插入处理 PayPal IPN

[英]Handling PayPal IPN with Database Insertion

我希望使用 PayPal Pro 托管解决方案来处理我的网站的付款,我想要实现的是用户提交的数据不会插入到我的数据库中,直到 PayPal 确认我已收到他们的条目付款。

根据我的阅读,我了解 IPN 是实现这一目标的最佳方式。

所以目前,用户正在使用表单输入他们的数据,然后我正在向他们预览,如果他们批准他们的输入,我将插入数据库(使用 PHP/MySQL)。 目前的表单数据正在 SESSION 变量中传递并且工作正常。 文件流程为:

  1. 用户输入数据
  2. 用户会在已知页面上看到他们输入的数据,如果他们同意...
  3. 他们单击处理插入数据库的按钮。

但是我想做的是,如果他们在预览页面上批准他们的条目,当他们单击批准时,而不是在那里更新数据库,然后将他们发送到 PayPal 进行付款,并且只用他们的条目更新数据库如果付款被批准,像这样:

  1. 用户输入数据
  2. 用户会在已知页面上看到他们输入的数据,如果他们同意...
  3. 他们点击一个按钮,将他们带到付款页面
  4. 如果收到付款,他们的数据将被添加到数据库中。

有没有人有这种方法的经验,可以为我指明正确的方向,或者给我一些关于如何 go 的指导?

我已经查看了 PayPal 文档,但是因为我是新手,所以我需要以一种非常简单的方式解释事情。

我最初的想法只是将表单存储为 SESSION 变量,但我会通过将人们重定向到支付页面来丢失它。 我的另一个想法是创建一个与我已经拥有的数据库相同的数据库作为数据的临时保存阶段,然后如果 IPN 重新获得批准,则将数据移动到最终的托管数据库,但这似乎有点过度设计问题.

我希望有人能帮帮忙。

谢谢丹

在这种情况下,使用 PayPal IPN 似乎是最好的解决方案。

在我看来,使用临时表似乎是最好的解决方案。 它将遵循 KISS 规则。

请考虑使用以下场景:

  • 用户输入数据
  • 正在提交表单
  • 数据存储在数据库的临时表中
  • 在重定向到 PayPal 网站时,您可以添加自定义字段,当我们返回您的页面时,该字段将用于识别用户
  • 更新交易状态
  • 在您需要的表中插入数据

这似乎是最简单的解决方案。

我最初的想法只是将表单存储为 SESSION 变量,但我会通过将人们重定向到支付页面来丢失它。

不必要。 只要当前浏览器(会话)处于打开状态,会话通常可以持续存在。 “只要当前页面被查看”不同,前提是您正确设置了 session cookie。 如果你做得对,你可以让会话持续数天、数月、数年......

我的另一个想法是创建一个与我已经拥有的数据库相同的数据库作为数据的临时保存阶段,然后如果 IPN 重新获得批准,则将数据移动到最终的托管数据库,但这似乎有点过度设计问题.

不,这不是矫枉过正。

它处理事务未完成的情况。 发生这种情况的原因有很多,例如您的用户去吃午饭并忘记在 session 超时(默认为 20 分钟左右)之前完成该过程,或者 Paypal 端出现问题(不太可能,但您必须假设它可能会发生)或存在一般网络问题(isp 在交易过程中出现故障),或者您的移动用户超出网络覆盖范围。 任何事情都可能干扰交易,您需要有一个备用 position。 否则它会变得烦人(因为您不知道什么中断了事务以及在什么时候中断)以及您必须重新开始的用户。

拥有一个临时数据库可以让您监控未完成的事务,并在必要时提示用户在给定时间段内未完成事务。

One matter to recognize regarding IPN is that it is an 'Asynchronous' response from PayPal - it is not in the user's browser session, so session variables will not work if you are relying exclusively on IPN (other than if you receive the IPN response and然后将其与用户的会话匹配)。 PayPal 还提供 PDT(支付数据传输),这是一种“会话中”响应,可以将用户返回到您的站点。

我不会完全依赖 IPN 进行付款通知(请参阅我在以下 SO 主题中的回答) 可以仅依赖 Paypal IPN 来记录购买吗? .

我们的系统使用 IPN 和 PDT 的组合,将“购物车”数据存储在数据库中(作为您的“临时”记录),直到 PDT 或 IPN 通知完成付款 - 以先到者为准(您的“永久”数据库插入)并删除“临时”记录(因此后续 IPN 或 PDT 不会触发重复事务)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM