Работая с e-commerce рано или поздно столкнёшься с приёмом платежей на сайте. Вариантов реализации формы оплаты не так уж и много. Но в их особенностях путаются зачастую не только заказчики, но и сами разработчики.
Для начала разберём кто и как участвует в процессе покупки.
И, собственно, сами варианты реализации
Первый способ — редирект. В этом случае покупателей пересылают со страницы магазина на отдельный сайт платёжного сервиса, где и находится платёжная форма. Такой способ часто используется в маленьких магазинах. Из плюсов — приходится поддерживать меньше кода, ответственность за безопасность и обработку платежа ложится на плечи сервиса.
При использовании редиректа существует вероятность атаки посредника (man-in-the-middle attack). Хакер получает доступ к управлению магазином и изменяет адрес редиректа на сторонний сайт. На своём ресурсе получает из запроса данные карточки. И, возможно, возвращает покупателя ещё одним редиректом на сайт платёжного сервиса для завершения покупки. Чаще всего информация о подобных атаках становится известна после проверки выписки с баланса счёта покупателем. В этой ситуации уже нельзя говорить об ответственности сервиса, так как атака скомпрометировала сам магазин. И все издержки по возврату средств и штрафам понесёт продавец.
Использование Iframe’а — метод при котором платёжная форма, расположенная на другом сайте, встраивается в страницу магазина. Одним из плюсов данного метода является простота, с которой владелец магазина может контролировать вид страницы оплаты (фрейм отображает только стилизованную форму). Платёжная форма так же как и при редиректе располагается на сайте платёжного сервиса.
Работу IFrame’а можно показать как
Слева изображена родительская страница. Она является частью магазина. В середине фрейм. Его содержимое — это форма оплаты, сгенерированная платёжным сервисом. Справа — финальный вид страницы, как она загрузится для покупателя. С точки зрения пользователя мы имеем целостную страницу с формой оплаты.
Iframe-метод подвержен тому же виду атак, что и редирект. В ситуации, когда хакер получит доступ к магазину, адрес загружаемого фрэйма может быть изменён и данные карточки уплывут налево.
Прямой запрос («direct post», «browser post», «silent order post») отличается от первых двух методов. В данном случае платёжная форма расположена прямо на странице магазина, а не на сайте платёжного сервиса. Это даёт продавцу больше возможностей контролировать процесс оплаты. Но, так же повышает требования к безопасности самого магазина и совершаемых транзакций.
Из-за того, что при использовании данного метода PSP появляется только в момент отправки данных, любое вмешательство третих лиц в процесс платежа очень трудно отследить. При прохождении PCI DSS сертификации продавцам с подобным типом оплаты приходится не только заполнять опросник из 139 вопросов (AQ A-EP), но и проходить полный аудит безопасности (внутреннее и внешнее сканирование, тестирование на проникновение).
Страница формируется полностью на стороне магазина. Но браузер покупателя модифицирует форму, используя скрипт, загружаемый с ресурсов платёжного сервиса.
Так же, как в случае прямого запроса, данный метод требует повышенных мер безопасности со стороны владельца магазина.
API («merchant gateway») отличается от других методов в лучшую сторону благодаря тому, что предоставляет практически полный контроль за всем процессом оплаты. Данные о транзакциях хранятся в магазине, что позволяет реализовать более тесное взаимодействие продавца и покупателя.
Как всегда, как только кто-то умудряется получить доступ к магазину — данные скомпрометированы. А учитывая, что при использовании API в магазине хранится намного больше информации о транзакции, то ущерб может быть весьма ощутимым. Магазины с подобными методами оплаты проходят самую суровую проверку при PCI DSS сертификации.