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