想象一下以下情况。
我的网站用户想要支付服务费用,他/她点击付费链接。我在我的数据库中创建了一条记录,其中包含有关付款的详细信息,然后将详细信息发送到PayPal,即发票号,跟踪号,用户ID等。
当用户在paypal页面上准备付款时,在他/她点击付款按钮之前,他/她的计算机崩溃并且必须重新启动计算机。
我现在有一个问题。我的数据库中有记录,paypal没有收到有关付款的请求。这是一个问题,因为记录永远不会更新,因为PayPal永远不会向我发送IPN消息,告诉我付款是否已完成,失败,取消等,因为用户计算机崩溃之前,PayPal付款可能会在PayPal侧启动。< / p>
这意味着我不会收到来自paypal的待处理,失败,拒绝的消息,我可以使用该消息删除或在数据库中将记录设置为无效。
所以我的问题是,在我将记录标记为无用之前,我应该等多久才能从paypal的ipn发送消息? 1分钟? 1小时? 1天? 1周?等?
我想知道在通过电子邮件向用户发送消息再次尝试之前我应该等多久,在等待时间结束之前,用户将收到一条消息,告诉他/她正在处理付款。< / p>
我担心的是,如果上述情况没有发生,并且用户确实成功完成了付款,但是paypal花时间向我发送原始付款的ipn消息,即24小时,我有东西设置为在10分钟后删除记录,以便用户可以在10分钟后再次尝试,用户将付费,但不会记录在我的数据库中。或者更糟糕的是,如果我给他/她一条说付款失败的消息,用户最终可能不止一次付款,请再试一次。在此之后,paypal完成了第一次尝试的付款,并且用户被收取两次费用......
所以基本上,如果问题不清楚。我不是在寻找意见,我正在寻找来自paypal的文档,其中概述了在使付款无效之前等待的最长时间。 paypal是否概述了这样的时间尺度?因为我在文档中找不到它。
答案 0 :(得分:2)
从不。
数据库中的每一行都应包含一个列,指示事务是否已完成。
您可以在待处理的交易框中列出未完成的交易或类似的事务,这表明用户没有完成交易,他应该在登录后再试一次。
将交易标记为无用对您没有太大作用,您只想知道它们是否已完成,然后您想要显示特定用户的所有待处理交易,然后可以选择完成或拒绝它应该是一种选择。
例如,如果我们查看投注网站,那么用户可以将投注添加到投注单中,这些投注单是未决的投注。用户可以选择实际下注或简单地忽略它们。在这些情况下,一旦会话到期,投注就会被标记为已恢复,您可以这样做(一旦会话在失败后首次登录后到期,就会过期)或者您可以使待处理的交易永久存在,直到用户取消