Вот Форма предварительного запроса. Параметр <Result URL> выставляется в настройках кошелька, на сайте Мерчанта, но об этом позже. Код
<html>
<head>
...
</head>
<body>
...
<form method="POST" action="<Result URL>">
<input type="hidden" name="LMI_PREREQUEST" value="1">
<input type="hidden" name="LMI_PAYMENT_AMOUNT" value="1.0">
<input type="hidden" name="LMI_PAYMENT_NO" value="1">
<input type="hidden" name="LMI_PAYEE_PURSE" value="R222211112222">
<input type="hidden" name="LMI_MODE" value="1">
<input type="hidden" name="LMI_PAYER_WM" value="111122221111">
<input type="hidden" name="LMI_PAYER_PURSE" value="R111122221111">
<input type="hidden" name="FIELD_1" value="VALUE_1">
<input type="hidden" name="FIELD_2" value="VALUE_2"> ...
</form>
..
</body>
</html>
LMI_PREREQUEST Индикатор предварительного запроса, выставлен в 1. По нему мы узнаем что это предварительный запрос.
LMI_PAYMENT_AMOUNT Сумма платежа, которую продавец желает получить от покупателя. Сумма должна быть больше нуля, дробная часть отделяется точкой.
LMI_PAYMENT_NO В этом поле продавец задает номер покупки в соответствии со своей системой учета.
LMI_PAYEE_PURSE Кошелек продавца, на который покупатель должен совершить платеж. Формат - буква и 12 цифр.
LMI_MODE Флаг тестового режима, если в 0, Платеж выполнялся в реальном режиме, средства переведены с кошелька покупателя на кошелек продавца, если в 1, платеж выполнялся в тестовом режиме, средства реально не переводились.
LMI_PAYER_WM WM-идентификатор покупателя, совершаюшего платеж.
LMI_PAYER_PURSE WM-кошелек покупателя, совершаюшего платеж.
Об остальных полях читайте на сайте www.merchant.webmoney.ru
Тут мы должны проверить все параметры и если все правильно, выдать ответ YES Мерчанту. Вот код файла result.pl:
Код
#!/usr/bin/perl -w
use strict;
use CGI::Carp 'fatalsToBrowser';
use CGI::Session;
use CGI qw(:standard);
my $cgi = new CGI;
my $PREREQUEST = '1';
my $PURSE = "Z745542043205";
my $PAYMENT = '1.0';
my $MODE = '0';
sub get_pay{
my $LMI_PREREQUEST = $cgi -> param('LMI_PREREQUEST');
my $LMI_PAYEE_PURSE = $cgi -> param('LMI_PAYEE_PURSE');
my $LMI_PAYMENT_AMOUNT = $cgi -> param('LMI_PAYMENT_AMOUNT');
my $LMI_MODE = $cgi -> param('LMI_MODE');
my $LMI_PAYER_WM = $cgi -> param('LMI_PAYER_WM');
my $sid = $cgi -> param('sid');
if($PURSE ne $LMI_PAYEE_PURSE){
print "PURSE IS NOT GOOD!!!";
exit();
}
if($PAYMENT ne $LMI_PAYMENT_AMOUNT){
print "SUMM IS NOT GOOD!!!";
exit();
}
if((!$MODE) && (!$LMI_MODE)){
}else{
print "TEST MODE!!!";
exit();
}
my $sess_ID = new CGI::Session("driver:File", "$sid", {Directory=>'tmp/'}) || die;
$sess_ID -> param("pay","1");
$sess_ID -> param("LMI_PREREQUEST","$LMI_PREREQUEST");
$sess_ID -> param("LMI_PAYEE_PURSE","$LMI_PAYEE_PURSE");
$sess_ID -> param("LMI_PAYMENT_AMOUNT","$LMI_PAYMENT_AMOUNT");
$sess_ID -> param("LMI_MODE","$LMI_MODE");
$sess_ID -> param("WMID","$LMI_PAYER_WM");
$sess_ID -> close();
if($PREREQUEST && $LMI_PREREQUEST){
print "YES"; # это ответ на предварительный запрос
}else{
# тут дописать, что делать если были изменены параметры платежки
} # я тут уже не проверял, системе можно доверять, тады if else убрать
}
print $cgi->header(-charset => 'Windows-1251');
get_pay();
exit();