Version Notes
The Dfraud integration performs 15 checks to identify the fruaud order so that its easy for site admins to identify fraud orders.
Download this release
Release Info
| Developer | Biju Thajudien |
| Extension | Df_DFraudIntegration |
| Version | 1.0.0 |
| Comparing to | |
| See all releases | |
Version 1.0.0
- app/code/local/Df/DFraudIntegration/Block/Adminhtml/Order/View/Tab/Dfraud.php +109 -0
- app/code/local/Df/DFraudIntegration/Block/Adminhtml/Sales/Order/Dfraud.php +85 -0
- app/code/local/Df/DFraudIntegration/Helper/Data.php +649 -0
- app/code/local/Df/DFraudIntegration/Model/Dfraud.php +17 -0
- app/code/local/Df/DFraudIntegration/Model/HighriskCountries.php +17 -0
- app/code/local/Df/DFraudIntegration/Model/Observer.php +49 -0
- app/code/local/Df/DFraudIntegration/Model/Resource/Dfraud.php +18 -0
- app/code/local/Df/DFraudIntegration/Model/Resource/HighriskCountries.php +18 -0
- app/code/local/Df/DFraudIntegration/Model/Resource/Scores.php +18 -0
- app/code/local/Df/DFraudIntegration/Model/Resource/Setup.php +12 -0
- app/code/local/Df/DFraudIntegration/Model/Scores.php +17 -0
- app/code/local/Df/DFraudIntegration/controllers/Adminhtml/DfraudController.php +76 -0
- app/code/local/Df/DFraudIntegration/etc/config.xml +128 -0
- app/code/local/Df/DFraudIntegration/etc/system.xml +70 -0
- app/code/local/Df/DFraudIntegration/sql/dfraudintegration_setup/mysql4-install-1.0.0.php +122 -0
- app/design/adminhtml/default/default/layout/dfraudintegration.xml +21 -0
- app/design/adminhtml/default/default/template/dfraudintegration/dfraud.phtml +560 -0
- app/design/adminhtml/default/default/template/dfraudintegration/note-create.phtml +8 -0
- app/etc/modules/Df_DFraudIntegration.xml +9 -0
- package.xml +18 -0
app/code/local/Df/DFraudIntegration/Block/Adminhtml/Order/View/Tab/Dfraud.php
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* DFraud Integration plugin.
|
| 4 |
+
*
|
| 5 |
+
* @category Df
|
| 6 |
+
* @package Df_DFraudIntegration
|
| 7 |
+
* @author Biju Thajudien <mailtobiju@gmail.com>
|
| 8 |
+
* @version 0.1.0
|
| 9 |
+
*/
|
| 10 |
+
class Df_DFraudIntegration_Block_Adminhtml_Order_View_Tab_Dfraud
|
| 11 |
+
extends Mage_Adminhtml_Block_Template
|
| 12 |
+
implements Mage_Adminhtml_Block_Widget_Tab_Interface
|
| 13 |
+
{
|
| 14 |
+
protected $_chat = null;
|
| 15 |
+
|
| 16 |
+
protected function _construct()
|
| 17 |
+
{
|
| 18 |
+
parent::_construct();
|
| 19 |
+
$result = $this->getFraudDetectionData();
|
| 20 |
+
|
| 21 |
+
Mage::register('data', $result);
|
| 22 |
+
$this->setTemplate('dfraudintegration/dfraud.phtml');
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
public function getTabLabel() {
|
| 26 |
+
return $this->__('Fraud Detection');
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
public function getTabTitle() {
|
| 30 |
+
return $this->__('Fraud Detection');
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
public function canShowTab() {
|
| 34 |
+
return true;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
public function isHidden() {
|
| 38 |
+
return false;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
public function getOrder(){
|
| 42 |
+
return Mage::registry('current_order');
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
public function getFraudDetectionData(){
|
| 46 |
+
if ($order = $this->getOrder()) {
|
| 47 |
+
//echo "<pre>";print_r($order->grand_total);exit;
|
| 48 |
+
$remote_ip = $order->getRemoteIp();
|
| 49 |
+
|
| 50 |
+
$helper = Mage::helper('dfraudintegration');
|
| 51 |
+
try {
|
| 52 |
+
$response = false;
|
| 53 |
+
$ipLocation = $helper->getIpLocation($remote_ip);
|
| 54 |
+
|
| 55 |
+
$shippingId = $order->getShippingAddressId();
|
| 56 |
+
$billingId = $order->getBillingAddressId();
|
| 57 |
+
|
| 58 |
+
$billingDetails = Mage::getModel('sales/order_address')->load($billingId);
|
| 59 |
+
|
| 60 |
+
$resource = Mage::getSingleton('core/resource');
|
| 61 |
+
$readConnection = $resource->getConnection('core_read');
|
| 62 |
+
$query = 'SELECT * FROM ' . $resource->getTableName('dfraudintegration/scores');
|
| 63 |
+
$scores = $readConnection->fetchAll($query);
|
| 64 |
+
|
| 65 |
+
//Perform address and IP checks
|
| 66 |
+
$result = $helper->checkAddress($shippingId, $billingId, $ipLocation, $scores);
|
| 67 |
+
|
| 68 |
+
//Check previous orders from user and ip
|
| 69 |
+
$order_history = $helper->getOrderHistory($order->customer_id, $order->getRemoteIp(), $scores);
|
| 70 |
+
//echo "<pre>";print_r($result);
|
| 71 |
+
$result['order_history_cust'] = $order_history;
|
| 72 |
+
|
| 73 |
+
//Check CC bin data
|
| 74 |
+
$payments = $order->getAllPayments();
|
| 75 |
+
$binData = $helper->getBinData($payments, $remote_ip, $billingDetails['country_id'], $scores);
|
| 76 |
+
$result['bin'] = $binData;
|
| 77 |
+
|
| 78 |
+
//Check the order amount
|
| 79 |
+
$amountData = $helper->checkOrderAmount($order->grand_total, $scores);
|
| 80 |
+
$result['ammount_check'] = $amountData;
|
| 81 |
+
|
| 82 |
+
//Get the score summary
|
| 83 |
+
$result['score'] = $helper->getResultTotalScore($result);
|
| 84 |
+
$summary = array_merge((array)$result['summary'], (array)$order_history['summary']
|
| 85 |
+
, (array)$binData['summary']
|
| 86 |
+
, (array)$amountData['summary']);
|
| 87 |
+
$summaryDesc = $helper->getRiskScoreDescription($scores, $summary);
|
| 88 |
+
$result['summary'] = $summaryDesc;
|
| 89 |
+
|
| 90 |
+
return $result;
|
| 91 |
+
|
| 92 |
+
}
|
| 93 |
+
catch (Mage_Core_Exception $e) {
|
| 94 |
+
$response = array(
|
| 95 |
+
'error' => true,
|
| 96 |
+
'message' => $e->getMessage(),
|
| 97 |
+
);
|
| 98 |
+
}
|
| 99 |
+
catch (Exception $e) {
|
| 100 |
+
$response = array(
|
| 101 |
+
'error' => true,
|
| 102 |
+
'message' => $this->__('Cannot get dfraud data.')
|
| 103 |
+
);
|
| 104 |
+
}
|
| 105 |
+
}
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
}
|
| 109 |
+
?>
|
app/code/local/Df/DFraudIntegration/Block/Adminhtml/Sales/Order/Dfraud.php
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Deliverynote Block
|
| 5 |
+
*
|
| 6 |
+
* @category Dh
|
| 7 |
+
* @package Dh_Deliverynote
|
| 8 |
+
* @author Drew Hunter <drewdhunter@gmail.com>
|
| 9 |
+
* @version 0.1.0
|
| 10 |
+
*/
|
| 11 |
+
class Df_DFraudIntegration_Block_Adminhtml_Sales_Order_Dfraud extends Mage_Adminhtml_Block_Template
|
| 12 |
+
{
|
| 13 |
+
private $_note;
|
| 14 |
+
|
| 15 |
+
protected function _prepareLayout()
|
| 16 |
+
{
|
| 17 |
+
$onclick = "submitAndReloadArea($('dfraudintegration').parentNode, '".$this->getSubmitUrl()."')";
|
| 18 |
+
$button = $this->getLayout()->createBlock('adminhtml/widget_button')
|
| 19 |
+
->setData(array(
|
| 20 |
+
'label' => Mage::helper('sales')->__('Get DFraud Data'),
|
| 21 |
+
'class' => 'save',
|
| 22 |
+
'onclick' => $onclick
|
| 23 |
+
));
|
| 24 |
+
$this->setChild('submit_button', $button);
|
| 25 |
+
return parent::_prepareLayout();
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
public function getSubmitUrl()
|
| 29 |
+
{
|
| 30 |
+
return $this->getUrl('*/dfraud', array('order_id'=>$this->getOrder()->getId()));
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* Retrieve order model
|
| 35 |
+
*
|
| 36 |
+
* @return Mage_Sales_Model_Order
|
| 37 |
+
*/
|
| 38 |
+
public function getOrder()
|
| 39 |
+
{
|
| 40 |
+
return Mage::registry('sales_order');
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
/**
|
| 44 |
+
* Based on the object being viewed i.e. order, invoice etc then
|
| 45 |
+
* lets get the note from the order if available
|
| 46 |
+
*
|
| 47 |
+
* @return void
|
| 48 |
+
*/
|
| 49 |
+
private function _initNote()
|
| 50 |
+
{
|
| 51 |
+
echo "asdfadsfa";exit;
|
| 52 |
+
$noteId = '';
|
| 53 |
+
|
| 54 |
+
if (! is_null(Mage::registry('current_order'))) {
|
| 55 |
+
$noteId = Mage::registry('current_order')->getData('delivery_note_id');
|
| 56 |
+
}
|
| 57 |
+
elseif(! is_null(Mage::registry('current_shipment'))) {
|
| 58 |
+
$noteId = Mage::registry('current_shipment')->getOrder()->getData('delivery_note_id');
|
| 59 |
+
}
|
| 60 |
+
elseif(! is_null(Mage::registry('current_invoice'))) {
|
| 61 |
+
$noteId = Mage::registry('current_invoice')->getOrder()->getData('delivery_note_id');
|
| 62 |
+
}
|
| 63 |
+
elseif(! is_null(Mage::registry('current_creditmemo'))) {
|
| 64 |
+
$noteId = Mage::registry('current_creditmemo')->getOrder()->getData('delivery_note_id');
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
if ($noteId != '') {
|
| 68 |
+
$this->_note = Mage::getModel('deliverynote/note')->load($noteId)->getNote();
|
| 69 |
+
}
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
/**
|
| 73 |
+
* Initialise the delivery instruction and return
|
| 74 |
+
*
|
| 75 |
+
* @return mixed bool|string
|
| 76 |
+
*/
|
| 77 |
+
protected function getNote()
|
| 78 |
+
{
|
| 79 |
+
|
| 80 |
+
if (is_null($this->_note)) {
|
| 81 |
+
$this->_initNote();
|
| 82 |
+
}
|
| 83 |
+
return empty($this->_note) ? false : $this->_note;
|
| 84 |
+
}
|
| 85 |
+
}
|
app/code/local/Df/DFraudIntegration/Helper/Data.php
ADDED
|
@@ -0,0 +1,649 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* DFraud Integration plugin.
|
| 5 |
+
*
|
| 6 |
+
* @category Df
|
| 7 |
+
* @package Df_DFraudIntegration
|
| 8 |
+
* @author Biju Thajudien <mailtobiju@gmail.com>
|
| 9 |
+
* @version 0.1.0
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
class Df_DFraudIntegration_Helper_Data extends Mage_Core_Helper_Abstract
|
| 13 |
+
{
|
| 14 |
+
/**
|
| 15 |
+
* Return the front end label as defined in config
|
| 16 |
+
*
|
| 17 |
+
* @return string
|
| 18 |
+
*/
|
| 19 |
+
public function getFrontendLabel()
|
| 20 |
+
{
|
| 21 |
+
return Mage::getStoreConfig('dfraudintegration_options/basic_settings/frontend_label');
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
public function getLicenceKey() {
|
| 25 |
+
return Mage::getStoreConfig('dfraudintegration_options/basic_settings/licence_key');
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
public function getIpLocation($ip){
|
| 29 |
+
$location_details = array();
|
| 30 |
+
|
| 31 |
+
$geoIpUrl = 'http://www.geobytes.com/IpLocator.htm?GetLocation&template=php3.txt&IpAddress='.$ip;
|
| 32 |
+
$tags = get_meta_tags($geoIpUrl);
|
| 33 |
+
|
| 34 |
+
$location_details['ip'] = $ip;
|
| 35 |
+
$location_details['known'] = $tags['known'];
|
| 36 |
+
$location_details['country'] = $tags['country'];
|
| 37 |
+
$location_details['region'] = $tags['region'];
|
| 38 |
+
$location_details['regioncode'] = $tags['regioncode'];
|
| 39 |
+
$location_details['city'] = $tags['city'];
|
| 40 |
+
$location_details['latitude'] = $tags['latitude'];
|
| 41 |
+
$location_details['longitude'] = $tags['longitude'];
|
| 42 |
+
$location_details['timezone'] = $tags['timezone'];
|
| 43 |
+
$location_details['country_id'] = $tags['iso2'];
|
| 44 |
+
|
| 45 |
+
//print_r($tags);
|
| 46 |
+
|
| 47 |
+
return $location_details;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
public function checkAddress($shippingId, $billingId, $ipLocation, $scores){
|
| 51 |
+
$checks = array('region','postcode','lastname','street','city','email','telephone','country_id','firstname',
|
| 52 |
+
'middlename');
|
| 53 |
+
|
| 54 |
+
$ipChecks = array('region','city','country_id');
|
| 55 |
+
|
| 56 |
+
$mismatch = array();
|
| 57 |
+
|
| 58 |
+
$shippingDetails = Mage::getModel('sales/order_address')->load($shippingId);
|
| 59 |
+
$billingDetails = Mage::getModel('sales/order_address')->load($billingId);
|
| 60 |
+
|
| 61 |
+
//check if the address exist with google geocode
|
| 62 |
+
//$this->p($scores);
|
| 63 |
+
$shippingGeoResult = $this->checkAddressExist($shippingDetails);
|
| 64 |
+
$billingGeoResult = $this->checkAddressExist($billingDetails);
|
| 65 |
+
|
| 66 |
+
$mismatch['shippingGeoResult'] = $shippingGeoResult;
|
| 67 |
+
$mismatch['billingGeoResult'] = $billingGeoResult;
|
| 68 |
+
|
| 69 |
+
//$this->p($shippingGeoResult);$this->p($billingGeoResult);
|
| 70 |
+
//Distance between billing and shipping address
|
| 71 |
+
$mismatch['dis']['bill_ship'] = $this->distance($shippingGeoResult['loc']['location'], $billingGeoResult['loc']['location']);
|
| 72 |
+
|
| 73 |
+
$ipLatLon['lat'] = $ipLocation['latitude'];
|
| 74 |
+
$ipLatLon['lng'] = $ipLocation['longitude'];
|
| 75 |
+
$mismatch['dis']['ip_ship'] = $this->distance($ipLatLon, $shippingGeoResult['loc']['location']);
|
| 76 |
+
|
| 77 |
+
$mismatch['dis']['ip_bill'] = $this->distance($ipLatLon, $billingGeoResult['loc']['location']);
|
| 78 |
+
|
| 79 |
+
$max_distance = Mage::getStoreConfig('dfraudintegration_options/dfraud_module_settings/maximum_distance');
|
| 80 |
+
$mismatch['dis']['score']['total'] = 0;
|
| 81 |
+
if($mismatch['dis']['ip_bill'] > $max_distance) {
|
| 82 |
+
$mismatch['dis']['score']['total'] = $this->getScore($scores,'dis_bill_ip');
|
| 83 |
+
$summary['dis_bill_ip'] = 1;
|
| 84 |
+
}
|
| 85 |
+
$mismatch['dis']['score']['max'] = $this->getModuleTotalScore($scores,array('dis_bill_ip'));
|
| 86 |
+
|
| 87 |
+
//check if billing and shipping address match
|
| 88 |
+
$addressDiff = false;
|
| 89 |
+
foreach($checks as $param){
|
| 90 |
+
if($shippingDetails[$param] != $billingDetails[$param]) {
|
| 91 |
+
$addressDiff = true;
|
| 92 |
+
$mismatch['address'][$param]['billing'] = $billingDetails[$param];
|
| 93 |
+
$mismatch['address'][$param]['shipping'] = $shippingDetails[$param];
|
| 94 |
+
}
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
$mismatch['address']['score']['total'] = 0;
|
| 98 |
+
if($addressDiff) {
|
| 99 |
+
$mismatch['address']['score']['total'] = $this->getScore($scores,'address_bill_ship');
|
| 100 |
+
$summary['address_bill_ship'] = 1;
|
| 101 |
+
}
|
| 102 |
+
$mismatch['address']['score']['max'] = $this->getModuleTotalScore($scores,array('address_bill_ship'));
|
| 103 |
+
|
| 104 |
+
//compare ip address with billing and shipping address
|
| 105 |
+
$mismatch['ip']['location'] = $ipLocation;
|
| 106 |
+
$mismatch['ip']['location']['loc_str'] = $ipLocation['city'].", ".$ipLocation['region'].", ".$ipLocation['country'];
|
| 107 |
+
foreach($ipChecks as $param){
|
| 108 |
+
if(! $this->isStringEqual($ipLocation[$param], $billingDetails[$param])) {
|
| 109 |
+
$mismatch['ip']['ip_bill_diff'][$param] = 1;
|
| 110 |
+
$mismatch['ip']['score'][$param] = $this->getScore($scores,'ip_bill_'.$param);
|
| 111 |
+
$summary['ip_bill_'.$param] = 1;
|
| 112 |
+
}
|
| 113 |
+
if(! $this->isStringEqual($ipLocation[$param], $shippingDetails[$param])) {
|
| 114 |
+
$mismatch['ip']['ip_ship_diff'][$param] = 1;
|
| 115 |
+
}
|
| 116 |
+
//if($ipLocation[$param] != $billingDetails[$param]) {
|
| 117 |
+
$mismatch['ip'][$param]['ip'] = $ipLocation[$param];
|
| 118 |
+
$mismatch['ip'][$param]['billing'] = $billingDetails[$param];
|
| 119 |
+
//}
|
| 120 |
+
//if($ipLocation[$param] != $shippingDetails[$param]) {
|
| 121 |
+
$mismatch['ip'][$param]['ip'] = $ipLocation[$param];
|
| 122 |
+
$mismatch['ip'][$param]['shipping'] = $shippingDetails[$param];
|
| 123 |
+
//}
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
|
| 127 |
+
$total = 0;
|
| 128 |
+
foreach($mismatch['ip']['score'] as $ip_scores){
|
| 129 |
+
$total += $ip_scores;
|
| 130 |
+
}
|
| 131 |
+
$module_max = $this->getModuleTotalScore($scores, array('ip_bill_city','ip_bill_region','ip_bill_country_id'));
|
| 132 |
+
$mismatch['ip']['score']['total'] = $total;
|
| 133 |
+
$mismatch['ip']['score']['max'] = $module_max;
|
| 134 |
+
|
| 135 |
+
|
| 136 |
+
//check high risk country
|
| 137 |
+
$resource = Mage::getSingleton('core/resource');
|
| 138 |
+
$readConnection = $resource->getConnection('core_read');
|
| 139 |
+
$query = 'SELECT * FROM ' . $resource->getTableName('dfraudintegration/highriskcountries');
|
| 140 |
+
$results = $readConnection->fetchAll($query);
|
| 141 |
+
|
| 142 |
+
$country_id = 'country_id';
|
| 143 |
+
foreach($results as $highRisk) {
|
| 144 |
+
// var_dump($highRisk);
|
| 145 |
+
if($ipLocation[$country_id] == $highRisk[$country_id]) {
|
| 146 |
+
$mismatch['hrc']['ip'] = true;
|
| 147 |
+
$mismatch['hrc']['score']['ip'] = $this->getScore($scores,'hr_ip');
|
| 148 |
+
$summary['hr_ip'] = 1;
|
| 149 |
+
}
|
| 150 |
+
if($shippingDetails[$country_id] == $highRisk[$country_id]) {
|
| 151 |
+
$mismatch['hrc']['shipping'] = true;
|
| 152 |
+
$mismatch['hrc']['score']['shipping'] = $this->getScore($scores,'hr_ship');
|
| 153 |
+
$summary['hr_ship'] = 1;
|
| 154 |
+
}
|
| 155 |
+
if($billingDetails[$country_id] == $highRisk[$country_id]) {
|
| 156 |
+
$mismatch['hrc']['billing'] = true;
|
| 157 |
+
$mismatch['hrc']['score']['billing'] = $this->getScore($scores,'hr_bill');
|
| 158 |
+
$summary['hr_bill'] = 1;
|
| 159 |
+
}
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
$hrctotal = 0;
|
| 163 |
+
foreach($mismatch['hrc']['score'] as $hrcscore) {
|
| 164 |
+
$hrctotal += $hrcscore;
|
| 165 |
+
}
|
| 166 |
+
$mismatch['hrc']['score']['total'] = $hrctotal;
|
| 167 |
+
$mismatch['hrc']['score']['max'] = $this->getModuleTotalScore($scores,array('hr_ip','hr_ship','hr_bill'));
|
| 168 |
+
|
| 169 |
+
//Email valid check
|
| 170 |
+
$email_result = $this->checkEmailValid($order->customer_email);
|
| 171 |
+
$mismatch['email'] = $email_result;
|
| 172 |
+
|
| 173 |
+
//Check postal codes
|
| 174 |
+
$post_loc_bill = $this->checkPostalCode($billingDetails['postcode'],$billingDetails['country_id']);
|
| 175 |
+
|
| 176 |
+
//print_r($post_loc_bill);
|
| 177 |
+
if(!empty($post_loc_bill['postalcodes'])) {
|
| 178 |
+
foreach($post_loc_bill['postalcodes'] as $postCode) {
|
| 179 |
+
if($this->isStringContains($billingDetails['street'], $postCode['placeName'])){
|
| 180 |
+
$loc = $postCode['placeName'];
|
| 181 |
+
$loc .= ", ".$postCode['adminName1'];
|
| 182 |
+
$loc .= ", ".$postCode['countryCode'];
|
| 183 |
+
break;
|
| 184 |
+
}
|
| 185 |
+
}
|
| 186 |
+
if($loc != ""){
|
| 187 |
+
$mismatch['post_loc']['billing'] = $loc;
|
| 188 |
+
} else {
|
| 189 |
+
$loc = "<strong>Address and postal code exact match not found.<br>Matches for postal code (".
|
| 190 |
+
$post_loc_bill['postalcodes'][0]['postalcode']."):</strong><br>";
|
| 191 |
+
foreach($post_loc_bill['postalcodes'] as $postCode) {
|
| 192 |
+
$loc .= $postCode['placeName'];
|
| 193 |
+
if(!is_null($postCode['adminName1']))
|
| 194 |
+
$loc .= ", ".$postCode['adminName1'];
|
| 195 |
+
$loc .= ", ".$postCode['countryCode'];
|
| 196 |
+
$loc .= "<br>";
|
| 197 |
+
}
|
| 198 |
+
$mismatch['post_loc']['billing'] = $loc;
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
} else {
|
| 202 |
+
$mismatch['post_loc']['billing'] = "NOT FOUND";
|
| 203 |
+
}
|
| 204 |
+
|
| 205 |
+
if($mismatch['post_loc']['billing'] == "NOT FOUND") {
|
| 206 |
+
$mismatch['post_loc']['score']['billing'] = $this->getScore($scores, 'zip_bill');
|
| 207 |
+
$summary['zip_bill'] = 1;
|
| 208 |
+
}
|
| 209 |
+
|
| 210 |
+
if($billingDetails['postcode'] != $shippingDetails['postcode']
|
| 211 |
+
|| $billingDetails['country_id'] != $shippingDetails['country_id']) {
|
| 212 |
+
|
| 213 |
+
$post_loc_ship = $this->checkPostalCode($shippingDetails['postcode'],$shippingDetails['country_id']);
|
| 214 |
+
//print_r($post_loc_ship);
|
| 215 |
+
$loc = "";
|
| 216 |
+
if(!empty($post_loc_ship['postalcodes'])) {
|
| 217 |
+
foreach($post_loc_ship['postalcodes'] as $postCode) {
|
| 218 |
+
if($this->isStringContains($shippingDetails['street'], $postCode['placeName'])){
|
| 219 |
+
$loc = $postCode['placeName'];
|
| 220 |
+
$loc .= ", ".$postCode['adminName1'];
|
| 221 |
+
$loc .= ", ".$postCode['countryCode'];
|
| 222 |
+
break;
|
| 223 |
+
}
|
| 224 |
+
}
|
| 225 |
+
if($loc != ""){
|
| 226 |
+
$mismatch['post_loc']['shipping'] = $loc;
|
| 227 |
+
} else {
|
| 228 |
+
$loc = "<strong>Address and postal code exact match not found. <br>Matches for postal code (".
|
| 229 |
+
$post_loc_ship['postalcodes'][0]['postalcode']."):</strong><br>";
|
| 230 |
+
foreach($post_loc_ship['postalcodes'] as $postCode) {
|
| 231 |
+
$loc .= $postCode['placeName'];
|
| 232 |
+
if(!is_null($postCode['adminName1']))
|
| 233 |
+
$loc .= ", ".$postCode['adminName1'];
|
| 234 |
+
$loc .= ", ".$postCode['countryCode'];
|
| 235 |
+
$loc .= "<br>";
|
| 236 |
+
}
|
| 237 |
+
$mismatch['post_loc']['shipping'] = $loc;
|
| 238 |
+
}
|
| 239 |
+
} else {
|
| 240 |
+
$mismatch['post_loc']['shipping'] = "NOT FOUND";
|
| 241 |
+
}
|
| 242 |
+
|
| 243 |
+
} else {
|
| 244 |
+
$mismatch['post_loc']['shipping'] = $mismatch['post_loc']['billing'];
|
| 245 |
+
}
|
| 246 |
+
|
| 247 |
+
if($mismatch['post_loc']['shipping'] == "NOT FOUND") {
|
| 248 |
+
$mismatch['post_loc']['score']['shipping'] = $this->getScore($scores, 'zip_ship');
|
| 249 |
+
$summary['zip_ship'] = 1;
|
| 250 |
+
}
|
| 251 |
+
|
| 252 |
+
$ziptotal = 0;
|
| 253 |
+
foreach($mismatch['post_loc']['score'] as $zipscore) {
|
| 254 |
+
$ziptotal += $zipscore;
|
| 255 |
+
}
|
| 256 |
+
$mismatch['post_loc']['score']['total'] = $ziptotal;
|
| 257 |
+
$mismatch['post_loc']['score']['max'] = $this->getModuleTotalScore($scores,array('zip_bill','zip_ship'));
|
| 258 |
+
|
| 259 |
+
$mismatch['summary'] = $summary;
|
| 260 |
+
//$this->p($mismatch);exit;
|
| 261 |
+
return $mismatch;
|
| 262 |
+
}
|
| 263 |
+
|
| 264 |
+
public function getOrderHistory($custId, $ip, $scores){
|
| 265 |
+
//Get the order history of the customer
|
| 266 |
+
$orders = Mage::getResourceModel('sales/order_collection')
|
| 267 |
+
->addFieldToSelect('*')
|
| 268 |
+
->addFieldToFilter('customer_id', $custId);
|
| 269 |
+
$order_count = count($orders->getItems());
|
| 270 |
+
|
| 271 |
+
$orders_ip = Mage::getResourceModel('sales/order_collection')
|
| 272 |
+
->addFieldToSelect('*')
|
| 273 |
+
->addFieldToFilter('remote_ip', $ip);
|
| 274 |
+
$order_count_ip = count($orders_ip->getItems());
|
| 275 |
+
|
| 276 |
+
$resource = Mage::getSingleton('core/resource');
|
| 277 |
+
$readConnection = $resource->getConnection('core_read');
|
| 278 |
+
$query = 'SELECT * FROM ' . $resource->getTableName('sales/order_status');
|
| 279 |
+
$statuss = $readConnection->fetchAll($query);
|
| 280 |
+
|
| 281 |
+
|
| 282 |
+
//$this->p($results);
|
| 283 |
+
$order_status['count'] = $order_count;
|
| 284 |
+
foreach($statuss as $status) {
|
| 285 |
+
$order_status['status'][$status['label']] = 0;
|
| 286 |
+
foreach($orders as $order) {
|
| 287 |
+
if($order->getStatus() == $status['status']) {
|
| 288 |
+
$order_status['status'][$status['label']] ++;
|
| 289 |
+
}
|
| 290 |
+
}
|
| 291 |
+
}
|
| 292 |
+
|
| 293 |
+
$order_status_ip['count'] = $order_count_ip;
|
| 294 |
+
foreach($statuss as $status) {
|
| 295 |
+
$order_status_ip['status'][$status['label']] = 0;
|
| 296 |
+
foreach($orders_ip as $order) {
|
| 297 |
+
if($order->getStatus() == $status['status']) {
|
| 298 |
+
$order_status_ip['status'][$status['label']] ++;
|
| 299 |
+
}
|
| 300 |
+
}
|
| 301 |
+
}
|
| 302 |
+
|
| 303 |
+
$user_orders = array("user" => $order_status,"ip"=>$order_status_ip);
|
| 304 |
+
|
| 305 |
+
$user_orders['count']['score']['order_hist_count_ip_user'] = 0;
|
| 306 |
+
if($order_status_ip['count'] != $order_status['count'] ) {
|
| 307 |
+
$user_orders['count']['score']['order_hist_count_ip_user'] = $this->getScore($scores, 'order_hist_count_ip_user');
|
| 308 |
+
}
|
| 309 |
+
|
| 310 |
+
$fraudLabels = array('Suspected Fraud');
|
| 311 |
+
foreach($fraudLabels as $fraudLabel) {
|
| 312 |
+
if($order_status_ip['status'][$fraudLabel] > 0) {
|
| 313 |
+
$user_orders['ip']['score']['order_hist_fraud'] = $this->getScore($scores, 'order_hist_fraud');
|
| 314 |
+
$summary['order_hist_fraud'] = 1;
|
| 315 |
+
}
|
| 316 |
+
}
|
| 317 |
+
|
| 318 |
+
foreach($fraudLabels as $fraudLabel) {
|
| 319 |
+
if($order_status['status'][$fraudLabel] > 0) {
|
| 320 |
+
$user_orders['user']['score']['order_hist_fraud'] = $this->getScore($scores, 'order_hist_fraud');
|
| 321 |
+
$summary['order_hist_fraud'] = 1;
|
| 322 |
+
}
|
| 323 |
+
}
|
| 324 |
+
|
| 325 |
+
$total = $user_orders['count']['score']['order_hist_count_ip_user'] +
|
| 326 |
+
( $user_orders['ip']['score']['order_hist_fraud'] > 0 ? $user_orders['ip']['score']['order_hist_fraud'] :
|
| 327 |
+
$user_orders['user']['score']['order_hist_fraud'] );
|
| 328 |
+
|
| 329 |
+
if($order_count == 1) {
|
| 330 |
+
$total += $this->getScore($scores, 'order_hist_first_order');
|
| 331 |
+
$summary['order_hist_first_order'] = 1;
|
| 332 |
+
}
|
| 333 |
+
|
| 334 |
+
$user_orders['score']['total'] = $total;
|
| 335 |
+
$user_orders['score']['max'] = $this->getModuleTotalScore($scores,array('order_hist_count_ip_user',
|
| 336 |
+
'order_hist_fraud',
|
| 337 |
+
'order_hist_first_order'));
|
| 338 |
+
$user_orders['summary'] = $summary;
|
| 339 |
+
//$this->p($user_orders);exit;
|
| 340 |
+
|
| 341 |
+
return $user_orders;
|
| 342 |
+
}
|
| 343 |
+
|
| 344 |
+
private function isStringContains($major, $minor){
|
| 345 |
+
$major = str_replace(' ','',$major);
|
| 346 |
+
$minor = str_replace(' ','',$minor);
|
| 347 |
+
|
| 348 |
+
return strpos(strtoupper($major), strtoupper($minor));
|
| 349 |
+
}
|
| 350 |
+
|
| 351 |
+
private function isStringEqual($major, $minor){
|
| 352 |
+
$major = str_replace(' ','',$major);
|
| 353 |
+
$minor = str_replace(' ','',$minor);
|
| 354 |
+
|
| 355 |
+
return strcasecmp($major,$minor) == 0 ? true : false;
|
| 356 |
+
}
|
| 357 |
+
|
| 358 |
+
public function checkPostalCode($postcode,$country) {
|
| 359 |
+
// Build validation request
|
| 360 |
+
$Params = array('postalcode' => $postcode,
|
| 361 |
+
'country' => $country,
|
| 362 |
+
'username' => 'dfraud');
|
| 363 |
+
$Request = @http_build_query($Params);
|
| 364 |
+
$ctxData = array(
|
| 365 |
+
'method' => "GET",
|
| 366 |
+
'header' => "Connection: close\r\n".
|
| 367 |
+
"Content-Length: ".strlen($Request)."\r\n",
|
| 368 |
+
'content'=> $Request);
|
| 369 |
+
$ctx = @stream_context_create(array('http' => $ctxData));
|
| 370 |
+
|
| 371 |
+
$api = "http://api.geonames.org/postalCodeLookupJSON?".$Request;
|
| 372 |
+
$json = @file_get_contents($api, false, null);
|
| 373 |
+
$result = json_decode($json, true);
|
| 374 |
+
|
| 375 |
+
return $result;
|
| 376 |
+
}
|
| 377 |
+
|
| 378 |
+
public function checkEmailValid($email) {
|
| 379 |
+
// Build validation request
|
| 380 |
+
$Params = array('email' => $email,
|
| 381 |
+
'api' => '987588a43b3');
|
| 382 |
+
$Request = @http_build_query($Params);
|
| 383 |
+
$ctxData = array(
|
| 384 |
+
'method' => "GET",
|
| 385 |
+
'header' => "Connection: close\r\n".
|
| 386 |
+
"Content-Length: ".strlen($Request)."\r\n",
|
| 387 |
+
'content'=> $Request);
|
| 388 |
+
$ctx = @stream_context_create(array('http' => $ctxData));
|
| 389 |
+
|
| 390 |
+
// Check validation result
|
| 391 |
+
$APIUrl = 'http://123airtime.com/email_verify/email_verifier.php?'.$Request;
|
| 392 |
+
$json = @file_get_contents($APIUrl, false, null);
|
| 393 |
+
$json = iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $json);
|
| 394 |
+
|
| 395 |
+
$result = json_decode($json, true);
|
| 396 |
+
|
| 397 |
+
//print_r($result);
|
| 398 |
+
return $result['result'];
|
| 399 |
+
}
|
| 400 |
+
public function p($data){
|
| 401 |
+
echo("<pre>");
|
| 402 |
+
print_r($data);
|
| 403 |
+
}
|
| 404 |
+
|
| 405 |
+
private function checkAddressExist($address){
|
| 406 |
+
|
| 407 |
+
$addressStr = $address->street;
|
| 408 |
+
if(!is_null($address->city)) {
|
| 409 |
+
$addressStr .= ','.$address->city;
|
| 410 |
+
}
|
| 411 |
+
if(!is_null($address->region)) {
|
| 412 |
+
$addressStr .= ','.$address->region;
|
| 413 |
+
}
|
| 414 |
+
if(!is_null($address->country_id)) {
|
| 415 |
+
$addressStr .=','.$address->country_id;
|
| 416 |
+
}
|
| 417 |
+
$api = "http://maps.googleapis.com/maps/api/geocode/json?address=";
|
| 418 |
+
$APIUrl = $api.urlencode($addressStr).'&sensor=true';
|
| 419 |
+
$json = @file_get_contents($APIUrl, false, null);
|
| 420 |
+
$result_loc = json_decode($json,true);
|
| 421 |
+
|
| 422 |
+
if($result_loc['status'] == 'ZERO_RESULTS') {
|
| 423 |
+
$street = explode("\n", $address->street);
|
| 424 |
+
$addressStr = $street[1].','.$address->city.','.$address->country_id;
|
| 425 |
+
$APIUrl = $api.urlencode($addressStr).'&sensor=true';
|
| 426 |
+
$json = @file_get_contents($APIUrl, false, null);
|
| 427 |
+
$result_street = json_decode($json,true);
|
| 428 |
+
|
| 429 |
+
if($result_street['status'] == 'ZERO_RESULTS') {
|
| 430 |
+
$addressStr = $address->city.','.$address->country_id;
|
| 431 |
+
$APIUrl = $api.urlencode($addressStr).'&sensor=true';
|
| 432 |
+
$json = @file_get_contents($APIUrl, false, null);
|
| 433 |
+
$result_city = json_decode($json,true);
|
| 434 |
+
|
| 435 |
+
if($result_city['status'] == 'ZERO_RESULTS') {
|
| 436 |
+
$address_result['status'] = 0;
|
| 437 |
+
$address_result['type'] = 'City';
|
| 438 |
+
} else {
|
| 439 |
+
$address_result['status'] = 1;
|
| 440 |
+
$address_result['type'] = 'City';
|
| 441 |
+
$address_result['loc'] = $result_city['results'][0]['geometry']['location'];
|
| 442 |
+
$address_result['formatted_address'] = $result_city['results'][0]['formatted_address'];
|
| 443 |
+
$address_result['url'] = $APIUrl;
|
| 444 |
+
}
|
| 445 |
+
} else {
|
| 446 |
+
$address_result['status'] = 1;
|
| 447 |
+
$address_result['type'] = 'Street';
|
| 448 |
+
$address_result['loc'] = $result_street['results'][0]['geometry']['location'];
|
| 449 |
+
$address_result['formatted_address'] = $result_street['results'][0]['formatted_address'];
|
| 450 |
+
$address_result['url'] = $APIUrl;
|
| 451 |
+
}
|
| 452 |
+
} else {
|
| 453 |
+
$address_result['status'] = 1;
|
| 454 |
+
$address_result['type'] = 'Full';
|
| 455 |
+
$address_result['loc'] = $result_loc['results'][0]['geometry'];
|
| 456 |
+
$address_result['formatted_address'] = $result_loc['results'][0]['formatted_address'];
|
| 457 |
+
$address_result['url'] = $APIUrl;
|
| 458 |
+
|
| 459 |
+
}
|
| 460 |
+
//$this->p($addressStr);
|
| 461 |
+
return $address_result;
|
| 462 |
+
}
|
| 463 |
+
|
| 464 |
+
private function distance($loc1, $loc2) {
|
| 465 |
+
$pi80 = M_PI / 180;
|
| 466 |
+
$lat1 = $loc1['lat']; $lng1 = $loc1['lng'];
|
| 467 |
+
$lat2 = $loc2['lat']; $lng2 = $loc2['lng'];
|
| 468 |
+
|
| 469 |
+
$lat1 *= $pi80;
|
| 470 |
+
$lng1 *= $pi80;
|
| 471 |
+
$lat2 *= $pi80;
|
| 472 |
+
$lng2 *= $pi80;
|
| 473 |
+
|
| 474 |
+
$r = 6372.797; // mean radius of Earth in km
|
| 475 |
+
$dlat = $lat2 - $lat1;
|
| 476 |
+
$dlng = $lng2 - $lng1;
|
| 477 |
+
$a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
|
| 478 |
+
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
|
| 479 |
+
$km = $r * $c;
|
| 480 |
+
|
| 481 |
+
return ceil($km);
|
| 482 |
+
}
|
| 483 |
+
|
| 484 |
+
private function getScore($scores, $key){
|
| 485 |
+
foreach($scores as $score) {
|
| 486 |
+
if($score['field'] == $key) {
|
| 487 |
+
return $score['score'];
|
| 488 |
+
}
|
| 489 |
+
}
|
| 490 |
+
}
|
| 491 |
+
|
| 492 |
+
private function getModuleTotalScore($scores, $keys){
|
| 493 |
+
foreach($scores as $score) {
|
| 494 |
+
if(in_array($score['field'],$keys)) {
|
| 495 |
+
$total += $score['score'];
|
| 496 |
+
}
|
| 497 |
+
}
|
| 498 |
+
return $total;
|
| 499 |
+
}
|
| 500 |
+
|
| 501 |
+
public function getBinData($payments, $ip, $country_id, $scores){
|
| 502 |
+
|
| 503 |
+
foreach($payments as $pay) {
|
| 504 |
+
$payData = $pay->getData();
|
| 505 |
+
$ccEncrypt = $payData['cc_number_enc'];
|
| 506 |
+
if(isset($ccEncrypt)) {
|
| 507 |
+
$ccBinNo = substr($pay->decrypt($ccEncrypt), 0, 6);
|
| 508 |
+
$encyptedBin = $this->encrypt($ccBinNo);
|
| 509 |
+
//echo "Encrypted=".$encypted;
|
| 510 |
+
//echo "Decypted=".$this->decrypt($encypted);exit;
|
| 511 |
+
|
| 512 |
+
$params = array('apikey' => $this->getLicenceKey(),
|
| 513 |
+
'ccBin' => $encyptedBin,
|
| 514 |
+
'ip' => $ip,
|
| 515 |
+
'country' => $country_id);
|
| 516 |
+
$url = 'http://ecomshopsecurity.com/dfraud_checks/bin/BinData.php';
|
| 517 |
+
$result_api = $this->getApiResult($params, $url);
|
| 518 |
+
|
| 519 |
+
/*$result_api = array('bin'=>
|
| 520 |
+
array('binCountry' => 'US', 'binName' => 'State Bank of India',
|
| 521 |
+
'binPhone' => '123456'),
|
| 522 |
+
'lic'=>array('result'=>0, 'err'=>"User request exceeded free limit of 50 requests. <br/>Please update your licence from<br/>
|
| 523 |
+
<a href=\"http://ecomshopsecurity.com/index.php/dfraud-integration.html\" target=\"_blank\">http://ecomshopsecurity.com/index.php/dfraud-integration.html</a>"));*/
|
| 524 |
+
|
| 525 |
+
$result = $result_api['bin'];
|
| 526 |
+
if($result_api['lic']['result'] == 1) {
|
| 527 |
+
if($country_id != $result['binCountry']) {
|
| 528 |
+
$result['country_match'] = "NO";
|
| 529 |
+
$result['score']['total'] = $this->getScore($scores, 'bin_country');
|
| 530 |
+
$summary['bin_country'] = 1;
|
| 531 |
+
} else {
|
| 532 |
+
$result['score']['total'] = 0;
|
| 533 |
+
$result['country_match'] = "YES";
|
| 534 |
+
}
|
| 535 |
+
} else {
|
| 536 |
+
$result = array('binCountry' => '-', 'binName' => '-', 'binPhone' => '-');
|
| 537 |
+
$result['country_match'] = "-";
|
| 538 |
+
$result['score']['total'] = 0;
|
| 539 |
+
$result['non_cc'] = 1;
|
| 540 |
+
$result['err'] = $result_api['lic']['err'];
|
| 541 |
+
}
|
| 542 |
+
|
| 543 |
+
} else {
|
| 544 |
+
$result = array('binCountry' => '-', 'binName' => '-', 'binPhone' => '-');
|
| 545 |
+
$result['country_match'] = "-";
|
| 546 |
+
$result['score']['total'] = 0;
|
| 547 |
+
$result['non_cc'] = 1;
|
| 548 |
+
}
|
| 549 |
+
}
|
| 550 |
+
|
| 551 |
+
$result['score']['max'] = $this->getModuleTotalScore($scores,array('bin_country'));
|
| 552 |
+
$result['summary'] = $summary;
|
| 553 |
+
|
| 554 |
+
//$this->p($result); exit;
|
| 555 |
+
return $result;
|
| 556 |
+
}
|
| 557 |
+
|
| 558 |
+
private function encrypt($str) {
|
| 559 |
+
$key = "80cdc815";
|
| 560 |
+
$block = mcrypt_get_block_size('des', 'ecb');
|
| 561 |
+
$pad = $block - (strlen($str) % $block);
|
| 562 |
+
$str .= str_repeat(chr($pad), $pad);
|
| 563 |
+
|
| 564 |
+
$ecrypt = mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
|
| 565 |
+
|
| 566 |
+
return base64_encode($ecrypt);
|
| 567 |
+
}
|
| 568 |
+
|
| 569 |
+
public function getApiResult($params, $url) {
|
| 570 |
+
$Request = @http_build_query($params);
|
| 571 |
+
$ctxData = array(
|
| 572 |
+
'method' => "GET",
|
| 573 |
+
'header' => "Connection: close\r\n".
|
| 574 |
+
"Content-Length: ".strlen($Request)."\r\n",
|
| 575 |
+
'content'=> $Request);
|
| 576 |
+
$ctx = @stream_context_create(array('http' => $ctxData));
|
| 577 |
+
|
| 578 |
+
$APIUrl = $url.'?'.$Request;
|
| 579 |
+
|
| 580 |
+
$json = @file_get_contents($APIUrl, false, null);
|
| 581 |
+
$json = iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $json);
|
| 582 |
+
|
| 583 |
+
return json_decode($json, true);
|
| 584 |
+
|
| 585 |
+
}
|
| 586 |
+
|
| 587 |
+
public function getResultTotalScore($results) {
|
| 588 |
+
|
| 589 |
+
$total = 0; $max = 0;
|
| 590 |
+
foreach($results as $key => $a_result) {
|
| 591 |
+
if(is_array($a_result)) {
|
| 592 |
+
$total += $a_result['score']['total'];
|
| 593 |
+
$max += $a_result['score']['max'];
|
| 594 |
+
}
|
| 595 |
+
}
|
| 596 |
+
$m_result = array();
|
| 597 |
+
$m_result['total'] = $total;
|
| 598 |
+
$m_result['max'] = $max;
|
| 599 |
+
|
| 600 |
+
return $m_result;
|
| 601 |
+
}
|
| 602 |
+
|
| 603 |
+
public function getRiskScoreDescription($scores, $fields) {
|
| 604 |
+
$i = 0;
|
| 605 |
+
foreach($fields as $key=>$field) {
|
| 606 |
+
foreach($scores as $score) {
|
| 607 |
+
if($score['field'] == $key) {
|
| 608 |
+
$summary['issues'][$i]['desc'] = $score['description'];
|
| 609 |
+
$summary['issues'][$i++]['risk'] = $score['risk'];
|
| 610 |
+
}
|
| 611 |
+
}
|
| 612 |
+
}
|
| 613 |
+
|
| 614 |
+
$j = 0;
|
| 615 |
+
foreach($summary['issues'] as $summ) {
|
| 616 |
+
$risks[$j++] = $summ['risk'];
|
| 617 |
+
}
|
| 618 |
+
|
| 619 |
+
if(in_array('HIGH', $risks)) {
|
| 620 |
+
$summary['risk'] = 'HIGH';
|
| 621 |
+
} else if(in_array('MEDIUM', $risks)){
|
| 622 |
+
$summary['risk'] = 'MEDIUM';
|
| 623 |
+
} else {
|
| 624 |
+
$summary['risk'] = 'LOW';
|
| 625 |
+
}
|
| 626 |
+
|
| 627 |
+
|
| 628 |
+
return $summary;
|
| 629 |
+
}
|
| 630 |
+
|
| 631 |
+
public function checkOrderAmount($amount, $scores) {
|
| 632 |
+
$max_amount = Mage::getStoreConfig('dfraudintegration_options/dfraud_module_settings/maximum_order_amount');
|
| 633 |
+
$result['amount'] = $amount;
|
| 634 |
+
$result['max_amount'] = $max_amount;
|
| 635 |
+
$result['score']['total'] = 0;
|
| 636 |
+
if($amount > $max_amount) {
|
| 637 |
+
$result['amount_higher'] = "YES";
|
| 638 |
+
$result['score']['total'] = $this->getScore($scores, 'order_amount_avg');
|
| 639 |
+
$summary['order_amount_avg'] = 1;
|
| 640 |
+
} else {
|
| 641 |
+
$result['amount_higher'] = "NO";
|
| 642 |
+
}
|
| 643 |
+
$result['score']['max'] = $this->getModuleTotalScore($scores,array('order_amount_avg'));
|
| 644 |
+
$result['summary'] = $summary;
|
| 645 |
+
|
| 646 |
+
//$this->p($result);exit;
|
| 647 |
+
return $result;
|
| 648 |
+
}
|
| 649 |
+
}
|
app/code/local/Df/DFraudIntegration/Model/Dfraud.php
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* DFraud Integration plugin.
|
| 5 |
+
*
|
| 6 |
+
* @category Df
|
| 7 |
+
* @package Df_DFraudIntegration
|
| 8 |
+
* @author Biju Thajudien <mailtobiju@gmail.com>
|
| 9 |
+
* @version 0.1.0
|
| 10 |
+
*/
|
| 11 |
+
class Df_DFraudIntegration_Model_Dfraud extends Mage_Core_Model_Abstract
|
| 12 |
+
{
|
| 13 |
+
protected function _construct()
|
| 14 |
+
{
|
| 15 |
+
$this->_init('dfraudintegration/dfraud');
|
| 16 |
+
}
|
| 17 |
+
}
|
app/code/local/Df/DFraudIntegration/Model/HighriskCountries.php
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* DFraud Integration plugin.
|
| 5 |
+
*
|
| 6 |
+
* @category Df
|
| 7 |
+
* @package Df_DFraudIntegration
|
| 8 |
+
* @author Biju Thajudien <mailtobiju@gmail.com>
|
| 9 |
+
* @version 0.1.0
|
| 10 |
+
*/
|
| 11 |
+
class Df_DFraudIntegration_Model_HighriskCountries extends Mage_Core_Model_Abstract
|
| 12 |
+
{
|
| 13 |
+
protected function _construct()
|
| 14 |
+
{
|
| 15 |
+
$this->_init('dfraudintegration/highriskcountries');
|
| 16 |
+
}
|
| 17 |
+
}
|
app/code/local/Df/DFraudIntegration/Model/Observer.php
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Delivery Note Observer Model
|
| 5 |
+
*
|
| 6 |
+
* @category Dh
|
| 7 |
+
* @package Dh_Deliverynote
|
| 8 |
+
* @author Drew Hunter <drewdhunter@gmail.com>
|
| 9 |
+
* @version 0.1.0
|
| 10 |
+
*/
|
| 11 |
+
class Df_DFraudIntegration_Model_Observer extends Mage_Core_Helper_Abstract
|
| 12 |
+
{
|
| 13 |
+
/**
|
| 14 |
+
* Take the note from post and and store it in the current quote.
|
| 15 |
+
*
|
| 16 |
+
* When the quote gets converted we will store the delivery note
|
| 17 |
+
* and assign to the order
|
| 18 |
+
*
|
| 19 |
+
* @param Varien_Object $observer
|
| 20 |
+
* @return Dh_Deliverynote_Model_Observer
|
| 21 |
+
*/
|
| 22 |
+
public function checkoutEventCreateDeliveryNote($observer)
|
| 23 |
+
{
|
| 24 |
+
$note = $observer->getEvent()->getRequest()->getParam('deliverynote-note');
|
| 25 |
+
|
| 26 |
+
if (! empty($note)) {
|
| 27 |
+
$observer->getEvent()->getQuote()->setDeliveryNote((string)$note)->save();
|
| 28 |
+
}
|
| 29 |
+
return $this;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* If the quote has a delivery note then lets save that note and
|
| 34 |
+
* assign the id to the order
|
| 35 |
+
*
|
| 36 |
+
* @param Varien_Object $observer
|
| 37 |
+
* @return Dh_Deliverynote_Model_Observer
|
| 38 |
+
*/
|
| 39 |
+
public function salesEventConvertQuoteToOrder($observer)
|
| 40 |
+
{
|
| 41 |
+
if ($note = $observer->getEvent()->getQuote()->getDeliveryNote()) {
|
| 42 |
+
$deliveryNote = Mage::getModel('dfraud/note')->setNote($note)->save();
|
| 43 |
+
|
| 44 |
+
$observer->getEvent()->getOrder()
|
| 45 |
+
->setDeliveryNoteId($deliveryNote->getDeliveryNoteId());
|
| 46 |
+
}
|
| 47 |
+
return $this;
|
| 48 |
+
}
|
| 49 |
+
}
|
app/code/local/Df/DFraudIntegration/Model/Resource/Dfraud.php
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* DFraud Integration plugin.
|
| 5 |
+
*
|
| 6 |
+
* @category Df
|
| 7 |
+
* @package Df_DFraudIntegration
|
| 8 |
+
* @author Biju Thajudien <mailtobiju@gmail.com>
|
| 9 |
+
* @version 0.1.0
|
| 10 |
+
*/
|
| 11 |
+
class Df_DFraudIntegration_Model_Resource_Dfraud extends Mage_Core_Model_Mysql4_Abstract
|
| 12 |
+
{
|
| 13 |
+
protected function _construct()
|
| 14 |
+
{
|
| 15 |
+
|
| 16 |
+
$this->_init('dfraudintegration/dfraud', 'dfraud_id');
|
| 17 |
+
}
|
| 18 |
+
}
|
app/code/local/Df/DFraudIntegration/Model/Resource/HighriskCountries.php
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* DFraud Integration plugin.
|
| 5 |
+
*
|
| 6 |
+
* @category Df
|
| 7 |
+
* @package Df_DFraudIntegration
|
| 8 |
+
* @author Biju Thajudien <mailtobiju@gmail.com>
|
| 9 |
+
* @version 0.1.0
|
| 10 |
+
*/
|
| 11 |
+
class Df_DFraudIntegration_Model_Resource_HighriskCountries extends Mage_Core_Model_Mysql4_Abstract
|
| 12 |
+
{
|
| 13 |
+
protected function _construct()
|
| 14 |
+
{
|
| 15 |
+
|
| 16 |
+
$this->_init('dfraudintegration/highriskcountries', 'id');
|
| 17 |
+
}
|
| 18 |
+
}
|
app/code/local/Df/DFraudIntegration/Model/Resource/Scores.php
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* DFraud Integration plugin.
|
| 5 |
+
*
|
| 6 |
+
* @category Df
|
| 7 |
+
* @package Df_DFraudIntegration
|
| 8 |
+
* @author Biju Thajudien <mailtobiju@gmail.com>
|
| 9 |
+
* @version 0.1.0
|
| 10 |
+
*/
|
| 11 |
+
class Df_DFraudIntegration_Model_Resource_Scores extends Mage_Core_Model_Mysql4_Abstract
|
| 12 |
+
{
|
| 13 |
+
protected function _construct()
|
| 14 |
+
{
|
| 15 |
+
|
| 16 |
+
$this->_init('dfraudintegration/scores', 'id');
|
| 17 |
+
}
|
| 18 |
+
}
|
app/code/local/Df/DFraudIntegration/Model/Resource/Setup.php
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* DFraud Integration plugin.
|
| 4 |
+
*
|
| 5 |
+
* @category Df
|
| 6 |
+
* @package Df_DFraudIntegration
|
| 7 |
+
* @author Biju Thajudien <mailtobiju@gmail.com>
|
| 8 |
+
* @version 0.1.0
|
| 9 |
+
*/
|
| 10 |
+
class Df_DFraudIntegration_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup {
|
| 11 |
+
}
|
| 12 |
+
?>
|
app/code/local/Df/DFraudIntegration/Model/Scores.php
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* DFraud Integration plugin.
|
| 5 |
+
*
|
| 6 |
+
* @category Df
|
| 7 |
+
* @package Df_DFraudIntegration
|
| 8 |
+
* @author Biju Thajudien <mailtobiju@gmail.com>
|
| 9 |
+
* @version 0.1.0
|
| 10 |
+
*/
|
| 11 |
+
class Df_DFraudIntegration_Model_Scores extends Mage_Core_Model_Abstract
|
| 12 |
+
{
|
| 13 |
+
protected function _construct()
|
| 14 |
+
{
|
| 15 |
+
$this->_init('dfraudintegration/scores');
|
| 16 |
+
}
|
| 17 |
+
}
|
app/code/local/Df/DFraudIntegration/controllers/Adminhtml/DfraudController.php
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* DFraud Integration plugin.
|
| 4 |
+
*
|
| 5 |
+
* @category Df
|
| 6 |
+
* @package Df_DFraudIntegration
|
| 7 |
+
* @author Biju Thajudien <mailtobiju@gmail.com>
|
| 8 |
+
* @version 0.1.0
|
| 9 |
+
*/
|
| 10 |
+
class Df_DFraudIntegration_Adminhtml_DfraudController extends Mage_Adminhtml_Controller_Action
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Initialize order model instance
|
| 14 |
+
*
|
| 15 |
+
* @return Mage_Sales_Model_Order || false
|
| 16 |
+
*/
|
| 17 |
+
protected function _initOrder()
|
| 18 |
+
{
|
| 19 |
+
$id = $this->getRequest()->getParam('order_id');
|
| 20 |
+
$order = Mage::getModel('sales/order')->load($id);
|
| 21 |
+
|
| 22 |
+
if (!$order->getId()) {
|
| 23 |
+
$this->_getSession()->addError($this->__('This order no longer exists.'));
|
| 24 |
+
$this->_redirect('*/*/');
|
| 25 |
+
$this->setFlag('', self::FLAG_NO_DISPATCH, true);
|
| 26 |
+
return false;
|
| 27 |
+
}
|
| 28 |
+
Mage::register('sales_order', $order);
|
| 29 |
+
Mage::register('current_order', $order);
|
| 30 |
+
|
| 31 |
+
echo "<pre>";print_r($shippingDetails);
|
| 32 |
+
|
| 33 |
+
return $order;
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* Index action
|
| 38 |
+
*/
|
| 39 |
+
public function indexAction()
|
| 40 |
+
{
|
| 41 |
+
if ($order = $this->_initOrder()) {
|
| 42 |
+
//echo "<pre>";print_r($order->customer_email);
|
| 43 |
+
$remote_ip = "197.79.0.3";//$order->getRemoteIp();
|
| 44 |
+
|
| 45 |
+
$helper = Mage::helper('dfraudintegration');
|
| 46 |
+
try {
|
| 47 |
+
$response = false;
|
| 48 |
+
$ipLocation = $helper->getIpLocation($remote_ip);
|
| 49 |
+
|
| 50 |
+
$shippingId = $order->getShippingAddressId();
|
| 51 |
+
$billingId = $order->getBillingAddressId();
|
| 52 |
+
|
| 53 |
+
$addressMismatch = $helper->checkAddress($shippingId, $billingId, $ipLocation);
|
| 54 |
+
$email_result = $helper->checkEmailValid($order->customer_email);
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
}
|
| 58 |
+
catch (Mage_Core_Exception $e) {
|
| 59 |
+
$response = array(
|
| 60 |
+
'error' => true,
|
| 61 |
+
'message' => $e->getMessage(),
|
| 62 |
+
);
|
| 63 |
+
}
|
| 64 |
+
catch (Exception $e) {
|
| 65 |
+
$response = array(
|
| 66 |
+
'error' => true,
|
| 67 |
+
'message' => $this->__('Cannot get dfraud data.')
|
| 68 |
+
);
|
| 69 |
+
}
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
|
| 75 |
+
}
|
| 76 |
+
?>
|
app/code/local/Df/DFraudIntegration/etc/config.xml
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="utf-8"?>
|
| 2 |
+
|
| 3 |
+
<config>
|
| 4 |
+
<modules>
|
| 5 |
+
<Df_DFraudIntegration>
|
| 6 |
+
<version>1.0.0</version>
|
| 7 |
+
</Df_DFraudIntegration>
|
| 8 |
+
</modules>
|
| 9 |
+
<global>
|
| 10 |
+
<models>
|
| 11 |
+
<dfraudintegration>
|
| 12 |
+
<class>Df_DFraudIntegration_Model</class>
|
| 13 |
+
<resourceModel>dfraudintegration_resource</resourceModel>
|
| 14 |
+
</dfraudintegration>
|
| 15 |
+
<dfraudintegration_resource>
|
| 16 |
+
<class>Df_DFraudIntegration_Model_Resource</class>
|
| 17 |
+
<entities>
|
| 18 |
+
<dfraud>
|
| 19 |
+
<table>dfraud</table>
|
| 20 |
+
</dfraud>
|
| 21 |
+
<highriskcountries>
|
| 22 |
+
<table>dfraud_highrisk_countries</table>
|
| 23 |
+
</highriskcountries>
|
| 24 |
+
<scores>
|
| 25 |
+
<table>dfraud_score</table>
|
| 26 |
+
</scores>
|
| 27 |
+
</entities>
|
| 28 |
+
</dfraudintegration_resource>
|
| 29 |
+
</models>
|
| 30 |
+
<helpers>
|
| 31 |
+
<dfraudintegration>
|
| 32 |
+
<class>Df_DFraudIntegration_Helper</class>
|
| 33 |
+
</dfraudintegration>
|
| 34 |
+
</helpers>
|
| 35 |
+
<resources>
|
| 36 |
+
<dfraudintegration_setup>
|
| 37 |
+
<setup>
|
| 38 |
+
<module>Df_DFraudIntegration</module>
|
| 39 |
+
<class>Df_DFraudIntegration_Model_Resource_Setup</class>
|
| 40 |
+
</setup>
|
| 41 |
+
</dfraudintegration_setup>
|
| 42 |
+
</resources>
|
| 43 |
+
<blocks>
|
| 44 |
+
<dfraudintegration>
|
| 45 |
+
<class>Df_DFraudIntegration_Block</class>
|
| 46 |
+
</dfraudintegration>
|
| 47 |
+
</blocks>
|
| 48 |
+
<remote_addr_headers><!-- list headers that contain real client IP if webserver is behind a reverse proxy -->
|
| 49 |
+
<header1>HTTP_X_FORWARDED_FOR</header1>
|
| 50 |
+
<header2>HTTP_X_REAL_IP</header2>
|
| 51 |
+
<header3>REMOTE_ADDR</header3>
|
| 52 |
+
</remote_addr_headers>
|
| 53 |
+
<events>
|
| 54 |
+
<!--<checkout_type_onepage_save_order_after>-->
|
| 55 |
+
<sales_order_place_after>
|
| 56 |
+
<observers>
|
| 57 |
+
<send_request_to_subuno>
|
| 58 |
+
<type>singleton</type>
|
| 59 |
+
<class>Cartform_SubunoIntegration_Controller_Observer</class>
|
| 60 |
+
<method>sendRequestToSubuno</method>
|
| 61 |
+
</send_request_to_subuno>
|
| 62 |
+
</observers>
|
| 63 |
+
</sales_order_place_after>
|
| 64 |
+
<!--</checkout_type_onepage_save_order_after> -->
|
| 65 |
+
</events>
|
| 66 |
+
</global>
|
| 67 |
+
<admin>
|
| 68 |
+
<routers>
|
| 69 |
+
<adminhtml>
|
| 70 |
+
<args>
|
| 71 |
+
<modules>
|
| 72 |
+
<Df_DFraudIntegration before="Mage_Adminhtml">Df_DFraudIntegration_Adminhtml</Df_DFraudIntegration>
|
| 73 |
+
</modules>
|
| 74 |
+
</args>
|
| 75 |
+
</adminhtml>
|
| 76 |
+
</routers>
|
| 77 |
+
</admin>
|
| 78 |
+
<adminhtml>
|
| 79 |
+
<layout>
|
| 80 |
+
<updates>
|
| 81 |
+
<adminhtml_dfraudintegration>
|
| 82 |
+
<file>dfraudintegration.xml</file>
|
| 83 |
+
</adminhtml_dfraudintegration>
|
| 84 |
+
</updates>
|
| 85 |
+
|
| 86 |
+
</layout>
|
| 87 |
+
<acl>
|
| 88 |
+
<resources>
|
| 89 |
+
<admin>
|
| 90 |
+
<children>
|
| 91 |
+
<system>
|
| 92 |
+
<children>
|
| 93 |
+
<config>
|
| 94 |
+
<children>
|
| 95 |
+
<dfraudintegration_options>
|
| 96 |
+
<title>DFraud Interation</title>
|
| 97 |
+
</dfraudintegration_options>
|
| 98 |
+
</children>
|
| 99 |
+
</config>
|
| 100 |
+
</children>
|
| 101 |
+
</system>
|
| 102 |
+
</children>
|
| 103 |
+
</admin>
|
| 104 |
+
</resources>
|
| 105 |
+
</acl>
|
| 106 |
+
<translate>
|
| 107 |
+
<modules>
|
| 108 |
+
<Df_DFraudIntegration>
|
| 109 |
+
<files>
|
| 110 |
+
<default>Dh_DFraudIntegration.csv</default>
|
| 111 |
+
</files>
|
| 112 |
+
</Df_DFraudIntegration>
|
| 113 |
+
</modules>
|
| 114 |
+
</translate>
|
| 115 |
+
</adminhtml>
|
| 116 |
+
<default>
|
| 117 |
+
<dfraudintegration_options>
|
| 118 |
+
<basic_settings>
|
| 119 |
+
<licence_key>123456</licence_key>
|
| 120 |
+
</basic_settings>
|
| 121 |
+
<dfraud_module_settings>
|
| 122 |
+
<maximum_order_amount>100</maximum_order_amount>
|
| 123 |
+
<maximum_distance>200</maximum_distance>
|
| 124 |
+
</dfraud_module_settings>
|
| 125 |
+
</dfraudintegration_options>
|
| 126 |
+
</default>
|
| 127 |
+
|
| 128 |
+
</config>
|
app/code/local/Df/DFraudIntegration/etc/system.xml
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<config>
|
| 2 |
+
<tabs>
|
| 3 |
+
<dfraudintegration translate="label" module="dfraudintegration">
|
| 4 |
+
<label>DFraud Integration</label>
|
| 5 |
+
<sort_order>999999</sort_order>
|
| 6 |
+
</dfraudintegration>
|
| 7 |
+
</tabs>
|
| 8 |
+
<sections>
|
| 9 |
+
<dfraudintegration_options translate="label" module="dfraudintegration">
|
| 10 |
+
<label>DFraud Integration Options</label>
|
| 11 |
+
<tab>dfraudintegration</tab>
|
| 12 |
+
<frontend_type>text</frontend_type>
|
| 13 |
+
<sort_order>10</sort_order>
|
| 14 |
+
<show_in_default>1</show_in_default>
|
| 15 |
+
<show_in_website>1</show_in_website>
|
| 16 |
+
<show_in_store>1</show_in_store>
|
| 17 |
+
<groups>
|
| 18 |
+
<basic_settings translate="label">
|
| 19 |
+
<label>Basic Settings</label>
|
| 20 |
+
<frontend_type>text</frontend_type>
|
| 21 |
+
<sort_order>1</sort_order>
|
| 22 |
+
<show_in_default>1</show_in_default>
|
| 23 |
+
<show_in_website>1</show_in_website>
|
| 24 |
+
<show_in_store>1</show_in_store>
|
| 25 |
+
<fields>
|
| 26 |
+
<licence_key translate="label">
|
| 27 |
+
<label>Licence Key</label>
|
| 28 |
+
<frontend_type>text</frontend_type>
|
| 29 |
+
<sort_order>30</sort_order>
|
| 30 |
+
<show_in_default>1</show_in_default>
|
| 31 |
+
<show_in_website>1</show_in_website>
|
| 32 |
+
<show_in_store>1</show_in_store>
|
| 33 |
+
<comment>The licence key for DFraud integration module.</comment>
|
| 34 |
+
</licence_key>
|
| 35 |
+
</fields>
|
| 36 |
+
</basic_settings>
|
| 37 |
+
<dfraud_module_settings>
|
| 38 |
+
<label>Settings</label>
|
| 39 |
+
<frontend_type>text</frontend_type>
|
| 40 |
+
<sort_order>20</sort_order>
|
| 41 |
+
<show_in_default>1</show_in_default>
|
| 42 |
+
<show_in_website>1</show_in_website>
|
| 43 |
+
<show_in_store>1</show_in_store>
|
| 44 |
+
<comment>Use this section to set the fraud check values.</comment>
|
| 45 |
+
<fields>
|
| 46 |
+
<maximum_distance translate="label">
|
| 47 |
+
<label>Maximum distance between billing and IP address</label>
|
| 48 |
+
<frontend_type>text</frontend_type>
|
| 49 |
+
<sort_order>20</sort_order>
|
| 50 |
+
<show_in_default>1</show_in_default>
|
| 51 |
+
<show_in_website>1</show_in_website>
|
| 52 |
+
<show_in_store>1</show_in_store>
|
| 53 |
+
<validate>validate-number</validate>
|
| 54 |
+
</maximum_distance>
|
| 55 |
+
<maximum_order_amount translate="label">
|
| 56 |
+
<label>Maximum order amount for the store</label>
|
| 57 |
+
<frontend_type>text</frontend_type>
|
| 58 |
+
<sort_order>20</sort_order>
|
| 59 |
+
<show_in_default>1</show_in_default>
|
| 60 |
+
<show_in_website>1</show_in_website>
|
| 61 |
+
<show_in_store>1</show_in_store>
|
| 62 |
+
<validate>validate-number</validate>
|
| 63 |
+
<comment>Set this value to an average value of an order in your store. DFraud module will get this value to validate the order amount.</comment>
|
| 64 |
+
</maximum_order_amount>
|
| 65 |
+
</fields>
|
| 66 |
+
</dfraud_module_settings>
|
| 67 |
+
</groups>
|
| 68 |
+
</dfraudintegration_options>
|
| 69 |
+
</sections>
|
| 70 |
+
</config>
|
app/code/local/Df/DFraudIntegration/sql/dfraudintegration_setup/mysql4-install-1.0.0.php
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* DFraud Integration plugin.
|
| 4 |
+
*
|
| 5 |
+
* @category Df
|
| 6 |
+
* @package Df_DFraudIntegration
|
| 7 |
+
* @author Biju Thajudien <mailtobiju@gmail.com>
|
| 8 |
+
* @version 0.1.0
|
| 9 |
+
*/
|
| 10 |
+
|
| 11 |
+
/**
|
| 12 |
+
* @var $installer Mage_Core_Model_Resource_Setup
|
| 13 |
+
*/
|
| 14 |
+
$installer = $this;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Creating table magentostudy_news
|
| 18 |
+
*/
|
| 19 |
+
$table = $installer->getConnection()
|
| 20 |
+
->newTable($installer->getTable('dfraudintegration/highriskcountries'))
|
| 21 |
+
->addColumn('id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
|
| 22 |
+
'unsigned' => true,
|
| 23 |
+
'identity' => true,
|
| 24 |
+
'nullable' => false,
|
| 25 |
+
'primary' => true,
|
| 26 |
+
), 'Entity id')
|
| 27 |
+
->addColumn('country_id', Varien_Db_Ddl_Table::TYPE_TEXT, 2, array(
|
| 28 |
+
'nullable' => true,
|
| 29 |
+
), 'Title')
|
| 30 |
+
->addColumn('country', Varien_Db_Ddl_Table::TYPE_TEXT, 63, array(
|
| 31 |
+
'nullable' => true,
|
| 32 |
+
'default' => null,
|
| 33 |
+
), 'Author')
|
| 34 |
+
->addColumn('region', Varien_Db_Ddl_Table::TYPE_TEXT, 63, array(
|
| 35 |
+
'nullable' => true,
|
| 36 |
+
'default' => null,
|
| 37 |
+
), 'Author')
|
| 38 |
+
->addIndex($installer->getIdxName(
|
| 39 |
+
$installer->getTable('dfraudintegration/highriskcountries'),
|
| 40 |
+
array('id'),
|
| 41 |
+
Varien_Db_Adapter_Interface::INDEX_TYPE_INDEX
|
| 42 |
+
),
|
| 43 |
+
array('id'),
|
| 44 |
+
array('type' => Varien_Db_Adapter_Interface::INDEX_TYPE_INDEX)
|
| 45 |
+
)
|
| 46 |
+
|
| 47 |
+
->setComment('Dfraud High Risk Countries');
|
| 48 |
+
|
| 49 |
+
$installer->getConnection()->createTable($table);
|
| 50 |
+
|
| 51 |
+
//Ukraine, Indonesia, Yugoslavia, Lithuania, Egypt, Romania, Bulgaria, Turkey, Russia, Pakistan, Malaysia, and Israel
|
| 52 |
+
|
| 53 |
+
$table = $installer->getConnection()
|
| 54 |
+
->newTable($installer->getTable('dfraudintegration/scores'))
|
| 55 |
+
->addColumn('id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
|
| 56 |
+
'unsigned' => true,
|
| 57 |
+
'identity' => true,
|
| 58 |
+
'nullable' => false,
|
| 59 |
+
'primary' => true,
|
| 60 |
+
), 'Entity id')
|
| 61 |
+
->addColumn('field', Varien_Db_Ddl_Table::TYPE_TEXT, 200, array(
|
| 62 |
+
'nullable' => true,
|
| 63 |
+
), 'Field')
|
| 64 |
+
->addColumn('score', Varien_Db_Ddl_Table::TYPE_TEXT, 63, array(
|
| 65 |
+
'nullable' => true,
|
| 66 |
+
'default' => null,
|
| 67 |
+
), 'Score')
|
| 68 |
+
->addColumn('description', Varien_Db_Ddl_Table::TYPE_TEXT, 200, array(
|
| 69 |
+
'nullable' => true,
|
| 70 |
+
'default' => null,
|
| 71 |
+
), 'Description')
|
| 72 |
+
->addColumn('risk', Varien_Db_Ddl_Table::TYPE_TEXT, 10, array(
|
| 73 |
+
'nullable' => true,
|
| 74 |
+
'default' => null,
|
| 75 |
+
), 'Risk')
|
| 76 |
+
->addIndex($installer->getIdxName(
|
| 77 |
+
$installer->getTable('dfraudintegration/scores'),
|
| 78 |
+
array('id'),
|
| 79 |
+
Varien_Db_Adapter_Interface::INDEX_TYPE_INDEX
|
| 80 |
+
),
|
| 81 |
+
array('id'),
|
| 82 |
+
array('type' => Varien_Db_Adapter_Interface::INDEX_TYPE_INDEX)
|
| 83 |
+
)
|
| 84 |
+
|
| 85 |
+
->setComment('Dfraud Scores');
|
| 86 |
+
|
| 87 |
+
$installer->getConnection()->createTable($table);
|
| 88 |
+
|
| 89 |
+
$installer->startSetup();
|
| 90 |
+
|
| 91 |
+
$installer->run("
|
| 92 |
+
insert into {$this->getTable('dfraud_score')}
|
| 93 |
+
(`field`,`score`, `description`,`risk`)
|
| 94 |
+
values
|
| 95 |
+
('address_bill_ship', '0.5', 'Billing and shipping address doesn''t match.', 'HIGH'),
|
| 96 |
+
('zip_bill', '0.75', 'Billing address post code not found.', 'MEDIUM'),
|
| 97 |
+
('dis_bill_ip', '0.75', 'Distance between billing and IP location exceeds maximum.', 'MEDIUM'),
|
| 98 |
+
('ip_bill_city', '0.5', 'IP and Billing address differs (City).', 'MEDIUM'),
|
| 99 |
+
('ip_bill_region', '0.75', 'IP and Billing address differs (Region).', 'MEDIUM'),
|
| 100 |
+
('ip_bill_country_id', '1.00', 'IP and Billing address differs (Country)', 'MEDIUM'),
|
| 101 |
+
('hr_bill', '1.25', 'Billing address in high risk country', 'HIGH'),
|
| 102 |
+
('hr_ship', '1.00', 'Shipping address in high risk country', 'HIGH'),
|
| 103 |
+
('hr_ip', '1.00', 'IP address in high risk country', 'HIGH'),
|
| 104 |
+
('order_hist_fraud', '1.25', 'Previous Fraud orders from user exists.', 'HIGH'),
|
| 105 |
+
('order_hist_count_ip_user', '0.50', 'Order count of User and IP doesn''t match', 'LOW'),
|
| 106 |
+
('order_amount_avg', '0.75', 'Order amount is greater than average order amount', 'HIGH'),
|
| 107 |
+
('bin_country', '1.50', 'CC issuing country and Billing address country doesn''t match', 'HIGH'),
|
| 108 |
+
('order_hist_first_order', '0.25', 'First order from user', 'LOW'),
|
| 109 |
+
('zip_ship', '0.5', 'Shipping address post code not found', 'MEDIUM');
|
| 110 |
+
");
|
| 111 |
+
|
| 112 |
+
$installer->run("
|
| 113 |
+
insert into {$this->getTable('dfraud_highrisk_countries')}
|
| 114 |
+
(`country_id`,`country`,`region`)
|
| 115 |
+
values ('UA', 'Ukraine', ''),
|
| 116 |
+
('ID','Indonesia',''),('YG','Yugoslavia',''),('YG','Yugoslavia',''),
|
| 117 |
+
('LT','Lithuania',''),('EG','Egypt',''),('RO','Romania','')
|
| 118 |
+
,('BG','Bulgaria',''),('TR','Turkey',''),('RU','Russia',''),('PK','Pakistan',''),
|
| 119 |
+
('MY','Malaysia',''),('IL','Israel','');
|
| 120 |
+
");
|
| 121 |
+
$installer->endSetup();
|
| 122 |
+
?>
|
app/design/adminhtml/default/default/layout/dfraudintegration.xml
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
|
| 3 |
+
<layout>
|
| 4 |
+
<!-- Orders -->
|
| 5 |
+
<!--<adminhtml_sales_order_view>
|
| 6 |
+
<reference name="order_tab_info">
|
| 7 |
+
<action method="setTemplate" ifconfig="dfraudintegration_options/basic_settings/plug_and_play">
|
| 8 |
+
<template>dfraudintegration/sales/order/view/tab/info.phtml</template>
|
| 9 |
+
</action>
|
| 10 |
+
<block type="dfraudintegration/adminhtml_sales_order_dfraud" name="dfraudintegration" template="dfraudintegration/dfraud.phtml" />
|
| 11 |
+
</reference>
|
| 12 |
+
</adminhtml_sales_order_view>-->
|
| 13 |
+
<adminhtml_sales_order_view>
|
| 14 |
+
<reference name="sales_order_tabs">
|
| 15 |
+
<action method="addTab">
|
| 16 |
+
<name>DFraud Data</name>
|
| 17 |
+
<block>dfraudintegration/adminhtml_order_view_tab_dfraud</block>
|
| 18 |
+
</action>
|
| 19 |
+
</reference>
|
| 20 |
+
</adminhtml_sales_order_view>
|
| 21 |
+
</layout>
|
app/design/adminhtml/default/default/template/dfraudintegration/dfraud.phtml
ADDED
|
@@ -0,0 +1,560 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php $result = Mage::registry('data'); ?>
|
| 2 |
+
<div class="box-left">
|
| 3 |
+
<!--Address Checking-->
|
| 4 |
+
<div class="entry-edit">
|
| 5 |
+
<div class="entry-edit-head">
|
| 6 |
+
<h4 class="icon-head head-account">Order Address Checks</h4>
|
| 7 |
+
</div>
|
| 8 |
+
<div class="fieldset">
|
| 9 |
+
<table cellspacing="0" class="form-list">
|
| 10 |
+
<tbody><tr>
|
| 11 |
+
<td class="label"><label>Billing and Shipping address match</label></td>
|
| 12 |
+
<td class="value">
|
| 13 |
+
<?php
|
| 14 |
+
if(count($result['address']) > 1) {?>
|
| 15 |
+
<strong>NO</strong>
|
| 16 |
+
<? } else { ?>
|
| 17 |
+
<strong>YES</strong>
|
| 18 |
+
<? } ?>
|
| 19 |
+
</td>
|
| 20 |
+
</tr>
|
| 21 |
+
<?php
|
| 22 |
+
if(isset($result['address'])) {?>
|
| 23 |
+
<tr>
|
| 24 |
+
<td class="label"><label>Mismatches</label></td>
|
| 25 |
+
<td width="500">
|
| 26 |
+
<table>
|
| 27 |
+
<tr>
|
| 28 |
+
<td></td>
|
| 29 |
+
<td><strong>Billing</strong></td>
|
| 30 |
+
<td><strong>Shipping</strong></td>
|
| 31 |
+
</tr>
|
| 32 |
+
<? if(isset($result['address']['street']['billing'])) {?>
|
| 33 |
+
<tr>
|
| 34 |
+
<td width="60"><strong>Street</strong></td>
|
| 35 |
+
<td width="120"><? echo $result['address']['street']['billing'] ?></td>
|
| 36 |
+
<td width="120"><? echo $result['address']['street']['shipping'] ?></td>
|
| 37 |
+
</tr>
|
| 38 |
+
<? } ?>
|
| 39 |
+
|
| 40 |
+
<? if(isset($result['address']['city']['billing'])) {?>
|
| 41 |
+
<tr>
|
| 42 |
+
<td width="60"><strong>City</strong></td>
|
| 43 |
+
<td width="120"><? echo $result['address']['city']['billing'] ?></td>
|
| 44 |
+
<td width="120"><? echo $result['address']['city']['shipping'] ?></td>
|
| 45 |
+
</tr>
|
| 46 |
+
<? } ?>
|
| 47 |
+
|
| 48 |
+
<? if(isset($result['address']['region']['billing'])) {?>
|
| 49 |
+
<tr>
|
| 50 |
+
<td width="60"><strong>Region</strong></td>
|
| 51 |
+
<td width="120"><? echo $result['address']['region']['billing'] ?></td>
|
| 52 |
+
<td width="120"><? echo $result['address']['region']['shipping'] ?></td>
|
| 53 |
+
</tr>
|
| 54 |
+
<? } ?>
|
| 55 |
+
|
| 56 |
+
<? if(isset($result['address']['country_id']['billing'])) {?>
|
| 57 |
+
<tr>
|
| 58 |
+
<td width="60"><strong>Country</strong></td>
|
| 59 |
+
<td width="120"><? echo $result['address']['country_id']['billing'] ?></td>
|
| 60 |
+
<td width="120"><? echo $result['address']['country_id']['shipping'] ?></td>
|
| 61 |
+
</tr>
|
| 62 |
+
<? } ?>
|
| 63 |
+
|
| 64 |
+
<? if(isset($result['address']['postcode']['billing'])) {?>
|
| 65 |
+
<tr>
|
| 66 |
+
<td width="60"><strong>PostCode</strong></td>
|
| 67 |
+
<td width="120"><? echo $result['address']['postcode']['billing'] ?></td>
|
| 68 |
+
<td width="120"><? echo $result['address']['postcode']['shipping'] ?></td>
|
| 69 |
+
</tr>
|
| 70 |
+
<? } ?>
|
| 71 |
+
</table>
|
| 72 |
+
</td>
|
| 73 |
+
</tr>
|
| 74 |
+
<? } ?>
|
| 75 |
+
<tr>
|
| 76 |
+
<td class="label"><label>Score</label></td>
|
| 77 |
+
<td class="value">
|
| 78 |
+
<strong>
|
| 79 |
+
<?php echo $result['address']['score']['total']." / ".$result['address']['score']['max']; ?>
|
| 80 |
+
</strong>
|
| 81 |
+
</td>
|
| 82 |
+
</tr>
|
| 83 |
+
</tbody></table>
|
| 84 |
+
</div>
|
| 85 |
+
</div>
|
| 86 |
+
</div>
|
| 87 |
+
|
| 88 |
+
<div class="box-right">
|
| 89 |
+
<!--Order Information-->
|
| 90 |
+
<div class="entry-edit">
|
| 91 |
+
<div class="entry-edit-head">
|
| 92 |
+
<h4 class="icon-head head-account">Post code Checks</h4>
|
| 93 |
+
</div>
|
| 94 |
+
<div class="fieldset">
|
| 95 |
+
<table cellspacing="0" class="form-list">
|
| 96 |
+
<tbody>
|
| 97 |
+
<tr>
|
| 98 |
+
<td class="label"><label>Billing Post Code Location</label></td>
|
| 99 |
+
<td class="value">
|
| 100 |
+
<?php echo $result['post_loc']['billing']; ?>
|
| 101 |
+
</td>
|
| 102 |
+
</tr>
|
| 103 |
+
<tr>
|
| 104 |
+
<td class="label"><label>Shipping Post Code Location</label></td>
|
| 105 |
+
<td class="value">
|
| 106 |
+
<?php echo $result['post_loc']['shipping']; ?>
|
| 107 |
+
</td>
|
| 108 |
+
</tr>
|
| 109 |
+
<tr>
|
| 110 |
+
<td class="label"><label>Score</label></td>
|
| 111 |
+
<td class="value">
|
| 112 |
+
<strong>
|
| 113 |
+
<?php echo $result['post_loc']['score']['total']." / ".$result['post_loc']['score']['max']; ?>
|
| 114 |
+
</strong>
|
| 115 |
+
</td>
|
| 116 |
+
</tr>
|
| 117 |
+
</tbody>
|
| 118 |
+
</table>
|
| 119 |
+
</div>
|
| 120 |
+
</div>
|
| 121 |
+
</div>
|
| 122 |
+
|
| 123 |
+
|
| 124 |
+
|
| 125 |
+
|
| 126 |
+
<div class="box-right">
|
| 127 |
+
<!--Account Information-->
|
| 128 |
+
<div class="entry-edit">
|
| 129 |
+
<div class="entry-edit-head">
|
| 130 |
+
<h4 class="icon-head head-account">IP Location Checks</h4>
|
| 131 |
+
<div class="tools"></div>
|
| 132 |
+
</div>
|
| 133 |
+
<div class="fieldset">
|
| 134 |
+
<div class="hor-scroll">
|
| 135 |
+
<table cellspacing="0" class="form-list">
|
| 136 |
+
<tbody>
|
| 137 |
+
<tr>
|
| 138 |
+
<td class="label"><label>IP Address</label></td>
|
| 139 |
+
<td class="value"><? echo $result['ip']['location']['ip'] ?></td>
|
| 140 |
+
</tr>
|
| 141 |
+
<tr>
|
| 142 |
+
<td class="label"><label>IP Latitude</label></td>
|
| 143 |
+
<td class="value"><? echo $result['ip']['location']['latitude'] ?></td>
|
| 144 |
+
</tr>
|
| 145 |
+
<tr>
|
| 146 |
+
<td class="label"><label>IP Longitude</label></td>
|
| 147 |
+
<td class="value"><? echo $result['ip']['location']['longitude'] ?></td>
|
| 148 |
+
</tr>
|
| 149 |
+
<tr>
|
| 150 |
+
<td class="label"><label>IP Location</label></td>
|
| 151 |
+
<td class="value"><? echo $result['ip']['location']['loc_str'] ?></td>
|
| 152 |
+
</tr>
|
| 153 |
+
<tr>
|
| 154 |
+
<td class="label"><label>IP and Billing Address Match</label></td>
|
| 155 |
+
<td class="value">
|
| 156 |
+
<strong>
|
| 157 |
+
<? if(isset($result['ip']['ip_bill_diff']))
|
| 158 |
+
echo "NO";
|
| 159 |
+
else
|
| 160 |
+
echo "YES";
|
| 161 |
+
?>
|
| 162 |
+
</strong>
|
| 163 |
+
</td>
|
| 164 |
+
</tr>
|
| 165 |
+
<?php
|
| 166 |
+
if(isset($result['ip'])) {?>
|
| 167 |
+
<tr>
|
| 168 |
+
<td class="label"><label>Details</label></td>
|
| 169 |
+
<td width="400">
|
| 170 |
+
<table>
|
| 171 |
+
<tr>
|
| 172 |
+
<td></td>
|
| 173 |
+
<td><strong>IP</strong></td>
|
| 174 |
+
<td><strong>Billing</strong></td>
|
| 175 |
+
<td><strong>Shipping</strong></td>
|
| 176 |
+
</tr>
|
| 177 |
+
|
| 178 |
+
<tr>
|
| 179 |
+
<td width="60"><strong>City</strong></td>
|
| 180 |
+
<td width="100"><? echo $result['ip']['city']['ip'] ?></td>
|
| 181 |
+
<td width="100"><? echo $result['ip']['city']['billing'] ?></td>
|
| 182 |
+
<td width="100"><? echo $result['ip']['city']['shipping'] ?></td>
|
| 183 |
+
</tr>
|
| 184 |
+
<tr>
|
| 185 |
+
<td><strong>Region</strong></td>
|
| 186 |
+
<td><? echo $result['ip']['region']['ip'] ?></td>
|
| 187 |
+
<td><? echo $result['ip']['region']['billing'] ?></td>
|
| 188 |
+
<td><? echo $result['ip']['region']['shipping'] ?></td>
|
| 189 |
+
</tr>
|
| 190 |
+
<tr>
|
| 191 |
+
<td><strong>Country</strong></td>
|
| 192 |
+
<td><? echo $result['ip']['country_id']['ip'] ?></td>
|
| 193 |
+
<td><? echo $result['ip']['country_id']['billing'] ?></td>
|
| 194 |
+
<td><? echo $result['ip']['country_id']['shipping'] ?></td>
|
| 195 |
+
</tr>
|
| 196 |
+
|
| 197 |
+
</table>
|
| 198 |
+
</td>
|
| 199 |
+
</tr>
|
| 200 |
+
<? } ?>
|
| 201 |
+
<tr>
|
| 202 |
+
<td class="label"><label>Score</label></td>
|
| 203 |
+
<td class="value">
|
| 204 |
+
<strong>
|
| 205 |
+
<?php echo $result['ip']['score']['total']." / ".$result['ip']['score']['max']; ?>
|
| 206 |
+
</strong>
|
| 207 |
+
</td>
|
| 208 |
+
</tr>
|
| 209 |
+
</tbody></table>
|
| 210 |
+
</div>
|
| 211 |
+
</div>
|
| 212 |
+
</div>
|
| 213 |
+
</div>
|
| 214 |
+
|
| 215 |
+
<div class="box-left">
|
| 216 |
+
<!--Order Information-->
|
| 217 |
+
<div class="entry-edit">
|
| 218 |
+
<div class="entry-edit-head">
|
| 219 |
+
<h4 class="icon-head head-account">Credit Card BIN Checks</h4>
|
| 220 |
+
</div>
|
| 221 |
+
<div class="fieldset">
|
| 222 |
+
<table cellspacing="0" class="form-list">
|
| 223 |
+
<tbody>
|
| 224 |
+
<? if( isset($result['bin']['err']) ) { ?>
|
| 225 |
+
<tr>
|
| 226 |
+
<td width="400">
|
| 227 |
+
<strong><i><? echo $result['bin']['err']; ?></i></strong>
|
| 228 |
+
</td>
|
| 229 |
+
</tr>
|
| 230 |
+
<? } else { ?>
|
| 231 |
+
<tr>
|
| 232 |
+
<td class="label"><label>CC Country</label></td>
|
| 233 |
+
<td class="value">
|
| 234 |
+
<strong><? echo $result['bin']['binCountry']; ?></strong>
|
| 235 |
+
</td>
|
| 236 |
+
</tr>
|
| 237 |
+
<tr>
|
| 238 |
+
<td class="label"><label>CC Bank</label></td>
|
| 239 |
+
<td class="value">
|
| 240 |
+
<strong><? echo $result['bin']['binName']; ?></strong>
|
| 241 |
+
</td>
|
| 242 |
+
</tr>
|
| 243 |
+
<tr>
|
| 244 |
+
<td class="label"><label>Bank Phone</label></td>
|
| 245 |
+
<td class="value">
|
| 246 |
+
<strong><? echo $result['bin']['binPhone']; ?></strong>
|
| 247 |
+
</td>
|
| 248 |
+
</tr>
|
| 249 |
+
<tr>
|
| 250 |
+
<td class="label"><label>Is Billing & CC Country Match?</label></td>
|
| 251 |
+
<td class="value">
|
| 252 |
+
<strong><? echo $result['bin']['country_match']; ?></strong>
|
| 253 |
+
</td>
|
| 254 |
+
</tr>
|
| 255 |
+
<tr>
|
| 256 |
+
<td class="label"><label>Score</label></td>
|
| 257 |
+
<td class="value">
|
| 258 |
+
<strong>
|
| 259 |
+
<?php echo $result['bin']['score']['total']." / ".$result['bin']['score']['max']; ?>
|
| 260 |
+
</strong>
|
| 261 |
+
</td>
|
| 262 |
+
</tr>
|
| 263 |
+
<? } ?>
|
| 264 |
+
</tbody>
|
| 265 |
+
</table>
|
| 266 |
+
</div>
|
| 267 |
+
</div>
|
| 268 |
+
</div>
|
| 269 |
+
|
| 270 |
+
|
| 271 |
+
<div class="box-left">
|
| 272 |
+
<!--Order Information-->
|
| 273 |
+
<div class="entry-edit">
|
| 274 |
+
<div class="entry-edit-head">
|
| 275 |
+
<h4 class="icon-head head-account">Order Amount Check</h4>
|
| 276 |
+
</div>
|
| 277 |
+
<div class="fieldset">
|
| 278 |
+
<table cellspacing="0" class="form-list">
|
| 279 |
+
<tbody>
|
| 280 |
+
<tr>
|
| 281 |
+
<td class="label"><label>Is Order amount greater that maximum?</label></td>
|
| 282 |
+
<td class="value">
|
| 283 |
+
<strong>
|
| 284 |
+
<? echo $result['ammount_check']['amount_higher']; ?>
|
| 285 |
+
</strong>
|
| 286 |
+
</td>
|
| 287 |
+
</tr>
|
| 288 |
+
<tr>
|
| 289 |
+
<td class="label"><label>Order Amount</label></td>
|
| 290 |
+
<td class="value">
|
| 291 |
+
<strong><? echo $result['ammount_check']['amount']; ?></strong>
|
| 292 |
+
</td>
|
| 293 |
+
</tr>
|
| 294 |
+
<tr>
|
| 295 |
+
<td class="label"><label>Max Amount</label></td>
|
| 296 |
+
<td class="value">
|
| 297 |
+
<strong><? echo $result['ammount_check']['max_amount']; ?></strong>
|
| 298 |
+
</td>
|
| 299 |
+
</tr>
|
| 300 |
+
<tr>
|
| 301 |
+
<td class="label"><label>Score</label></td>
|
| 302 |
+
<td class="value">
|
| 303 |
+
<strong>
|
| 304 |
+
<?php echo $result['ammount_check']['score']['total']." / ".$result['ammount_check']['score']['max']; ?>
|
| 305 |
+
</strong>
|
| 306 |
+
</td>
|
| 307 |
+
</tr>
|
| 308 |
+
</tbody>
|
| 309 |
+
</table>
|
| 310 |
+
</div>
|
| 311 |
+
</div>
|
| 312 |
+
</div>
|
| 313 |
+
|
| 314 |
+
|
| 315 |
+
<div class="box-right">
|
| 316 |
+
<!--Order Information-->
|
| 317 |
+
<div class="entry-edit">
|
| 318 |
+
<div class="entry-edit-head">
|
| 319 |
+
<h4 class="icon-head head-account">High Risk Country Checks</h4>
|
| 320 |
+
</div>
|
| 321 |
+
<div class="fieldset">
|
| 322 |
+
<table cellspacing="0" class="form-list">
|
| 323 |
+
<tbody>
|
| 324 |
+
<tr>
|
| 325 |
+
<td class="label"><label>Is Billing Country High Risk?</label></td>
|
| 326 |
+
<td class="value">
|
| 327 |
+
<strong>
|
| 328 |
+
<? if(isset($result['hrc']['billing']))
|
| 329 |
+
echo "YES";
|
| 330 |
+
else
|
| 331 |
+
echo "NO";
|
| 332 |
+
?>
|
| 333 |
+
</strong>
|
| 334 |
+
</td>
|
| 335 |
+
</tr>
|
| 336 |
+
<tr>
|
| 337 |
+
<td class="label"><label>Is Shipping Country High Risk?</label></td>
|
| 338 |
+
<td class="value">
|
| 339 |
+
<strong>
|
| 340 |
+
<? if(isset($result['hrc']['shipping']))
|
| 341 |
+
echo "YES";
|
| 342 |
+
else
|
| 343 |
+
echo "NO";
|
| 344 |
+
?>
|
| 345 |
+
</strong>
|
| 346 |
+
</td>
|
| 347 |
+
</tr>
|
| 348 |
+
<tr>
|
| 349 |
+
<td class="label"><label>Is IP Country High Risk?</label></td>
|
| 350 |
+
<td class="value">
|
| 351 |
+
<strong>
|
| 352 |
+
<? if(isset($result['hrc']['ip']))
|
| 353 |
+
echo "YES";
|
| 354 |
+
else
|
| 355 |
+
echo "NO";
|
| 356 |
+
?>
|
| 357 |
+
</strong>
|
| 358 |
+
</td>
|
| 359 |
+
</tr>
|
| 360 |
+
<tr>
|
| 361 |
+
<td class="label"><label>Score</label></td>
|
| 362 |
+
<td class="value">
|
| 363 |
+
<strong>
|
| 364 |
+
<?php echo $result['hrc']['score']['total']." / ".$result['hrc']['score']['max']; ?>
|
| 365 |
+
</strong>
|
| 366 |
+
</td>
|
| 367 |
+
</tr>
|
| 368 |
+
</tbody>
|
| 369 |
+
</table>
|
| 370 |
+
</div>
|
| 371 |
+
</div>
|
| 372 |
+
</div>
|
| 373 |
+
|
| 374 |
+
|
| 375 |
+
<div class="box-left">
|
| 376 |
+
<!--Order Information-->
|
| 377 |
+
<div class="entry-edit">
|
| 378 |
+
<div class="entry-edit-head">
|
| 379 |
+
<h4 class="icon-head head-account">Order History</h4>
|
| 380 |
+
</div>
|
| 381 |
+
<div class="fieldset">
|
| 382 |
+
<table cellspacing="0" class="form-list">
|
| 383 |
+
<tbody>
|
| 384 |
+
<tr>
|
| 385 |
+
<td class="label"><label>Total Orders from User</label></td>
|
| 386 |
+
<td class="value">
|
| 387 |
+
<strong><? echo $result['order_history_cust']['user']['count']; ?></strong>
|
| 388 |
+
</td>
|
| 389 |
+
</tr>
|
| 390 |
+
<tr>
|
| 391 |
+
<td class="label"><label>Order Status : </label></td>
|
| 392 |
+
<td class="value">
|
| 393 |
+
<strong>
|
| 394 |
+
<table>
|
| 395 |
+
<?
|
| 396 |
+
foreach($result['order_history_cust']['user']['status'] as $key=>$status) {
|
| 397 |
+
if($status > 0 ) {
|
| 398 |
+
?>
|
| 399 |
+
<tr>
|
| 400 |
+
<td width="150"><? echo $key; ?></td>
|
| 401 |
+
<td><? echo $status; ?></td>
|
| 402 |
+
</tr>
|
| 403 |
+
<? } } ?>
|
| 404 |
+
</table>
|
| 405 |
+
</strong>
|
| 406 |
+
</td>
|
| 407 |
+
</tr>
|
| 408 |
+
<tr>
|
| 409 |
+
<td class="label"><label>Total Orders from IP</label></td>
|
| 410 |
+
<td class="value">
|
| 411 |
+
<strong><? echo $result['order_history_cust']['ip']['count']; ?></strong>
|
| 412 |
+
</td>
|
| 413 |
+
</tr>
|
| 414 |
+
<tr>
|
| 415 |
+
<td class="label"><label>Order Status : </label></td>
|
| 416 |
+
<td class="value">
|
| 417 |
+
<strong>
|
| 418 |
+
<table>
|
| 419 |
+
<?
|
| 420 |
+
foreach($result['order_history_cust']['ip']['status'] as $key=>$status) {
|
| 421 |
+
if($status > 0 ) {
|
| 422 |
+
?>
|
| 423 |
+
<tr>
|
| 424 |
+
<td width="150"><? echo $key; ?></td>
|
| 425 |
+
<td><? echo $status; ?></td>
|
| 426 |
+
</tr>
|
| 427 |
+
<? } } ?>
|
| 428 |
+
</table>
|
| 429 |
+
</strong>
|
| 430 |
+
</td>
|
| 431 |
+
</tr>
|
| 432 |
+
<tr>
|
| 433 |
+
<td class="label"><label>Score</label></td>
|
| 434 |
+
<td class="value">
|
| 435 |
+
<strong>
|
| 436 |
+
<?php echo $result['order_history_cust']['score']['total']." / ".$result['order_history_cust']['score']['max']; ?>
|
| 437 |
+
</strong>
|
| 438 |
+
</td>
|
| 439 |
+
</tr>
|
| 440 |
+
</tbody>
|
| 441 |
+
</table>
|
| 442 |
+
</div>
|
| 443 |
+
</div>
|
| 444 |
+
</div>
|
| 445 |
+
|
| 446 |
+
|
| 447 |
+
<div class="box-right">
|
| 448 |
+
<!--Order Information-->
|
| 449 |
+
<div class="entry-edit">
|
| 450 |
+
<div class="entry-edit-head">
|
| 451 |
+
<h4 class="icon-head head-account">Geo Location Checks</h4>
|
| 452 |
+
</div>
|
| 453 |
+
<div class="fieldset">
|
| 454 |
+
<table cellspacing="0" class="form-list">
|
| 455 |
+
<tbody>
|
| 456 |
+
<tr>
|
| 457 |
+
<td class="label"><label>Distance between Billing/Shipping Location</label></td>
|
| 458 |
+
<td class="value"><? echo $result['dis']['bill_ship'] ?> KM</td>
|
| 459 |
+
</tr>
|
| 460 |
+
<tr>
|
| 461 |
+
<td class="label"><label>Distance between Billing/IP Location</label></td>
|
| 462 |
+
<td class="value"><? echo $result['dis']['ip_bill'] ?> KM</td>
|
| 463 |
+
</tr>
|
| 464 |
+
<tr>
|
| 465 |
+
<td class="label"><label>Distance between Shipping/IP Location</label></td>
|
| 466 |
+
<td class="value"><? echo $result['dis']['ip_ship'] ?> KM</td>
|
| 467 |
+
</tr>
|
| 468 |
+
|
| 469 |
+
<tr>
|
| 470 |
+
<td class="label"><label>Billing Address - Nearest Verified Location</label></td>
|
| 471 |
+
<td class="value"><? echo $result['billingGeoResult']['formatted_address'] ?></td>
|
| 472 |
+
</tr>
|
| 473 |
+
<tr>
|
| 474 |
+
<td class="label"><label>Check Type</label></td>
|
| 475 |
+
<td class="value"><? echo $result['billingGeoResult']['type'] ?></td>
|
| 476 |
+
</tr>
|
| 477 |
+
<tr>
|
| 478 |
+
<td class="label"><label>Shipping address - Nearest Verified Location</label></td>
|
| 479 |
+
<td class="value"><? echo $result['shippingGeoResult']['formatted_address'] ?></td>
|
| 480 |
+
</tr>
|
| 481 |
+
<tr>
|
| 482 |
+
<td class="label"><label>Check Type</label></td>
|
| 483 |
+
<td class="value"><? echo $result['shippingGeoResult']['type'] ?></td>
|
| 484 |
+
</tr>
|
| 485 |
+
<tr>
|
| 486 |
+
<td class="label"><label>Score</label></td>
|
| 487 |
+
<td class="value">
|
| 488 |
+
<strong>
|
| 489 |
+
<?php echo $result['dis']['score']['total']." / ".$result['dis']['score']['max']; ?>
|
| 490 |
+
</strong>
|
| 491 |
+
</td>
|
| 492 |
+
</tr>
|
| 493 |
+
</tbody>
|
| 494 |
+
</table>
|
| 495 |
+
</div>
|
| 496 |
+
</div>
|
| 497 |
+
</div>
|
| 498 |
+
|
| 499 |
+
|
| 500 |
+
|
| 501 |
+
|
| 502 |
+
|
| 503 |
+
|
| 504 |
+
<div class="box-left">
|
| 505 |
+
<!--Order Information-->
|
| 506 |
+
<div class="entry-edit">
|
| 507 |
+
<div class="entry-edit-head">
|
| 508 |
+
<h4 class="icon-head head-account">Risk Score Summary</h4>
|
| 509 |
+
</div>
|
| 510 |
+
<div class="fieldset">
|
| 511 |
+
<table cellspacing="0" class="form-list">
|
| 512 |
+
<tbody>
|
| 513 |
+
<tr>
|
| 514 |
+
<td class="label" width="200"><strong>Issues</strong></td>
|
| 515 |
+
<td class="label" width="200"><strong>Risk</strong></td>
|
| 516 |
+
</tr>
|
| 517 |
+
<?php
|
| 518 |
+
foreach($result['summary']['issues'] as $summary) { ?>
|
| 519 |
+
<tr>
|
| 520 |
+
<td class="value" width="200">
|
| 521 |
+
<? echo $summary['desc']; ?>
|
| 522 |
+
</td>
|
| 523 |
+
<td class="value">
|
| 524 |
+
<strong><? echo $summary['risk']; ?></strong><br/>
|
| 525 |
+
</td>
|
| 526 |
+
</tr>
|
| 527 |
+
<? } ?>
|
| 528 |
+
<tr>
|
| 529 |
+
<td class="label" colspan="2"></td>
|
| 530 |
+
</tr>
|
| 531 |
+
<tr>
|
| 532 |
+
<td class="label"><label>Total score</label></td>
|
| 533 |
+
<td class="value">
|
| 534 |
+
<strong>
|
| 535 |
+
<?php echo $result['score']['total']." / ".$result['score']['max']; ?>
|
| 536 |
+
</strong>
|
| 537 |
+
</td>
|
| 538 |
+
</tr>
|
| 539 |
+
<tr>
|
| 540 |
+
<td class="label"><label>Risk Assesment</label></td>
|
| 541 |
+
<td class="value">
|
| 542 |
+
<strong>
|
| 543 |
+
<?php echo $result['summary']['risk']; ?>
|
| 544 |
+
</strong>
|
| 545 |
+
</td>
|
| 546 |
+
</tr>
|
| 547 |
+
|
| 548 |
+
</tbody>
|
| 549 |
+
</table>
|
| 550 |
+
</div>
|
| 551 |
+
</div>
|
| 552 |
+
</div>
|
| 553 |
+
|
| 554 |
+
|
| 555 |
+
<!--<div class="entry-edit-head" id='dfraudintegration'>
|
| 556 |
+
<h4 class="icon-head head-deliverynote"><?php echo $this->__(Mage::helper('dfraudintegration')->getFrontendLabel()) ?></h4>
|
| 557 |
+
</div>-->
|
| 558 |
+
|
| 559 |
+
|
| 560 |
+
<?php //$data = Mage::registry('data'); echo "<pre>";print_r($data);?>
|
app/design/adminhtml/default/default/template/dfraudintegration/note-create.phtml
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div class="box-right entry-edit">
|
| 2 |
+
<div class="entry-edit-head"><h4><?php echo $this->__($this->getFrontendLabel()) ?></h4></div>
|
| 3 |
+
<fieldset id="order-deliverynote">
|
| 4 |
+
<label for="deliverynote-note"><?php echo $this->__($this->getFrontendLabel()) ?></label><br>
|
| 5 |
+
<?php $characterCount = $this->getCharacterCount(); ?>
|
| 6 |
+
<textarea cols="15" rows="2" id='deliverynote-note' name='deliverynote' style="width:98%; height:8em;" <?php if ($characterCount !== false): ?>class="validate-length maximum-length-<?php echo $characterCount ?>"<?php endif; ?>></textarea>
|
| 7 |
+
</fieldset>
|
| 8 |
+
</div>
|
app/etc/modules/Df_DFraudIntegration.xml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Df_DFraudIntegration>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>local</codePool>
|
| 7 |
+
</Df_DFraudIntegration>
|
| 8 |
+
</modules>
|
| 9 |
+
</config>
|
package.xml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>Df_DFraudIntegration</name>
|
| 4 |
+
<version>1.0.0</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>The DFraud Integration extension helps magento site admins to identify fruad orders.</summary>
|
| 10 |
+
<description>The Dfraud integration performs 15 checks to identify the fruaud order so that its easy for site admins to identify fraud orders.</description>
|
| 11 |
+
<notes>The Dfraud integration performs 15 checks to identify the fruaud order so that its easy for site admins to identify fraud orders.</notes>
|
| 12 |
+
<authors><author><name>Biju Thajudien</name><user>bijuthaj</user><email>mailtobiju@gmail.com</email></author></authors>
|
| 13 |
+
<date>2013-06-06</date>
|
| 14 |
+
<time>17:53:33</time>
|
| 15 |
+
<contents><target name="magelocal"><dir name="Df"><dir name="DFraudIntegration"><dir name="Block"><dir name="Adminhtml"><dir name="Order"><dir name="View"><dir name="Tab"><file name="Dfraud.php" hash="3ebba9d972f9ff19c3b0c9b464840ae9"/></dir></dir></dir><dir name="Sales"><dir name="Order"><file name="Dfraud.php" hash="ec55335f14b3adf56649d3e081f99f38"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="e278ed6b55796eef3000ef459680fb3e"/></dir><dir name="Model"><file name="Dfraud.php" hash="5f0040d5f36cefd3f8fe4934e2ce06a8"/><file name="HighriskCountries.php" hash="d2d957dd4af7c0a124027003e23c9d42"/><file name="Observer.php" hash="c8bfd8bea285fcf9b22416a24d61750f"/><dir name="Resource"><file name="Dfraud.php" hash="a1d158afb971c3bf72ea487e97300e2e"/><file name="HighriskCountries.php" hash="a662b20d8c82322181fd654b2f5b1c66"/><file name="Scores.php" hash="d930d4b38f744d4b80b4e61ac6d16912"/><file name="Setup.php" hash="852be8f15c3cc83671daddf449e78b47"/></dir><file name="Scores.php" hash="c104ec746c14a40488043bba4cbd86a5"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="DfraudController.php" hash="5230eae76462009471a73e340be043bd"/></dir></dir><dir name="etc"><file name="config.xml" hash="cd1d49b3796e466b571f16ab6a87878b"/><file name="system.xml" hash="56a1d181014706bc19def7d63a5cf399"/></dir><dir name="sql"><dir name="dfraudintegration_setup"><file name="mysql4-install-1.0.0.php" hash="82e29518d79f0b485c827b575763ff75"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="dfraudintegration.xml" hash="6154540dc6253d842f9ad74430993a11"/></dir><dir name="template"><dir name="dfraudintegration"><file name="dfraud.phtml" hash="4225212d04d90b4a84c44337cd9d8d3f"/><file name="note-create.phtml" hash="90bc4162eeb8834afc64a391316a01d0"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Df_DFraudIntegration.xml" hash="8445e26ba8008487227c017f04d77b21"/></dir></target></contents>
|
| 16 |
+
<compatible/>
|
| 17 |
+
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
| 18 |
+
</package>
|
