我在网站上使用 pay pal 订阅。
当用户通过支付宝付款时,我等待 IPN 消息将其保存在数据库中。
此外,在付款用户从 pay pal 重定向到我的网站后,我必须检查 IPN 消息是否存储在数据库中,并基于此我在数据库中做一些其他的事情。
问题是当用户被重定向到站点时,有时会发生 IPN 消息不存在所以我不能做我想做的事。
所以我想以某种方式停止应用程序三秒钟,但我从来没有做过这样的事情,我不知道这样做是否好。
IPN 消息延迟几秒钟是否正常?
如果我说Thread.Sleep(3000)
是否可以以这种方式在 Web 应用程序中显示动画加载器?
问问题
944 次
2 回答
1
您可以查看paypal ipn 概述,会发现您需要一种不同的方法。
“IPN 消息服务并不假定您的听众会及时收到所有消息。由于互联网并非 100% 可靠,消息可能会丢失或延迟。为了处理传输和接收延迟或失败的可能性, IPN 消息服务实现了一种重试机制,该机制会以不同的时间间隔重新发送消息,直到您确认已成功接收到消息。消息可能会在原始消息之后的四天内重新发送。
“IPN 消息服务不应被视为实时服务。您的结帐流程不应等待 IPN 消息才允许完成。如果您的网站等待 IPN 消息,结帐处理可能会因系统负载而延迟并且由于重试的可能性而变得更加复杂。”
一种解决方案是在付款到达之前不启用内容,但正如您所见,它可能需要长达四天的时间。
其他解决方案是,当您通过 paypal API 创建订阅时,您会收到包含订阅信息的响应。(例如,如果您使用定期付款,则 create_recurring 付款资料中的响应)。在此之后,您可以相信他会付费并启用内容。(当然有可能用户可以在付款前取消订阅,如果时间太长的话)
于 2012-05-24T07:40:09.407 回答
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
}
于 2012-05-23T08:17:10.923 回答