Можно ли полагаться на Paypal IPN исключительно для записи покупок? - PullRequest
4 голосов
/ 06 июня 2011

Я настраиваю простую транзакцию «купить сейчас» с веб-сайта с помощью следующих основных шагов:

  1. Выбор продукта из прайс-листа
  2. Просмотр выбора (суммы, налоги и т. Д.))
  3. Обработка платежа в Paypal
  4. Квитанция / Спасибо

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

Я использую Paypal IPN для проверки подлинности платежей и их регистрации по записям, вставленным нашаг 2 - однако, могу ли я реально полагаться исключительно на данные из транзакций IPN, чтобы заполнить базу данных в первую очередь, устраняя тем самым необходимость сохранять их на шаге 2 и выполнять очистку базы данных для удаления транзакций, которые никогда не завершались?

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

Очевидно, что соображение номер один заключается в том, что ни одна транзакция не теряется или не регистрируется, поэтому не возникает несчастья клиента!

Ответы [ 5 ]

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

Как разработчик и администратор системы, которая обработала более 600 000 платежей PayPal за последние три года - использование исключительно IPN позволит некоторым ошибкам проскользнуть сквозь трещины.

Реальные данные:

        Total transactions   No IPN    Invalid IPN  Duplicate IPN
year 1      170,000 +          2           101           0
year 2      205,000 +         54            15           3
year 3      230,000 +         20            24          13

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

Наиболее распространенные «недействительные» возвраты IPN - это страница с ошибкой HTMLили усеченные результаты ... При желании я могу предоставить образцы.

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

ПРИМЕЧАНИЕ: - как вы отметили в своем окончательном решении использовать настраиваемое поле - имейте в виду, что для настраиваемого поля есть ограничение по длине, и оно может быть обрезано при возврате вам.

3 голосов
/ 14 июня 2011

Важно выполнить двухстороннюю проверку, как у вас.

Вы сохраняете информацию о заказе (итого, количество) до того, как пользователь покинет вашу систему в сторону PayPal.Когда ipn возвращается, вы проверяете запрос (он должен быть от PayPal IP или что-то еще), вы подтверждаете, что это успешная транзакция, а затем ваш шаг 2 выходит на сцену.Вы подтверждаете, что итоговая сумма, возвращаемая из PayPal IPN, совпадает с суммой, которая была сохранена до ухода пользователя (Paypal иногда может возвращать частичные платежи, пользователь может получить данные поста и сделать свой пост из модифицированного HTML с меньшим значением *).1003 * комплект).На шаге 2 также должен храниться идентификатор_пользователя покупателя, поэтому вы также должны сравнить его.

вот пример слоя (без языка программирования, только фиктивный код):

if request comes from paypal:
    #   query the order
    if order.total == request.total && order.user_id == request.custom:
        payment may come in...
1 голос
/ 07 июня 2011

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

1 голос
/ 14 июня 2011

Я разработал несколько сайтов электронной коммерции, и на практике вы всегда хотите записать, что вы можете в случае каких-либо «несчастных случаев». Ваши собственные данные, вероятно, более информативны.

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

1 голос
/ 07 июня 2011

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

...