Version Notes
Connect your Magento store to Braintree to accept Credit Cards & PayPal using V.Zero SDK
Download this release
Release Info
Developer | Dave Macaulay |
Extension | Gene_Braintree |
Version | 2.0.4 |
Comparing to | |
See all releases |
Code changes from version 2.0.3 to 2.0.4
- app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Config.php +1 -1
- app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Currency.php +1 -1
- app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Migration.php +49 -0
- app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Moduleversion.php +1 -1
- app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Version.php +1 -1
- app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Migration.php +1 -1
- app/code/community/Gene/Braintree/Block/Cart/Totals.php +1 -1
- app/code/community/Gene/Braintree/Block/Creditcard/Info.php +3 -3
- app/code/community/Gene/Braintree/Block/Express/Button.php +16 -6
- app/code/community/Gene/Braintree/Block/Info.php +11 -13
- app/code/community/Gene/Braintree/Block/Paypal/Info.php +29 -12
- app/code/community/Gene/Braintree/Helper/Data.php +12 -2
- app/code/community/Gene/Braintree/Model/Migration.php +38 -0
- app/code/community/Gene/Braintree/Model/Paymentmethod/Abstract.php +126 -41
- app/code/community/Gene/Braintree/Model/Paymentmethod/Creditcard.php +54 -90
- app/code/community/Gene/Braintree/Model/Paymentmethod/Legacy/Creditcard.php +1 -1
- app/code/community/Gene/Braintree/Model/Paymentmethod/Legacy/Paypal.php +1 -1
- app/code/community/Gene/Braintree/Model/Paymentmethod/Paypal.php +22 -18
- app/code/community/Gene/Braintree/Model/Wrapper/Braintree.php +0 -1
- app/code/community/Gene/Braintree/controllers/Adminhtml/Braintree/MigrationController.php +4 -1
- app/code/community/Gene/Braintree/etc/config.xml +11 -1
- app/code/community/Gene/Braintree/etc/system.xml +9 -0
- app/design/adminhtml/default/default/layout/gene/braintree.xml +7 -0
- app/design/adminhtml/default/default/template/gene/braintree/creditcard/info.phtml +9 -1
- app/design/adminhtml/default/default/template/gene/braintree/paypal/info.phtml +8 -0
- app/design/adminhtml/default/default/template/gene/braintree/system/config/migration.phtml +40 -5
- app/design/frontend/base/default/template/gene/braintree/js/firecheckout.phtml +8 -0
- app/design/frontend/base/default/template/gene/braintree/js/idev.phtml +9 -1
- js/gene/braintree/config.codekit +1 -1
- package.xml +4 -4
- skin/adminhtml/default/default/css/gene/braintree/adminhtml.css +7 -0
- skin/adminhtml/default/default/css/gene/braintree/adminhtml.less +9 -0
- skin/adminhtml/default/default/css/gene/braintree/config.codekit +2 -2
- skin/adminhtml/default/default/css/gene/braintree/migration.css +10 -6
- skin/adminhtml/default/default/css/gene/braintree/migration.less +10 -6
- skin/frontend/base/default/css/gene/braintree/config.codekit +1 -1
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Config.php
CHANGED
@@ -32,7 +32,7 @@ class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Config
|
|
32 |
* Inform the user there version will not work
|
33 |
* @return string
|
34 |
*/
|
35 |
-
|
36 |
{
|
37 |
$response = Mage::getModel('gene_braintree/wrapper_braintree')->validateCredentials(true);
|
38 |
$response.= '
|
32 |
* Inform the user there version will not work
|
33 |
* @return string
|
34 |
*/
|
35 |
+
protected function getValidConfigHtml()
|
36 |
{
|
37 |
$response = Mage::getModel('gene_braintree/wrapper_braintree')->validateCredentials(true);
|
38 |
$response.= '
|
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Currency.php
CHANGED
@@ -23,7 +23,7 @@ class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Currency
|
|
23 |
* Inform the user there version will not work
|
24 |
* @return string
|
25 |
*/
|
26 |
-
|
27 |
{
|
28 |
$currencies = array();
|
29 |
|
23 |
* Inform the user there version will not work
|
24 |
* @return string
|
25 |
*/
|
26 |
+
protected function getCurrencyTableHtml(Varien_Data_Form_Element_Abstract $element)
|
27 |
{
|
28 |
$currencies = array();
|
29 |
|
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Migration.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Migration
|
5 |
+
*
|
6 |
+
* @author Dave Macaulay <dave@gene.co.uk>
|
7 |
+
*/
|
8 |
+
class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Migration
|
9 |
+
extends Mage_Adminhtml_Block_Abstract implements Varien_Data_Form_Element_Renderer_Interface
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* Render element html
|
13 |
+
*
|
14 |
+
* @param Varien_Data_Form_Element_Abstract $element
|
15 |
+
* @return string
|
16 |
+
*/
|
17 |
+
public function render(Varien_Data_Form_Element_Abstract $element)
|
18 |
+
{
|
19 |
+
// This option is only available if the migration can be ran
|
20 |
+
if (!Mage::helper('gene_braintree')->canRunMigration()) {
|
21 |
+
return '';
|
22 |
+
}
|
23 |
+
|
24 |
+
$useContainerId = $element->getData('use_container_id');
|
25 |
+
return sprintf('<tr id="row_%s">
|
26 |
+
<td class="label">
|
27 |
+
<strong id="%s">%s</strong>
|
28 |
+
</td>
|
29 |
+
<td class="value">
|
30 |
+
%s
|
31 |
+
<p class="note">
|
32 |
+
<span>'. $this->__('The migration tool allows you to import various settings, import customers and remove the legacy files from the Braintree_Payments extension.') . '</span>
|
33 |
+
</p>
|
34 |
+
</td>
|
35 |
+
</tr>',
|
36 |
+
$element->getHtmlId(), $element->getHtmlId(), $element->getLabel(), $this->getMigrationHtml()
|
37 |
+
);
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Return HTML to run the migration
|
42 |
+
*
|
43 |
+
* @return string
|
44 |
+
*/
|
45 |
+
protected function getMigrationHtml()
|
46 |
+
{
|
47 |
+
return '<button type="button" class="scalable" onclick="return showMigration();">Run Migration Tool</button>';
|
48 |
+
}
|
49 |
+
}
|
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Moduleversion.php
CHANGED
@@ -38,7 +38,7 @@ class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Moduleversion
|
|
38 |
* Inform the user there version will not work
|
39 |
* @return string
|
40 |
*/
|
41 |
-
|
42 |
{
|
43 |
$response = Mage::getConfig()->getModuleConfig('Gene_Braintree')->version;
|
44 |
$response.= '
|
38 |
* Inform the user there version will not work
|
39 |
* @return string
|
40 |
*/
|
41 |
+
protected function getVersionHtml()
|
42 |
{
|
43 |
$response = Mage::getConfig()->getModuleConfig('Gene_Braintree')->version;
|
44 |
$response.= '
|
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Version.php
CHANGED
@@ -33,7 +33,7 @@ class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Version
|
|
33 |
* Inform the user there version will not work
|
34 |
* @return string
|
35 |
*/
|
36 |
-
|
37 |
{
|
38 |
if(@class_exists('Braintree_Version')) {
|
39 |
$version = Braintree_Version::get();
|
33 |
* Inform the user there version will not work
|
34 |
* @return string
|
35 |
*/
|
36 |
+
protected function getVersionHtml()
|
37 |
{
|
38 |
if(@class_exists('Braintree_Version')) {
|
39 |
$version = Braintree_Version::get();
|
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Migration.php
CHANGED
@@ -32,6 +32,6 @@ class Gene_Braintree_Block_Adminhtml_System_Config_Migration extends Mage_Core_B
|
|
32 |
protected function _runMigration()
|
33 |
{
|
34 |
return Mage::app()->getRequest()->getParam('section') == 'payment'
|
35 |
-
&& Mage::helper('gene_braintree')->
|
36 |
}
|
37 |
}
|
32 |
protected function _runMigration()
|
33 |
{
|
34 |
return Mage::app()->getRequest()->getParam('section') == 'payment'
|
35 |
+
&& Mage::helper('gene_braintree')->canRunMigration();
|
36 |
}
|
37 |
}
|
app/code/community/Gene/Braintree/Block/Cart/Totals.php
CHANGED
@@ -16,7 +16,7 @@ class Gene_Braintree_Block_Cart_Totals extends Mage_Checkout_Block_Cart_Totals
|
|
16 |
public function needDisplayBaseGrandtotal()
|
17 |
{
|
18 |
// If we have a mapped currency code never display base grand total
|
19 |
-
if(Mage::getSingleton('gene_braintree/wrapper_braintree')->hasMappedCurrencyCode()) {
|
20 |
return false;
|
21 |
}
|
22 |
|
16 |
public function needDisplayBaseGrandtotal()
|
17 |
{
|
18 |
// If we have a mapped currency code never display base grand total
|
19 |
+
if (Mage::getSingleton('gene_braintree/wrapper_braintree')->hasMappedCurrencyCode()) {
|
20 |
return false;
|
21 |
}
|
22 |
|
app/code/community/Gene/Braintree/Block/Creditcard/Info.php
CHANGED
@@ -30,7 +30,7 @@ class Gene_Braintree_Block_Creditcard_Info extends Gene_Braintree_Block_Info
|
|
30 |
$transport = parent::_prepareSpecificInformation($transport);
|
31 |
|
32 |
// Only display this information if it's a single invoice
|
33 |
-
if($this->isSingleInvoice() || ($this->getInfo()->getCcLast4() && $this->getInfo()->getCcType())) {
|
34 |
|
35 |
// Build up the data we wish to pass through
|
36 |
$data = array(
|
@@ -45,13 +45,13 @@ class Gene_Braintree_Block_Creditcard_Info extends Gene_Braintree_Block_Info
|
|
45 |
}
|
46 |
|
47 |
// Check we're in the admin area
|
48 |
-
if(Mage::app()->getStore()->isAdmin()) {
|
49 |
|
50 |
// Include the transaction statuses
|
51 |
$this->includeLiveDetails($data);
|
52 |
|
53 |
// Only include extra information when viewing a single invoice
|
54 |
-
if($this->isSingleInvoice()) {
|
55 |
|
56 |
// What additional information should we show
|
57 |
$additionalInfoHeadings = array(
|
30 |
$transport = parent::_prepareSpecificInformation($transport);
|
31 |
|
32 |
// Only display this information if it's a single invoice
|
33 |
+
if ($this->isSingleInvoice() || ($this->getInfo()->getCcLast4() && $this->getInfo()->getCcType())) {
|
34 |
|
35 |
// Build up the data we wish to pass through
|
36 |
$data = array(
|
45 |
}
|
46 |
|
47 |
// Check we're in the admin area
|
48 |
+
if (Mage::app()->getStore()->isAdmin()) {
|
49 |
|
50 |
// Include the transaction statuses
|
51 |
$this->includeLiveDetails($data);
|
52 |
|
53 |
// Only include extra information when viewing a single invoice
|
54 |
+
if ($this->isSingleInvoice()) {
|
55 |
|
56 |
// What additional information should we show
|
57 |
$additionalInfoHeadings = array(
|
app/code/community/Gene/Braintree/Block/Express/Button.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Class Gene_Braintree_Block_Express_Button
|
4 |
*
|
@@ -8,6 +9,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
|
|
8 |
{
|
9 |
/**
|
10 |
* Braintree token
|
|
|
11 |
* @var string
|
12 |
*/
|
13 |
protected $_token = null;
|
@@ -23,6 +25,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
|
|
23 |
|
24 |
/**
|
25 |
* Get braintree token
|
|
|
26 |
* @return string
|
27 |
*/
|
28 |
public function getToken()
|
@@ -32,11 +35,12 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
|
|
32 |
|
33 |
/**
|
34 |
* Is the express mode enabled
|
|
|
35 |
* @return bool
|
36 |
*/
|
37 |
public function isEnabled()
|
38 |
{
|
39 |
-
if(
|
40 |
return true;
|
41 |
}
|
42 |
|
@@ -45,7 +49,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
|
|
45 |
|
46 |
public function isEnabledPdp()
|
47 |
{
|
48 |
-
if(
|
49 |
return true;
|
50 |
}
|
51 |
|
@@ -54,7 +58,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
|
|
54 |
|
55 |
public function isEnabledCart()
|
56 |
{
|
57 |
-
if(
|
58 |
return true;
|
59 |
}
|
60 |
|
@@ -62,9 +66,9 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
|
|
62 |
}
|
63 |
|
64 |
|
65 |
-
|
66 |
/**
|
67 |
* Get store currency code.
|
|
|
68 |
* @return string
|
69 |
*/
|
70 |
public function getStoreCurrency()
|
@@ -74,6 +78,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
|
|
74 |
|
75 |
/**
|
76 |
* Get the store locale.
|
|
|
77 |
* @return string
|
78 |
*/
|
79 |
public function getStoreLocale()
|
@@ -83,6 +88,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
|
|
83 |
|
84 |
/**
|
85 |
* Get the current product
|
|
|
86 |
* @return mixed
|
87 |
*/
|
88 |
public function getProduct()
|
@@ -92,24 +98,28 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
|
|
92 |
|
93 |
/**
|
94 |
* Registry entry to determine if block has been instantiated yet
|
|
|
95 |
* @return bool
|
96 |
*/
|
97 |
public function hasBeenSetup()
|
98 |
{
|
99 |
-
if(
|
100 |
return true;
|
101 |
}
|
|
|
102 |
return false;
|
103 |
}
|
104 |
|
105 |
/**
|
106 |
* Registry entry to mark this block as instantiated
|
|
|
107 |
* @param string $html
|
|
|
108 |
* @return string
|
109 |
*/
|
110 |
public function _afterToHtml($html)
|
111 |
{
|
112 |
-
if(
|
113 |
Mage::register('gene_braintree_btn_loaded', true);
|
114 |
}
|
115 |
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Class Gene_Braintree_Block_Express_Button
|
5 |
*
|
9 |
{
|
10 |
/**
|
11 |
* Braintree token
|
12 |
+
*
|
13 |
* @var string
|
14 |
*/
|
15 |
protected $_token = null;
|
25 |
|
26 |
/**
|
27 |
* Get braintree token
|
28 |
+
*
|
29 |
* @return string
|
30 |
*/
|
31 |
public function getToken()
|
35 |
|
36 |
/**
|
37 |
* Is the express mode enabled
|
38 |
+
*
|
39 |
* @return bool
|
40 |
*/
|
41 |
public function isEnabled()
|
42 |
{
|
43 |
+
if (Mage::getStoreConfig('payment/gene_braintree_paypal/express_active')) {
|
44 |
return true;
|
45 |
}
|
46 |
|
49 |
|
50 |
public function isEnabledPdp()
|
51 |
{
|
52 |
+
if (Mage::getStoreConfig('payment/gene_braintree_paypal/express_pdp')) {
|
53 |
return true;
|
54 |
}
|
55 |
|
58 |
|
59 |
public function isEnabledCart()
|
60 |
{
|
61 |
+
if (Mage::getStoreConfig('payment/gene_braintree_paypal/express_cart')) {
|
62 |
return true;
|
63 |
}
|
64 |
|
66 |
}
|
67 |
|
68 |
|
|
|
69 |
/**
|
70 |
* Get store currency code.
|
71 |
+
*
|
72 |
* @return string
|
73 |
*/
|
74 |
public function getStoreCurrency()
|
78 |
|
79 |
/**
|
80 |
* Get the store locale.
|
81 |
+
*
|
82 |
* @return string
|
83 |
*/
|
84 |
public function getStoreLocale()
|
88 |
|
89 |
/**
|
90 |
* Get the current product
|
91 |
+
*
|
92 |
* @return mixed
|
93 |
*/
|
94 |
public function getProduct()
|
98 |
|
99 |
/**
|
100 |
* Registry entry to determine if block has been instantiated yet
|
101 |
+
*
|
102 |
* @return bool
|
103 |
*/
|
104 |
public function hasBeenSetup()
|
105 |
{
|
106 |
+
if (Mage::registry('gene_braintree_btn_loaded')) {
|
107 |
return true;
|
108 |
}
|
109 |
+
|
110 |
return false;
|
111 |
}
|
112 |
|
113 |
/**
|
114 |
* Registry entry to mark this block as instantiated
|
115 |
+
*
|
116 |
* @param string $html
|
117 |
+
*
|
118 |
* @return string
|
119 |
*/
|
120 |
public function _afterToHtml($html)
|
121 |
{
|
122 |
+
if (!$this->hasBeenSetup()) {
|
123 |
Mage::register('gene_braintree_btn_loaded', true);
|
124 |
}
|
125 |
|
app/code/community/Gene/Braintree/Block/Info.php
CHANGED
@@ -20,13 +20,13 @@ class Gene_Braintree_Block_Info extends Mage_Payment_Block_Info
|
|
20 |
protected function getViewedObject()
|
21 |
{
|
22 |
// Return the invoice first
|
23 |
-
if(Mage::registry('current_invoice')) {
|
24 |
return Mage::registry('current_invoice');
|
25 |
-
} else if(Mage::registry('current_creditmemo')) {
|
26 |
return Mage::registry('current_creditmemo');
|
27 |
-
} else if(Mage::registry('current_order')) {
|
28 |
return Mage::registry('current_order');
|
29 |
-
} else if(Mage::registry('current_shipment')) {
|
30 |
return Mage::registry('current_shipment')->getOrder();
|
31 |
}
|
32 |
|
@@ -47,27 +47,23 @@ class Gene_Braintree_Block_Info extends Mage_Payment_Block_Info
|
|
47 |
$transactionIds = array();
|
48 |
|
49 |
// If we're viewing a single invoice change the response
|
50 |
-
if($this->isSingleInvoice()) {
|
51 |
-
|
52 |
// Transaction ID won't matter for customers
|
53 |
$data[$this->__('Braintree Transaction ID')] = $this->getTransactionId();
|
54 |
|
55 |
// Build an array of transaction ID's
|
56 |
$transactionIds = array($this->getTransactionId());
|
57 |
|
58 |
-
}
|
59 |
|
60 |
/* @var $invoices Mage_Sales_Model_Resource_Order_Invoice_Collection */
|
61 |
$invoices = $order->getInvoiceCollection();
|
62 |
if($invoices->getSize() > 1) {
|
63 |
-
|
64 |
// Build up our array
|
65 |
foreach($invoices as $invoice) {
|
66 |
$transactionIds[] = $invoice->getTransactionId();
|
67 |
}
|
68 |
-
|
69 |
} else {
|
70 |
-
|
71 |
// Transaction ID won't matter for customers
|
72 |
$data[$this->__('Braintree Transaction ID')] = $this->getTransactionId();
|
73 |
}
|
@@ -76,13 +72,11 @@ class Gene_Braintree_Block_Info extends Mage_Payment_Block_Info
|
|
76 |
|
77 |
// Do we have any transaction ID's
|
78 |
if(!empty($transactionIds)) {
|
79 |
-
|
80 |
// Start a count
|
81 |
$count = 1;
|
82 |
|
83 |
// Iterate through transaction ID's
|
84 |
foreach ($transactionIds as $transactionId) {
|
85 |
-
|
86 |
// Add in another label
|
87 |
if(count($transactionIds) > 1) {
|
88 |
$data[$this->__('Braintree Transaction #%d', $count)] = '';
|
@@ -104,10 +98,14 @@ class Gene_Braintree_Block_Info extends Mage_Payment_Block_Info
|
|
104 |
}
|
105 |
|
106 |
++$count;
|
107 |
-
|
108 |
}
|
109 |
}
|
110 |
|
|
|
|
|
|
|
|
|
|
|
111 |
}
|
112 |
|
113 |
/**
|
20 |
protected function getViewedObject()
|
21 |
{
|
22 |
// Return the invoice first
|
23 |
+
if (Mage::registry('current_invoice')) {
|
24 |
return Mage::registry('current_invoice');
|
25 |
+
} else if (Mage::registry('current_creditmemo')) {
|
26 |
return Mage::registry('current_creditmemo');
|
27 |
+
} else if (Mage::registry('current_order')) {
|
28 |
return Mage::registry('current_order');
|
29 |
+
} else if (Mage::registry('current_shipment')) {
|
30 |
return Mage::registry('current_shipment')->getOrder();
|
31 |
}
|
32 |
|
47 |
$transactionIds = array();
|
48 |
|
49 |
// If we're viewing a single invoice change the response
|
50 |
+
if ($this->isSingleInvoice()) {
|
|
|
51 |
// Transaction ID won't matter for customers
|
52 |
$data[$this->__('Braintree Transaction ID')] = $this->getTransactionId();
|
53 |
|
54 |
// Build an array of transaction ID's
|
55 |
$transactionIds = array($this->getTransactionId());
|
56 |
|
57 |
+
} elseif ($order) {
|
58 |
|
59 |
/* @var $invoices Mage_Sales_Model_Resource_Order_Invoice_Collection */
|
60 |
$invoices = $order->getInvoiceCollection();
|
61 |
if($invoices->getSize() > 1) {
|
|
|
62 |
// Build up our array
|
63 |
foreach($invoices as $invoice) {
|
64 |
$transactionIds[] = $invoice->getTransactionId();
|
65 |
}
|
|
|
66 |
} else {
|
|
|
67 |
// Transaction ID won't matter for customers
|
68 |
$data[$this->__('Braintree Transaction ID')] = $this->getTransactionId();
|
69 |
}
|
72 |
|
73 |
// Do we have any transaction ID's
|
74 |
if(!empty($transactionIds)) {
|
|
|
75 |
// Start a count
|
76 |
$count = 1;
|
77 |
|
78 |
// Iterate through transaction ID's
|
79 |
foreach ($transactionIds as $transactionId) {
|
|
|
80 |
// Add in another label
|
81 |
if(count($transactionIds) > 1) {
|
82 |
$data[$this->__('Braintree Transaction #%d', $count)] = '';
|
98 |
}
|
99 |
|
100 |
++$count;
|
|
|
101 |
}
|
102 |
}
|
103 |
|
104 |
+
if(count($transactionIds) == 1 && isset($transaction)) {
|
105 |
+
return $transaction;
|
106 |
+
}
|
107 |
+
|
108 |
+
return null;
|
109 |
}
|
110 |
|
111 |
/**
|
app/code/community/Gene/Braintree/Block/Paypal/Info.php
CHANGED
@@ -29,25 +29,42 @@ class Gene_Braintree_Block_Paypal_Info extends Gene_Braintree_Block_Info
|
|
29 |
// Get the original transport data
|
30 |
$transport = parent::_prepareSpecificInformation($transport);
|
31 |
|
|
|
|
|
|
|
32 |
// Build up the data we wish to pass through
|
33 |
-
$
|
34 |
-
$this->__('PayPal Email')
|
35 |
-
|
36 |
|
37 |
// Check we're in the admin area
|
38 |
-
if(Mage::app()->getStore()->isAdmin()) {
|
39 |
|
40 |
// Include live details for this transaction
|
41 |
-
$this->includeLiveDetails($data);
|
42 |
|
43 |
-
//
|
44 |
-
$
|
45 |
-
$data
|
46 |
-
|
47 |
-
|
48 |
-
)
|
49 |
-
|
50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
}
|
52 |
|
53 |
// Add the data to the class variable
|
29 |
// Get the original transport data
|
30 |
$transport = parent::_prepareSpecificInformation($transport);
|
31 |
|
32 |
+
// Start out data array
|
33 |
+
$data = array();
|
34 |
+
|
35 |
// Build up the data we wish to pass through
|
36 |
+
if ($this->getInfo()->getAdditionalInformation('paypal_email')) {
|
37 |
+
$data[$this->__('PayPal Email')] = $this->getInfo()->getAdditionalInformation('paypal_email');
|
38 |
+
}
|
39 |
|
40 |
// Check we're in the admin area
|
41 |
+
if (Mage::app()->getStore()->isAdmin()) {
|
42 |
|
43 |
// Include live details for this transaction
|
44 |
+
$transaction = $this->includeLiveDetails($data);
|
45 |
|
46 |
+
// Insert these values if they're present
|
47 |
+
if ($this->getInfo()->getAdditionalInformation('payment_id')) {
|
48 |
+
$data[$this->__('Payment ID')] = $this->getInfo()->getAdditionalInformation('payment_id');
|
49 |
+
}
|
50 |
+
if ($this->getInfo()->getAdditionalInformation('authorization_id')) {
|
51 |
+
$data[$this->__('Authorization ID')] = $this->getInfo()->getAdditionalInformation('authorization_id');
|
52 |
+
}
|
53 |
|
54 |
+
// If the additional information doens't contain certain data, than retrieve it from Braintree
|
55 |
+
if ($transaction && $transaction instanceof Braintree_Transaction) {
|
56 |
+
if (!isset($data[$this->__('PayPal Email')]) && isset($transaction->paypalDetails->payerEmail)) {
|
57 |
+
$data[$this->__('PayPal Email')] = $transaction->paypalDetails->payerEmail;
|
58 |
+
}
|
59 |
+
if (!isset($data[$this->__('Payment ID')]) && isset($transaction->paypalDetails->paymentId)) {
|
60 |
+
$data[$this->__('Payment ID')] = $transaction->paypalDetails->paymentId;
|
61 |
+
}
|
62 |
+
if (!isset($data[$this->__('Authorization ID')])
|
63 |
+
&& isset($transaction->paypalDetails->authorizationId)
|
64 |
+
) {
|
65 |
+
$data[$this->__('Authorization ID')] = $transaction->paypalDetails->authorizationId;
|
66 |
+
}
|
67 |
+
}
|
68 |
}
|
69 |
|
70 |
// Add the data to the class variable
|
app/code/community/Gene/Braintree/Helper/Data.php
CHANGED
@@ -136,13 +136,23 @@ class Gene_Braintree_Helper_Data extends Mage_Core_Helper_Abstract
|
|
136 |
}
|
137 |
|
138 |
/**
|
139 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
*
|
141 |
* @return bool
|
142 |
*/
|
143 |
public function shouldRunMigration()
|
144 |
{
|
145 |
-
return
|
146 |
&& !Mage::getStoreConfigFlag(self::MIGRATION_COMPLETE)
|
147 |
&& !Mage::getStoreConfig('payment/gene_braintree/merchant_id')
|
148 |
&& !Mage::getStoreConfig('payment/gene_braintree/sandbox_merchant_id');
|
136 |
}
|
137 |
|
138 |
/**
|
139 |
+
* Can we run the migration? Requires the Braintree_Payments module to be installed
|
140 |
+
*
|
141 |
+
* @return bool
|
142 |
+
*/
|
143 |
+
public function canRunMigration()
|
144 |
+
{
|
145 |
+
return Mage::helper('core')->isModuleEnabled('Braintree_Payments');
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Should the system run the migration tool automatically
|
150 |
*
|
151 |
* @return bool
|
152 |
*/
|
153 |
public function shouldRunMigration()
|
154 |
{
|
155 |
+
return $this->canRunMigration()
|
156 |
&& !Mage::getStoreConfigFlag(self::MIGRATION_COMPLETE)
|
157 |
&& !Mage::getStoreConfig('payment/gene_braintree/merchant_id')
|
158 |
&& !Mage::getStoreConfig('payment/gene_braintree/sandbox_merchant_id');
|
app/code/community/Gene/Braintree/Model/Migration.php
CHANGED
@@ -31,6 +31,18 @@ class Gene_Braintree_Model_Migration extends Mage_Core_Model_Abstract
|
|
31 |
return $this->setData('run_customer_data', $bool);
|
32 |
}
|
33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
/**
|
35 |
* Should we disable the legacy module?
|
36 |
*
|
@@ -43,6 +55,11 @@ class Gene_Braintree_Model_Migration extends Mage_Core_Model_Abstract
|
|
43 |
{
|
44 |
$this->setData('disable_legacy', $bool);
|
45 |
$this->setData('delete_legacy', $deleteLegacy);
|
|
|
|
|
|
|
|
|
|
|
46 |
}
|
47 |
|
48 |
/**
|
@@ -62,6 +79,10 @@ class Gene_Braintree_Model_Migration extends Mage_Core_Model_Abstract
|
|
62 |
$result->setCustomerData($this->_runCustomerData());
|
63 |
}
|
64 |
|
|
|
|
|
|
|
|
|
65 |
if ($this->getData('disable_legacy')) {
|
66 |
if ($this->getData('delete_legacy')) {
|
67 |
$result->setDeleteLegacy($this->_deleteLegacy());
|
@@ -265,6 +286,23 @@ class Gene_Braintree_Model_Migration extends Mage_Core_Model_Abstract
|
|
265 |
return false;
|
266 |
}
|
267 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
268 |
/**
|
269 |
* Delete the legacy module from the merchants store
|
270 |
*
|
31 |
return $this->setData('run_customer_data', $bool);
|
32 |
}
|
33 |
|
34 |
+
/**
|
35 |
+
* Should we update legacy orders with a new payment method?
|
36 |
+
*
|
37 |
+
* @param $bool
|
38 |
+
*
|
39 |
+
* @return \Varien_Object
|
40 |
+
*/
|
41 |
+
public function setRunOrderTransactionInfo($bool)
|
42 |
+
{
|
43 |
+
return $this->setData('run_order_transaction_info', $bool);
|
44 |
+
}
|
45 |
+
|
46 |
/**
|
47 |
* Should we disable the legacy module?
|
48 |
*
|
55 |
{
|
56 |
$this->setData('disable_legacy', $bool);
|
57 |
$this->setData('delete_legacy', $deleteLegacy);
|
58 |
+
|
59 |
+
// We have to update the orders if they're removing the legacy RocketWeb extension
|
60 |
+
if ($deleteLegacy) {
|
61 |
+
$this->setRunOrderTransactionInfo(true);
|
62 |
+
}
|
63 |
}
|
64 |
|
65 |
/**
|
79 |
$result->setCustomerData($this->_runCustomerData());
|
80 |
}
|
81 |
|
82 |
+
if ($this->getData('run_order_transaction_info')) {
|
83 |
+
$result->setOrderTransactionInfo($this->_runOrderTransactionInfo());
|
84 |
+
}
|
85 |
+
|
86 |
if ($this->getData('disable_legacy')) {
|
87 |
if ($this->getData('delete_legacy')) {
|
88 |
$result->setDeleteLegacy($this->_deleteLegacy());
|
286 |
return false;
|
287 |
}
|
288 |
|
289 |
+
/**
|
290 |
+
* Update legacy orders with new payment method codes to ensure info screen behaves
|
291 |
+
*
|
292 |
+
* @return bool
|
293 |
+
*/
|
294 |
+
public function _runOrderTransactionInfo()
|
295 |
+
{
|
296 |
+
/* @var $resource Mage_Core_Model_Resource */
|
297 |
+
$resource = Mage::getModel('core/resource');
|
298 |
+
$dbWrite = $resource->getConnection('core_write');
|
299 |
+
|
300 |
+
$dbWrite->update($resource->getTableName('sales/order_payment'), array('method' => 'braintree_legacy'), "method = 'braintree'");
|
301 |
+
$dbWrite->update($resource->getTableName('sales/order_payment'), array('method' => 'braintree_paypal_legacy'), "method = 'braintree_paypal'");
|
302 |
+
|
303 |
+
return true;
|
304 |
+
}
|
305 |
+
|
306 |
/**
|
307 |
* Delete the legacy module from the merchants store
|
308 |
*
|
app/code/community/Gene/Braintree/Model/Paymentmethod/Abstract.php
CHANGED
@@ -25,13 +25,10 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
25 |
public function isAvailable($quote = null)
|
26 |
{
|
27 |
// Check Magento's internal methods allow us to run
|
28 |
-
if(parent::isAvailable($quote)) {
|
29 |
-
|
30 |
// Validate the configuration is okay
|
31 |
return $this->_getWrapper()->validateCredentialsOnce();
|
32 |
-
|
33 |
} else {
|
34 |
-
|
35 |
// Otherwise it's a no
|
36 |
return false;
|
37 |
}
|
@@ -80,19 +77,21 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
80 |
protected function handleFraud($result, Varien_Object $payment)
|
81 |
{
|
82 |
// Verify we have risk data
|
83 |
-
if (isset($result->transaction) &&
|
84 |
-
|
|
|
|
|
85 |
// If the merchant has specified the merchant and website ID we can update the payments status
|
86 |
if (Mage::helper('gene_braintree')->canUpdateKount() && isset($result->transaction->riskData->id)) {
|
87 |
-
|
88 |
// Update the payment with the require information
|
89 |
$payment->setAdditionalInformation('kount_id', $result->transaction->riskData->id);
|
90 |
$payment->save();
|
91 |
}
|
92 |
|
93 |
// If the decision is to review the payment mark the payment as such
|
94 |
-
if ($result->transaction->riskData->decision == self::ADVANCED_FRAUD_REVIEW ||
|
95 |
-
|
|
|
96 |
// Mark the payment as pending
|
97 |
$payment->setIsTransactionPending(true);
|
98 |
|
@@ -122,7 +121,7 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
122 |
// Attempt to load the invoice
|
123 |
/* @var $invoice Mage_Sales_Model_Order_Invoice */
|
124 |
$invoice = $payment->getCreditmemo()->getInvoice();
|
125 |
-
if(!$invoice) {
|
126 |
Mage::throwException('Unable to load invoice from credit memo.');
|
127 |
}
|
128 |
|
@@ -140,27 +139,35 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
140 |
|
141 |
// If the transaction hasn't yet settled we can't do partial refunds
|
142 |
if ($transaction->status === Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT) {
|
143 |
-
|
144 |
// If we're doing a partial refund and it's not settled it's a no go
|
145 |
if ($transaction->amount != $refundAmount) {
|
146 |
-
Mage::throwException(
|
|
|
|
|
|
|
147 |
}
|
148 |
}
|
149 |
|
150 |
-
//
|
151 |
-
|
152 |
-
|
153 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
154 |
|
155 |
// If it's a success close the transaction
|
156 |
if ($result->success) {
|
157 |
-
|
158 |
// Pass over the transaction ID
|
159 |
$payment->getCreditmemo()->setRefundTransactionId($result->transaction->id);
|
160 |
|
161 |
// Only close the transaction once the transaction amount meets the refund amount
|
162 |
-
if($transaction->amount == $refundAmount) {
|
163 |
-
|
164 |
$payment->setIsTransactionClosed(1);
|
165 |
|
166 |
// Mark the invoice as canceled if the invoice was completely refunded
|
@@ -171,7 +178,7 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
171 |
}
|
172 |
|
173 |
} else {
|
174 |
-
if($result->errors->deepSize() > 0) {
|
175 |
Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
|
176 |
} else {
|
177 |
Mage::throwException('An unknown error has occurred whilst trying to process the transaction');
|
@@ -179,7 +186,72 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
179 |
}
|
180 |
|
181 |
} catch (Exception $e) {
|
182 |
-
Mage::throwException(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
}
|
184 |
|
185 |
return $this;
|
@@ -211,7 +283,6 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
211 |
{
|
212 |
// Has the payment already been authorized?
|
213 |
if ($payment->getCcTransId()) {
|
214 |
-
|
215 |
// Convert the capture amount to the correct currency
|
216 |
$captureAmount = $this->_getWrapper()->getCaptureAmount($payment->getOrder(), $amount);
|
217 |
|
@@ -223,12 +294,20 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
223 |
$transaction = Braintree_Transaction::find($lastTransactionId);
|
224 |
|
225 |
// Has the transaction already been settled? or submitted for the settlement?
|
226 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
227 |
// Do the capture amounts match?
|
228 |
if ($captureAmount == $transaction->amount) {
|
229 |
// We can just approve the invoice
|
230 |
$this->_updateKountStatus($payment, 'A');
|
231 |
$payment->setStatus(self::STATUS_APPROVED);
|
|
|
232 |
return $this;
|
233 |
}
|
234 |
}
|
@@ -239,13 +318,11 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
239 |
|
240 |
// Has the authorization already been settled? Partial invoicing
|
241 |
if ($this->authorizationUsed($payment)) {
|
242 |
-
|
243 |
// Set the token as false
|
244 |
$token = false;
|
245 |
|
246 |
// Was the original payment created with a token?
|
247 |
-
if($additionalInfoToken = $payment->getAdditionalInformation('token')) {
|
248 |
-
|
249 |
try {
|
250 |
// Init the environment
|
251 |
$this->_getWrapper()->init($payment->getOrder()->getStoreId());
|
@@ -264,42 +341,44 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
264 |
|
265 |
// If we managed to find a token use that for the capture
|
266 |
if ($token) {
|
267 |
-
|
268 |
// Stop processing the rest of the method
|
269 |
// We pass $amount instead of $captureAmount as the authorize function contains the conversion
|
270 |
$this->_authorize($payment, $amount, true, $token);
|
271 |
return $this;
|
272 |
|
273 |
} else {
|
274 |
-
|
275 |
// Attempt to clone the transaction
|
276 |
-
$result = $this->_getWrapper()->init(
|
|
|
|
|
277 |
}
|
278 |
|
279 |
} else {
|
280 |
-
|
281 |
// Init the environment
|
282 |
-
$result = $this->_getWrapper()->init(
|
|
|
|
|
283 |
|
284 |
// Log the result
|
285 |
Gene_Braintree_Model_Debug::log(array('capture:submitForSettlement' => $result));
|
286 |
}
|
287 |
|
288 |
-
if($result->success) {
|
289 |
$this->_updateKountStatus($payment, 'A');
|
290 |
$this->_processSuccessResult($payment, $result, $amount);
|
291 |
-
}
|
292 |
-
|
293 |
// Clean up
|
294 |
Gene_Braintree_Model_Wrapper_Braintree::cleanUp();
|
295 |
|
296 |
Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
|
297 |
} else {
|
298 |
-
|
299 |
// Clean up
|
300 |
Gene_Braintree_Model_Wrapper_Braintree::cleanUp();
|
301 |
|
302 |
-
Mage::throwException(
|
|
|
|
|
|
|
303 |
}
|
304 |
|
305 |
} else {
|
@@ -347,10 +426,10 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
347 |
if ($invoice->getState() == Mage_Sales_Model_Order_Invoice::STATE_PAID) {
|
348 |
// Invoice is already paid and captured, just move the order into processing
|
349 |
return false;
|
350 |
-
}
|
351 |
return $invoice->capture();
|
352 |
}
|
353 |
-
}
|
354 |
// We don't currently have an invoice for this order, let's create one whilst capturing
|
355 |
$order->getPayment()->capture(null);
|
356 |
/* @var $invoice Mage_Sales_Model_Order_Invoice */
|
@@ -360,7 +439,9 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
360 |
return true;
|
361 |
}
|
362 |
|
363 |
-
Mage::throwException(
|
|
|
|
|
364 |
}
|
365 |
|
366 |
/**
|
@@ -412,7 +493,9 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
412 |
*/
|
413 |
protected function _updateKountStatus(Varien_Object $payment, $status = 'A')
|
414 |
{
|
415 |
-
if (Mage::helper('gene_braintree')->canUpdateKount() &&
|
|
|
|
|
416 |
$kountRest = Mage::getModel('gene_braintree/kount_rest');
|
417 |
$kountRest->updateOrderStatus($payment->getOrder(), $status);
|
418 |
}
|
@@ -429,7 +512,9 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
429 |
*/
|
430 |
protected function _updateKountRefund(Varien_Object $payment)
|
431 |
{
|
432 |
-
if (Mage::helper('gene_braintree')->canUpdateKount()
|
|
|
|
|
433 |
$kountRest = Mage::getModel('gene_braintree/kount_rest');
|
434 |
$kountRest->updateOrderRefund($payment->getOrder());
|
435 |
}
|
25 |
public function isAvailable($quote = null)
|
26 |
{
|
27 |
// Check Magento's internal methods allow us to run
|
28 |
+
if (parent::isAvailable($quote)) {
|
|
|
29 |
// Validate the configuration is okay
|
30 |
return $this->_getWrapper()->validateCredentialsOnce();
|
|
|
31 |
} else {
|
|
|
32 |
// Otherwise it's a no
|
33 |
return false;
|
34 |
}
|
77 |
protected function handleFraud($result, Varien_Object $payment)
|
78 |
{
|
79 |
// Verify we have risk data
|
80 |
+
if (isset($result->transaction) &&
|
81 |
+
isset($result->transaction->riskData) &&
|
82 |
+
isset($result->transaction->riskData->decision)
|
83 |
+
) {
|
84 |
// If the merchant has specified the merchant and website ID we can update the payments status
|
85 |
if (Mage::helper('gene_braintree')->canUpdateKount() && isset($result->transaction->riskData->id)) {
|
|
|
86 |
// Update the payment with the require information
|
87 |
$payment->setAdditionalInformation('kount_id', $result->transaction->riskData->id);
|
88 |
$payment->save();
|
89 |
}
|
90 |
|
91 |
// If the decision is to review the payment mark the payment as such
|
92 |
+
if ($result->transaction->riskData->decision == self::ADVANCED_FRAUD_REVIEW ||
|
93 |
+
$result->transaction->riskData->decision == self::ADVANCED_FRAUD_DECLINE
|
94 |
+
) {
|
95 |
// Mark the payment as pending
|
96 |
$payment->setIsTransactionPending(true);
|
97 |
|
121 |
// Attempt to load the invoice
|
122 |
/* @var $invoice Mage_Sales_Model_Order_Invoice */
|
123 |
$invoice = $payment->getCreditmemo()->getInvoice();
|
124 |
+
if (!$invoice) {
|
125 |
Mage::throwException('Unable to load invoice from credit memo.');
|
126 |
}
|
127 |
|
139 |
|
140 |
// If the transaction hasn't yet settled we can't do partial refunds
|
141 |
if ($transaction->status === Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT) {
|
|
|
142 |
// If we're doing a partial refund and it's not settled it's a no go
|
143 |
if ($transaction->amount != $refundAmount) {
|
144 |
+
Mage::throwException(
|
145 |
+
$this->_getHelper()->__('This transaction has not yet settled, please wait until the ' .
|
146 |
+
'transaction has settled to process a partial refund.')
|
147 |
+
);
|
148 |
}
|
149 |
}
|
150 |
|
151 |
+
// Determine if the transaction is settled, or settling
|
152 |
+
if (($transaction->status == Braintree_Transaction::SETTLED ||
|
153 |
+
$transaction->status == Braintree_Transaction::SETTLING) ||
|
154 |
+
(isset($transaction->paypal) &&
|
155 |
+
isset($transaction->paypal['paymentId']) &&
|
156 |
+
!empty($transaction->paypal['paymentId'])
|
157 |
+
)
|
158 |
+
) {
|
159 |
+
$result = Braintree_Transaction::refund($transactionId, $refundAmount);
|
160 |
+
} else {
|
161 |
+
$result = Braintree_Transaction::void($transactionId);
|
162 |
+
}
|
163 |
|
164 |
// If it's a success close the transaction
|
165 |
if ($result->success) {
|
|
|
166 |
// Pass over the transaction ID
|
167 |
$payment->getCreditmemo()->setRefundTransactionId($result->transaction->id);
|
168 |
|
169 |
// Only close the transaction once the transaction amount meets the refund amount
|
170 |
+
if ($transaction->amount == $refundAmount) {
|
|
|
171 |
$payment->setIsTransactionClosed(1);
|
172 |
|
173 |
// Mark the invoice as canceled if the invoice was completely refunded
|
178 |
}
|
179 |
|
180 |
} else {
|
181 |
+
if ($result->errors->deepSize() > 0) {
|
182 |
Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
|
183 |
} else {
|
184 |
Mage::throwException('An unknown error has occurred whilst trying to process the transaction');
|
186 |
}
|
187 |
|
188 |
} catch (Exception $e) {
|
189 |
+
Mage::throwException(
|
190 |
+
$this->_getHelper()->__('An error occurred whilst trying to process the refund: ') . $e->getMessage()
|
191 |
+
);
|
192 |
+
}
|
193 |
+
|
194 |
+
return $this;
|
195 |
+
}
|
196 |
+
|
197 |
+
/**
|
198 |
+
* Cancel a payment, refunding the order
|
199 |
+
*
|
200 |
+
* @param \Varien_Object $payment
|
201 |
+
*
|
202 |
+
* @return $this
|
203 |
+
*/
|
204 |
+
public function cancel(Varien_Object $payment)
|
205 |
+
{
|
206 |
+
$this->void($payment);
|
207 |
+
|
208 |
+
return $this;
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* Void payment abstract method
|
213 |
+
*
|
214 |
+
* @param Varien_Object $payment
|
215 |
+
*
|
216 |
+
* @return Mage_Payment_Model_Abstract
|
217 |
+
*/
|
218 |
+
public function void(Varien_Object $payment)
|
219 |
+
{
|
220 |
+
try {
|
221 |
+
// Init the environment
|
222 |
+
$this->_getWrapper()->init($payment->getOrder()->getStoreId());
|
223 |
+
|
224 |
+
// Retrieve the transaction ID
|
225 |
+
$transactionId = $this->_getWrapper()->getCleanTransactionId($payment->getLastTransId());
|
226 |
+
|
227 |
+
// Load the transaction from Braintree
|
228 |
+
$transaction = Braintree_Transaction::find($transactionId);
|
229 |
+
|
230 |
+
// We can only void authorized and submitted for settlement transactions
|
231 |
+
if ($transaction->status == Braintree_Transaction::AUTHORIZED ||
|
232 |
+
$transaction->status == Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT
|
233 |
+
) {
|
234 |
+
$result = Braintree_Transaction::void($transactionId);
|
235 |
+
} else {
|
236 |
+
// If the transaction isn't voidable, refund it
|
237 |
+
$result = Braintree_Transaction::refund($transactionId);
|
238 |
+
}
|
239 |
+
|
240 |
+
// If it's a success close the transaction
|
241 |
+
if ($result->success) {
|
242 |
+
$payment->setIsTransactionClosed(1);
|
243 |
+
} else {
|
244 |
+
if ($result->errors->deepSize() > 0) {
|
245 |
+
Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
|
246 |
+
} else {
|
247 |
+
Mage::throwException('Unknown');
|
248 |
+
}
|
249 |
+
}
|
250 |
+
|
251 |
+
} catch (Exception $e) {
|
252 |
+
Mage::throwException(
|
253 |
+
$this->_getHelper()->__('An error occurred whilst trying to void the transaction: %s', $e->getMessage())
|
254 |
+
);
|
255 |
}
|
256 |
|
257 |
return $this;
|
283 |
{
|
284 |
// Has the payment already been authorized?
|
285 |
if ($payment->getCcTransId()) {
|
|
|
286 |
// Convert the capture amount to the correct currency
|
287 |
$captureAmount = $this->_getWrapper()->getCaptureAmount($payment->getOrder(), $amount);
|
288 |
|
294 |
$transaction = Braintree_Transaction::find($lastTransactionId);
|
295 |
|
296 |
// Has the transaction already been settled? or submitted for the settlement?
|
297 |
+
// Also treat settling transaction as being process. Case #828048
|
298 |
+
if (isset($transaction->id) &&
|
299 |
+
(
|
300 |
+
$transaction->status == Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT ||
|
301 |
+
$transaction->status == Braintree_Transaction::SETTLED ||
|
302 |
+
$transaction->status == Braintree_Transaction::SETTLING
|
303 |
+
)
|
304 |
+
) {
|
305 |
// Do the capture amounts match?
|
306 |
if ($captureAmount == $transaction->amount) {
|
307 |
// We can just approve the invoice
|
308 |
$this->_updateKountStatus($payment, 'A');
|
309 |
$payment->setStatus(self::STATUS_APPROVED);
|
310 |
+
|
311 |
return $this;
|
312 |
}
|
313 |
}
|
318 |
|
319 |
// Has the authorization already been settled? Partial invoicing
|
320 |
if ($this->authorizationUsed($payment)) {
|
|
|
321 |
// Set the token as false
|
322 |
$token = false;
|
323 |
|
324 |
// Was the original payment created with a token?
|
325 |
+
if ($additionalInfoToken = $payment->getAdditionalInformation('token')) {
|
|
|
326 |
try {
|
327 |
// Init the environment
|
328 |
$this->_getWrapper()->init($payment->getOrder()->getStoreId());
|
341 |
|
342 |
// If we managed to find a token use that for the capture
|
343 |
if ($token) {
|
|
|
344 |
// Stop processing the rest of the method
|
345 |
// We pass $amount instead of $captureAmount as the authorize function contains the conversion
|
346 |
$this->_authorize($payment, $amount, true, $token);
|
347 |
return $this;
|
348 |
|
349 |
} else {
|
|
|
350 |
// Attempt to clone the transaction
|
351 |
+
$result = $this->_getWrapper()->init(
|
352 |
+
$payment->getOrder()->getStoreId()
|
353 |
+
)->cloneTransaction($lastTransactionId, $captureAmount);
|
354 |
}
|
355 |
|
356 |
} else {
|
|
|
357 |
// Init the environment
|
358 |
+
$result = $this->_getWrapper()->init(
|
359 |
+
$payment->getOrder()->getStoreId()
|
360 |
+
)->submitForSettlement($payment->getCcTransId(), $captureAmount);
|
361 |
|
362 |
// Log the result
|
363 |
Gene_Braintree_Model_Debug::log(array('capture:submitForSettlement' => $result));
|
364 |
}
|
365 |
|
366 |
+
if ($result->success) {
|
367 |
$this->_updateKountStatus($payment, 'A');
|
368 |
$this->_processSuccessResult($payment, $result, $amount);
|
369 |
+
} elseif ($result->errors->deepSize() > 0) {
|
|
|
370 |
// Clean up
|
371 |
Gene_Braintree_Model_Wrapper_Braintree::cleanUp();
|
372 |
|
373 |
Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
|
374 |
} else {
|
|
|
375 |
// Clean up
|
376 |
Gene_Braintree_Model_Wrapper_Braintree::cleanUp();
|
377 |
|
378 |
+
Mage::throwException(
|
379 |
+
$result->transaction->processorSettlementResponseCode.':
|
380 |
+
'.$result->transaction->processorSettlementResponseText
|
381 |
+
);
|
382 |
}
|
383 |
|
384 |
} else {
|
426 |
if ($invoice->getState() == Mage_Sales_Model_Order_Invoice::STATE_PAID) {
|
427 |
// Invoice is already paid and captured, just move the order into processing
|
428 |
return false;
|
429 |
+
} elseif ($invoice->canCapture()) {
|
430 |
return $invoice->capture();
|
431 |
}
|
432 |
+
} elseif ($order->getPayment()->canCapture()) {
|
433 |
// We don't currently have an invoice for this order, let's create one whilst capturing
|
434 |
$order->getPayment()->capture(null);
|
435 |
/* @var $invoice Mage_Sales_Model_Order_Invoice */
|
439 |
return true;
|
440 |
}
|
441 |
|
442 |
+
Mage::throwException(
|
443 |
+
Mage::helper('payment')->__('Unable to load invoice to accept the payment for this order.')
|
444 |
+
);
|
445 |
}
|
446 |
|
447 |
/**
|
493 |
*/
|
494 |
protected function _updateKountStatus(Varien_Object $payment, $status = 'A')
|
495 |
{
|
496 |
+
if (Mage::helper('gene_braintree')->canUpdateKount() &&
|
497 |
+
($kountId = $payment->getAdditionalInformation('kount_id'))
|
498 |
+
) {
|
499 |
$kountRest = Mage::getModel('gene_braintree/kount_rest');
|
500 |
$kountRest->updateOrderStatus($payment->getOrder(), $status);
|
501 |
}
|
512 |
*/
|
513 |
protected function _updateKountRefund(Varien_Object $payment)
|
514 |
{
|
515 |
+
if (Mage::helper('gene_braintree')->canUpdateKount()
|
516 |
+
&& ($kountId = $payment->getAdditionalInformation('kount_id'))
|
517 |
+
) {
|
518 |
$kountRest = Mage::getModel('gene_braintree/kount_rest');
|
519 |
$kountRest->updateOrderRefund($payment->getOrder());
|
520 |
}
|
app/code/community/Gene/Braintree/Model/Paymentmethod/Creditcard.php
CHANGED
@@ -55,6 +55,7 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
55 |
* Place Braintree specific data into the additional information of the payment instance object
|
56 |
*
|
57 |
* @param mixed $data
|
|
|
58 |
* @return Mage_Payment_Model_Info
|
59 |
*/
|
60 |
public function assignData($data)
|
@@ -115,18 +116,18 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
115 |
public function is3DEnabled()
|
116 |
{
|
117 |
// 3D secure can never be enabled for the admin
|
118 |
-
if(Mage::app()->getStore()->isAdmin()) {
|
119 |
return false;
|
120 |
}
|
121 |
|
122 |
// Is 3Ds enabled within the configuration?
|
123 |
-
if($this->_getConfig('threedsecure')) {
|
124 |
-
|
125 |
// Do we have a requirement on the threshold
|
126 |
-
if($this->_getConfig('threedsecure_threshold') > 0) {
|
127 |
-
|
128 |
// Check to see if the base grand total is bigger then the threshold
|
129 |
-
if(Mage::getSingleton('checkout/cart')->getQuote()->collectTotals()->getBaseGrandTotal() >
|
|
|
|
|
130 |
return true;
|
131 |
}
|
132 |
|
@@ -143,7 +144,7 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
143 |
* Should we save this method in the database?
|
144 |
*
|
145 |
* @param \Varien_Object $payment
|
146 |
-
* @param
|
147 |
*
|
148 |
* @return mixed
|
149 |
*/
|
@@ -153,7 +154,7 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
153 |
// We must always save the method for multi shipping requests
|
154 |
if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
|
155 |
return true;
|
156 |
-
}
|
157 |
// If we have an original token, there is no need to save the same payment method again
|
158 |
return false;
|
159 |
}
|
@@ -166,7 +167,10 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
166 |
$object->setResponse(($this->isVaultEnabled() && $saveCard == 1));
|
167 |
|
168 |
// Specific event for this method
|
169 |
-
Mage::dispatchEvent('gene_braintree_creditcard_should_save_method', array(
|
|
|
|
|
|
|
170 |
|
171 |
// General event if we want to enforce saving of all payment methods
|
172 |
Mage::dispatchEvent('gene_braintree_save_method', array('object' => $object, 'payment' => $payment));
|
@@ -210,8 +214,9 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
210 |
}
|
211 |
|
212 |
// Confirm that we have a nonce from Braintree
|
213 |
-
if (!$this->getPaymentMethodToken() ||
|
214 |
-
|
|
|
215 |
if (!$this->getPaymentMethodNonce()) {
|
216 |
Gene_Braintree_Model_Debug::log('Card payment has failed, missing token/nonce');
|
217 |
Gene_Braintree_Model_Debug::log($_SERVER['HTTP_USER_AGENT']);
|
@@ -220,8 +225,7 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
220 |
$this->_getHelper()->__('Your card payment has failed, please try again.')
|
221 |
);
|
222 |
}
|
223 |
-
}
|
224 |
-
|
225 |
Gene_Braintree_Model_Debug::log('No saved card token present');
|
226 |
Gene_Braintree_Model_Debug::log($_SERVER['HTTP_USER_AGENT']);
|
227 |
|
@@ -254,7 +258,6 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
254 |
|
255 |
// Attempt to create the sale
|
256 |
try {
|
257 |
-
|
258 |
// Build up the sale array
|
259 |
$saleArray = $this->_getWrapper()->buildSale(
|
260 |
$amount,
|
@@ -272,44 +275,48 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
272 |
);
|
273 |
|
274 |
} catch (Exception $e) {
|
275 |
-
|
276 |
// Handle an exception being thrown
|
277 |
-
Mage::dispatchEvent('gene_braintree_creditcard_failed_exception', array(
|
|
|
|
|
|
|
278 |
|
279 |
return $this->_processFailedResult($this->_getHelper()->__('There was an issue whilst trying to process your card payment, please try again or another method.'), $e);
|
280 |
-
|
281 |
}
|
282 |
|
283 |
// Log the initial sale array, no protected data is included
|
284 |
Gene_Braintree_Model_Debug::log(array('_authorize:result' => $result));
|
285 |
|
286 |
// If the transaction was 3Ds but doesn't contain a 3Ds response
|
287 |
-
if (($this->is3DEnabled() && isset($saleArray['options']['three_d_secure']['required']) &&
|
288 |
-
|
|
|
|
|
|
|
289 |
return $this->_processFailedResult($this->_getHelper()->__('This transaction must be passed through 3D secure, please try again or consider using an alternate payment method.'), false, $result);
|
290 |
|
291 |
}
|
292 |
|
293 |
// If the sale has failed
|
294 |
if ($result->success != true) {
|
295 |
-
|
296 |
// Dispatch an event for when a payment fails
|
297 |
Mage::dispatchEvent('gene_braintree_creditcard_failed', array('payment' => $payment, 'result' => $result));
|
298 |
|
299 |
// Return a different message for declined cards
|
300 |
-
if(isset($result->transaction->status)) {
|
301 |
-
|
302 |
// Return a custom response for processor declined messages
|
303 |
-
if($result->transaction->status == Braintree_Transaction::PROCESSOR_DECLINED) {
|
304 |
-
|
305 |
return $this->_processFailedResult($this->_getHelper()->__('Your transaction has been declined, please try another payment method or contacting your issuing bank.'), false, $result);
|
306 |
|
307 |
-
}
|
308 |
&& isset($result->transaction->gatewayRejectionReason)
|
309 |
-
&& $result->transaction->gatewayRejectionReason == Braintree_Transaction::THREE_D_SECURE
|
310 |
-
{
|
311 |
// An event for when 3D secure fails
|
312 |
-
Mage::dispatchEvent('gene_braintree_creditcard_failed_threed', array(
|
|
|
|
|
|
|
313 |
|
314 |
return $this->_processFailedResult($this->_getHelper()->__('Your card has failed 3D secure validation, please try again or consider using an alternate payment method.'), 'Transaction failed with 3D secure', false, $result);
|
315 |
}
|
@@ -337,34 +344,30 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
337 |
// If we have an original token use that for the subsequent requests
|
338 |
if ($originalToken = $this->_getOriginalToken()) {
|
339 |
$paymentArray['paymentMethodToken'] = $originalToken;
|
|
|
340 |
return $paymentArray;
|
341 |
}
|
342 |
|
343 |
// Check to see whether we're using a payment method token?
|
344 |
-
if($this->getPaymentMethodToken() &&
|
345 |
-
|
|
|
346 |
// Build our payment array
|
347 |
$paymentArray['paymentMethodToken'] = $this->getPaymentMethodToken();
|
348 |
unset($paymentArray['cvv']);
|
349 |
-
|
350 |
} else {
|
351 |
-
|
352 |
// Build our payment array with a nonce
|
353 |
$paymentArray['paymentMethodNonce'] = $this->getPaymentMethodNonce();
|
354 |
-
|
355 |
}
|
356 |
|
357 |
// If the user is using a stored card with 3D secure, enable it in the request and remove CVV
|
358 |
if ($this->getPaymentMethodToken() && $this->getPaymentMethodToken() == 'threedsecure') {
|
359 |
-
|
360 |
// If we're using 3D secure token card don't send CVV
|
361 |
unset($paymentArray['cvv']);
|
362 |
-
|
363 |
}
|
364 |
|
365 |
// If a token is present in the request use that
|
366 |
if ($token) {
|
367 |
-
|
368 |
// Remove this unneeded data
|
369 |
unset($paymentArray['paymentMethodNonce'], $paymentArray['cvv']);
|
370 |
|
@@ -422,65 +425,23 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
422 |
return $this->_captureAuthorized($payment, $amount);
|
423 |
}
|
424 |
|
425 |
-
/**
|
426 |
-
* Void payment abstract method
|
427 |
-
*
|
428 |
-
* @param Varien_Object $payment
|
429 |
-
*
|
430 |
-
* @return Mage_Payment_Model_Abstract
|
431 |
-
*/
|
432 |
-
public function void(Varien_Object $payment)
|
433 |
-
{
|
434 |
-
try {
|
435 |
-
// Init the environment
|
436 |
-
$this->_getWrapper()->init($payment->getOrder()->getStoreId());
|
437 |
-
|
438 |
-
// Retrieve the transaction ID
|
439 |
-
$transactionId = $this->_getWrapper()->getCleanTransactionId($payment->getLastTransId());
|
440 |
-
|
441 |
-
// Load the transaction from Braintree
|
442 |
-
$transaction = Braintree_Transaction::find($transactionId);
|
443 |
-
|
444 |
-
// We can only void authorized and submitted for settlement transactions
|
445 |
-
if ($transaction->status == Braintree_Transaction::AUTHORIZED || $transaction->status == Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT) {
|
446 |
-
|
447 |
-
// Swap between refund and void
|
448 |
-
$result = Braintree_Transaction::void($transactionId);
|
449 |
-
|
450 |
-
// If it's a success close the transaction
|
451 |
-
if ($result->success) {
|
452 |
-
$payment->setIsTransactionClosed(1);
|
453 |
-
} else {
|
454 |
-
if ($result->errors->deepSize() > 0) {
|
455 |
-
Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
|
456 |
-
} else {
|
457 |
-
Mage::throwException('Unknown');
|
458 |
-
}
|
459 |
-
}
|
460 |
-
|
461 |
-
} else {
|
462 |
-
Mage::throwException($this->_getHelper()->__('You can only void authorized/submitted for settlement payments, please setup a credit memo if you wish to refund this order.'));
|
463 |
-
}
|
464 |
-
|
465 |
-
} catch (Exception $e) {
|
466 |
-
Mage::throwException($this->_getHelper()->__('An error occurred whilst trying to void the transaction: ') . $e->getMessage());
|
467 |
-
}
|
468 |
-
|
469 |
-
return $this;
|
470 |
-
}
|
471 |
-
|
472 |
/**
|
473 |
* Processes successful authorize/clone result
|
474 |
*
|
475 |
-
* @param Varien_Object
|
476 |
* @param Braintree_Result_Successful $result
|
477 |
-
* @param float
|
|
|
478 |
* @return Varien_Object
|
479 |
*/
|
480 |
protected function _processSuccessResult(Varien_Object $payment, $result, $amount)
|
481 |
{
|
482 |
// Pass an event if the payment was a success
|
483 |
-
Mage::dispatchEvent('gene_braintree_creditcard_success', array(
|
|
|
|
|
|
|
|
|
484 |
|
485 |
// Set some basic information about the payment
|
486 |
$payment->setStatus(self::STATUS_APPROVED)
|
@@ -527,13 +488,13 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
527 |
foreach ($storeFields as $storeField) {
|
528 |
if (isset($result->transaction->{$storeField}) && !empty($result->transaction->{$storeField})) {
|
529 |
$additionalInfo[$storeField] = $result->transaction->{$storeField};
|
530 |
-
}
|
531 |
$additionalInfo[$storeField] = $value;
|
532 |
}
|
533 |
}
|
534 |
|
535 |
// Check it's not empty and store it
|
536 |
-
if(!empty($additionalInfo)) {
|
537 |
$payment->setAdditionalInformation($additionalInfo);
|
538 |
}
|
539 |
|
@@ -544,9 +505,12 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
544 |
if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
|
545 |
$this->_setOriginalToken($result->transaction->creditCard['token']);
|
546 |
|
547 |
-
// If we shouldn't have this method saved, add it into the session to be removed once the request is
|
|
|
548 |
if (!$this->shouldSaveMethod($payment, true)) {
|
549 |
-
Mage::getSingleton('checkout/session')->setTemporaryPaymentToken(
|
|
|
|
|
550 |
}
|
551 |
}
|
552 |
}
|
55 |
* Place Braintree specific data into the additional information of the payment instance object
|
56 |
*
|
57 |
* @param mixed $data
|
58 |
+
*
|
59 |
* @return Mage_Payment_Model_Info
|
60 |
*/
|
61 |
public function assignData($data)
|
116 |
public function is3DEnabled()
|
117 |
{
|
118 |
// 3D secure can never be enabled for the admin
|
119 |
+
if (Mage::app()->getStore()->isAdmin()) {
|
120 |
return false;
|
121 |
}
|
122 |
|
123 |
// Is 3Ds enabled within the configuration?
|
124 |
+
if ($this->_getConfig('threedsecure')) {
|
|
|
125 |
// Do we have a requirement on the threshold
|
126 |
+
if ($this->_getConfig('threedsecure_threshold') > 0) {
|
|
|
127 |
// Check to see if the base grand total is bigger then the threshold
|
128 |
+
if (Mage::getSingleton('checkout/cart')->getQuote()->collectTotals()->getBaseGrandTotal() >
|
129 |
+
$this->_getConfig('threedsecure_threshold')
|
130 |
+
) {
|
131 |
return true;
|
132 |
}
|
133 |
|
144 |
* Should we save this method in the database?
|
145 |
*
|
146 |
* @param \Varien_Object $payment
|
147 |
+
* @param $skipMultishipping
|
148 |
*
|
149 |
* @return mixed
|
150 |
*/
|
154 |
// We must always save the method for multi shipping requests
|
155 |
if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
|
156 |
return true;
|
157 |
+
} elseif ($this->_getOriginalToken()) {
|
158 |
// If we have an original token, there is no need to save the same payment method again
|
159 |
return false;
|
160 |
}
|
167 |
$object->setResponse(($this->isVaultEnabled() && $saveCard == 1));
|
168 |
|
169 |
// Specific event for this method
|
170 |
+
Mage::dispatchEvent('gene_braintree_creditcard_should_save_method', array(
|
171 |
+
'object' => $object,
|
172 |
+
'payment' => $payment
|
173 |
+
));
|
174 |
|
175 |
// General event if we want to enforce saving of all payment methods
|
176 |
Mage::dispatchEvent('gene_braintree_save_method', array('object' => $object, 'payment' => $payment));
|
214 |
}
|
215 |
|
216 |
// Confirm that we have a nonce from Braintree
|
217 |
+
if (!$this->getPaymentMethodToken() ||
|
218 |
+
($this->getPaymentMethodToken() && $this->getPaymentMethodToken() == 'threedsecure')
|
219 |
+
) {
|
220 |
if (!$this->getPaymentMethodNonce()) {
|
221 |
Gene_Braintree_Model_Debug::log('Card payment has failed, missing token/nonce');
|
222 |
Gene_Braintree_Model_Debug::log($_SERVER['HTTP_USER_AGENT']);
|
225 |
$this->_getHelper()->__('Your card payment has failed, please try again.')
|
226 |
);
|
227 |
}
|
228 |
+
} elseif (!$this->getPaymentMethodToken()) {
|
|
|
229 |
Gene_Braintree_Model_Debug::log('No saved card token present');
|
230 |
Gene_Braintree_Model_Debug::log($_SERVER['HTTP_USER_AGENT']);
|
231 |
|
258 |
|
259 |
// Attempt to create the sale
|
260 |
try {
|
|
|
261 |
// Build up the sale array
|
262 |
$saleArray = $this->_getWrapper()->buildSale(
|
263 |
$amount,
|
275 |
);
|
276 |
|
277 |
} catch (Exception $e) {
|
|
|
278 |
// Handle an exception being thrown
|
279 |
+
Mage::dispatchEvent('gene_braintree_creditcard_failed_exception', array(
|
280 |
+
'payment' => $payment,
|
281 |
+
'exception' => $e
|
282 |
+
));
|
283 |
|
284 |
return $this->_processFailedResult($this->_getHelper()->__('There was an issue whilst trying to process your card payment, please try again or another method.'), $e);
|
|
|
285 |
}
|
286 |
|
287 |
// Log the initial sale array, no protected data is included
|
288 |
Gene_Braintree_Model_Debug::log(array('_authorize:result' => $result));
|
289 |
|
290 |
// If the transaction was 3Ds but doesn't contain a 3Ds response
|
291 |
+
if (($this->is3DEnabled() && isset($saleArray['options']['three_d_secure']['required']) &&
|
292 |
+
$saleArray['options']['three_d_secure']['required'] == true) &&
|
293 |
+
(!isset($result->transaction->threeDSecureInfo) || (isset($result->transaction->threeDSecureInfo) &&
|
294 |
+
is_null($result->transaction->threeDSecureInfo)))
|
295 |
+
) {
|
296 |
return $this->_processFailedResult($this->_getHelper()->__('This transaction must be passed through 3D secure, please try again or consider using an alternate payment method.'), false, $result);
|
297 |
|
298 |
}
|
299 |
|
300 |
// If the sale has failed
|
301 |
if ($result->success != true) {
|
|
|
302 |
// Dispatch an event for when a payment fails
|
303 |
Mage::dispatchEvent('gene_braintree_creditcard_failed', array('payment' => $payment, 'result' => $result));
|
304 |
|
305 |
// Return a different message for declined cards
|
306 |
+
if (isset($result->transaction->status)) {
|
|
|
307 |
// Return a custom response for processor declined messages
|
308 |
+
if ($result->transaction->status == Braintree_Transaction::PROCESSOR_DECLINED) {
|
|
|
309 |
return $this->_processFailedResult($this->_getHelper()->__('Your transaction has been declined, please try another payment method or contacting your issuing bank.'), false, $result);
|
310 |
|
311 |
+
} elseif ($result->transaction->status == Braintree_Transaction::GATEWAY_REJECTED
|
312 |
&& isset($result->transaction->gatewayRejectionReason)
|
313 |
+
&& $result->transaction->gatewayRejectionReason == Braintree_Transaction::THREE_D_SECURE
|
314 |
+
) {
|
315 |
// An event for when 3D secure fails
|
316 |
+
Mage::dispatchEvent('gene_braintree_creditcard_failed_threed', array(
|
317 |
+
'payment' => $payment,
|
318 |
+
'result' => $result
|
319 |
+
));
|
320 |
|
321 |
return $this->_processFailedResult($this->_getHelper()->__('Your card has failed 3D secure validation, please try again or consider using an alternate payment method.'), 'Transaction failed with 3D secure', false, $result);
|
322 |
}
|
344 |
// If we have an original token use that for the subsequent requests
|
345 |
if ($originalToken = $this->_getOriginalToken()) {
|
346 |
$paymentArray['paymentMethodToken'] = $originalToken;
|
347 |
+
|
348 |
return $paymentArray;
|
349 |
}
|
350 |
|
351 |
// Check to see whether we're using a payment method token?
|
352 |
+
if ($this->getPaymentMethodToken() &&
|
353 |
+
!in_array($this->getPaymentMethodToken(), array('other', 'threedsecure'))
|
354 |
+
) {
|
355 |
// Build our payment array
|
356 |
$paymentArray['paymentMethodToken'] = $this->getPaymentMethodToken();
|
357 |
unset($paymentArray['cvv']);
|
|
|
358 |
} else {
|
|
|
359 |
// Build our payment array with a nonce
|
360 |
$paymentArray['paymentMethodNonce'] = $this->getPaymentMethodNonce();
|
|
|
361 |
}
|
362 |
|
363 |
// If the user is using a stored card with 3D secure, enable it in the request and remove CVV
|
364 |
if ($this->getPaymentMethodToken() && $this->getPaymentMethodToken() == 'threedsecure') {
|
|
|
365 |
// If we're using 3D secure token card don't send CVV
|
366 |
unset($paymentArray['cvv']);
|
|
|
367 |
}
|
368 |
|
369 |
// If a token is present in the request use that
|
370 |
if ($token) {
|
|
|
371 |
// Remove this unneeded data
|
372 |
unset($paymentArray['paymentMethodNonce'], $paymentArray['cvv']);
|
373 |
|
425 |
return $this->_captureAuthorized($payment, $amount);
|
426 |
}
|
427 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
428 |
/**
|
429 |
* Processes successful authorize/clone result
|
430 |
*
|
431 |
+
* @param Varien_Object $payment
|
432 |
* @param Braintree_Result_Successful $result
|
433 |
+
* @param float $amount
|
434 |
+
*
|
435 |
* @return Varien_Object
|
436 |
*/
|
437 |
protected function _processSuccessResult(Varien_Object $payment, $result, $amount)
|
438 |
{
|
439 |
// Pass an event if the payment was a success
|
440 |
+
Mage::dispatchEvent('gene_braintree_creditcard_success', array(
|
441 |
+
'payment' => $payment,
|
442 |
+
'result' => $result,
|
443 |
+
'amount' => $amount
|
444 |
+
));
|
445 |
|
446 |
// Set some basic information about the payment
|
447 |
$payment->setStatus(self::STATUS_APPROVED)
|
488 |
foreach ($storeFields as $storeField) {
|
489 |
if (isset($result->transaction->{$storeField}) && !empty($result->transaction->{$storeField})) {
|
490 |
$additionalInfo[$storeField] = $result->transaction->{$storeField};
|
491 |
+
} elseif ($value = $payment->getAdditionalInformation($storeField)) {
|
492 |
$additionalInfo[$storeField] = $value;
|
493 |
}
|
494 |
}
|
495 |
|
496 |
// Check it's not empty and store it
|
497 |
+
if (!empty($additionalInfo)) {
|
498 |
$payment->setAdditionalInformation($additionalInfo);
|
499 |
}
|
500 |
|
505 |
if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
|
506 |
$this->_setOriginalToken($result->transaction->creditCard['token']);
|
507 |
|
508 |
+
// If we shouldn't have this method saved, add it into the session to be removed once the request is
|
509 |
+
// complete
|
510 |
if (!$this->shouldSaveMethod($payment, true)) {
|
511 |
+
Mage::getSingleton('checkout/session')->setTemporaryPaymentToken(
|
512 |
+
$result->transaction->creditCard['token']
|
513 |
+
);
|
514 |
}
|
515 |
}
|
516 |
}
|
app/code/community/Gene/Braintree/Model/Paymentmethod/Legacy/Creditcard.php
CHANGED
@@ -12,7 +12,7 @@ class Gene_Braintree_Model_Paymentmethod_Legacy_Creditcard extends Gene_Braintre
|
|
12 |
*
|
13 |
* @var string
|
14 |
*/
|
15 |
-
protected $_code = '
|
16 |
|
17 |
/**
|
18 |
* This method is never available and only used by the RocketWeb orders
|
12 |
*
|
13 |
* @var string
|
14 |
*/
|
15 |
+
protected $_code = 'braintree_legacy';
|
16 |
|
17 |
/**
|
18 |
* This method is never available and only used by the RocketWeb orders
|
app/code/community/Gene/Braintree/Model/Paymentmethod/Legacy/Paypal.php
CHANGED
@@ -12,7 +12,7 @@ class Gene_Braintree_Model_Paymentmethod_Legacy_Paypal extends Gene_Braintree_Mo
|
|
12 |
*
|
13 |
* @var string
|
14 |
*/
|
15 |
-
protected $_code = '
|
16 |
|
17 |
/**
|
18 |
* This method is never available and only used by the RocketWeb orders
|
12 |
*
|
13 |
* @var string
|
14 |
*/
|
15 |
+
protected $_code = 'braintree_paypal_legacy';
|
16 |
|
17 |
/**
|
18 |
* This method is never available and only used by the RocketWeb orders
|
app/code/community/Gene/Braintree/Model/Paymentmethod/Paypal.php
CHANGED
@@ -34,7 +34,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
34 |
protected $_canCapturePartial = false;
|
35 |
protected $_canRefund = true;
|
36 |
protected $_canRefundInvoicePartial = true;
|
37 |
-
protected $_canVoid =
|
38 |
protected $_canUseInternal = true;
|
39 |
protected $_canUseCheckout = true;
|
40 |
protected $_canUseForMultishipping = true;
|
@@ -54,23 +54,19 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
54 |
public function isAvailable($quote = null)
|
55 |
{
|
56 |
// Check Magento's internal methods allow us to run
|
57 |
-
if(parent::isAvailable($quote)) {
|
58 |
-
|
59 |
// Validate the configuration is okay
|
60 |
if ($this->_getWrapper()->validateCredentialsOnce()) {
|
61 |
-
|
62 |
// This method is only active in the admin if the vault is enabled
|
63 |
if (Mage::app()->getStore()->isAdmin() && $this->isVaultEnabled()) {
|
64 |
return true;
|
65 |
-
}
|
66 |
return false;
|
67 |
}
|
68 |
|
69 |
return true;
|
70 |
}
|
71 |
-
|
72 |
} else {
|
73 |
-
|
74 |
// Otherwise it's a no
|
75 |
return false;
|
76 |
}
|
@@ -80,6 +76,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
80 |
* Place Braintree specific data into the additional information of the payment instance object
|
81 |
*
|
82 |
* @param mixed $data
|
|
|
83 |
* @return Mage_Payment_Model_Info
|
84 |
*/
|
85 |
public function assignData($data)
|
@@ -135,7 +132,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
135 |
* Should we save this method in the database?
|
136 |
*
|
137 |
* @param \Varien_Object $payment
|
138 |
-
* @param
|
139 |
*
|
140 |
* @return mixed
|
141 |
*/
|
@@ -145,7 +142,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
145 |
// We must always save the method for multi shipping requests
|
146 |
if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
|
147 |
return true;
|
148 |
-
}
|
149 |
// If we have an original token, there is no need to save the same payment method again
|
150 |
return false;
|
151 |
}
|
@@ -158,7 +155,10 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
158 |
$object->setResponse(($this->isVaultEnabled() && $savePaypal == 1));
|
159 |
|
160 |
// Specific event for this method
|
161 |
-
Mage::dispatchEvent('gene_braintree_paypal_should_save_method', array(
|
|
|
|
|
|
|
162 |
|
163 |
// General event if we want to enforce saving of all payment methods
|
164 |
Mage::dispatchEvent('gene_braintree_save_method', array('object' => $object, 'payment' => $payment));
|
@@ -207,7 +207,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
207 |
$this->_getHelper()->__('There has been an issue processing your PayPal payment, please try again.')
|
208 |
);
|
209 |
}
|
210 |
-
}
|
211 |
Mage::throwException(
|
212 |
$this->_getHelper()->__('There has been an issue processing your PayPal payment, please try again.')
|
213 |
);
|
@@ -221,7 +221,6 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
221 |
|
222 |
// Attempt to create the sale
|
223 |
try {
|
224 |
-
|
225 |
// Build up the sale array
|
226 |
$saleArray = $this->_getWrapper()->buildSale(
|
227 |
$amount,
|
@@ -238,7 +237,6 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
238 |
);
|
239 |
|
240 |
} catch (Exception $e) {
|
241 |
-
|
242 |
// Dispatch an event for when a payment fails
|
243 |
Mage::dispatchEvent('gene_braintree_paypal_failed_exception', array('payment' => $payment, 'exception' => $e));
|
244 |
|
@@ -250,7 +248,6 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
250 |
|
251 |
// If the sale has failed
|
252 |
if ($result->success != true) {
|
253 |
-
|
254 |
// Dispatch an event for when a payment fails
|
255 |
Mage::dispatchEvent('gene_braintree_paypal_failed', array('payment' => $payment, 'result' => $result));
|
256 |
|
@@ -277,6 +274,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
277 |
// If we have an original token use that for the subsequent requests
|
278 |
if ($originalToken = $this->_getOriginalToken()) {
|
279 |
$paymentArray['paymentMethodToken'] = $originalToken;
|
|
|
280 |
return $paymentArray;
|
281 |
}
|
282 |
|
@@ -288,7 +286,6 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
288 |
|
289 |
// If a token is present in the request use that
|
290 |
if ($token) {
|
291 |
-
|
292 |
// Remove this unneeded data
|
293 |
unset($paymentArray['paymentMethodNonce']);
|
294 |
|
@@ -337,7 +334,11 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
337 |
protected function _processSuccessResult(Varien_Object $payment, $result, $amount)
|
338 |
{
|
339 |
// Pass an event if the payment was a success
|
340 |
-
Mage::dispatchEvent('gene_braintree_paypal_success', array(
|
|
|
|
|
|
|
|
|
341 |
|
342 |
// Set some basic things
|
343 |
$payment->setStatus(self::STATUS_APPROVED)
|
@@ -368,9 +369,12 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
368 |
if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
|
369 |
$this->_setOriginalToken($result->transaction->paypal['token']);
|
370 |
|
371 |
-
// If we shouldn't have this method saved, add it into the session to be removed once the request is
|
|
|
372 |
if (!$this->shouldSaveMethod($payment, true)) {
|
373 |
-
Mage::getSingleton('checkout/session')->setTemporaryPaymentToken(
|
|
|
|
|
374 |
}
|
375 |
}
|
376 |
}
|
34 |
protected $_canCapturePartial = false;
|
35 |
protected $_canRefund = true;
|
36 |
protected $_canRefundInvoicePartial = true;
|
37 |
+
protected $_canVoid = true;
|
38 |
protected $_canUseInternal = true;
|
39 |
protected $_canUseCheckout = true;
|
40 |
protected $_canUseForMultishipping = true;
|
54 |
public function isAvailable($quote = null)
|
55 |
{
|
56 |
// Check Magento's internal methods allow us to run
|
57 |
+
if (parent::isAvailable($quote)) {
|
|
|
58 |
// Validate the configuration is okay
|
59 |
if ($this->_getWrapper()->validateCredentialsOnce()) {
|
|
|
60 |
// This method is only active in the admin if the vault is enabled
|
61 |
if (Mage::app()->getStore()->isAdmin() && $this->isVaultEnabled()) {
|
62 |
return true;
|
63 |
+
} elseif (Mage::app()->getStore()->isAdmin()) {
|
64 |
return false;
|
65 |
}
|
66 |
|
67 |
return true;
|
68 |
}
|
|
|
69 |
} else {
|
|
|
70 |
// Otherwise it's a no
|
71 |
return false;
|
72 |
}
|
76 |
* Place Braintree specific data into the additional information of the payment instance object
|
77 |
*
|
78 |
* @param mixed $data
|
79 |
+
*
|
80 |
* @return Mage_Payment_Model_Info
|
81 |
*/
|
82 |
public function assignData($data)
|
132 |
* Should we save this method in the database?
|
133 |
*
|
134 |
* @param \Varien_Object $payment
|
135 |
+
* @param $skipMultishipping
|
136 |
*
|
137 |
* @return mixed
|
138 |
*/
|
142 |
// We must always save the method for multi shipping requests
|
143 |
if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
|
144 |
return true;
|
145 |
+
} elseif ($this->_getOriginalToken()) {
|
146 |
// If we have an original token, there is no need to save the same payment method again
|
147 |
return false;
|
148 |
}
|
155 |
$object->setResponse(($this->isVaultEnabled() && $savePaypal == 1));
|
156 |
|
157 |
// Specific event for this method
|
158 |
+
Mage::dispatchEvent('gene_braintree_paypal_should_save_method', array(
|
159 |
+
'object' => $object,
|
160 |
+
'payment' => $payment
|
161 |
+
));
|
162 |
|
163 |
// General event if we want to enforce saving of all payment methods
|
164 |
Mage::dispatchEvent('gene_braintree_save_method', array('object' => $object, 'payment' => $payment));
|
207 |
$this->_getHelper()->__('There has been an issue processing your PayPal payment, please try again.')
|
208 |
);
|
209 |
}
|
210 |
+
} elseif (!$this->getPaymentMethodNonce()) {
|
211 |
Mage::throwException(
|
212 |
$this->_getHelper()->__('There has been an issue processing your PayPal payment, please try again.')
|
213 |
);
|
221 |
|
222 |
// Attempt to create the sale
|
223 |
try {
|
|
|
224 |
// Build up the sale array
|
225 |
$saleArray = $this->_getWrapper()->buildSale(
|
226 |
$amount,
|
237 |
);
|
238 |
|
239 |
} catch (Exception $e) {
|
|
|
240 |
// Dispatch an event for when a payment fails
|
241 |
Mage::dispatchEvent('gene_braintree_paypal_failed_exception', array('payment' => $payment, 'exception' => $e));
|
242 |
|
248 |
|
249 |
// If the sale has failed
|
250 |
if ($result->success != true) {
|
|
|
251 |
// Dispatch an event for when a payment fails
|
252 |
Mage::dispatchEvent('gene_braintree_paypal_failed', array('payment' => $payment, 'result' => $result));
|
253 |
|
274 |
// If we have an original token use that for the subsequent requests
|
275 |
if ($originalToken = $this->_getOriginalToken()) {
|
276 |
$paymentArray['paymentMethodToken'] = $originalToken;
|
277 |
+
|
278 |
return $paymentArray;
|
279 |
}
|
280 |
|
286 |
|
287 |
// If a token is present in the request use that
|
288 |
if ($token) {
|
|
|
289 |
// Remove this unneeded data
|
290 |
unset($paymentArray['paymentMethodNonce']);
|
291 |
|
334 |
protected function _processSuccessResult(Varien_Object $payment, $result, $amount)
|
335 |
{
|
336 |
// Pass an event if the payment was a success
|
337 |
+
Mage::dispatchEvent('gene_braintree_paypal_success', array(
|
338 |
+
'payment' => $payment,
|
339 |
+
'result' => $result,
|
340 |
+
'amount' => $amount
|
341 |
+
));
|
342 |
|
343 |
// Set some basic things
|
344 |
$payment->setStatus(self::STATUS_APPROVED)
|
369 |
if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
|
370 |
$this->_setOriginalToken($result->transaction->paypal['token']);
|
371 |
|
372 |
+
// If we shouldn't have this method saved, add it into the session to be removed once the request is
|
373 |
+
// complete
|
374 |
if (!$this->shouldSaveMethod($payment, true)) {
|
375 |
+
Mage::getSingleton('checkout/session')->setTemporaryPaymentToken(
|
376 |
+
$result->transaction->paypal['token']
|
377 |
+
);
|
378 |
}
|
379 |
}
|
380 |
}
|
app/code/community/Gene/Braintree/Model/Wrapper/Braintree.php
CHANGED
@@ -464,7 +464,6 @@ class Gene_Braintree_Model_Wrapper_Braintree extends Mage_Core_Model_Abstract
|
|
464 |
{
|
465 |
// Create the payment method with this data
|
466 |
$paymentMethodCreate = array(
|
467 |
-
'customerId' => $this->getBraintreeId(),
|
468 |
'paymentMethodNonce' => $nonce,
|
469 |
'options' => array(
|
470 |
'verifyCard' => true,
|
464 |
{
|
465 |
// Create the payment method with this data
|
466 |
$paymentMethodCreate = array(
|
|
|
467 |
'paymentMethodNonce' => $nonce,
|
468 |
'options' => array(
|
469 |
'verifyCard' => true,
|
app/code/community/Gene/Braintree/controllers/Adminhtml/Braintree/MigrationController.php
CHANGED
@@ -15,7 +15,7 @@ class Gene_Braintree_Adminhtml_Braintree_MigrationController extends Mage_Adminh
|
|
15 |
public function runAction()
|
16 |
{
|
17 |
// If the system shouldn't run the migration don't allow this controller to initialize
|
18 |
-
if (!Mage::helper('gene_braintree')->
|
19 |
$this->norouteAction();
|
20 |
return $this;
|
21 |
}
|
@@ -36,6 +36,9 @@ class Gene_Braintree_Adminhtml_Braintree_MigrationController extends Mage_Adminh
|
|
36 |
(isset($actions['disable-legacy']) && $actions['disable-legacy'] == 'on'),
|
37 |
(isset($actions['remove-legacy']) && $actions['remove-legacy'] == 'on')
|
38 |
);
|
|
|
|
|
|
|
39 |
|
40 |
// Run the migration process
|
41 |
$result = $migration->process();
|
15 |
public function runAction()
|
16 |
{
|
17 |
// If the system shouldn't run the migration don't allow this controller to initialize
|
18 |
+
if (!Mage::helper('gene_braintree')->canRunMigration()) {
|
19 |
$this->norouteAction();
|
20 |
return $this;
|
21 |
}
|
36 |
(isset($actions['disable-legacy']) && $actions['disable-legacy'] == 'on'),
|
37 |
(isset($actions['remove-legacy']) && $actions['remove-legacy'] == 'on')
|
38 |
);
|
39 |
+
$migration->setRunOrderTransactionInfo(
|
40 |
+
(isset($actions['order-transaction-info']) && $actions['order-transaction-info'] == 'on')
|
41 |
+
);
|
42 |
|
43 |
// Run the migration process
|
44 |
$result = $migration->process();
|
app/code/community/Gene/Braintree/etc/config.xml
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Gene_Braintree>
|
5 |
-
<version>2.0.
|
6 |
</Gene_Braintree>
|
7 |
</modules>
|
8 |
<global>
|
@@ -109,6 +109,16 @@
|
|
109 |
<kount_ens_ips>209.81.12.0/24,64.128.91.0/24,64.128.87.0/24</kount_ens_ips>
|
110 |
</gene_braintree_creditcard>
|
111 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
</payment>
|
113 |
|
114 |
</default>
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Gene_Braintree>
|
5 |
+
<version>2.0.4</version>
|
6 |
</Gene_Braintree>
|
7 |
</modules>
|
8 |
<global>
|
109 |
<kount_ens_ips>209.81.12.0/24,64.128.91.0/24,64.128.87.0/24</kount_ens_ips>
|
110 |
</gene_braintree_creditcard>
|
111 |
|
112 |
+
<!-- Legacy methods used by the migration tool -->
|
113 |
+
<braintree_legacy>
|
114 |
+
<active>0</active>
|
115 |
+
<model>gene_braintree/paymentmethod_legacy_creditcard</model>
|
116 |
+
</braintree_legacy>
|
117 |
+
<braintree_paypal_legacy>
|
118 |
+
<active>0</active>
|
119 |
+
<model>gene_braintree/paymentmethod_legacy_paypal</model>
|
120 |
+
</braintree_paypal_legacy>
|
121 |
+
|
122 |
</payment>
|
123 |
|
124 |
</default>
|
app/code/community/Gene/Braintree/etc/system.xml
CHANGED
@@ -30,6 +30,15 @@
|
|
30 |
<show_in_store>1</show_in_store>
|
31 |
</lib_version>
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
<braintree_details translate="label">
|
34 |
<label>Braintree Account Details</label>
|
35 |
<frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
|
30 |
<show_in_store>1</show_in_store>
|
31 |
</lib_version>
|
32 |
|
33 |
+
<migration translate="label">
|
34 |
+
<label>Migrate from Legacy Braintree</label>
|
35 |
+
<frontend_model>gene_braintree/adminhtml_system_config_braintree_migration</frontend_model>
|
36 |
+
<sort_order>25</sort_order>
|
37 |
+
<show_in_default>1</show_in_default>
|
38 |
+
<show_in_website>1</show_in_website>
|
39 |
+
<show_in_store>1</show_in_store>
|
40 |
+
</migration>
|
41 |
+
|
42 |
<braintree_details translate="label">
|
43 |
<label>Braintree Account Details</label>
|
44 |
<frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
|
app/design/adminhtml/default/default/layout/gene/braintree.xml
CHANGED
@@ -32,6 +32,13 @@
|
|
32 |
</reference>
|
33 |
</adminhtml_sales_order_create_index>
|
34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
<!-- Include our migration wizard on the system config page -->
|
36 |
<adminhtml_system_config_edit>
|
37 |
<reference name="head">
|
32 |
</reference>
|
33 |
</adminhtml_sales_order_create_index>
|
34 |
|
35 |
+
<!-- Include styling for the order view page -->
|
36 |
+
<adminhtml_sales_order_view>
|
37 |
+
<reference name="head">
|
38 |
+
<action method="addCss"><file>css/gene/braintree/adminhtml.css</file></action>
|
39 |
+
</reference>
|
40 |
+
</adminhtml_sales_order_view>
|
41 |
+
|
42 |
<!-- Include our migration wizard on the system config page -->
|
43 |
<adminhtml_system_config_edit>
|
44 |
<reference name="head">
|
app/design/adminhtml/default/default/template/gene/braintree/creditcard/info.phtml
CHANGED
@@ -3,6 +3,14 @@
|
|
3 |
<img src="//i.imgur.com/JR1BJTr.png" alt="<?php echo $this->__('PayPal - Braintree'); ?>" /> by <a href="http://gene.co.uk" target="_blank" style="text-decoration: none;">Gene Commerce</a>
|
4 |
</div>
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
<?php if ($_specificInfo = $this->getSpecificInformation()):?>
|
7 |
<table>
|
8 |
<?php foreach ($_specificInfo as $_label => $_value):?>
|
@@ -14,7 +22,7 @@
|
|
14 |
</table>
|
15 |
<?php endif;?>
|
16 |
|
17 |
-
<?php if(!$this->isSingleInvoice()): ?>
|
18 |
<p><?php echo $this->__('This order contains multiple Braintree transactions, to view more information on each transaction please view their corresponding invoice.'); ?></p>
|
19 |
<?php endif; ?>
|
20 |
|
3 |
<img src="//i.imgur.com/JR1BJTr.png" alt="<?php echo $this->__('PayPal - Braintree'); ?>" /> by <a href="http://gene.co.uk" target="_blank" style="text-decoration: none;">Gene Commerce</a>
|
4 |
</div>
|
5 |
|
6 |
+
<?php if (Mage::app()->getStore()->isAdmin() && $this->getMethod()->getCode() == 'braintree_legacy'): ?>
|
7 |
+
<div class="braintree_legacy_order">
|
8 |
+
<h4><?php echo $this->__('Legacy Payment'); ?></h4>
|
9 |
+
<p><?php echo $this->__('This order was imported from the legacy Braintree extension. The information displayed below maybe incomplete due to information not being provided by the original extension.'); ?></p>
|
10 |
+
<p><?php echo $this->__('Certain operations such as credit memos & voiding may not work with this order.'); ?></p>
|
11 |
+
</div>
|
12 |
+
<?php endif; ?>
|
13 |
+
|
14 |
<?php if ($_specificInfo = $this->getSpecificInformation()):?>
|
15 |
<table>
|
16 |
<?php foreach ($_specificInfo as $_label => $_value):?>
|
22 |
</table>
|
23 |
<?php endif;?>
|
24 |
|
25 |
+
<?php if (!$this->isSingleInvoice()): ?>
|
26 |
<p><?php echo $this->__('This order contains multiple Braintree transactions, to view more information on each transaction please view their corresponding invoice.'); ?></p>
|
27 |
<?php endif; ?>
|
28 |
|
app/design/adminhtml/default/default/template/gene/braintree/paypal/info.phtml
CHANGED
@@ -3,6 +3,14 @@
|
|
3 |
<img src="//i.imgur.com/sitDbHA.png" alt="<?php echo $this->__('PayPal - Braintree'); ?>" /> by <a href="http://gene.co.uk" target="_blank" style="text-decoration: none;">Gene Commerce</a>
|
4 |
</div>
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
<?php if ($_specificInfo = $this->getSpecificInformation()):?>
|
7 |
<table>
|
8 |
<?php foreach ($_specificInfo as $_label => $_value):?>
|
3 |
<img src="//i.imgur.com/sitDbHA.png" alt="<?php echo $this->__('PayPal - Braintree'); ?>" /> by <a href="http://gene.co.uk" target="_blank" style="text-decoration: none;">Gene Commerce</a>
|
4 |
</div>
|
5 |
|
6 |
+
<?php if (Mage::app()->getStore()->isAdmin() && $this->getMethod()->getCode() == 'braintree_paypal_legacy'): ?>
|
7 |
+
<div class="braintree_legacy_order">
|
8 |
+
<h4><?php echo $this->__('Legacy Payment'); ?></h4>
|
9 |
+
<p><?php echo $this->__('This order was imported from the legacy Braintree extension. The information displayed below maybe incomplete due to information not being provided by the original extension.'); ?></p>
|
10 |
+
<p><?php echo $this->__('Certain operations such as credit memos & voiding may not work with this order.'); ?></p>
|
11 |
+
</div>
|
12 |
+
<?php endif; ?>
|
13 |
+
|
14 |
<?php if ($_specificInfo = $this->getSpecificInformation()):?>
|
15 |
<table>
|
16 |
<?php foreach ($_specificInfo as $_label => $_value):?>
|
app/design/adminhtml/default/default/template/gene/braintree/system/config/migration.phtml
CHANGED
@@ -35,11 +35,18 @@
|
|
35 |
<span><?php echo $this->__('This will ensure that any customer data previously saved by customers will be displayed with the new module.'); ?></span>
|
36 |
</label>
|
37 |
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
<li>
|
39 |
<input type="checkbox" id="disable-legacy" name="migration[disable-legacy]" checked="checked">
|
40 |
<label for="disable-legacy">
|
41 |
<?php echo $this->__('Disable Legacy Braintree Module'); ?>
|
42 |
-
<span><input type="checkbox" id="remove-legacy" name="migration[remove-legacy]"> <?php echo $this->__('Remove all legacy module files. <strong>This step is not reversible, it will remove all legacy files and config settings.</strong>'); ?></span>
|
43 |
</label>
|
44 |
</li>
|
45 |
</ul>
|
@@ -52,12 +59,40 @@
|
|
52 |
</div>
|
53 |
</div>
|
54 |
|
|
|
55 |
<script type="text/javascript">
|
56 |
-
// On load add our active classes
|
57 |
document.observe("dom:loaded", function() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
$('braintree-migration-overlay').addClassName('active');
|
59 |
$('braintree-migration').addClassName('active');
|
60 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
|
62 |
// Migration submit action
|
63 |
Element.observe($$('.braintree-migration-content').first(), 'submit', function (event) {
|
@@ -105,8 +140,8 @@
|
|
105 |
onSuccess: function (transport) {
|
106 |
if (transport && transport.responseJSON) {
|
107 |
if (transport.responseJSON.success == true) {
|
108 |
-
$('braintree-migration-overlay').
|
109 |
-
$('braintree-migration').
|
110 |
}
|
111 |
}
|
112 |
},
|
35 |
<span><?php echo $this->__('This will ensure that any customer data previously saved by customers will be displayed with the new module.'); ?></span>
|
36 |
</label>
|
37 |
</li>
|
38 |
+
<li>
|
39 |
+
<input type="checkbox" id="order-transaction-info" name="migration[order-transaction-info]" checked="checked">
|
40 |
+
<label for="order-transaction-info">
|
41 |
+
<?php echo $this->__('Import Order Transaction Information'); ?>
|
42 |
+
<span><?php echo $this->__('Ensure any orders created with the old extension can still be viewed with only the new extension installed. <strong>This is required if you remove all legacy files.</strong>'); ?></span>
|
43 |
+
</label>
|
44 |
+
</li>
|
45 |
<li>
|
46 |
<input type="checkbox" id="disable-legacy" name="migration[disable-legacy]" checked="checked">
|
47 |
<label for="disable-legacy">
|
48 |
<?php echo $this->__('Disable Legacy Braintree Module'); ?>
|
49 |
+
<span><input type="checkbox" id="remove-legacy" name="migration[remove-legacy]" onclick="checkTransactionIsChecked();"> <?php echo $this->__('Remove all legacy module files. <strong>This step is not reversible, it will remove all legacy files and config settings. Removing the original Braintree_Payments module will also disable this migration tool from being ran again.</strong>'); ?></span>
|
50 |
</label>
|
51 |
</li>
|
52 |
</ul>
|
59 |
</div>
|
60 |
</div>
|
61 |
|
62 |
+
<?php if (Mage::helper('gene_braintree')->shouldRunMigration()): ?>
|
63 |
<script type="text/javascript">
|
|
|
64 |
document.observe("dom:loaded", function() {
|
65 |
+
showMigration();
|
66 |
+
});
|
67 |
+
</script>
|
68 |
+
<?php endif; ?>
|
69 |
+
|
70 |
+
<script type="text/javascript">
|
71 |
+
/**
|
72 |
+
* Show the migration
|
73 |
+
*
|
74 |
+
* @returns {boolean}
|
75 |
+
*/
|
76 |
+
function showMigration() {
|
77 |
+
$$('.braintree-migration-loading h3').first().show();
|
78 |
+
$$('.braintree-migration-loading p').first().show();
|
79 |
+
$('braintree-migration').removeClassName('loading');
|
80 |
+
|
81 |
$('braintree-migration-overlay').addClassName('active');
|
82 |
$('braintree-migration').addClassName('active');
|
83 |
+
return false;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Automatically check the order transaction info box if they opt to remove the legacy module
|
88 |
+
*
|
89 |
+
* @returns {boolean}
|
90 |
+
*/
|
91 |
+
function checkTransactionIsChecked() {
|
92 |
+
if ($('remove-legacy').checked) {
|
93 |
+
$('order-transaction-info').checked = true;
|
94 |
+
}
|
95 |
+
}
|
96 |
|
97 |
// Migration submit action
|
98 |
Element.observe($$('.braintree-migration-content').first(), 'submit', function (event) {
|
140 |
onSuccess: function (transport) {
|
141 |
if (transport && transport.responseJSON) {
|
142 |
if (transport.responseJSON.success == true) {
|
143 |
+
$('braintree-migration-overlay').removeClassName('active');
|
144 |
+
$('braintree-migration').removeClassName('active');
|
145 |
}
|
146 |
}
|
147 |
},
|
app/design/frontend/base/default/template/gene/braintree/js/firecheckout.phtml
CHANGED
@@ -59,6 +59,14 @@
|
|
59 |
return checkout.save();
|
60 |
},
|
61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
/**
|
63 |
* Override the loading function to set the counter to 0 so the loader actually gets hidden
|
64 |
*/
|
59 |
return checkout.save();
|
60 |
},
|
61 |
|
62 |
+
/**
|
63 |
+
* Ensure the load counter only reaches 1 from Braintree
|
64 |
+
*/
|
65 |
+
setLoading: function () {
|
66 |
+
checkout.setLoadWaiting(true);
|
67 |
+
checkout.loadCounter = 1;
|
68 |
+
},
|
69 |
+
|
70 |
/**
|
71 |
* Override the loading function to set the counter to 0 so the loader actually gets hidden
|
72 |
*/
|
app/design/frontend/base/default/template/gene/braintree/js/idev.phtml
CHANGED
@@ -32,6 +32,11 @@
|
|
32 |
// Add in our loader event
|
33 |
if ($$('.onestepcheckout-place-order-loading').first() !== undefined) {
|
34 |
$$('.onestepcheckout-place-order-loading').first().show();
|
|
|
|
|
|
|
|
|
|
|
35 |
}
|
36 |
},
|
37 |
|
@@ -39,6 +44,9 @@
|
|
39 |
* Reset the loading state of the checkout
|
40 |
*/
|
41 |
resetLoading: function() {
|
|
|
|
|
|
|
42 |
// Grab the submit button
|
43 |
var submitElement = $('onestepcheckout-place-order');
|
44 |
|
@@ -48,7 +56,7 @@
|
|
48 |
|
49 |
// Remove the loader element
|
50 |
if ($$('.onestepcheckout-place-order-loading').first() !== undefined) {
|
51 |
-
$$('.onestepcheckout-place-order-loading').first().
|
52 |
}
|
53 |
},
|
54 |
|
32 |
// Add in our loader event
|
33 |
if ($$('.onestepcheckout-place-order-loading').first() !== undefined) {
|
34 |
$$('.onestepcheckout-place-order-loading').first().show();
|
35 |
+
} else {
|
36 |
+
var loaderElement = new Element('span').
|
37 |
+
addClassName('onestepcheckout-place-order-loading').
|
38 |
+
update('<?php echo $this->__('Please wait, processing your order...'); ?>');
|
39 |
+
submitElement.parentNode.appendChild(loaderElement);
|
40 |
}
|
41 |
},
|
42 |
|
44 |
* Reset the loading state of the checkout
|
45 |
*/
|
46 |
resetLoading: function() {
|
47 |
+
// Reset the placing order flag
|
48 |
+
already_placing_order = false;
|
49 |
+
|
50 |
// Grab the submit button
|
51 |
var submitElement = $('onestepcheckout-place-order');
|
52 |
|
56 |
|
57 |
// Remove the loader element
|
58 |
if ($$('.onestepcheckout-place-order-loading').first() !== undefined) {
|
59 |
+
$$('.onestepcheckout-place-order-loading').first().remove();
|
60 |
}
|
61 |
},
|
62 |
|
js/gene/braintree/config.codekit
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
{
|
2 |
"CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
|
3 |
-
"creatorBuild": "
|
4 |
"files": {
|
5 |
"\/braintree-0.1.js": {
|
6 |
"fileType": 64,
|
1 |
{
|
2 |
"CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
|
3 |
+
"creatorBuild": "19127",
|
4 |
"files": {
|
5 |
"\/braintree-0.1.js": {
|
6 |
"fileType": 64,
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Gene_Braintree</name>
|
4 |
-
<version>2.0.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/mit-license.php">MIT License</license>
|
7 |
<channel>community</channel>
|
@@ -36,9 +36,9 @@
|
|
36 |
</ul></description>
|
37 |
<notes>Connect your Magento store to Braintree to accept Credit Cards &amp; PayPal using V.Zero SDK</notes>
|
38 |
<authors><author><name>Dave Macaulay</name><user>dave</user><email>support@gene.co.uk</email></author></authors>
|
39 |
-
<date>2016-
|
40 |
-
<time>
|
41 |
-
<contents><target name="magecommunity"><dir name="Gene"><dir name="Braintree"><dir name="Block"><dir name="Adminhtml"><dir name="Report"><dir name="Transactions"><file name="Grid.php" hash="32b32086548f62ae4aca4baf456b9ed2"/><file name="Search.php" hash="81d57c3744530f36c37782ce9d0f3a70"/></dir><file name="Transactions.php" hash="7afe45b49353e52b432aa0392d76a08e"/></dir><dir name="System"><dir name="Config"><dir name="Braintree"><file name="Config.php" hash="40a2eb78ee6c004b749ec62aaa690bf4"/><file name="Currency.php" hash="9976cc7d6ff80c3ea351ddff9b10b9d8"/><dir name="Kount"><file name="Ens.php" hash="56ef3f1e4da9d09b6bc8d0814a882358"/></dir><file name="Moduleversion.php" hash="eed1f9bcb139b6062e7972d3f98e13c8"/><file name="Version.php" hash="ce58278a4faf965301cc2d8b2da4483c"/></dir><file name="Migration.php" hash="e57911ecb5fb301147cd4940b3f1e4f4"/></dir></dir></dir><dir name="Cart"><file name="Totals.php" hash="a03c441e8143896f92d02931a809f666"/></dir><dir name="Creditcard"><file name="Info.php" hash="6faf4be87ad62f13373a6b2e852a478b"/><file name="Saved.php" hash="2d0a3c3543d8eecc7c94a50cea7810d9"/><file name="Threedsecure.php" hash="7848d4ecac743be985f328fa969318bf"/></dir><file name="Creditcard.php" hash="7871f210f4009cfe53ecfaf5164e43ca"/><dir name="Express"><file name="Button.php" hash="b7bb6fa7e6f80aa4809d1d1dc7dc6950"/><file name="Checkout.php" hash="d0c9bc6f656e93031189e7d6bb1c8533"/></dir><file name="Info.php" hash="4d9513f53e20bf7752c1f826bbd63b0e"/><file name="Js.php" hash="35e604171e4a5d1250732c4a5ad33d9b"/><dir name="Paypal"><file name="Info.php" hash="0874c0839a27c14ec9be47fed152e880"/><file name="Saved.php" hash="6a99ef8a384d7ab8f4537e995867ec85"/></dir><file name="Paypal.php" hash="10cbb40f8801153ac0c04725843f4eee"/><dir name="Saved"><file name="Edit.php" hash="ae2d80ecab7cdda39b18054b057f2dc5"/></dir><file name="Saved.php" hash="782f17589219da087e57035a1c0b9a4a"/></dir><dir name="Helper"><file name="Data.php" hash="b3e5025957b496d3be5cdb865a20e5be"/></dir><dir name="Model"><file name="Debug.php" hash="f3360f71e2346881f93424792ed9f209"/><dir name="Entity"><file name="Setup.php" hash="c580e73ec53ac455698ee6b0ff005e39"/></dir><dir name="Kount"><file name="Ens.php" hash="3f672b000d43363406b1df7e2b52f620"/><file name="Rest.php" hash="5dfb5265a431da0210cb87dba023b7b6"/></dir><file name="Migration.php" hash="cb9cec0c7d57c406e9bad66efe68b07d"/><file name="Observer.php" hash="e1ac13f65517ef889cc41fc8b421cafb"/><dir name="Paymentmethod"><file name="Abstract.php" hash="5a950bf2273b99ceae0eaf8482d67052"/><file name="Creditcard.php" hash="c336f9e0a43459beb57a907cae7f436c"/><dir name="Legacy"><file name="Creditcard.php" hash="cfc791157f3a173ff8ed838e69c96f51"/><file name="Paypal.php" hash="59ef3cfb64f4c4c878015147412c78a7"/></dir><file name="Paypal.php" hash="363575d74739bda8f2446f0f6d87c284"/></dir><file name="Saved.php" hash="3c9318122fbe56bdb915c837d834f392"/><dir name="Source"><file name="Cctype.php" hash="d76aa6c3a4bd798e3a47695f579d21d4"/><dir name="Creditcard"><file name="CaptureAction.php" hash="d39ff81be4b54620410ceeda7f960f0f"/><file name="FormIntegration.php" hash="9788f349430e0d48c9e13c262da3fe06"/><file name="PaymentAction.php" hash="d6e997ae4f6ed57129bf4d5da06a0a82"/></dir><file name="Environment.php" hash="5c2f5ce4d6d9f6f178102b90ec15aa2c"/><dir name="Paypal"><file name="CaptureAction.php" hash="0dd0c6da578aee4b7508f78cab982176"/><file name="Locale.php" hash="adc0ab30619eb3a34d8f5fe1087b07b0"/><file name="PaymentAction.php" hash="ab430eaf7ced39e9d6fd80ad0a7f6b3c"/><file name="Paymenttype.php" hash="48225fa7b3f5e54d81711397dd5bd96b"/></dir></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Currency.php" hash="73cb15b1de303e88c487db4c585ef94e"/></dir></dir></dir><dir name="Wrapper"><file name="Braintree.php" hash="dd319741658ff63fd96495772df213a9"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Braintree"><file name="MigrationController.php" hash="cb9ffed24551fb7fff6ccd871a589101"/></dir><file name="BraintreeController.php" hash="d7ece21342a7b4b37ee41ea0e7ff20ad"/></dir><file name="CheckoutController.php" hash="223de3639574a686a68e9210f39c1fad"/><file name="ExpressController.php" hash="89aaef3ec80d0793e918a3674139b4f6"/><dir name="Kount"><file name="EnsController.php" hash="1db795afa1df901c37bbe48a3f01db2f"/></dir><file name="SavedController.php" hash="083777b1536e8dda604107af9f0081a9"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c9c940beffa0ec19e4a1499a66f7fd12"/><file name="config.xml" hash="9b386b32741f91d490021aefdaf3fee5"/><file name="system.xml" hash="de3781d5454488230602588b69aac3d2"/></dir><dir name="sql"><dir name="gene_braintree_setup"><file name="install-0.1.0.php" hash="503f428384f687d3f55a19ea57450212"/><file name="upgrade-1.0.5.4-2.0.0.php" hash="62d37c35ba39a77ea14cad842f143393"/><file name="upgrade-2.0.0-2.0.1.php" hash="a08927707bb43a5c22b3b6ce3dd7a3c7"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="97cf1ff702b5fe0697bcb0d725f37e6b"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="bfa98d63527cba0990c5cd793325a013"/><file name="info.phtml" hash="2ae1e397b3a633dd305bc26c7b9c1065"/><file name="saved.phtml" hash="579ec8ca726de3b5bea8600663d1e61f"/><file name="threedsecure.phtml" hash="ee8ad689afde041c39dd92ffa5274883"/></dir><file name="creditcard.phtml" hash="2cf07e28ebd141ea73e6e9082096304e"/><dir name="customer"><file name="edit.phtml" hash="ed8a9533f07fbfa36ec78623afd1a04d"/><file name="methods.phtml" hash="794ad8cb20314d1657a746b365c82540"/><file name="saved.phtml" hash="0457b0fa38f9db788133e54f359baa63"/></dir><dir name="express"><file name="cart.phtml" hash="dc6546baaa5c0c37fe3a6221ed978e87"/><file name="catalog.phtml" hash="e24ee8a37661e4cc82c19aaae3b669c3"/><file name="error.phtml" hash="0ec2ea2f9b909d9f0543e5df83eea055"/><file name="shipping_details.phtml" hash="0bb6ceafaac0ba522278df310d6136e2"/></dir><dir name="js"><file name="aheadworks.phtml" hash="533ba9aebbba6768649668386a74a1c2"/><file name="amasty.phtml" hash="2bfc5623dd9a98721b53a4d8cd13c0c3"/><file name="awesomecheckout.phtml" hash="ee42abb3b9211a31b3d4454ba1e92fe9"/><file name="data.phtml" hash="f8b04e3d0d7154cc75332eb5bec3e54e"/><file name="default.phtml" hash="fdcfb27a06ebab20268ef4ed820625c1"/><file name="fancycheckout.phtml" hash="f603bcd50dea98dbb45c1ec8b692314c"/><file name="firecheckout.phtml" hash="7d5df6424093021b06c9c5882b378be5"/><file name="fme.phtml" hash="263fb201b77696cf21cc677696c53fdd"/><file name="idev.phtml" hash="3b586cd9dbef7b5d0be7b2999be356b6"/><file name="iwd.phtml" hash="d7e12c84b629306529d3d8beb0c4814d"/><file name="magestore.phtml" hash="ff6a622a4048b8e533f3e672a40e6296"/><file name="multishipping.phtml" hash="a1e777e99df26d81f7c4b9e7b4a7c109"/><file name="oye.phtml" hash="51ef48f818e79acb6d1e8b9eb7889cc9"/><file name="setup.phtml" hash="804d63a30f8d6c985644b545a768da97"/><file name="unicode.phtml" hash="dd07e924a01b0a28ef46c9a62f22e3b5"/></dir><dir name="paypal"><file name="info.phtml" hash="5149b273730121e4dec3c3179820f747"/><file name="saved.phtml" hash="3dd56f96bcdd14be594d355ae8fff329"/></dir><file name="paypal.phtml" hash="d12c20e5fb76f31270a5d47061e42715"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="9d57a85acb47d23341af91f4143b4f5e"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="152e09ed938c47ffc056a7c11247375a"/><file name="info.phtml" hash="24c67bab482ea7383ce57d9a06bb9d6f"/><file name="saved.phtml" hash="ca27adb601aebf97cd25a892082a8663"/></dir><file name="creditcard.phtml" hash="2d77487c6b7e9e6c77b2ddb25597bd8b"/><file name="js.phtml" hash="7253799710792ed1f8611e21c2b100bf"/><dir name="paypal"><file name="info.phtml" hash="a8f92f312f8aa5a9463f1d5c2a38cd1b"/><file name="saved.phtml" hash="779ca8e907d7d463eafce58dfaf94f0c"/></dir><file name="paypal.phtml" hash="f81578f64c8a30560299bd993d8e996d"/><dir name="system"><dir name="config"><file name="migration.phtml" hash="4cfe0ffb6a9e03d1297eb66a51f77429"/></dir></dir><dir name="transactions"><file name="index.phtml" hash="1791b6393f319616dd79c0b46e391847"/><file name="search.phtml" hash="1682ce6200681681f0ce3c848e2e6694"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Gene_Braintree.xml" hash="8c0ffda8566dca2f0b98a999921e3e55"/></dir></target><target name="mageweb"><dir name="js"><dir name="gene"><dir name="braintree"><file name="braintree-0.1.js" hash="a72cc4545d0d01dd0947dae1474516dd"/><file name="config.codekit" hash="ac2da34ea9ef3ca9c6dd616a0ae830d6"/><file name="express.js" hash="a32735940fb8313c150e6567a59a1f0e"/><file name="vzero-0.7-min.js" hash="67f02f3f52819c5af8db913d7780dc33"/><file name="vzero-0.7-min.js.map" hash="1fc5d50c5cdcb138131930ac92362053"/><file name="vzero-0.7.js" hash="9df7e368f0ba3d900940cec112f56dc1"/></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><file name="paypal-loading.gif" hash="078a2daf55245b227c09a7bed86750c6"/><file name="paypal.png" hash="40d5f74305e565bd14aef19bcf696541"/></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/><file name="loader-white.gif" hash="1fc0e911558e8dfe77cfdfafa0d38f88"/></dir></dir><dir name="css"><dir name="gene"><dir name="braintree"><dir name="account"><file name="account.less" hash="ddf6bf208f290316300ab20682f34473"/></dir><file name="account.css" hash="73bb46f85320b2f2b4de9beb6c0e0bd6"/><file name="aheadworks.css" hash="f5a06971e4dbac94df48fb0ff1912f98"/><file name="amasty.css" hash="5a4a845ea4a16cca2195cb836e25571e"/><file name="awesomecheckout.css" hash="5f858ec9549f6b04b0c2885fbf193e7b"/><file name="config.codekit" hash="845cf6e31d4c2b88906908d7fb65b249"/><dir name="core"><file name="_general.less" hash="5848708373d8ed5eda5e5b23c3e4e05c"/><file name="_hostedfields.less" hash="555bd4655d78a3b379c4b86a3e2d86e5"/><file name="_paypal.less" hash="e7e55d959247956253a0af1df0c9e899"/><file name="_saved.less" hash="66ec8d894e336f9934a1e54972c4b220"/></dir><file name="default.css" hash="229df9c1e39496d64a96c1b17e7a1823"/><file name="express.css" hash="23fdeca7804baa026615f4e54eeaf66b"/><file name="express.less" hash="0d752abca5f300beadc5a2948b5565ae"/><file name="fancycheckout.css" hash="69b7d8ce592bffde444edf77234109bd"/><file name="firecheckout.css" hash="6605fd097c6b509fd8ef758a5a2ea236"/><file name="fme.css" hash="5809c809abc0cc6dde9ff2accebe4f38"/><file name="idev.css" hash="89104fad2a084ec8ed229d119d9c276c"/><dir name="integrations"><file name="aheadworks.less" hash="09b0304383e198885f030119c15641f7"/><file name="amasty.less" hash="4cdf236e1d44112205750cefa11448b4"/><file name="awesomecheckout.less" hash="e774da637a5c6bbdb2e5decc998afae1"/><file name="default.less" hash="d366d4560ed1ce3e9e120309e56bec2f"/><file name="fancycheckout.less" hash="18281c460bb32da164964abe585b092b"/><file name="firecheckout.less" hash="459704b8b6efca52fcee7c335b3ad625"/><file name="fme.less" hash="580ed66608560fcd1195246c22e3559c"/><file name="idev.less" hash="47485cc963e16d12e673c06cd9efe4b1"/><file name="iwd.less" hash="5081477c7946e0f5cf8cc4198895ca11"/><file name="magestore.less" hash="0af5cd105be3995dc2044d33f990bbb5"/><file name="oye.less" hash="06a0f79190b16dfbce3aec6d14f07461"/><file name="unicode.less" hash="1416abe9a38965d9aead022b238f7d4f"/></dir><file name="iwd.css" hash="651ba890cc76d1f9fdaa7d6137b2a106"/><file name="magestore.css" hash="fdeca676628bd2e1c732a15640a42ff3"/><file name="oye.css" hash="ec24b4a2541dd3d01540d1f065025d7b"/><file name="unicode.css" hash="82acd70dca47bb484a17296c2ca11e81"/><file name=".DS_Store" hash="1405352d803d5c88cf3ec19a82f173d0"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><dir name="gene"><dir name="braintree"><file name="adminhtml.css" hash="2847eb017b959db61659562d1e8cfaea"/><file name="adminhtml.less" hash="6456950844fcd86471cf78400f922915"/><file name="config.codekit" hash="a41f2e0e0faacce3bd7f194f03bdd365"/><file name="migration.css" hash="c67c92df36fe23fecaa1db9f1f1cd996"/><file name="migration.less" hash="2f76dd2f55cc5268bd70197bfe344b20"/><file name=".DS_Store" hash="63617e9dd9988a3d3773937a3f7e2f9a"/></dir></dir></dir><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><dir name="migration"><file name="braintree.png" hash="396d721824a86b169ce0055090ce9766"/><file name="gene-logo.png" hash="16efb1b148acc59c46c84a21d726b6e9"/><file name="loader.gif" hash="66b9100930b8e58d46acf2e13d41f7ea"/></dir></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/></dir></dir></dir></dir></dir></target><target name="magelib"><dir name="Gene"><dir name="Braintree"><file name="AddOn.php" hash="e8bbb6db343ba99192346b1dcbf45677"/><file name="AddOnGateway.php" hash="d8698ffe89c01fba78a8a06a2fc68122"/><file name="Address.php" hash="004d3d36d39fc6fcc3d510f4b15b1fca"/><file name="AddressGateway.php" hash="41b5a3be7bdb2fe326a49a1554e1b0c3"/><file name="AndroidPayCard.php" hash="bb4a81807fefc76db286e615128c5d8c"/><file name="ApplePayCard.php" hash="b895256bcb867854bcaaffc1ce833fbd"/><file name="Base.php" hash="60d52fd1bef5655bcb607fba45bb4c1c"/><file name="ClientToken.php" hash="358c0a1dba687baf635db818cb7d1dac"/><file name="ClientTokenGateway.php" hash="9c24bb9de2c419c7e377c046da2a1ffa"/><file name="CoinbaseAccount.php" hash="ee5cb6963f675a9a71293c453b128866"/><file name="Collection.php" hash="0e7d31ffcbd9780fb554186bd2c194b0"/><file name="Configuration.php" hash="2a416a1eae0c22329d9bef88b25039b2"/><file name="CredentialsParser.php" hash="c4bb2248a33129d8523a6120ce44108b"/><file name="CreditCard.php" hash="d32b8d8e64b2d046d3d9e4f00c67f1ed"/><file name="CreditCardGateway.php" hash="0d120ed06f06fd614468d6e3f0ad22d2"/><file name="CreditCardVerification.php" hash="48d6ea546914278f4bea2fefb75e7836"/><file name="CreditCardVerificationGateway.php" hash="6a07430c9437f6e6c1516d5b4572a749"/><file name="CreditCardVerificationSearch.php" hash="18efe7d508c2bd5fea1c0e68fc26182f"/><file name="Customer.php" hash="62d0937de86f7a14a512ad66edba7569"/><file name="CustomerGateway.php" hash="5367d9d8a878572106e3a94c60132b1b"/><file name="CustomerSearch.php" hash="8aacc83dac341cd9afec5a3deab17593"/><file name="Descriptor.php" hash="3f5db5e817280ce7f2fa18a205281ad9"/><file name="Digest.php" hash="9d12d067770f55b123b8498fce4478fa"/><file name="Disbursement.php" hash="ad122f0f33b27dfd98bcdd38ea138ae4"/><file name="DisbursementDetails.php" hash="ae632207d0982e288a83aed401c880d9"/><file name="Discount.php" hash="763b3f9cde0ff3af3e8795cac4097595"/><file name="DiscountGateway.php" hash="47796edb8ac2fa68e9af8fb8a13aacb1"/><dir name="Dispute"><file name="TransactionDetails.php" hash="7fdea673a1295055508f42286ad57f4e"/></dir><file name="Dispute.php" hash="c3a4e93fa2b3b0e20ddcb593dcdc7b2b"/><file name="EqualityNode.php" hash="cfd6aa184186233b8d6d1ec0f0e79298"/><dir name="Error"><file name="Codes.php" hash="a7f98ff690e725b7fcd198b4b22d0637"/><file name="ErrorCollection.php" hash="e28d638db56524f5bf3609fa725e6d55"/><file name="Validation.php" hash="bf4e2198300019c52ba56f16269d66ce"/><file name="ValidationErrorCollection.php" hash="9ef25d0126a0b4f6951da5334ae6f0dc"/></dir><file name="EuropeBankAccount.php" hash="82ae4f4d1c45ce2c421305bf9397c866"/><dir name="Exception"><file name="Authentication.php" hash="f9e13654988452cca2ac5228a80adae4"/><file name="Authorization.php" hash="5f8c017c6e9fd79a556dade8e15a72e8"/><file name="Configuration.php" hash="b50f67e8ea36cff0d9f6ad718126c6fc"/><file name="DownForMaintenance.php" hash="7fd30b1f8976ed7e38b7e9fae5c20f03"/><file name="ForgedQueryString.php" hash="6884dbae1e86767834b77c821df2db62"/><file name="InvalidChallenge.php" hash="1c283a1c9dac65feb137594d0dcf0e35"/><file name="InvalidSignature.php" hash="b83f5b16735cb3a8e0a8111c4f32711e"/><file name="NotFound.php" hash="f832f771d20b381c2780eb2a572b9f44"/><file name="SSLCaFileNotFound.php" hash="e927c7307bf1761814dc8a755238070d"/><file name="SSLCertificate.php" hash="d509b6a6206bd7c5563ac142dfe3801f"/><file name="ServerError.php" hash="b4645290229ab228a257047d08ef63d7"/><file name="TestOperationPerformedInProduction.php" hash="fde4c6a8b708420b26785fb67a2548ef"/><file name="Unexpected.php" hash="01ea2800fb91995ec2a15aee5024611e"/><file name="UpgradeRequired.php" hash="7f40b174df891cc3b3e206d1be884a58"/><file name="ValidationsFailed.php" hash="cd2d30c69911f81b55279c3d6bf88c61"/></dir><file name="Exception.php" hash="f14c94bf67206184eb3e4e7aeb4a608a"/><file name="Gateway.php" hash="d2fac69479243ef4cea7d7a8add798f7"/><file name="Http.php" hash="1baa32e0efcae13c4d6294d1233512a1"/><file name="Instance.php" hash="f0603b3f9213b53687e079c5621ac8f3"/><file name="IsNode.php" hash="e4b1f7bbfcbd24b1d08b97f94df592be"/><file name="KeyValueNode.php" hash="255595ec01a16906dd0c49faf67d9efb"/><file name="Merchant.php" hash="5053ebe889c854d11f2686bffdeb58be"/><dir name="MerchantAccount"><file name="AddressDetails.php" hash="1d265d864a884ebcf2504f55207cc0dd"/><file name="BusinessDetails.php" hash="3e80148bac9fda676844aa19d5b2dc28"/><file name="FundingDetails.php" hash="7368f653fcbcc3d87924447b1763e616"/><file name="IndividualDetails.php" hash="777b6f28f643e78616c7ed753a39c0cd"/></dir><file name="MerchantAccount.php" hash="496c93182d824bb2967cc9366dec1ac3"/><file name="MerchantAccountGateway.php" hash="e2073aff6f8b3c5f2e64b23b210c44f7"/><file name="MerchantGateway.php" hash="e0a2e3a28c68dac8bd082973b269ed1b"/><file name="Modification.php" hash="0abe992d4f821327f617ca883c4eb2d1"/><file name="MultipleValueNode.php" hash="92700fa03011eaa9561010b3a160449c"/><file name="MultipleValueOrTextNode.php" hash="ef06bac18e2bc40974bdc0bcb854890f"/><file name="OAuthCredentials.php" hash="e992dca9dfedb27e3d050af55971a968"/><file name="OAuthGateway.php" hash="9a0b2b692eaf8fb5f337922044b20cc1"/><file name="PartialMatchNode.php" hash="370c7e0ab8a445cfeef6b19ef1755f4d"/><file name="PartnerMerchant.php" hash="bdb69ebdc75d67009710be9703a47e80"/><file name="PayPalAccount.php" hash="672a7d424f94e590c5e66a21e62d7bc2"/><file name="PayPalAccountGateway.php" hash="d73f5744ebaca6cc882c42d0e9c1a05e"/><file name="PaymentInstrumentType.php" hash="be97a30c7d8fbbb180864dc4efea71f2"/><file name="PaymentMethod.php" hash="5bc31d3e97610e7218c95aba2422cc9a"/><file name="PaymentMethodGateway.php" hash="4c93b070cb79c86ec9384e069fbae777"/><file name="PaymentMethodNonce.php" hash="e99302e2468f55c8fb4b2ceeb1bce68e"/><file name="PaymentMethodNonceGateway.php" hash="22a0d89eee071a28b530c6be477dcc6e"/><file name="Plan.php" hash="22ab0117d462352aecb9531d4a26619e"/><file name="PlanGateway.php" hash="95e093b55ad20f8b652ee5f2fc2a0fcf"/><file name="RangeNode.php" hash="4ad9a92547423b3d54d69097114c3daf"/><file name="ResourceCollection.php" hash="8f437cb5014148c0e2f6049347ae795c"/><dir name="Result"><file name="CreditCardVerification.php" hash="7c41787025ec7cffb269f53e3ce479e2"/><file name="Error.php" hash="0e0460f1eea017bc7591e05351f51eb0"/><file name="Successful.php" hash="03f1c379fcedaef499296ab7778d1e36"/></dir><file name="RiskData.php" hash="8bef1074f9f1c50c841a7c7cf627c9cf"/><file name="SettlementBatchSummary.php" hash="388d88e8cea7bec61ee78f388fb78c2c"/><file name="SettlementBatchSummaryGateway.php" hash="bc54658b75fa0505e072331799c2d9ad"/><file name="SignatureService.php" hash="4b78d3e5897e715dcc877c5f65b3cfae"/><dir name="Subscription"><file name="StatusDetails.php" hash="29e375f02150bfd7147591f0eb27cb4f"/></dir><file name="Subscription.php" hash="cde05aa61192d5b930b57330db308835"/><file name="SubscriptionGateway.php" hash="bd1b2aa2d4d41a595463bead64ed34e0"/><file name="SubscriptionSearch.php" hash="1874ebe5cb42d7d2836617810cced1af"/><dir name="Test"><file name="CreditCardNumbers.php" hash="676a9100354eb679e7ca1e0f0d67293f"/><file name="MerchantAccount.php" hash="612e7e30cca364c0d14cbff3b54ebf3f"/><file name="Nonces.php" hash="d39c75e07c12c005c837c33003cb9ec2"/><file name="Transaction.php" hash="f7ef8730ede38eda778679c7056ae7c7"/><file name="TransactionAmounts.php" hash="ed9bf1f57d871542c32d11de9e031f05"/><file name="VenmoSdk.php" hash="6ce94deccd1f968596011487c7e69cc7"/></dir><file name="TestingGateway.php" hash="ccb1126142799ac3dc9f8d6f1a1f48d4"/><file name="TextNode.php" hash="94c95ec9645de57acace2179fef7fb43"/><file name="ThreeDSecureInfo.php" hash="542550c4e03a24551d00e8aad5493035"/><dir name="Transaction"><file name="AddressDetails.php" hash="ff52a4a48248085b7ea92e992160e413"/><file name="AndroidPayCardDetails.php" hash="0d7716a3c992dfb0833e7ecd437ef346"/><file name="ApplePayCardDetails.php" hash="23f7ba70521889585fa40f4f0388524d"/><file name="CoinbaseDetails.php" hash="d19a625f8de98698b8277c25660358f0"/><file name="CreditCardDetails.php" hash="aac5eb1f5804d4f979b9c71f7b98cb36"/><file name="CustomerDetails.php" hash="e137895c646127312be44292c84a2d81"/><file name="EuropeBankAccountDetails.php" hash="afe4fdc3ab3714ef2995f514ce2be2a6"/><file name="PayPalDetails.php" hash="06903d1ee21879f7329b920138df9ac6"/><file name="StatusDetails.php" hash="7c6e719c51bf13bdfd07615030100ac6"/><file name="SubscriptionDetails.php" hash="1cf1f511d1545a2e27b8d3f4bee800ca"/></dir><file name="Transaction.php" hash="afe5d8ef7fc73633424d26b942c4e5a1"/><file name="TransactionGateway.php" hash="39684956db79fe58891876e5c7845413"/><file name="TransactionSearch.php" hash="aa58846182b909fb8747e165ec7e9b92"/><file name="TransparentRedirect.php" hash="154c9850be5175a5cd1b35bdf78ae939"/><file name="TransparentRedirectGateway.php" hash="5ead181bf0d5484db5eb305efa13bec4"/><file name="UnknownPaymentMethod.php" hash="9107498774ab5bc2b25de98838736b47"/><file name="Util.php" hash="9832a44da18b97a55248cadc4bb9a4ad"/><file name="Version.php" hash="43e074bc53780cb92af4a9ef4887c63e"/><file name="WebhookNotification.php" hash="4097fb57d46368d903c42bb20fbd49ca"/><file name="WebhookTesting.php" hash="c40311458bb64e37b4c08eb88df37805"/><dir name="Xml"><file name="Generator.php" hash="19f9c9b9b61d4f97f65775f527ac408d"/><file name="Parser.php" hash="c06b1ae155ac7687eaa856fac472656d"/></dir><file name="Xml.php" hash="dc69e05bea21e3d1185d45d53e4747db"/></dir><file name="Braintree.php" hash="2c75cf27b3c9a6e1bc557e6b239d2594"/><dir name="ssl"><file name="api_braintreegateway_com.ca.crt" hash="04beb23c767547e980c76eb68c7eab15"/><file name="sandbox_braintreegateway_com.ca.crt" hash="f1b529883c7c2cbb4251658f5da7b4c9"/></dir></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Gene_Braintree.csv" hash="b0c520cbdf0f42b11c8c6dfafbe999bd"/></dir></dir></target></contents>
|
42 |
<compatible/>
|
43 |
<dependencies><required><php><min>5.4.0</min><max>6.0.0</max></php><package><name></name><channel>connect.magentocommerce.com/core</channel><min></min><max></max></package></required></dependencies>
|
44 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Gene_Braintree</name>
|
4 |
+
<version>2.0.4</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/mit-license.php">MIT License</license>
|
7 |
<channel>community</channel>
|
36 |
</ul></description>
|
37 |
<notes>Connect your Magento store to Braintree to accept Credit Cards &amp; PayPal using V.Zero SDK</notes>
|
38 |
<authors><author><name>Dave Macaulay</name><user>dave</user><email>support@gene.co.uk</email></author></authors>
|
39 |
+
<date>2016-08-19</date>
|
40 |
+
<time>08:44:57</time>
|
41 |
+
<contents><target name="magecommunity"><dir name="Gene"><dir name="Braintree"><dir name="Block"><dir name="Adminhtml"><dir name="Report"><dir name="Transactions"><file name="Grid.php" hash="32b32086548f62ae4aca4baf456b9ed2"/><file name="Search.php" hash="81d57c3744530f36c37782ce9d0f3a70"/></dir><file name="Transactions.php" hash="7afe45b49353e52b432aa0392d76a08e"/></dir><dir name="System"><dir name="Config"><dir name="Braintree"><file name="Config.php" hash="9a7b4dac33799961712b98094e4fd6ff"/><file name="Currency.php" hash="5855bb4e1eff5c095b07666baaa9e0e0"/><dir name="Kount"><file name="Ens.php" hash="56ef3f1e4da9d09b6bc8d0814a882358"/></dir><file name="Migration.php" hash="e967c3a0e07d510c6aac12c88a27a098"/><file name="Moduleversion.php" hash="b74179be6853486ad2801c29c0ea830d"/><file name="Version.php" hash="9b12af242a8e96018554b35cd3a51a4d"/></dir><file name="Migration.php" hash="e3c31756ea93ed40322583b5afb10cc1"/></dir></dir></dir><dir name="Cart"><file name="Totals.php" hash="55d1ce06bc84c9229f4f245e5aee8edd"/></dir><dir name="Creditcard"><file name="Info.php" hash="1d069fc769a1478532634978ce550aa6"/><file name="Saved.php" hash="2d0a3c3543d8eecc7c94a50cea7810d9"/><file name="Threedsecure.php" hash="7848d4ecac743be985f328fa969318bf"/></dir><file name="Creditcard.php" hash="7871f210f4009cfe53ecfaf5164e43ca"/><dir name="Express"><file name="Button.php" hash="a2bad201e114d02164c21c726ca93d7e"/><file name="Checkout.php" hash="d0c9bc6f656e93031189e7d6bb1c8533"/></dir><file name="Info.php" hash="8891038708e60a3e1974e007c2a32de1"/><file name="Js.php" hash="35e604171e4a5d1250732c4a5ad33d9b"/><dir name="Paypal"><file name="Info.php" hash="be437bd72ca057fc641ce8ce79f475cc"/><file name="Saved.php" hash="6a99ef8a384d7ab8f4537e995867ec85"/></dir><file name="Paypal.php" hash="10cbb40f8801153ac0c04725843f4eee"/><dir name="Saved"><file name="Edit.php" hash="ae2d80ecab7cdda39b18054b057f2dc5"/></dir><file name="Saved.php" hash="782f17589219da087e57035a1c0b9a4a"/></dir><dir name="Helper"><file name="Data.php" hash="afd45e51f380acb08e2027348c3a2375"/></dir><dir name="Model"><file name="Debug.php" hash="f3360f71e2346881f93424792ed9f209"/><dir name="Entity"><file name="Setup.php" hash="c580e73ec53ac455698ee6b0ff005e39"/></dir><dir name="Kount"><file name="Ens.php" hash="3f672b000d43363406b1df7e2b52f620"/><file name="Rest.php" hash="5dfb5265a431da0210cb87dba023b7b6"/></dir><file name="Migration.php" hash="595f2f2d03b78ab057436609c8a73261"/><file name="Observer.php" hash="e1ac13f65517ef889cc41fc8b421cafb"/><dir name="Paymentmethod"><file name="Abstract.php" hash="d6c2a980770c401b5f311329198e2050"/><file name="Creditcard.php" hash="7d3f7f9660fd34453bbafeeb32918839"/><dir name="Legacy"><file name="Creditcard.php" hash="d31335cd41e72c54eccbe608e7257e02"/><file name="Paypal.php" hash="f929b4917e09007b226e6387bf4e1a22"/></dir><file name="Paypal.php" hash="08662de034dea524c2bb08a2493627b9"/></dir><file name="Saved.php" hash="3c9318122fbe56bdb915c837d834f392"/><dir name="Source"><file name="Cctype.php" hash="d76aa6c3a4bd798e3a47695f579d21d4"/><dir name="Creditcard"><file name="CaptureAction.php" hash="d39ff81be4b54620410ceeda7f960f0f"/><file name="FormIntegration.php" hash="9788f349430e0d48c9e13c262da3fe06"/><file name="PaymentAction.php" hash="d6e997ae4f6ed57129bf4d5da06a0a82"/></dir><file name="Environment.php" hash="5c2f5ce4d6d9f6f178102b90ec15aa2c"/><dir name="Paypal"><file name="CaptureAction.php" hash="0dd0c6da578aee4b7508f78cab982176"/><file name="Locale.php" hash="adc0ab30619eb3a34d8f5fe1087b07b0"/><file name="PaymentAction.php" hash="ab430eaf7ced39e9d6fd80ad0a7f6b3c"/><file name="Paymenttype.php" hash="48225fa7b3f5e54d81711397dd5bd96b"/></dir></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Currency.php" hash="73cb15b1de303e88c487db4c585ef94e"/></dir></dir></dir><dir name="Wrapper"><file name="Braintree.php" hash="34aa7eaa4f3c26dbafae27679e7349ad"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Braintree"><file name="MigrationController.php" hash="84323fa4665ece605f6b8e906d0edd40"/></dir><file name="BraintreeController.php" hash="d7ece21342a7b4b37ee41ea0e7ff20ad"/></dir><file name="CheckoutController.php" hash="223de3639574a686a68e9210f39c1fad"/><file name="ExpressController.php" hash="89aaef3ec80d0793e918a3674139b4f6"/><dir name="Kount"><file name="EnsController.php" hash="1db795afa1df901c37bbe48a3f01db2f"/></dir><file name="SavedController.php" hash="083777b1536e8dda604107af9f0081a9"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c9c940beffa0ec19e4a1499a66f7fd12"/><file name="config.xml" hash="7e86e8f0f9d1c02bf791fa4745d1d0be"/><file name="system.xml" hash="736a1ab8d3ab8f462fe9d93ed3dee386"/></dir><dir name="sql"><dir name="gene_braintree_setup"><file name="install-0.1.0.php" hash="503f428384f687d3f55a19ea57450212"/><file name="upgrade-1.0.5.4-2.0.0.php" hash="62d37c35ba39a77ea14cad842f143393"/><file name="upgrade-2.0.0-2.0.1.php" hash="a08927707bb43a5c22b3b6ce3dd7a3c7"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="97cf1ff702b5fe0697bcb0d725f37e6b"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="bfa98d63527cba0990c5cd793325a013"/><file name="info.phtml" hash="2ae1e397b3a633dd305bc26c7b9c1065"/><file name="saved.phtml" hash="579ec8ca726de3b5bea8600663d1e61f"/><file name="threedsecure.phtml" hash="ee8ad689afde041c39dd92ffa5274883"/></dir><file name="creditcard.phtml" hash="2cf07e28ebd141ea73e6e9082096304e"/><dir name="customer"><file name="edit.phtml" hash="ed8a9533f07fbfa36ec78623afd1a04d"/><file name="methods.phtml" hash="794ad8cb20314d1657a746b365c82540"/><file name="saved.phtml" hash="0457b0fa38f9db788133e54f359baa63"/></dir><dir name="express"><file name="cart.phtml" hash="dc6546baaa5c0c37fe3a6221ed978e87"/><file name="catalog.phtml" hash="e24ee8a37661e4cc82c19aaae3b669c3"/><file name="error.phtml" hash="0ec2ea2f9b909d9f0543e5df83eea055"/><file name="shipping_details.phtml" hash="0bb6ceafaac0ba522278df310d6136e2"/></dir><dir name="js"><file name="aheadworks.phtml" hash="533ba9aebbba6768649668386a74a1c2"/><file name="amasty.phtml" hash="2bfc5623dd9a98721b53a4d8cd13c0c3"/><file name="awesomecheckout.phtml" hash="ee42abb3b9211a31b3d4454ba1e92fe9"/><file name="data.phtml" hash="f8b04e3d0d7154cc75332eb5bec3e54e"/><file name="default.phtml" hash="fdcfb27a06ebab20268ef4ed820625c1"/><file name="fancycheckout.phtml" hash="f603bcd50dea98dbb45c1ec8b692314c"/><file name="firecheckout.phtml" hash="6186cba208f62227be17bb9ade5fa8f5"/><file name="fme.phtml" hash="263fb201b77696cf21cc677696c53fdd"/><file name="idev.phtml" hash="89d7effae80ca1a02f15b4326fd7e433"/><file name="iwd.phtml" hash="d7e12c84b629306529d3d8beb0c4814d"/><file name="magestore.phtml" hash="ff6a622a4048b8e533f3e672a40e6296"/><file name="multishipping.phtml" hash="a1e777e99df26d81f7c4b9e7b4a7c109"/><file name="oye.phtml" hash="51ef48f818e79acb6d1e8b9eb7889cc9"/><file name="setup.phtml" hash="804d63a30f8d6c985644b545a768da97"/><file name="unicode.phtml" hash="dd07e924a01b0a28ef46c9a62f22e3b5"/></dir><dir name="paypal"><file name="info.phtml" hash="5149b273730121e4dec3c3179820f747"/><file name="saved.phtml" hash="3dd56f96bcdd14be594d355ae8fff329"/></dir><file name="paypal.phtml" hash="d12c20e5fb76f31270a5d47061e42715"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="7f7616030d3c67f20fccd618a1459d56"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="152e09ed938c47ffc056a7c11247375a"/><file name="info.phtml" hash="958d514582e3de1f91f5e0f7a7169b47"/><file name="saved.phtml" hash="ca27adb601aebf97cd25a892082a8663"/></dir><file name="creditcard.phtml" hash="2d77487c6b7e9e6c77b2ddb25597bd8b"/><file name="js.phtml" hash="7253799710792ed1f8611e21c2b100bf"/><dir name="paypal"><file name="info.phtml" hash="0485ea82dc9cc8ebea092b378672f1cd"/><file name="saved.phtml" hash="779ca8e907d7d463eafce58dfaf94f0c"/></dir><file name="paypal.phtml" hash="f81578f64c8a30560299bd993d8e996d"/><dir name="system"><dir name="config"><file name="migration.phtml" hash="8ef2a5e5561d7909d065c987ded5e592"/></dir></dir><dir name="transactions"><file name="index.phtml" hash="1791b6393f319616dd79c0b46e391847"/><file name="search.phtml" hash="1682ce6200681681f0ce3c848e2e6694"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Gene_Braintree.xml" hash="8c0ffda8566dca2f0b98a999921e3e55"/></dir></target><target name="mageweb"><dir name="js"><dir name="gene"><dir name="braintree"><file name="braintree-0.1.js" hash="a72cc4545d0d01dd0947dae1474516dd"/><file name="config.codekit" hash="8c25da6033637f712e9b84926ce496a6"/><file name="express.js" hash="a32735940fb8313c150e6567a59a1f0e"/><file name="vzero-0.7-min.js" hash="67f02f3f52819c5af8db913d7780dc33"/><file name="vzero-0.7-min.js.map" hash="1fc5d50c5cdcb138131930ac92362053"/><file name="vzero-0.7.js" hash="9df7e368f0ba3d900940cec112f56dc1"/></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><file name="paypal-loading.gif" hash="078a2daf55245b227c09a7bed86750c6"/><file name="paypal.png" hash="40d5f74305e565bd14aef19bcf696541"/></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/><file name="loader-white.gif" hash="1fc0e911558e8dfe77cfdfafa0d38f88"/></dir></dir><dir name="css"><dir name="gene"><dir name="braintree"><dir name="account"><file name="account.less" hash="ddf6bf208f290316300ab20682f34473"/></dir><file name="account.css" hash="73bb46f85320b2f2b4de9beb6c0e0bd6"/><file name="aheadworks.css" hash="f5a06971e4dbac94df48fb0ff1912f98"/><file name="amasty.css" hash="5a4a845ea4a16cca2195cb836e25571e"/><file name="awesomecheckout.css" hash="5f858ec9549f6b04b0c2885fbf193e7b"/><file name="config.codekit" hash="84437b4cfe51c10615b8f58c083e36dd"/><dir name="core"><file name="_general.less" hash="5848708373d8ed5eda5e5b23c3e4e05c"/><file name="_hostedfields.less" hash="555bd4655d78a3b379c4b86a3e2d86e5"/><file name="_paypal.less" hash="e7e55d959247956253a0af1df0c9e899"/><file name="_saved.less" hash="66ec8d894e336f9934a1e54972c4b220"/></dir><file name="default.css" hash="229df9c1e39496d64a96c1b17e7a1823"/><file name="express.css" hash="23fdeca7804baa026615f4e54eeaf66b"/><file name="express.less" hash="0d752abca5f300beadc5a2948b5565ae"/><file name="fancycheckout.css" hash="69b7d8ce592bffde444edf77234109bd"/><file name="firecheckout.css" hash="6605fd097c6b509fd8ef758a5a2ea236"/><file name="fme.css" hash="5809c809abc0cc6dde9ff2accebe4f38"/><file name="idev.css" hash="89104fad2a084ec8ed229d119d9c276c"/><dir name="integrations"><file name="aheadworks.less" hash="09b0304383e198885f030119c15641f7"/><file name="amasty.less" hash="4cdf236e1d44112205750cefa11448b4"/><file name="awesomecheckout.less" hash="e774da637a5c6bbdb2e5decc998afae1"/><file name="default.less" hash="d366d4560ed1ce3e9e120309e56bec2f"/><file name="fancycheckout.less" hash="18281c460bb32da164964abe585b092b"/><file name="firecheckout.less" hash="459704b8b6efca52fcee7c335b3ad625"/><file name="fme.less" hash="580ed66608560fcd1195246c22e3559c"/><file name="idev.less" hash="47485cc963e16d12e673c06cd9efe4b1"/><file name="iwd.less" hash="5081477c7946e0f5cf8cc4198895ca11"/><file name="magestore.less" hash="0af5cd105be3995dc2044d33f990bbb5"/><file name="oye.less" hash="06a0f79190b16dfbce3aec6d14f07461"/><file name="unicode.less" hash="1416abe9a38965d9aead022b238f7d4f"/></dir><file name="iwd.css" hash="651ba890cc76d1f9fdaa7d6137b2a106"/><file name="magestore.css" hash="fdeca676628bd2e1c732a15640a42ff3"/><file name="oye.css" hash="ec24b4a2541dd3d01540d1f065025d7b"/><file name="unicode.css" hash="82acd70dca47bb484a17296c2ca11e81"/><file name=".DS_Store" hash="1405352d803d5c88cf3ec19a82f173d0"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><dir name="gene"><dir name="braintree"><file name="adminhtml.css" hash="affb40183f3620e4ee157daf613dc2a9"/><file name="adminhtml.less" hash="b3a4d504055c85d872c5b9544d192840"/><file name="config.codekit" hash="ddde6e8364c5adb1b88c7104c873eb01"/><file name="migration.css" hash="158e143a99028313d6ad6f6612112dd4"/><file name="migration.less" hash="bbf09530cf530f78f4a7c3229194c5ff"/><file name=".DS_Store" hash="63617e9dd9988a3d3773937a3f7e2f9a"/></dir></dir></dir><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><dir name="migration"><file name="braintree.png" hash="396d721824a86b169ce0055090ce9766"/><file name="gene-logo.png" hash="16efb1b148acc59c46c84a21d726b6e9"/><file name="loader.gif" hash="66b9100930b8e58d46acf2e13d41f7ea"/></dir></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/></dir></dir></dir></dir></dir></target><target name="magelib"><dir name="Gene"><dir name="Braintree"><file name="AddOn.php" hash="e8bbb6db343ba99192346b1dcbf45677"/><file name="AddOnGateway.php" hash="d8698ffe89c01fba78a8a06a2fc68122"/><file name="Address.php" hash="004d3d36d39fc6fcc3d510f4b15b1fca"/><file name="AddressGateway.php" hash="41b5a3be7bdb2fe326a49a1554e1b0c3"/><file name="AndroidPayCard.php" hash="bb4a81807fefc76db286e615128c5d8c"/><file name="ApplePayCard.php" hash="b895256bcb867854bcaaffc1ce833fbd"/><file name="Base.php" hash="60d52fd1bef5655bcb607fba45bb4c1c"/><file name="ClientToken.php" hash="358c0a1dba687baf635db818cb7d1dac"/><file name="ClientTokenGateway.php" hash="9c24bb9de2c419c7e377c046da2a1ffa"/><file name="CoinbaseAccount.php" hash="ee5cb6963f675a9a71293c453b128866"/><file name="Collection.php" hash="0e7d31ffcbd9780fb554186bd2c194b0"/><file name="Configuration.php" hash="2a416a1eae0c22329d9bef88b25039b2"/><file name="CredentialsParser.php" hash="c4bb2248a33129d8523a6120ce44108b"/><file name="CreditCard.php" hash="d32b8d8e64b2d046d3d9e4f00c67f1ed"/><file name="CreditCardGateway.php" hash="0d120ed06f06fd614468d6e3f0ad22d2"/><file name="CreditCardVerification.php" hash="48d6ea546914278f4bea2fefb75e7836"/><file name="CreditCardVerificationGateway.php" hash="6a07430c9437f6e6c1516d5b4572a749"/><file name="CreditCardVerificationSearch.php" hash="18efe7d508c2bd5fea1c0e68fc26182f"/><file name="Customer.php" hash="62d0937de86f7a14a512ad66edba7569"/><file name="CustomerGateway.php" hash="5367d9d8a878572106e3a94c60132b1b"/><file name="CustomerSearch.php" hash="8aacc83dac341cd9afec5a3deab17593"/><file name="Descriptor.php" hash="3f5db5e817280ce7f2fa18a205281ad9"/><file name="Digest.php" hash="9d12d067770f55b123b8498fce4478fa"/><file name="Disbursement.php" hash="ad122f0f33b27dfd98bcdd38ea138ae4"/><file name="DisbursementDetails.php" hash="ae632207d0982e288a83aed401c880d9"/><file name="Discount.php" hash="763b3f9cde0ff3af3e8795cac4097595"/><file name="DiscountGateway.php" hash="47796edb8ac2fa68e9af8fb8a13aacb1"/><dir name="Dispute"><file name="TransactionDetails.php" hash="7fdea673a1295055508f42286ad57f4e"/></dir><file name="Dispute.php" hash="c3a4e93fa2b3b0e20ddcb593dcdc7b2b"/><file name="EqualityNode.php" hash="cfd6aa184186233b8d6d1ec0f0e79298"/><dir name="Error"><file name="Codes.php" hash="a7f98ff690e725b7fcd198b4b22d0637"/><file name="ErrorCollection.php" hash="e28d638db56524f5bf3609fa725e6d55"/><file name="Validation.php" hash="bf4e2198300019c52ba56f16269d66ce"/><file name="ValidationErrorCollection.php" hash="9ef25d0126a0b4f6951da5334ae6f0dc"/></dir><file name="EuropeBankAccount.php" hash="82ae4f4d1c45ce2c421305bf9397c866"/><dir name="Exception"><file name="Authentication.php" hash="f9e13654988452cca2ac5228a80adae4"/><file name="Authorization.php" hash="5f8c017c6e9fd79a556dade8e15a72e8"/><file name="Configuration.php" hash="b50f67e8ea36cff0d9f6ad718126c6fc"/><file name="DownForMaintenance.php" hash="7fd30b1f8976ed7e38b7e9fae5c20f03"/><file name="ForgedQueryString.php" hash="6884dbae1e86767834b77c821df2db62"/><file name="InvalidChallenge.php" hash="1c283a1c9dac65feb137594d0dcf0e35"/><file name="InvalidSignature.php" hash="b83f5b16735cb3a8e0a8111c4f32711e"/><file name="NotFound.php" hash="f832f771d20b381c2780eb2a572b9f44"/><file name="SSLCaFileNotFound.php" hash="e927c7307bf1761814dc8a755238070d"/><file name="SSLCertificate.php" hash="d509b6a6206bd7c5563ac142dfe3801f"/><file name="ServerError.php" hash="b4645290229ab228a257047d08ef63d7"/><file name="TestOperationPerformedInProduction.php" hash="fde4c6a8b708420b26785fb67a2548ef"/><file name="Unexpected.php" hash="01ea2800fb91995ec2a15aee5024611e"/><file name="UpgradeRequired.php" hash="7f40b174df891cc3b3e206d1be884a58"/><file name="ValidationsFailed.php" hash="cd2d30c69911f81b55279c3d6bf88c61"/></dir><file name="Exception.php" hash="f14c94bf67206184eb3e4e7aeb4a608a"/><file name="Gateway.php" hash="d2fac69479243ef4cea7d7a8add798f7"/><file name="Http.php" hash="1baa32e0efcae13c4d6294d1233512a1"/><file name="Instance.php" hash="f0603b3f9213b53687e079c5621ac8f3"/><file name="IsNode.php" hash="e4b1f7bbfcbd24b1d08b97f94df592be"/><file name="KeyValueNode.php" hash="255595ec01a16906dd0c49faf67d9efb"/><file name="Merchant.php" hash="5053ebe889c854d11f2686bffdeb58be"/><dir name="MerchantAccount"><file name="AddressDetails.php" hash="1d265d864a884ebcf2504f55207cc0dd"/><file name="BusinessDetails.php" hash="3e80148bac9fda676844aa19d5b2dc28"/><file name="FundingDetails.php" hash="7368f653fcbcc3d87924447b1763e616"/><file name="IndividualDetails.php" hash="777b6f28f643e78616c7ed753a39c0cd"/></dir><file name="MerchantAccount.php" hash="496c93182d824bb2967cc9366dec1ac3"/><file name="MerchantAccountGateway.php" hash="e2073aff6f8b3c5f2e64b23b210c44f7"/><file name="MerchantGateway.php" hash="e0a2e3a28c68dac8bd082973b269ed1b"/><file name="Modification.php" hash="0abe992d4f821327f617ca883c4eb2d1"/><file name="MultipleValueNode.php" hash="92700fa03011eaa9561010b3a160449c"/><file name="MultipleValueOrTextNode.php" hash="ef06bac18e2bc40974bdc0bcb854890f"/><file name="OAuthCredentials.php" hash="e992dca9dfedb27e3d050af55971a968"/><file name="OAuthGateway.php" hash="9a0b2b692eaf8fb5f337922044b20cc1"/><file name="PartialMatchNode.php" hash="370c7e0ab8a445cfeef6b19ef1755f4d"/><file name="PartnerMerchant.php" hash="bdb69ebdc75d67009710be9703a47e80"/><file name="PayPalAccount.php" hash="672a7d424f94e590c5e66a21e62d7bc2"/><file name="PayPalAccountGateway.php" hash="d73f5744ebaca6cc882c42d0e9c1a05e"/><file name="PaymentInstrumentType.php" hash="be97a30c7d8fbbb180864dc4efea71f2"/><file name="PaymentMethod.php" hash="5bc31d3e97610e7218c95aba2422cc9a"/><file name="PaymentMethodGateway.php" hash="4c93b070cb79c86ec9384e069fbae777"/><file name="PaymentMethodNonce.php" hash="e99302e2468f55c8fb4b2ceeb1bce68e"/><file name="PaymentMethodNonceGateway.php" hash="22a0d89eee071a28b530c6be477dcc6e"/><file name="Plan.php" hash="22ab0117d462352aecb9531d4a26619e"/><file name="PlanGateway.php" hash="95e093b55ad20f8b652ee5f2fc2a0fcf"/><file name="RangeNode.php" hash="4ad9a92547423b3d54d69097114c3daf"/><file name="ResourceCollection.php" hash="8f437cb5014148c0e2f6049347ae795c"/><dir name="Result"><file name="CreditCardVerification.php" hash="7c41787025ec7cffb269f53e3ce479e2"/><file name="Error.php" hash="0e0460f1eea017bc7591e05351f51eb0"/><file name="Successful.php" hash="03f1c379fcedaef499296ab7778d1e36"/></dir><file name="RiskData.php" hash="8bef1074f9f1c50c841a7c7cf627c9cf"/><file name="SettlementBatchSummary.php" hash="388d88e8cea7bec61ee78f388fb78c2c"/><file name="SettlementBatchSummaryGateway.php" hash="bc54658b75fa0505e072331799c2d9ad"/><file name="SignatureService.php" hash="4b78d3e5897e715dcc877c5f65b3cfae"/><dir name="Subscription"><file name="StatusDetails.php" hash="29e375f02150bfd7147591f0eb27cb4f"/></dir><file name="Subscription.php" hash="cde05aa61192d5b930b57330db308835"/><file name="SubscriptionGateway.php" hash="bd1b2aa2d4d41a595463bead64ed34e0"/><file name="SubscriptionSearch.php" hash="1874ebe5cb42d7d2836617810cced1af"/><dir name="Test"><file name="CreditCardNumbers.php" hash="676a9100354eb679e7ca1e0f0d67293f"/><file name="MerchantAccount.php" hash="612e7e30cca364c0d14cbff3b54ebf3f"/><file name="Nonces.php" hash="d39c75e07c12c005c837c33003cb9ec2"/><file name="Transaction.php" hash="f7ef8730ede38eda778679c7056ae7c7"/><file name="TransactionAmounts.php" hash="ed9bf1f57d871542c32d11de9e031f05"/><file name="VenmoSdk.php" hash="6ce94deccd1f968596011487c7e69cc7"/></dir><file name="TestingGateway.php" hash="ccb1126142799ac3dc9f8d6f1a1f48d4"/><file name="TextNode.php" hash="94c95ec9645de57acace2179fef7fb43"/><file name="ThreeDSecureInfo.php" hash="542550c4e03a24551d00e8aad5493035"/><dir name="Transaction"><file name="AddressDetails.php" hash="ff52a4a48248085b7ea92e992160e413"/><file name="AndroidPayCardDetails.php" hash="0d7716a3c992dfb0833e7ecd437ef346"/><file name="ApplePayCardDetails.php" hash="23f7ba70521889585fa40f4f0388524d"/><file name="CoinbaseDetails.php" hash="d19a625f8de98698b8277c25660358f0"/><file name="CreditCardDetails.php" hash="aac5eb1f5804d4f979b9c71f7b98cb36"/><file name="CustomerDetails.php" hash="e137895c646127312be44292c84a2d81"/><file name="EuropeBankAccountDetails.php" hash="afe4fdc3ab3714ef2995f514ce2be2a6"/><file name="PayPalDetails.php" hash="06903d1ee21879f7329b920138df9ac6"/><file name="StatusDetails.php" hash="7c6e719c51bf13bdfd07615030100ac6"/><file name="SubscriptionDetails.php" hash="1cf1f511d1545a2e27b8d3f4bee800ca"/></dir><file name="Transaction.php" hash="afe5d8ef7fc73633424d26b942c4e5a1"/><file name="TransactionGateway.php" hash="39684956db79fe58891876e5c7845413"/><file name="TransactionSearch.php" hash="aa58846182b909fb8747e165ec7e9b92"/><file name="TransparentRedirect.php" hash="154c9850be5175a5cd1b35bdf78ae939"/><file name="TransparentRedirectGateway.php" hash="5ead181bf0d5484db5eb305efa13bec4"/><file name="UnknownPaymentMethod.php" hash="9107498774ab5bc2b25de98838736b47"/><file name="Util.php" hash="9832a44da18b97a55248cadc4bb9a4ad"/><file name="Version.php" hash="43e074bc53780cb92af4a9ef4887c63e"/><file name="WebhookNotification.php" hash="4097fb57d46368d903c42bb20fbd49ca"/><file name="WebhookTesting.php" hash="c40311458bb64e37b4c08eb88df37805"/><dir name="Xml"><file name="Generator.php" hash="19f9c9b9b61d4f97f65775f527ac408d"/><file name="Parser.php" hash="c06b1ae155ac7687eaa856fac472656d"/></dir><file name="Xml.php" hash="dc69e05bea21e3d1185d45d53e4747db"/></dir><file name="Braintree.php" hash="2c75cf27b3c9a6e1bc557e6b239d2594"/><dir name="ssl"><file name="api_braintreegateway_com.ca.crt" hash="04beb23c767547e980c76eb68c7eab15"/><file name="sandbox_braintreegateway_com.ca.crt" hash="f1b529883c7c2cbb4251658f5da7b4c9"/></dir></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Gene_Braintree.csv" hash="b0c520cbdf0f42b11c8c6dfafbe999bd"/></dir></dir></target></contents>
|
42 |
<compatible/>
|
43 |
<dependencies><required><php><min>5.4.0</min><max>6.0.0</max></php><package><name></name><channel>connect.magentocommerce.com/core</channel><min></min><max></max></package></required></dependencies>
|
44 |
</package>
|
skin/adminhtml/default/default/css/gene/braintree/adminhtml.css
CHANGED
@@ -128,3 +128,10 @@
|
|
128 |
label[for="gene_braintree_paypal_store_in_vault"] {
|
129 |
width: auto!important;
|
130 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
label[for="gene_braintree_paypal_store_in_vault"] {
|
129 |
width: auto!important;
|
130 |
}
|
131 |
+
.braintree_legacy_order {
|
132 |
+
background: #dddddd;
|
133 |
+
padding: 16px 15px 10px 15px;
|
134 |
+
margin: 12px -15px;
|
135 |
+
border-top: 1px solid #c7c7c7;
|
136 |
+
border-bottom: 1px solid #c7c7c7;
|
137 |
+
}
|
skin/adminhtml/default/default/css/gene/braintree/adminhtml.less
CHANGED
@@ -128,4 +128,13 @@
|
|
128 |
}
|
129 |
label[for="gene_braintree_paypal_store_in_vault"] {
|
130 |
width: auto!important;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
}
|
128 |
}
|
129 |
label[for="gene_braintree_paypal_store_in_vault"] {
|
130 |
width: auto!important;
|
131 |
+
}
|
132 |
+
|
133 |
+
.braintree_legacy_order {
|
134 |
+
background: #dddddd;
|
135 |
+
padding: 16px 15px 10px 15px;
|
136 |
+
margin: 12px -15px;
|
137 |
+
border-top: 1px solid #c7c7c7;
|
138 |
+
border-bottom: 1px solid #c7c7c7;
|
139 |
+
|
140 |
}
|
skin/adminhtml/default/default/css/gene/braintree/config.codekit
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
{
|
2 |
"CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
|
3 |
-
"creatorBuild": "
|
4 |
"files": {
|
5 |
"\/adminhtml.css": {
|
6 |
"fileType": 16,
|
@@ -227,7 +227,7 @@
|
|
227 |
"coffeeMinifyOutput": 1,
|
228 |
"coffeeOutputStyle": 0,
|
229 |
"coffeeSyntaxCheckerStyle": 1,
|
230 |
-
"externalServerAddress": "http:\/\/
|
231 |
"externalServerPreviewPathAddition": "",
|
232 |
"genericWebpageFileExtensionsString": "html, htm, shtml, shtm, xhtml, php, jsp, asp, aspx, erb, ctp",
|
233 |
"hamlAutoOutputPathEnabled": 1,
|
1 |
{
|
2 |
"CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
|
3 |
+
"creatorBuild": "19127",
|
4 |
"files": {
|
5 |
"\/adminhtml.css": {
|
6 |
"fileType": 16,
|
227 |
"coffeeMinifyOutput": 1,
|
228 |
"coffeeOutputStyle": 0,
|
229 |
"coffeeSyntaxCheckerStyle": 1,
|
230 |
+
"externalServerAddress": "http:\/\/migration.braintree.dave.gene.co.uk\/",
|
231 |
"externalServerPreviewPathAddition": "",
|
232 |
"genericWebpageFileExtensionsString": "html, htm, shtml, shtm, xhtml, php, jsp, asp, aspx, erb, ctp",
|
233 |
"hamlAutoOutputPathEnabled": 1,
|
skin/adminhtml/default/default/css/gene/braintree/migration.css
CHANGED
@@ -7,12 +7,14 @@
|
|
7 |
background: black;
|
8 |
z-index: 10001;
|
9 |
opacity: 0;
|
|
|
10 |
-moz-transition: opacity 0.4s ease-in-out;
|
11 |
-o-transition: opacity 0.4s ease-in-out;
|
12 |
-webkit-transition: opacity 0.4s ease-in-out;
|
13 |
transition: opacity 0.4s ease-in-out;
|
14 |
}
|
15 |
#braintree-migration-overlay.active {
|
|
|
16 |
opacity: 0.4;
|
17 |
}
|
18 |
#braintree-migration {
|
@@ -20,11 +22,12 @@
|
|
20 |
left: 50%;
|
21 |
top: 50%;
|
22 |
width: 850px;
|
23 |
-
margin-top: -
|
24 |
margin-left: -425px;
|
25 |
background: #303032;
|
26 |
z-index: 10002;
|
27 |
opacity: 0;
|
|
|
28 |
-webkit-border-radius: 10px;
|
29 |
-webkit-border-bottom-right-radius: 3px;
|
30 |
-webkit-border-bottom-left-radius: 3px;
|
@@ -34,14 +37,15 @@
|
|
34 |
border-radius: 10px;
|
35 |
border-bottom-right-radius: 3px;
|
36 |
border-bottom-left-radius: 3px;
|
37 |
-
transform: translateY(
|
38 |
-
-moz-transition: opacity
|
39 |
-
-o-transition: opacity
|
40 |
-
-webkit-transition: opacity
|
41 |
-
transition: opacity
|
42 |
box-shadow: 0 0 18px rgba(0, 0, 0, 0.1);
|
43 |
}
|
44 |
#braintree-migration.active {
|
|
|
45 |
opacity: 1;
|
46 |
transform: translateY(0px);
|
47 |
}
|
7 |
background: black;
|
8 |
z-index: 10001;
|
9 |
opacity: 0;
|
10 |
+
visibility: hidden;
|
11 |
-moz-transition: opacity 0.4s ease-in-out;
|
12 |
-o-transition: opacity 0.4s ease-in-out;
|
13 |
-webkit-transition: opacity 0.4s ease-in-out;
|
14 |
transition: opacity 0.4s ease-in-out;
|
15 |
}
|
16 |
#braintree-migration-overlay.active {
|
17 |
+
visibility: visible;
|
18 |
opacity: 0.4;
|
19 |
}
|
20 |
#braintree-migration {
|
22 |
left: 50%;
|
23 |
top: 50%;
|
24 |
width: 850px;
|
25 |
+
margin-top: -270px;
|
26 |
margin-left: -425px;
|
27 |
background: #303032;
|
28 |
z-index: 10002;
|
29 |
opacity: 0;
|
30 |
+
visibility: hidden;
|
31 |
-webkit-border-radius: 10px;
|
32 |
-webkit-border-bottom-right-radius: 3px;
|
33 |
-webkit-border-bottom-left-radius: 3px;
|
37 |
border-radius: 10px;
|
38 |
border-bottom-right-radius: 3px;
|
39 |
border-bottom-left-radius: 3px;
|
40 |
+
transform: translateY(20%);
|
41 |
+
-moz-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
|
42 |
+
-o-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
|
43 |
+
-webkit-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
|
44 |
+
transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
|
45 |
box-shadow: 0 0 18px rgba(0, 0, 0, 0.1);
|
46 |
}
|
47 |
#braintree-migration.active {
|
48 |
+
visibility: visible;
|
49 |
opacity: 1;
|
50 |
transform: translateY(0px);
|
51 |
}
|
skin/adminhtml/default/default/css/gene/braintree/migration.less
CHANGED
@@ -7,6 +7,7 @@
|
|
7 |
background: black;
|
8 |
z-index: 10001;
|
9 |
opacity: 0;
|
|
|
10 |
|
11 |
-moz-transition: opacity 0.4s ease-in-out;
|
12 |
-o-transition: opacity 0.4s ease-in-out;
|
@@ -14,6 +15,7 @@
|
|
14 |
transition: opacity 0.4s ease-in-out;
|
15 |
|
16 |
&.active {
|
|
|
17 |
opacity: 0.4;
|
18 |
}
|
19 |
}
|
@@ -23,11 +25,12 @@
|
|
23 |
left: 50%;
|
24 |
top: 50%;
|
25 |
width: 850px;
|
26 |
-
margin-top: -
|
27 |
margin-left: -425px;
|
28 |
background: #303032;
|
29 |
z-index: 10002;
|
30 |
opacity: 0;
|
|
|
31 |
|
32 |
-webkit-border-radius: 10px;
|
33 |
-webkit-border-bottom-right-radius: 3px;
|
@@ -39,16 +42,17 @@
|
|
39 |
border-bottom-right-radius: 3px;
|
40 |
border-bottom-left-radius: 3px;
|
41 |
|
42 |
-
transform: translateY(
|
43 |
|
44 |
-
-moz-transition: opacity
|
45 |
-
-o-transition: opacity
|
46 |
-
-webkit-transition: opacity
|
47 |
-
transition: opacity
|
48 |
|
49 |
box-shadow: 0 0 18px rgba(0,0,0,0.1);
|
50 |
|
51 |
&.active {
|
|
|
52 |
opacity: 1;
|
53 |
transform: translateY(0px);
|
54 |
}
|
7 |
background: black;
|
8 |
z-index: 10001;
|
9 |
opacity: 0;
|
10 |
+
visibility: hidden;
|
11 |
|
12 |
-moz-transition: opacity 0.4s ease-in-out;
|
13 |
-o-transition: opacity 0.4s ease-in-out;
|
15 |
transition: opacity 0.4s ease-in-out;
|
16 |
|
17 |
&.active {
|
18 |
+
visibility: visible;
|
19 |
opacity: 0.4;
|
20 |
}
|
21 |
}
|
25 |
left: 50%;
|
26 |
top: 50%;
|
27 |
width: 850px;
|
28 |
+
margin-top: -270px;
|
29 |
margin-left: -425px;
|
30 |
background: #303032;
|
31 |
z-index: 10002;
|
32 |
opacity: 0;
|
33 |
+
visibility: hidden;
|
34 |
|
35 |
-webkit-border-radius: 10px;
|
36 |
-webkit-border-bottom-right-radius: 3px;
|
42 |
border-bottom-right-radius: 3px;
|
43 |
border-bottom-left-radius: 3px;
|
44 |
|
45 |
+
transform: translateY(20%);
|
46 |
|
47 |
+
-moz-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
|
48 |
+
-o-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
|
49 |
+
-webkit-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
|
50 |
+
transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
|
51 |
|
52 |
box-shadow: 0 0 18px rgba(0,0,0,0.1);
|
53 |
|
54 |
&.active {
|
55 |
+
visibility: visible;
|
56 |
opacity: 1;
|
57 |
transform: translateY(0px);
|
58 |
}
|
skin/frontend/base/default/css/gene/braintree/config.codekit
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
{
|
2 |
"CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
|
3 |
-
"creatorBuild": "
|
4 |
"files": {
|
5 |
"\/account.css": {
|
6 |
"fileType": 16,
|
1 |
{
|
2 |
"CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
|
3 |
+
"creatorBuild": "19127",
|
4 |
"files": {
|
5 |
"\/account.css": {
|
6 |
"fileType": 16,
|