如果在前端付款时数据库出错怎么办

Posted

技术标签:

【中文标题】如果在前端付款时数据库出错怎么办【英文标题】:what if database goes to error when payment happened on front-side 【发布时间】:2019-12-10 22:35:03 【问题描述】:

我正在通过重定向到 PayPal 进行 PayPal 付款。这意味着付款将在用户的浏览器中进行,并在前端为我提供付款的详细信息。付款发生后,我需要存储详细信息,以便以后使用,我会知道用户已经付款。一旦在前端进行付款,我就会对我的服务器进行 API 调用以存储付款的详细信息。

问题:如果付款发生在前端,然后在对我的服务器进行 api 调用时,它会出错。我留下了用户没有为产品付费的场景,即使他付费了。在这种情况下我该怎么办?

【问题讨论】:

您使用 IPN(即时付款通知)吗?如果没有,为什么不呢? 据我了解,我应该在我的 api 上设置即时付款通知。它将监听用户支付的事件。如果是这样,如果用户付费了,paypal 会将表单发送给我的听众,而我的 api 已离线。这和我在用户在前端付费后做 api 调用是一样的。 IPN 通知如果没有被接收端点确认为成功,将自动重新发送 【参考方案1】:

实现IPN (Instant Payment Notification)。

来自documentation:

PDT 有一个主要弱点:它只发送一次订单确认。因此,当 PDT 发送确认时,您的站点必须正在运行;否则,它永远不会收到消息。

相比之下,使用 IPN,订单确认的交付实际上是 保证,因为 IPN 会重新发送确认,直到您的站点 确认收到。 因此,PayPal 建议您 实施 IPN 而不是 PDT。

[...]

注意:如果您的网站必须立即收到付款通知,您可以同时实施 IPN 和 PDT。但是,如果您这样做,您的网站将 每次销售收到两个订单确认。因此,您必须 小心地只对一个副本采取行动(例如,运送一个产品) 给出确认信息。


除了 IPN,您还可以实现 Web Hooks,它基本上是 IPN 的改版变体,它使用更现代的技术和更精简的界面。另见When to use IPN and when WebHooks in PayPal as a notification mechanism?

【讨论】:

酷。现在我懂了。但有点模糊的是我应该在 php 中设置事件侦听器对吗?让它听贝宝? @NikaKurashvili 您的评论不清楚。深入阅读文档developer.paypal.com/docs/classic/products/… 以了解其工作原理。您可以使用任何在服务器上工作的编程语言来实现 IPN 最后一个问题,如果你不介意的话。所以用户进行了交易,贝宝把它扔到我的网址上。我如何告诉贝宝不要在 4 天内向我发送相同的交易?我查看了代码,但找不到。 @NikaKurashvili 请参阅developer.paypal.com/docs/classic/ipn/integration-guide/… 上的“PN 侦听器请求-响应流程” - 您返回状态代码 200,然后调用 PayPal 的 API 以确认收到。对于大多数常见的服务器编程环境,您可以使用一些库来实现 IPN 交互。 嗨@NineBerry 我一直在阅读并意识到这些东西。 IPN 很棒,因为它可以在您确认之前发送相同的交易。网络钩子呢?如果我的服务器在发送信息时关闭,或者它发送了事件,但保存到我的数据库失败了怎么办?在任何这些情况下,我都没有交易。你能谈谈我在这些情况下能做些什么吗?

以上是关于如果在前端付款时数据库出错怎么办的主要内容,如果未能解决你的问题,请参考以下文章

在 django python 的 pinax-stripe 模块中收取一次性付款时出错

怎么解决前端传的时间为null后端解析爆错

WordPress建立数据库连接时出错怎么办

通过 node.js 中的 Paypal Adaptive Payments API 发送隐式付款时出错

SeTransactionSyncTask:检索帐户时出错 java.lang.IllegalStateException:没有当前的触碰付款帐户

在Prestashop API上创建订单:模块名称出错