Files
2017-03-02 20:30:40 -06:00

247 lines
7.3 KiB
PHP

<?php
/*
+--------------------------------------------------------------------------
| CubeCart 4
| ========================================
| CubeCart is a registered trade mark of Devellion Limited
| Copyright Devellion Limited 2006. All rights reserved.
| Devellion Limited,
| 5 Bridge Street,
| Bishops Stortford,
| HERTFORDSHIRE.
| CM23 2JU
| UNITED KINGDOM
| http://www.devellion.com
| UK Private Limited Company No. 5323904
| ========================================
| Web: http://www.cubecart.com
| Email: info (at) cubecart (dot) com
| License Type: CubeCart is NOT Open Source Software and Limitations Apply
| Licence Info: http://www.cubecart.com/site/faq/license.php
+--------------------------------------------------------------------------
| transfer.inc.php
| ========================================
| Core functions for the PROTX Gateway
+--------------------------------------------------------------------------
*/
// ** Base 64 Encoding function **
// PHP does it natively but just for consistency and ease of maintenance, let's declare our own function
function base64Encode($plain) {
// Initialise output variable
$output = "";
// Do encoding
$output = base64_encode($plain);
// Return the result
return $output;
}
// ** Base 64 decoding function **
// PHP does it natively but just for consistency and ease of maintenance, let's declare our own function
function base64Decode($scrambled) {
// Initialise output variable
$output = "";
// Do encoding
$output = base64_decode($scrambled);
// Return the result
return $output;
}
/* The SimpleXor encryption algorithm **
** NOTE: This is a placeholder really. Future releases of VSP Form will use AES or TwoFish. Proper encryption **
** This simple function and the Base64 will deter script kiddies and prevent the "View Source" type tampering **
** It won't stop a half decent hacker though, but the most they could do is change the amount field to something **
** else, so provided the vendor checks the reports and compares amounts, there is no harm done. It's still **
** more secure than the other PSPs who don't both encrypting their forms at all */
function simpleXor($data, $key) {
$output = "";
for($i = 0; $i < strlen($data); ) {
for($j = 0; $j < strlen($key); $j++, $i++) {
if($i < strlen($data))
$output .= $data[$i] ^ $key[$j];
else
break;
}
}
return $output;
}
/* The getToken function. **
** NOTE: A function of convenience that extracts the value from the "name=value&name2=value2..." VSP reply string **
** Works even if one of the values is a URL containing the & or = signs. */
function getToken($thisString) {
// List the possible tokens
$Tokens = array(
"Status",
"StatusDetail",
"VendorTxCode",
"VPSTxId",
"TxAuthNo",
"Amount",
"AVSCV2",
"AddressResult",
"PostCodeResult",
"CV2Result",
"GiftAid",
"3DSecureStatus",
"CAVV" );
// Initialise arrays
$output = array();
$resultArray = array();
// Get the next token in the sequence
for ($i = count($Tokens)-1; $i >= 0 ; $i--){
// Find the position in the string
$start = strpos($thisString, $Tokens[$i]);
// If it's present
if ($start !== false){
// Record position and token name
$resultArray[$i]->start = $start;
$resultArray[$i]->token = $Tokens[$i];
}
}
// Sort in order of position
sort($resultArray);
// Go through the result array, getting the token values
for ($i = 0; $i<count($resultArray); $i++)
{
// Get the start point of the value
$valueStart = $resultArray[$i]->start + strlen($resultArray[$i]->token) + 1;
// Get the length of the value
if ($i==(count($resultArray)-1))
{
$output[$resultArray[$i]->token] = substr($thisString, $valueStart);
}
else
{
$valueLength = $resultArray[$i+1]->start - $resultArray[$i]->start - strlen($resultArray[$i]->token) - 2;
$output[$resultArray[$i]->token] = substr($thisString, $valueStart, $valueLength);
}
}
// Return the ouput array
return $output;
}
// Randomise based on time
function randomise()
{
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
/////////////////////////////////////////////////////////
/////////////// END OF PROTX FUNCTIONS ///////////////
/////////////////////////////////////////////////////////
function repeatVars()
{
return FALSE;
}
function fixedVars()
{
global $module, $orderSum, $config;
if(!empty($orderSum['add_2_d']))
{
$delAdd = $orderSum['add_1_d'].", ".$orderSum['add_1_d'].", ".$orderSum['town_d'].", ".$orderSum['county_d'].", ".$orderSum['country_d'];
}
else
{
$delAdd = $orderSum['add_1_d'].", ".$orderSum['town_d'].", ".$orderSum['county_d'].", ".$orderSum['country_d'];
}
if(!empty($orderSum['add_2']))
{
$invAdd = $orderSum['add_1'].", ".$orderSum['add_2'].", ".$orderSum['town'].", ".$orderSum['county'].", ".getCountryFormat($orderSum['country'],"id","iso");
}
else
{
$invAdd = $orderSum['add_1'].", ".$orderSum['town'].", ".$orderSum['county'].", ".getCountryFormat($orderSum['country'],"id","iso");
}
$VendorTxCode = 'CC4'.(rand(0,32000)*rand(0,32000));
$cryptVars =
"VendorTxCode=".$VendorTxCode
."&Amount=".$orderSum['prod_total']
."&Currency=".$config['defaultCurrency']
."&Description=Cart - ".$orderSum['cart_order_id']
."&CustomerEmail=".$orderSum['email']
."&CustomerName=".$orderSum['name']
."&VendorEmail=".$config['masterEmail'] ."&DeliveryAddress=".$delAdd
."&DeliveryPostCode=".$orderSum['postcode_d']
."&BillingAddress=".$invAdd
."&BillingPostCode=".$orderSum['postcode']
."&ContactNumber=".$orderSum['phone']
// ."&ApplyAVSCV2=0&Apply3DSecure=0&ShoppingBasket=ON" We have taken our the ShoppingBasket Variable - It seemed Protx didn't need it.
."&ApplyAVSCV2=0&Apply3DSecure=0"
."&SuccessURL=".$GLOBALS['storeURL']."/index.php?_g=rm&type=gateway&cmd=process&module=Protx&cart_order_id=".$orderSum['cart_order_id']
."&FailureURL=".$GLOBALS['storeURL']."/index.php?_g=rm&type=gateway&cmd=process&module=Protx&cart_order_id=".$orderSum['cart_order_id'];
$encrypted = base64Encode(SimpleXor($cryptVars,$module['passphrase']));
$hiddenVars = "<input type='hidden' name='VendorTxCode' value='".$VendorTxCode."' />
<input type='hidden' name='VPSProtocol' value='2.22' />
<input type='hidden' name='TxType' value='PAYMENT' />
<input type='hidden' name='Vendor' value='".$module['acNo']."' />
<input type='hidden' name='Crypt' value='".$encrypted."' />";
return $hiddenVars;
}
///////////////////////////
// Other Vars
////////
if($module['gate'] == "sim") {
$formAction = "https://ukvpstest.protx.com/VSPSimulator/VSPFormGateway.asp";
} elseif($module['gate'] == "test") {
$formAction ="https://ukvpstest.protx.com/vps2form/submit.asp";
} elseif($module['gate'] == "live"){
$formAction ="https://ukvps.protx.com/vps2form/submit.asp";
}
$formMethod = "post";
$formTarget = "_self";
$transfer = "auto";
?>