2012-05-23 2 views
0

Я использую подписки на платные подписки на сайте.
Когда пользователь платит за получателя, я жду сообщения IPN, чтобы сохранить его в базе данных.
Кроме того, после того, как пользователь оплаты перенаправляется от платного приятеля на мой сайт, где я должен проверить, сохранено ли в базе данных сообщение IPN, и на основе этого я делаю некоторые другие вещи indabase.
Проблема в том, когда пользователь перенаправляется на сайт, иногда бывает, что IPN-сообщение еще не существует, поэтому я не могу делать то, что хочу.
Так что я подумал как-то остановить приложение на три секунды, но я никогда не делал ничего подобного, и я не знаю, хорошо ли это делать.

Нормально ли, что сообщения IPN задерживаются на несколько секунд?

Если я скажу Thread.Sleep(3000), можно ли таким образом отображать анимированный загрузчик в веб-приложении?
Pay Pal IPN delay - спальное решение для сайта

+0

Правильное решение - не использовать IPN и вместо этого использовать API-интерфейс PayPal NVP (или SOAP, если вы находитесь в садомазохизме). Мы открываем очень простую библиотеку NVP для PayPal для C#/ASP.NET: https://github.com/NeoSmart/paypalnvp-dotnet –

+0

Я слышал что-то вроде PDT – Toskan

ответ

1

Вы посмотрите на paypal ipn overview в можно найти, что вам нужен другой подход.

«Служба сообщений IPN не предполагает, что все сообщения будут получены вашим слушателем своевременно. Поскольку интернет не на 100% надежный, сообщения могут потеряться или задержать. Для обработки возможности передачи и получения задержек или сбоев, служба сообщений IPN реализует механизм повтора, который повторно передает сообщения с различными интервалами до тех пор, пока вы не подтвердите, что сообщение успешно получено. Сообщения могут быть повторно отправлены в течение четырех дней после исходного сообщения ».

«Служба сообщений IPN не должна считаться службой в режиме реального времени. Поток проверки не должен ждать сообщения IPN до того, как он будет завершен. Если ваш сайт ожидает сообщения IPN, обработка проверки может быть отложена из-за нагрузки системы и усложняется из-за возможности повторных попыток ».

Одним из решений было бы не включать контент до тех пор, пока платеж не поступит, но, как вы видели, это может занять до четырех дней.

Другим решением было бы, когда вы создадите подписку через API paypal, вы получите ответ с информацией о подписке. (например, ответ в профиле профиля create_recurring, если вы используете повторяющиеся платежи). После этого вы могли бы смириться с тем, что он заплатит и включит контент. (конечно, есть вероятность, что пользователь может отказаться от подписки перед платежами, если это займет слишком много времени)

0

Если я говорю Thread.Sleep (3000) возможно отображать анимированное загрузчик в веб-приложение, таким образом?

Нет, вы полностью завершите свое приложение, не достигнув ничего. Таким образом, решение может использовать таймер.

Так попробуйте:

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 
} 
Смежные вопросы