Повторяющиеся транзакции по кредитной карте - PullRequest
2 голосов
/ 20 апреля 2009

Каков наилучший способ запретить пользователю совершать двойные транзакции по кредитным картам? Будь то слишком частое нажатие кнопки «Отправить» или переход обратно на страницу квитанции и повторное нажатие кнопки «Отправить».

Ответы [ 6 ]

8 голосов
/ 20 апреля 2009

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

4 голосов
/ 20 апреля 2009

Пара способов:

  1. Отключить кнопку сразу после нажатия.

  2. Выполните пакетную обработку, чтобы удалить дубликаты из расчета позже в тот же день, чтобы они не взимались.

  3. Используйте какое-то модальное окно, чтобы запретить пользователю перемещаться до обработки транзакции по кредитной карте. Jquery имеет плагин block.UI, который может работать на вас.

3 голосов
/ 21 апреля 2009

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

Теперь, если вы хотите предотвратить повторную отправку, стандартным способом будет Шаблон Post / Redirect / Get . Вы также можете комбинировать это с отключением кнопки отправки с помощью JavaScript.

Вы бы получили:

  1. order_form.aspx , генерирующий уникальный идентификатор заказа и отправляющий POST на
  2. process_order.aspx выполняет фактическую работу, очищает корзину, а затем перенаправляет на
  3. thankyou.html

Теперь, если пользователь щелкает по перезагрузке, только статическая перезагрузка thankyou.html. Если он решит щелкнуть назад, вернитесь к order_form.aspx, но его корзина уже пуста. Если он каким-то образом будет кэширован, он будет кэширован с тем же идентификатором заказа, поэтому нет риска дважды взимать плату там.

1 голос
/ 20 апреля 2009

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

Также помогает добавить 2-й уровень защиты на уровне пользовательского интерфейса, как предлагает CodeToGlory. Это сведет к минимуму количество раз, когда это происходит.

0 голосов
/ 14 февраля 2011

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

0 голосов
/ 21 апреля 2009

Удалите элементы корзины, как только они заказали, и отключите кнопку отправки.

В этом случае, даже если пользователь возвращается, обновить и т. Д. Нельзя купить дважды, так как в корзине ничего не будет.

...