Как решить проблему отсутствия информации об успешных платежах сторонней системой, используемой на моем сайте?

У меня есть веб-сайт на основе подписки, который взаимодействует со сторонней системой для обработки платежей. Шаги для обработки регистрации нового подписчика следующие:

  1. Подписчик вводит свои данные в форму подписки и нажимает кнопку «Отправить».
  2. Предполагая, что указанные сведения действительны, в базе данных создается новая запись для хранения этих сведений.
  3. Затем подписчик перенаправляется на веб-сайт сторонней системы (похожей на PayPal) для обработки платежа.
  4. После успешной оплаты сторонний веб-сайт перенаправляет подписчика обратно на наш веб-сайт.
  5. На данный момент я знаю, что платеж прошел успешно, поэтому запись в базе данных обновляется, чтобы указать, что платеж был произведен успешно.

Проблема, которую я обнаружил довольно часто, заключается в том, что если подписчик платит, но не завершает процесс правильно (например, использует задний браузер, закрывает окно), его / ее запись в базе данных не обновляется об этом. Соответственно, я не знаю, заплатил ли он / она, просто просмотрев запись, и мне нужно дождаться отчета от сторонней системы, чтобы узнать это.

Как решить эту проблему?

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


person His    schedule 10.04.2010    source источник
comment
+1 у нас такая же проблема. Я не думаю, что есть сольватация   -  person Oskar Kjellin    schedule 10.04.2010


Ответы (1)


Сторонняя платежная система должна сообщить вам об успешной транзакции вне зависимости от того, что делает пользователь.

Например, в PayPal IPN (уведомление о мгновенном платеже) отправляется на ваш сервер в виде данных POST на указанный вами URL-адрес. Затем ваш сервер проверяет с помощью Paypal, что транзакция является подлинной, и если это так, обновляет запись базы данных, чтобы указать, что подписка действительна. В будущем PayPal может а может и не перенаправить пользователя обратно на ваш веб-сайт. («Возможно, нет» может возникнуть в таких случаях, когда пользователь закрывает браузер, нажимает «Назад» или переходит на новый URL-адрес)

Обратите внимание, что этот «разговор» между Paypal и вашим сервером не зависит от сеанса пользователя — это «частный разговор» между вами и PayPal о транзакции этого пользователя.

Очевидно, что могут быть сбои связи и сбои сервера, поэтому, если Paypal не получит запрос проверки с вашего сервера немедленно, он будет периодически отправлять повторные попытки на ваш сервер, чтобы убедиться, что транзакция в конечном итоге завершена.

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

P.S. Вполне нормально требовать, чтобы пользователь вошел в систему (и, следовательно, был зарегистрирован в базе данных), прежде чем он инициирует какую-либо финансовую транзакцию. Вам необходимо собрать всю необходимую информацию, прежде чем они отправятся за покупкой, так как после покупки у вас нет возможности гарантировать, что они вернутся к вам, чтобы предоставить какую-либо дополнительную информацию.

person Jason Williams    schedule 10.04.2010