2012-05-23 30 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 
}