Paypal IPN延迟 - 是睡眠站点解决方案

时间:2012-05-23 08:00:31

标签: c# asp.net paypal paypal-ipn

我在网站上使用付费朋友订阅 当用户付费时,我等待IPN消息将其保存在数据库中 此外,付款用户从付款方重定向到我的网站,我必须检查IPN消息是否存储在数据库中,并在此基础上,我做了一些其他的东西indabase。
问题是当用户被重定向到站点时有时会发生IPN消息,但是我不能做我想要的事情。
所以我想以某种方式停止应用三秒钟,但我从未做过这样的事情,我不知道这样做是否好。

IPN消息延迟几秒是否正常?

如果我说Thread.Sleep(3000)是否有可能以这种方式在Web应用程序中显示动画加载器?

2 个答案:

答案 0 :(得分:1)

您可以查看paypal ipn overview,您会发现需要采用不同的方法。

“的IPN消息服务不会假设所有消息将被监听及时被接收。由于互联网是不是100%可靠,消息可能丢失或延迟。为了处理发送和接收延迟的可能性或者失败,IPN消息服务实现重试机制,该机制以不同的间隔重新发送消息,直到您确认消息已成功接收为止。消息可能在原始消息之后最多四天内重新发送。

“的IPN消息服务不应该被视为一个实时服务。允许完成之前,你的结账流程不应该的IPN消息等待。如果您的网站等待的IPN消息,结账处理可能会导致延迟由于重试的可能性,系统负载变得更加复杂。“

一种解决方案是在付款到达之前不启用内容,但是如您所见,最多可能需要四天。

其他解决方案是,当您通过paypal API创建订阅时,您会收到包含订阅信息的回复。 (例如,如果您使用定期付款,则在create_recurring付款资料中的回复)。在此之后,您可以接受他将支付并启用内容的消息。 (当然,如果用户需要太长时间,用户可以在付款前取消订阅)

答案 1 :(得分:0)

  

如果我说Thread.Sleep(3000)可以显示动画加载器   在Web应用程序中以这种方式?

不,你将完全坚持你的应用程序而不实现任何目标。所以解决方案可能是使用计时器。

所以试试:

Timer timer = new Timer();
timer.Interval = 3000;
timer.Tick += new EventHandler(timer_Tick);

//diplay the animated loader and start the timer 

timer.Enabled = true;

void timer_Tick(object sender, EventArgs e)
{
     //Elapsed 3000 milliseconds so you have to stop the timer
     timer.Enabled = false;

     //Now redirect the user
}