私はサイトでペイパルサブスクリプションを使用しています。
ユーザーがペイパルで支払うとき、IPNメッセージを待ってデータベースに保存します。
また、支払いユーザーがペイパルから私のサイトにリダイレクトされた後、IPNメッセージがデータベースに保存されているかどうかを確認する必要があり、それに基づいてデータベースで他のことを行います.
問題は、ユーザーがサイトにリダイレクトされたときに、IPN メッセージがまだ表示されないことがあるため、やりたいことができないことです。
だから私はどういうわけかアプリケーションを3秒間停止することを考えていましたが、私はこのようなことをしたことがなく、それが良いのかわかりません.
IPN メッセージが数秒遅れるのは正常ですか?
このThread.Sleep(3000)
ようにWebアプリケーションでアニメーションローダーを表示することは可能ですか?
2 に答える
Paypal IPN の概要を見ると、別のアプローチが必要であることがわかります。
「IPN メッセージ サービスは、すべてのメッセージがリスナーによってタイムリーに受信されることを想定していません。インターネットは 100% 信頼できるわけではないため、メッセージが失われたり遅延したりする可能性があります。送受信の遅延または失敗の可能性を処理するには、 IPN メッセージ サービスは、メッセージが正常に受信されたことを確認するまで、さまざまな間隔でメッセージを再送信する再試行メカニズムを実装しています。メッセージは、元のメッセージから最大 4 日間再送信される可能性があります。
「IPN メッセージ サービスは、リアルタイム サービスと見なされるべきではありません。チェックアウト フローは、完了が許可される前に IPN メッセージを待機するべきではありません。Web サイトが IPN メッセージを待機している場合、システム負荷のためにチェックアウト処理が遅れる可能性があります。再試行の可能性があるため、より複雑になります。」
解決策の 1 つは、支払いが届くまでコンテンツを有効にしないことですが、ご覧のとおり、最長で 4 日かかる場合があります。
他の解決策は、paypal API を介してサブスクリプションを作成すると、サブスクリプション情報を含む応答を受け取ることです。(例: 定期支払いを使用している場合は、create_recurring 支払いプロファイルでの応答)。この後、彼がお金を払ってコンテンツを有効にするという彼の言葉を受け入れることができます. (もちろん、時間がかかりすぎると、支払い前にユーザーが退会できる可能性があります)
私が 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
}