Как стать автором
Обновить

Pangalink — способ оплаты для магазинов

Время на прочтение 2 мин
Количество просмотров 835
Банковская ссылка (pangalink) — способ обмена данных купли-продажи между клиентом, банком и магазином, распространённая прежде всего в Эстонии. Этот способ предоставляется банками в виде платной услуги магазинам и кроме возможности оплаты имеется возможность авторизации пользователей (что используется например на учебном sais.ee ). Зачем это надо? Потому что для клиента это очень удобно, судите сами — весь процесс оплаты счёта:
  1. Клиент выбирает нужные товары и получает в итоге счёт и ссылку на банк
  2. Внутри ссылки зашиты все данные об оплате и счетах, и подтверждены криптоустойчивой подписью (signature). Клиент оплачивает в банке полноценный информативный счёт.
  3. Банк редиректит клиента обратно на сайт опять со всеми данными об оплате вместе с подписью.

Отчасти поэтому в Эстонии уже есть и arved.ee и практически в каждом магазине иконки банков. В общем для работы необходимы:
  • уникальный id, выдаётся в банке после заключения договора
  • сертификаты — публичныйключ банка и собственные публичные и приватные ключи
  • собственно программа для обмена данными

Криптография

Поскольку всё происходит в защёщённом SSL режиме, то надо иметь банковский публичный ключ что-бы сгенерировать сообщение банку и наоборот, иметь личный ключ что-бы разкодировать сообщение которое сгенерировал банк публичным ключём магазина. Таким образом приватный ключ магазина выглядит примерно так (данных в base64 -кодировке больше просто)-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQC6GI5uaA7hEkgeP98VHL6TSxJwwPI+Mh+rFx KQPCgarT3/nZCS
Gz1r223+gfH/adV4IDvlbYT18VQ4vSspX+QRAidFeZvsfv99Fe wnwNoTL3LwYp/K
r9eW5YCpCEe8Crziks0vf92PNoHgNAL0iVo0Zma1ScDBSPBlQJ oZ1UiwoQIDAP//
-----END RSA PRIVATE KEY-----
И соответсвенно вместо PRIVATE, у публичного ключа другие данные и PUBLIC заголовок. Естественно что приватный ключ на то и приватный, и если он вдруг засветится, то любой желающий с достаточным умением сможет подписать фиктивную оплату товара. Ключи можно сгенерировать при помощи OpenSSL.

За работу на php

Я пишу на php, храню ключи в .pem файле и методом POST передаю всё в банк формой. А именно..Создаём форму с POST методом, в качестве action ставим URL банка где данные принимаются. Для hanza это www.hanza.net/cgi-bin/hanza/pangalink.jsp. Теперь в форму прописываем hidden-поля с названиями типа VK_RETURN (ссылка куда надо вернуться после оплаты). У каждого банка свои переменные и свой порядок. Всё это дело подписывается такой же переменной VK_MAC, которая генерируется фукциями openssl_pkey_get_private и openssl_sign.После того как товар оплачен надо сделать подтверждение оплаты на своём сайте. Для этого мы из REQUEST переменной выдираем что нам выслал банк и подтверждаем подпись используя openssl_pkey_get_public и openssl_verify из той же VK_MAC. Ну а если подпись банка правильная и VK_SERVICE=1101, то всё в порядке.Вот пример zone.eepay.php с формой оплаты, notify.php с подтверждением и config.php с настройками. Подобное можно сотворить и на c++, но естественно с большими нервами.
Теги:
Хабы:
+1
Комментарии 12
Комментарии Комментарии 12

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн