Обработка PayPal IPN с вставкой базы данных - PullRequest
0 голосов
/ 06 июля 2011

Я надеюсь использовать PayPal Pro Hosted Solution для обработки платежей за мой веб-сайт, и я хотел бы добиться, чтобы данные, отправленные пользователями, НЕ вставлялись в мою базу данных, пока PayPal не подтвердит, что я получил оплату за их вход.

Из того, что я прочитал, я понимаю, что IPN - лучший способ добиться этого.

Итак, в данный момент пользователи вводят свои данные с помощью формы, которую я затем просматриваюих, и если они одобряют их запись, я вставляю в базу данных (используя PHP / MySQL).Данные формы в данный момент передаются в переменных SESSION и работают нормально.Процесс файла выглядит так:

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

Однако, что я хотел бы сделать, это если они подтвердят свою запись на странице предварительного просмотра, когда они нажмут кнопку «одобрить», вместо обновления базы данных там изатем отправьте их в PayPal для осуществления платежа и обновите базу данных, указав их запись, только если платеж утвержден, например:

  1. Пользователь вводит данные
  2. Пользователь представлен со своимиввод данных на известной странице, и если они одобряют ...
  3. Они нажимают кнопку, которая переводит их на страницу оплаты
  4. Если платеж получен, его данные добавляются в базу данных.

Есть ли у кого-нибудь опыт такого подхода, укажите мне правильное направление или дайте мне несколько советов, как это сделать, пожалуйста?

Я просмотрел документацию PayPal, но, поскольку я новичок в этом, мне нужно объяснить вещи довольно простым способом.

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

Я надеюсь, что кто-то может помочь.

Спасибо, Дэн

Ответы [ 3 ]

2 голосов
/ 06 июля 2011

Использование PayPal IPN представляется наилучшим решением в этом случае.

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

Пожалуйста, рассмотрите возможность использования следующего сценария:

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

Кажется, это самое простое решение.

1 голос
/ 08 июля 2011

В отношении IPN следует признать, что это «асинхронный» ответ от PayPal - он отсутствует в сеансе браузера пользователя, поэтому переменные сеанса не будут работать, если вы полагаетесь исключительно на IPN (кроме случаев, когда вы получаетеОтвет IPN, а затем сопоставьте его с сеансом пользователя).PayPal также предлагает PDT (Transfer Data Transfer), который является ответом «в сеансе», который может вернуть пользователя на ваш сайт.

Я бы не стал полагаться исключительно на IPN для уведомлений о платежах (см. Мой ответ в следующемТАК тема) Можно ли полагаться на IPN Paypal исключительно для записи покупок? .

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

1 голос
/ 06 июля 2011

Моя первоначальная идея состояла в том, чтобы просто сохранить форму переменных SESSION, но я потеряю это, перенаправив людей на страницу оплаты.

Не обязательно.Сессии могут обычно сохраняться до тех пор, пока текущий браузер (сессия) открыт.Это не то же самое, что"до тех пор, пока просматривается текущая страница", при условии, что вы правильно установили файл cookie сеанса.Вы можете сделать это правильно, если сеансы сохраняются в течение нескольких дней, месяцев, лет ...

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

Нет, это не излишество.

Он касается ситуации, когда транзакция не завершена.Это может произойти по ряду причин, например, ваш пользователь идет на обед и забывает завершить процесс до истечения времени ожидания сеанса (по умолчанию около 20 минут) или в случае возникновения проблемы с завершением Paypal (маловероятно, но выдолжны предполагать, что это может произойти), или когда есть общая проблема с сетью (провайдер перестает работать в середине транзакции), или когда ваши мобильные пользователи выходят из зоны покрытия сети.Что-нибудь может помешать транзакции, и вам нужно иметь запасную позицию.В противном случае это становится раздражающим для вас (потому что вы ничего не знаете о том, что прервало транзакцию и в какой момент) и для вашего пользователя, который должен начать заново.

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

...