0

想象以下场景。

我的网站用户想要为服务付费,她/他点击了付费链接。我在我的数据库中创建了一条记录,其中包含有关付款的相关详细信息,然后将详细信息发送到贝宝,即发票号、跟踪号、用户 ID 等。

当用户在paypal页面准备支付时,在他/她点击支付按钮之前,他/她的计算机崩溃并且必须重新启动计算机。

我现在有一个问题。我的数据库中有一条记录,paypal 没有收到有关付款的请求。这是一个问题,因为记录永远不会更新,因为贝宝永远不会向我发送 IPN 消息,告诉我支付是否已完成、失败、取消等,因为用户计算机在贝宝支付开始之前就崩溃了。

这意味着我不会从贝宝收到待处理的、失败的、被拒绝的消息,我可以用它来删除数据库中的记录或将记录设置为无效。

所以我的问题是,在我将记录标记为无用之前,我应该等待来自贝宝 ipn 的消息多长时间?1分钟?1小时?1天?1周?ETC?

我想知道在通过电子邮件向用户发送消息以重试之前我应该​​等待多长时间,并且在等待时间结束之前,用户将收到一条消息,告诉他/她正在处理付款。

我担心的是,如果上述情况没有发生,并且用户确实成功完成了付款,但 paypal 会花时间向我发送原始付款的 ipn 消息,即 24 小时,我有设置删除的东西10 分钟后记录,因此用户可以在 10 分钟后重试,用户将已付款,但不会记录在我的数据库中。或者更糟糕的是,如果我给他/她一条消息说支付失败,用户可能会支付不止一次,请再试一次。之后,贝宝完成了第一次尝试的付款,并且用户被收取了两次费用......

所以基本上,如果问题不清楚。我不是在寻找意见,我是在寻找来自 paypal 的文档,其中概述了在使付款无效之前等待的最长时间。贝宝有这样的时间尺度吗?因为我在文档中找不到它。

4

1 回答 1

2

绝不。

数据库中的每一行都应包含一列,指示事务是否完成。

您可以在待处理的交易框中或类似的地方列出未完成的交易,这表明用户没有完成交易,他应该在登录后重试。

将交易标记为无用对您没有多大用处,您只是想知道它们是否已完成,然后您想显示特定用户的所有待处理交易,然后可以选择完成或拒绝它,这应该是一种选择。

例如,如果我们查看投注网站,用户可以将投注添加到待处理投注的投注单中。用户可以选择实际下注或直接忽略它们。在这些情况下,一旦会话到期,赌注就会被标记为已撤销,您可以这样做(在失败后首次登录后会话到期时使赌注到期),或者您可以让待处理的交易永远存在,直到用户取消.

于 2013-09-09T13:47:13.813 回答