HTML, Excel, Word, SEOВеб-программинг ⇒ Скрипт приема-отправки Интернет-платежей

Практические примеры

Примеры веб-программирования
· Интернет-платежи
· Авторизация клиентской оплаты
· Защита от уязвимости sql-injection
· Как пользоваться Google Analytics
· Электронная коммерция в Google Analytics
· Использование Google Analitycs для split тестирования
Сайт от А до Я
· С чего начать
· ПО для сайта
· Домен и хостинг
· Структура сайта
· Главная страница
· Фон страницы
· Анализ главной стр
· Регистрация сайта
· Веб-графика

 

Скрипт приема-отправки Интернет-платежей


Автор: Иван Коржавин
email: korjavin@yandex.ru

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

Исходные данные

Выбор схемы взаимодействия

Передача данных между нашим сайтом и платежной система Moneybookers (и большинством других систем) может происходить несколькими путями.

1. Отправка через браузер клиента, назовем это c2s (client to server), когда мы формируем все требуемые платежной системой поля, и отправляем их редиректом или http post/get запросом через браузер клиента на интерфейс платежной системы.


Этот способ очень прост для реализации, можно обойтись одной html формой, которая соберет и отправит данные. Но в таком случае, мы не можем быть уверены, что данные дойдут до платежной системы в неизменном состоянии. Если клиент-злоумышленник захочет, он сможет подменить, к примеру, сумму платежа.


Для борьбы с подменой, существует способ "подписи" отправляемых данных.


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

    Подпись = md5( секретный ключ + сумма платежа + номер заказа )

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


Это усложняет схему, мы уже не можем отправить клиента на прямую с html формы на платежную систему, мы должны получить эти данные, сформировать подпись ответ и передать клиенту для перехода.


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


Большой ошибкой будет передать его, например, скрытым параметром в форме, и попытаться сделать подпись с помощью java script кода выполняемого в клиентском браузере. При таком подходе, и ключ, и алгоритм станет доступен злоумышленнику т.е. скомпрометирован.


2. Разделение запроса на две части, назовем этот способ s2s (server to server), в этом случае мы отправляем секретные данные между своим сервером и интерфейсом платежной системы напрямую, платежная система регистрирует эту отправку, присваивает ей код (ticket) и уже его мы передаем клиенту.


Когда клиент обратится в платежную систему, и предъявит ей код, платежная система "узнает" его, и примет платеж по уже заполненным данным.


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


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


В этой статье, я покажу, как реализовать второй способ - s2s. Советую вам использовать его.

Форма оплаты

Пусть, наш пользователь уже имеет некую сформированную корзину в нашем интернет магазине.


Таким образом, мы знаем сумму, валюту, и e-mail пользователя.


Покажем ему html форму, где он может оставить произвольный комментарий (например, о предпочитаемом способе доставки) и свой e-mail, куда мы будем уведомлять его о состоянии его заказа.

Обратите, внимание, что мы выводим пользователю данные о его заказе, номер и сумму заказа, но не используем их в форме.


В нашем контроллере, формирующем запрос на платежную систему, мы снова получим их из базы данных нашего магазина, тем самым избежав возможности подмены.


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

Обработка данных и отправка запроса s2s

Код нашего контроллера, получающего данные от формы пользователя:

Для простоты определим нужные нам константы прямо в контроллере.

Разумеется, что в реальном проекте лучше сделать отдельный файл с настройками.


Формируем данные для запроса:

 
 

Так как нам нужен post запрос, укажем это в опциях запроса:


 

Создадим контекст запроса , и отправим его на платежную систему


 

В переменной $result, у нас либо 32 символьный код зарегистрированной операции оплаты, или длинное сообщение о ошибке, в формате html


 

Если же длина строки $result 32 символа, значит, у нас есть код операции, и мы должны перенаправить пользователя на платежную систему с этим кодом.

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


В зависимости от успешности оплаты, сервер перенаправит его обратно к нам на сайт на RETURN_URL или CANCEL_URL которые мы указали.


Также мы получим e-mail от платежной системы о оплате этого заказа, с указанием переданных полей, суммы, номера заказа, комментария и прочим.


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



В начало страницы



В начало страницы