466212;
#---------------------------------------------------------------
my $bCompleteOnTechnicalFailures = $::FALSE;
my $bCompleteOnFinancialFailures = $::FALSE;
my $bAuthorize = $::FALSE;
my $bTestMode = $::FALSE;
my $sProcessScriptURL = 'https://ukvps.protx.com/vps2Form/submit.asp';
my $sMerchantName = '';
my $sMerchantID = 'microdir';
use strict;
$::eStatus = $::PENDING;
my (%VarTable);
my $sPassword = 'u1MJg5EtFLrvUQqJ';
my $sConfirmationEMail = '';
my $sPROTXURL = '';
if ($bTestMode) {
$sPROTXURL = "https://ukvpstest.protx.com/";
} else {
$sPROTXURL = "https://ukvps.protx.com/";
}
$VarTable{$::VARPREFIX . 'OCC_URL'} =
$sProcessScriptURL;
my $sHiddenValues;
my $sCrypt;
$sHiddenValues .= "\n";
$sHiddenValues .= "\n";
$sHiddenValues .= "\n";
$sCrypt .= "VendorTxCode=". $::sOrderNumber . "-" . int(rand(100000)) . "&";
my $nNumDigits = $::PriceFormatBlob{"ICURRDIGITS"};
my ($nAmount, $nFactor, $sAmount);
if(defined $nNumDigits) {$nFactor = (10 ** $nNumDigits);} else {$nFactor = 100;}
$sAmount = sprintf("%d.%02d", $::nOrderTotal / $nFactor, $::nOrderTotal % $nFactor);
$sCrypt .= "Amount=". $sAmount . "&";
$sCrypt .= "Currency=". $::PriceFormatBlob{SINTLSYMBOLS} . "&";
$sCrypt .= "Description=Items from ". $sMerchantID . "&";
$sCrypt .= "SuccessURL=".$sPROTXURL."vps2Form/ActSuccess.asp?ActVendor=" .$sMerchantID. "&ActAmount=" . $::nOrderTotal . "&AuthURL=" . Base64Encode($::sCallBackURLAuth);
$sCrypt .= "&InvoiceURL=" . Base64Encode($::sCallBackURLUser) . "&";
$sCrypt .= "FailureURL=".$sPROTXURL."vps2Form/ActFail.asp?ActVendor=" .$sMerchantID. "&RedirectURL=" . Base64Encode($::sCallBackURLBack) . "&";
$sCrypt .= "CustomerName=" . $::InvoiceContact{NAME} . "&";
$sCrypt .= "BillingAddress=" . $::InvoiceContact{NAME} . "\n";
if (length($::InvoiceContact{JOBTITLE})!=0) { $sCrypt .= $::InvoiceContact{JOBTITLE} . "\n"; }
if (length($::InvoiceContact{COMPANY})!=0) { $sCrypt .= $::InvoiceContact{COMPANY} . "\n"; }
if (length($::InvoiceContact{ADDRESS1})!=0) { $sCrypt .= $::InvoiceContact{ADDRESS1} . "\n"; }
if (length($::InvoiceContact{ADDRESS2})!=0) { $sCrypt .= $::InvoiceContact{ADDRESS2} . "\n"; }
if (length($::InvoiceContact{ADDRESS3})!=0) { $sCrypt .= $::InvoiceContact{ADDRESS3} . "\n"; }
if (length($::InvoiceContact{ADDRESS4})!=0) { $sCrypt .= $::InvoiceContact{ADDRESS4} . "\n"; }
if (length($::InvoiceContact{POSTALCODE})!=0) { $sCrypt .= substr($::InvoiceContact{POSTALCODE}, 0, 10) . "\n"; }
if (length($::InvoiceContact{COUNTRY})!=0) { $sCrypt .= $::InvoiceContact{COUNTRY} . "\n"; }
if (length($::InvoiceContact{PHONE})!=0) { $sCrypt .= "Tel: " . $::InvoiceContact{PHONE} . "\n"; }
if (length($::InvoiceContact{FAX})!=0) { $sCrypt .= "Fax: " . $::InvoiceContact{FAX} . "\n"; }
$sCrypt .= "&DeliveryAddress=" . $::OCCShipData{NAME} . "\n";
if (length($::OCCShipData{JOBTITLE})!=0) { $sCrypt .= $::OCCShipData{JOBTITLE} . "\n"; }
if (length($::OCCShipData{COMPANY})!=0) { $sCrypt .= $::OCCShipData{COMPANY} . "\n"; }
if (length($::OCCShipData{ADDRESS1})!=0) { $sCrypt .= $::OCCShipData{ADDRESS1} . "\n"; }
if (length($::OCCShipData{ADDRESS2})!=0) { $sCrypt .= $::OCCShipData{ADDRESS2} . "\n"; }
if (length($::OCCShipData{ADDRESS3})!=0) { $sCrypt .= $::OCCShipData{ADDRESS3} . "\n"; }
if (length($::OCCShipData{ADDRESS4})!=0) { $sCrypt .= $::OCCShipData{ADDRESS4} . "\n"; }
if (length($::OCCShipData{POSTALCODE})!=0) { $sCrypt .= substr($::OCCShipData{POSTALCODE}, 0, 10) . "\n"; }
if (length($::OCCShipData{COUNTRY})!=0) { $sCrypt .= $::OCCShipData{COUNTRY} . "\n"; }
if (length($::OCCShipData{PHONE})!=0) { $sCrypt .= "Tel: " . $::OCCShipData{PHONE} . "\n"; }
if (length($::OCCShipData{FAX})!=0) { $sCrypt .= "Fax: " . $::OCCShipData{FAX} . "\n"; }
if (length($::InvoiceContact{EMAIL})!=0) { $sCrypt .= "&CustomerEMail=" . $::InvoiceContact{EMAIL}; }
if (length($sConfirmationEMail)!=0) { $sCrypt .= "&VendorEMail=" . $sConfirmationEMail; }
$sCrypt = Base64Encode(SimpleXOR($sCrypt,$sPassword));
$sHiddenValues .= "\n";
$VarTable{$::VARPREFIX . 'OCC_VALUES'} =
$sHiddenValues;
my $sLinkHTML = 'occlink.html';
if(defined $::g_pPaymentList)
{
$sLinkHTML = $$::g_pPaymentList{ActinicOrder::PaymentStringToEnum($::g_PaymentInfo{'METHOD'})}{BOUNCE_HTML};
}
@Response = ACTINIC::TemplateFile($::sPath . $sLinkHTML, \%VarTable);
if ($Response[0] != $::SUCCESS)
{
$::eStatus = $::FAILURE;
$::sErrorMessage = $Response[1];
return ($::SUCCESS);
}
@Response = ACTINIC::MakeLinksAbsolute($Response[2], $::sWebSiteUrl, $::sContentUrl);
if ($Response[0] != $::SUCCESS)
{
$::eStatus = $::FAILURE;
$::sErrorMessage = $Response[1];
return ($::SUCCESS);
}
$::sHTML = $Response[2];
my ($sDelimiter) = $::DELPREFIX . 'TESTMODE';
if ($bTestMode)
{
$::sHTML =~ s/$sDelimiter//g;
}
else
{
$::sHTML =~ s/$sDelimiter(.*?)$sDelimiter//gs;
}
return ($::SUCCESS);
sub Base64Encode ($;$)
{
my $res = "";
my $eol = $_[1];
$eol = "\n" unless defined $eol;
pos($_[0]) = 0;
$res = join '', map( pack('u',$_)=~ /^.(\S*)/, ($_[0]=~/(.{1,45})/gs));
$res =~ tr|` -_|AA-Za-z0-9+/|; # `
my $padding = (3 - length($_[0]) % 3) % 3;
$res =~ s/.{$padding}$/'=' x $padding/e if $padding;
return $res;
}
sub Base64Decode ($)
{
local($^W) = 0;
my $str = shift;
$str =~ tr|A-Za-z0-9+=/||cd; # remove non-base64 chars
if (length($str) % 4) {
require Carp;
Carp::carp("Length of base64 data not a multiple of 4")
}
$str =~ s/=+$//;
$str =~ tr|A-Za-z0-9+/| -_|;
return join'', map( unpack("u", chr(32 + length($_)*3/4) . $_),
$str =~ /(.{1,60})/gs);
}
sub SimpleXOR ($;$)
{
my $plain = $_[0];
my $password = $_[1];
my $passstring = $_[1];
my $res = "";
while (length($passstring) <= length($plain)) { $passstring .= $password; }
$passstring = substr($passstring,0,length($plain));
$res = $plain ^ $passstring;
return $res;
}