Для инициализации платежа можно использовать любой метод — IFRAME-форму, HTML-форму, POST-API или выставление счёта через JSON API.
Поэтому начало платежа может обеспечивать и статическая страница, и CGI-скрипт. Но для того, чтобы автоматически обработать событие оплаты,
нужно реализовать возможность принятия POST-оповещений об успешных платежах.
CGI-скрипт на языке Perl для обработки запросов от PayKeeper об успешных платежах можно реализовать следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#!/usr/bin/perl use CGI::Carp qw(fatalsToBrowser); use CGI qw (:standard); use POSIX; use lib qw(.); use Digest::MD5 qw(md5 md5_hex md5_base64); my $ip = $ENV{'REMOTE_ADDR'}; my $time = strftime("%Y-%m-%d %H:%M:%S",localtime); # Данные из POST-запроса об оплате my $id = param('id'); my $sum = param('sum'); my $clientid = param('clientid'); my $orderid = param('orderid'); my $key = param('key'); my $service_name = param('service_name'); my $client_email = param('client_email'); my $client_phone = param('client_phone'); my $ps_id = param('ps_id'); my $batch_date = param('batch_date'); my $fop_receipt_key = param('fop_receipt_key'); my $bank_id = param('bank_id'); my $card_number = param('card_number'); my $card_holder = param('card_holder'); my $card_expiry = param('card_expiry'); my $secret='ПАРОЛЬ'; my $md5hash=md5_hex($id.$sum.$clientid.$orderid.$secret); print "Content-type: text/html\n\n"; # проверяем у себя хеш if ($key eq $md5hash) #(и свои проверки....) { my $hash = md5_hex($id.$secret); my $ret = "OK $hash"; print "$ret"; # простая запись лога для отладки open(FFF,">> /tmp/paykeeperlog.txt"); print FFF "$time IP=$ip Ret=$ret id=$id sum=$sum key=$key, my key is $md5hash <br>\n"; close(FFF); } exit; |
Важно отметить, что ответ данного скрипта должен состоять исключительно из строки «OK <хеш>» и ни байтом больше, в противном случае PayKeeper будет считать, что ваш сайт не правильно обработал оповещение об успешном платеже.
Пример кода предоставлен нашим пользователем.