Банковская ссылка (pangalink) — способ обмена данных купли-продажи между клиентом, банком и магазином, распространённая прежде всего в Эстонии. Этот способ предоставляется банками в виде платной услуги магазинам и кроме возможности оплаты имеется возможность авторизации пользователей (что используется например на учебном sais.ee ). Зачем это надо? Потому что для клиента это очень удобно, судите сами — весь процесс оплаты счёта:
Отчасти поэтому в Эстонии уже есть и arved.ee и практически в каждом магазине иконки банков. В общем для работы необходимы:Криптография
Поскольку всё происходит в защёщённом SSL режиме, то надо иметь банковский публичный ключ что-бы сгенерировать сообщение банку и наоборот, иметь личный ключ что-бы разкодировать сообщение которое сгенерировал банк публичным ключём магазина. Таким образом приватный ключ магазина выглядит примерно так (данных в base64 -кодировке больше просто)За работу на 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.ee — pay.php с формой оплаты, notify.php с подтверждением и config.php с настройками. Подобное можно сотворить и на c++, но естественно с большими нервами.
- Клиент выбирает нужные товары и получает в итоге счёт и ссылку на банк
- Внутри ссылки зашиты все данные об оплате и счетах, и подтверждены криптоустойчивой подписью (signature). Клиент оплачивает в банке полноценный информативный счёт.
- Банк редиректит клиента обратно на сайт опять со всеми данными об оплате вместе с подписью.
Отчасти поэтому в Эстонии уже есть и 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.