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; }