2012-05-23 29 views
0

我在网站上使用pay pal订阅。
当用户付钱时,我等待IPN消息将其保存在数据库中。
此外,付款后用户从paypal重定向到我的网站,我必须检查IPN邮件是否存储在数据库中,并基于此我做了一些其他的东西ind数据库。
问题是,当用户重定向到网站有时它发生的IPN消息还没有,所以我不能做我想做的。
所以我想以某种方式停止应用程序三秒钟,但我从来没有做过这样的事情,我不知道这样做是否好。

IPN信息延迟几秒钟是否正常?

如果我说Thread.Sleep(3000)是否有可能以这种方式在Web应用程序中显示动画加载器?
Pay Pal IPN延迟 - 正在睡觉的网站解决方案

+0

正确的解决方案是不使用IPN,而是使用PayPal NVP API(或SOAP,如果您已陷入施虐受虐狂)。我们为C#/ ASP.NET开源了一个非常简单的PayPal NVP库:https://github.com/NeoSmart/paypalnvp-dotnet –

+0

我听说过类似于PDT的东西 – Toskan

回答

1

您可以在paypal ipn overview的一看就会发现,你将需要一个不同的方法。

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

“IPN消息服务不应被视为实时服务,您的结帐流程不应等待IPN消息才能完成。如果您的网站等待IPN消息,结帐处理可能会延迟由于系统负载并且由于重试的可能性而变得更加复杂。“

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

其他解决方案是,当您通过paypal API创建订阅时,您会收到一个包含订阅信息的响应。 (例如,如果您正在使用定期付款,则在create_recurring付款资料中的回复)。在此之后,您可以承诺他会支付并启用内容。 (当然,如果付款时间太长,用户可能会在退款前退订)

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 
}