<% $MNT_ID %> <% $MNT_TRANSACTION_ID %> <% $reply_code %> % if ( ref $last ) { <% $last->name %> % } <% $MNT_AMOUNT %> <% $reply_md5 %> <%doc> <%once> use Digest::MD5; <%args> $MNT_COMMAND => '' $MNT_ID => undef $MNT_TRANSACTION_ID => undef $MNT_OPERATION_ID => '' $MNT_AMOUNT => '' $MNT_CURRENCY_CODE => undef $MNT_TEST_MODE => 0 $MNT_SIGNATURE => undef $MNT_USER => undef $MNT_CORRACCOUNT => undef $MNT_CUSTOM1 => undef $MNT_CUSTOM2 => undef $MNT_CUSTOM3 => undef <%init> warn Dumper \%ARGS if $DEBUG; unless ( $MNT_ID && $MNT_TRANSACTION_ID && $MNT_OPERATION_ID && $MNT_AMOUNT && $MNT_CURRENCY_CODE ) { $m->out('FAIL'); return; } my $str = $MNT_COMMAND . $MNT_ID . $MNT_TRANSACTION_ID . $MNT_OPERATION_ID . $MNT_AMOUNT . $MNT_CURRENCY_CODE . $MNT_TEST_MODE . $state->{monetaru}->{moneta_sig_code}; my $md5 = Digest::MD5::md5_hex ( $str ); unless ( $MNT_SIGNATURE eq $md5 ) { $m->out('FAIL'); return; } my $reply_code; my $last = $keeper->{monetaru}->check( $MNT_TRANSACTION_ID ); if ( ref $last ) { my $sum = sprintf("%.2f", $last->sum); if ( $last->name eq 'cancel' ) { $reply_code = 500; } elsif ( !$MNT_AMOUNT && $last->name =~ /(create|reform)/ ) { $MNT_AMOUNT = $last->sum; $reply_code = 100; } elsif ( $last->name =~ /(create|reform)/ && $sum ne $MNT_AMOUNT ) { $MNT_AMOUNT = $last->sum; $reply_code = 100; } elsif ( $last->name eq 'suspend' ) { $reply_code = 302; } } else { $reply_code = 500; } unless ( $reply_code ) { my ($obj) = $keeper->get_documents( class => 'monetaru::Transaction', operation_id => $MNT_OPERATION_ID, order_id => $MNT_TRANSACTION_ID, limit => 1, ); if ( ref $obj ) { $reply_code = 200; } else { $reply_code = 402; } } warn "CHECK_URL: Reply code = [$reply_code]\n" if $DEBUG; $str = $reply_code . $MNT_ID . $MNT_TRANSACTION_ID . $state->{monetaru}->{moneta_sig_code}; my $reply_md5 = Digest::MD5::md5_hex ( $str );