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 | 1.0.3 |
Comparing to | |
See all releases |
Code changes from version 1.0.2 to 1.0.3
- app/code/community/Gene/Braintree/Block/Creditcard/Info.php +38 -87
- app/code/community/Gene/Braintree/Block/Info.php +209 -0
- app/code/community/Gene/Braintree/Block/Paypal/Info.php +5 -5
- app/code/community/Gene/Braintree/Helper/Data.php +14 -0
- app/code/community/Gene/Braintree/Model/Paymentmethod/Abstract.php +87 -0
- app/code/community/Gene/Braintree/Model/Paymentmethod/Creditcard.php +170 -29
- app/code/community/Gene/Braintree/Model/Paymentmethod/Paypal.php +3 -2
- app/code/community/Gene/Braintree/Model/Wrapper/Braintree.php +129 -51
- app/code/community/Gene/Braintree/controllers/CheckoutController.php +1 -1
- app/code/community/Gene/Braintree/etc/config.xml +1 -1
- app/design/adminhtml/default/default/template/gene/braintree/creditcard/info.phtml +5 -1
- app/design/adminhtml/default/default/template/gene/braintree/paypal/info.phtml +2 -2
- app/design/frontend/base/default/template/gene/braintree/creditcard.phtml +4 -4
- app/design/frontend/base/default/template/gene/braintree/paypal.phtml +1 -1
- package.xml +4 -4
app/code/community/Gene/Braintree/Block/Creditcard/Info.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
*
|
6 |
* @author Dave Macaulay <dave@gene.co.uk>
|
7 |
*/
|
8 |
-
class Gene_Braintree_Block_Creditcard_Info extends
|
9 |
{
|
10 |
|
11 |
/**
|
@@ -17,26 +17,6 @@ class Gene_Braintree_Block_Creditcard_Info extends Mage_Payment_Block_Info
|
|
17 |
$this->setTemplate('gene/braintree/creditcard/info.phtml');
|
18 |
}
|
19 |
|
20 |
-
/**
|
21 |
-
* Return the currently viewed order
|
22 |
-
*
|
23 |
-
* @return \Mage_Sales_Model_Order
|
24 |
-
*/
|
25 |
-
protected function getOrder()
|
26 |
-
{
|
27 |
-
if(Mage::registry('current_order')) {
|
28 |
-
return Mage::registry('current_order');
|
29 |
-
} else if(Mage::registry('current_invoice')) {
|
30 |
-
return Mage::registry('current_invoice')->getOrder();
|
31 |
-
} else if(Mage::registry('current_shipment')) {
|
32 |
-
return Mage::registry('current_shipment')->getOrder();
|
33 |
-
} else if(Mage::registry('current_creditmemo')) {
|
34 |
-
return Mage::registry('current_creditmemo')->getOrder();
|
35 |
-
}
|
36 |
-
|
37 |
-
return false;
|
38 |
-
}
|
39 |
-
|
40 |
/**
|
41 |
* Prepare information specific to current payment method
|
42 |
*
|
@@ -49,52 +29,50 @@ class Gene_Braintree_Block_Creditcard_Info extends Mage_Payment_Block_Info
|
|
49 |
// Get the original transport data
|
50 |
$transport = parent::_prepareSpecificInformation($transport);
|
51 |
|
52 |
-
//
|
53 |
-
$
|
54 |
-
$this->__('Card Number (Last 4)') => $this->getInfo()->getCcLast4(),
|
55 |
-
$this->__('Credit Card Type') => $this->getInfo()->getCcType()
|
56 |
-
);
|
57 |
|
58 |
-
|
59 |
-
|
|
|
|
|
|
|
60 |
|
61 |
-
|
62 |
-
$data[$this->__('Braintree Transaction ID')] = $this->getInfo()->getLastTransId();
|
63 |
|
64 |
-
//
|
65 |
-
|
|
|
|
|
|
|
|
|
66 |
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
}
|
75 |
-
} catch (Exception $e) {
|
76 |
-
$data[$this->__('Status')] = $this->__('<span style="color:red;"><strong>Warning:</strong> Unable to connect to Braintree to load transaction.</span>');
|
77 |
}
|
78 |
-
}
|
79 |
-
|
80 |
-
// What additional information should we show
|
81 |
-
$additionalInfoHeadings = array(
|
82 |
-
'avsErrorResponseCode' => $this->__('AVS Error Response Code'),
|
83 |
-
'avsPostalCodeResponseCode' => $this->__('AVS Postal Response Code'),
|
84 |
-
'avsStreetAddressResponseCode' => $this->__('AVS Street Address Response Code'),
|
85 |
-
'cvvResponseCode' => $this->__('CVV Response Code'),
|
86 |
-
'gatewayRejectionReason' => $this->__('Gateway Rejection Reason'),
|
87 |
-
'processorAuthorizationCode' => $this->__('Processor Autorization Code'),
|
88 |
-
'processorResponseCode' => $this->__('Processor Response Code'),
|
89 |
-
'processorResponseText' => $this->__('Processor Response Text'),
|
90 |
-
'threeDSecure' => $this->__('3D Secure')
|
91 |
-
);
|
92 |
|
93 |
-
// Add any of the data that we've recorded into the view
|
94 |
-
foreach($additionalInfoHeadings as $key => $heading) {
|
95 |
-
if($infoData = $this->getInfo()->getAdditionalInformation($key)) {
|
96 |
-
$data[$heading] = $infoData;
|
97 |
-
}
|
98 |
}
|
99 |
|
100 |
}
|
@@ -107,31 +85,4 @@ class Gene_Braintree_Block_Creditcard_Info extends Mage_Payment_Block_Info
|
|
107 |
return $transport;
|
108 |
}
|
109 |
|
110 |
-
/**
|
111 |
-
* Make the status nicer to read
|
112 |
-
*
|
113 |
-
* @param $status
|
114 |
-
*
|
115 |
-
* @return string
|
116 |
-
*/
|
117 |
-
private function convertStatus($status)
|
118 |
-
{
|
119 |
-
switch($status){
|
120 |
-
case 'authorized':
|
121 |
-
return '<span style="color: #40A500;"> ' . Mage::helper('gene_braintree')->__('Authorized') . '</span>';
|
122 |
-
break;
|
123 |
-
case 'submitted_for_settlement':
|
124 |
-
return '<span style="color: #40A500;">' . Mage::helper('gene_braintree')->__('Submitted For Settlement') . '</span>';
|
125 |
-
break;
|
126 |
-
case 'settled':
|
127 |
-
return '<span style="color: #40A500;">' . Mage::helper('gene_braintree')->__('Settled') . '</span>';
|
128 |
-
break;
|
129 |
-
case 'voided':
|
130 |
-
return '<span style="color: #ed4737;">' . Mage::helper('gene_braintree')->__('Voided') . '</span>';
|
131 |
-
break;
|
132 |
-
}
|
133 |
-
|
134 |
-
return ucwords($status);
|
135 |
-
}
|
136 |
-
|
137 |
}
|
5 |
*
|
6 |
* @author Dave Macaulay <dave@gene.co.uk>
|
7 |
*/
|
8 |
+
class Gene_Braintree_Block_Creditcard_Info extends Gene_Braintree_Block_Info
|
9 |
{
|
10 |
|
11 |
/**
|
17 |
$this->setTemplate('gene/braintree/creditcard/info.phtml');
|
18 |
}
|
19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
/**
|
21 |
* Prepare information specific to current payment method
|
22 |
*
|
29 |
// Get the original transport data
|
30 |
$transport = parent::_prepareSpecificInformation($transport);
|
31 |
|
32 |
+
// Only display this information if it's a single invoice
|
33 |
+
if($this->isSingleInvoice()) {
|
|
|
|
|
|
|
34 |
|
35 |
+
// Build up the data we wish to pass through
|
36 |
+
$data = array(
|
37 |
+
$this->__('Card Number (Last 4)') => $this->getInfo()->getCcLast4(),
|
38 |
+
$this->__('Credit Card Type') => $this->getInfo()->getCcType()
|
39 |
+
);
|
40 |
|
41 |
+
} else {
|
|
|
42 |
|
43 |
+
// Never leave an empty array
|
44 |
+
$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(
|
58 |
+
'avsErrorResponseCode' => $this->__('AVS Error Response Code'),
|
59 |
+
'avsPostalCodeResponseCode' => $this->__('AVS Postal Response Code'),
|
60 |
+
'avsStreetAddressResponseCode' => $this->__('AVS Street Address Response Code'),
|
61 |
+
'cvvResponseCode' => $this->__('CVV Response Code'),
|
62 |
+
'gatewayRejectionReason' => $this->__('Gateway Rejection Reason'),
|
63 |
+
'processorAuthorizationCode' => $this->__('Processor Autorization Code'),
|
64 |
+
'processorResponseCode' => $this->__('Processor Response Code'),
|
65 |
+
'processorResponseText' => $this->__('Processor Response Text'),
|
66 |
+
'threeDSecure' => $this->__('3D Secure')
|
67 |
+
);
|
68 |
+
|
69 |
+
// Add any of the data that we've recorded into the view
|
70 |
+
foreach ($additionalInfoHeadings as $key => $heading) {
|
71 |
+
if ($infoData = $this->getInfo()->getAdditionalInformation($key)) {
|
72 |
+
$data[$heading] = $infoData;
|
73 |
}
|
|
|
|
|
74 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
|
|
|
|
|
|
|
|
|
|
|
76 |
}
|
77 |
|
78 |
}
|
85 |
return $transport;
|
86 |
}
|
87 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
}
|
app/code/community/Gene/Braintree/Block/Info.php
ADDED
@@ -0,0 +1,209 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class Gene_Braintree_Block_Info
|
5 |
+
*
|
6 |
+
* @author Dave Macaulay <dave@gene.co.uk>
|
7 |
+
*/
|
8 |
+
class Gene_Braintree_Block_Info extends Mage_Payment_Block_Info
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* Store this within the model
|
12 |
+
*/
|
13 |
+
private $_singleInvoice = null;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Return the currently viewed order
|
17 |
+
*
|
18 |
+
* @return \Mage_Sales_Model_Order|\Mage_Sales_Model_Order_Invoice|\Mage_Sales_Model_Order_Creditmemo
|
19 |
+
*/
|
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 |
+
|
33 |
+
return false;
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Include live details
|
38 |
+
*
|
39 |
+
* @param $data
|
40 |
+
*/
|
41 |
+
protected function includeLiveDetails(&$data)
|
42 |
+
{
|
43 |
+
// Retrieve the order
|
44 |
+
$order = $this->getViewedObject();
|
45 |
+
|
46 |
+
// Sometimes orders may not have transaction Id's
|
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 |
+
} else if($order) {
|
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 |
+
}
|
74 |
+
|
75 |
+
}
|
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)] = '';
|
89 |
+
}
|
90 |
+
|
91 |
+
// If the order contains more than one transaction show all statuses
|
92 |
+
$label = $this->__('Status%s', (count($transactionIds) > 1 ? ' (' . $this->__('Transaction ID: ') . $transactionId . ')' : ''));
|
93 |
+
|
94 |
+
// Add in the current status
|
95 |
+
try {
|
96 |
+
$transaction = Mage::getModel('gene_braintree/wrapper_braintree')->init($this->getViewedObject()->getStoreId())->findTransaction($transactionId);
|
97 |
+
if ($transaction) {
|
98 |
+
$data[$label] = $this->convertStatus($transaction->status);
|
99 |
+
} else {
|
100 |
+
$data[$label] = $this->__('<span style="color:red;"><strong>Warning:</strong> Cannot load payment in Braintree.</span>');
|
101 |
+
}
|
102 |
+
} catch (Exception $e) {
|
103 |
+
$data[$label] = $this->__('<span style="color:red;"><strong>Warning:</strong> Unable to connect to Braintree to load transaction.</span>');
|
104 |
+
}
|
105 |
+
|
106 |
+
++$count;
|
107 |
+
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Are we viewing a single invoice?
|
115 |
+
*
|
116 |
+
* @return bool
|
117 |
+
*/
|
118 |
+
protected function isSingleInvoice()
|
119 |
+
{
|
120 |
+
// Caching on the check
|
121 |
+
if($this->_singleInvoice === null) {
|
122 |
+
$this->_singleInvoice = $this->getViewedObject()
|
123 |
+
&& ($this->getViewedObject() instanceof Mage_Sales_Model_Order
|
124 |
+
&& $this->getViewedObject()->getInvoiceCollection()->getSize() <= 1)
|
125 |
+
|| ($this->getViewedObject() instanceof Mage_Sales_Model_Order_Invoice)
|
126 |
+
|| ($this->getViewedObject() instanceof Mage_Sales_Model_Order_Creditmemo);
|
127 |
+
}
|
128 |
+
|
129 |
+
return $this->_singleInvoice;
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Return the transaction ID
|
134 |
+
*
|
135 |
+
* @return bool|string
|
136 |
+
*/
|
137 |
+
protected function getTransactionId()
|
138 |
+
{
|
139 |
+
// If the viewed object is an order or it's an invoice but the order doesn't have any invoices
|
140 |
+
if($this->getViewedObject() && $this->getViewedObject() instanceof Mage_Sales_Model_Order
|
141 |
+
|| ($this->getViewedObject() instanceof Mage_Sales_Model_Order_Invoice && !$this->getViewedObject()->getTransactionId()))
|
142 |
+
{
|
143 |
+
|
144 |
+
// Return the transaction ID from the info
|
145 |
+
return $this->_getWrapper()->getCleanTransactionId($this->getInfo()->getLastTransId());
|
146 |
+
|
147 |
+
// Else if we're viewing an invoice or a credit memo
|
148 |
+
} else if($this->getViewedObject() && ($this->getViewedObject() instanceof Mage_Sales_Model_Order_Invoice
|
149 |
+
|| $this->getViewedObject() instanceof Mage_Sales_Model_Order_Creditmemo))
|
150 |
+
{
|
151 |
+
|
152 |
+
// If the creditmemo is being created it has no transaction ID
|
153 |
+
if($this->getViewedObject() instanceof Mage_Sales_Model_Order_Creditmemo && !$this->getViewedObject()->getTransactionId()) {
|
154 |
+
|
155 |
+
// If the creditmemo has an invoice use that transaction ID, otherwise we're viewing an order wide credit memo
|
156 |
+
if($this->getViewedObject()->getInvoice() && $this->getViewedObject()->getInvoice()->getTransactionId()) {
|
157 |
+
return $this->_getWrapper()->getCleanTransactionId($this->getViewedObject()->getInvoice()->getTransactionId());
|
158 |
+
} else {
|
159 |
+
return $this->_getWrapper()->getCleanTransactionId($this->getInfo()->getLastTransId());
|
160 |
+
}
|
161 |
+
}
|
162 |
+
|
163 |
+
return $this->_getWrapper()->getCleanTransactionId($this->getViewedObject()->getTransactionId());
|
164 |
+
}
|
165 |
+
|
166 |
+
return false;
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Make the status nicer to read
|
171 |
+
*
|
172 |
+
* @param $status
|
173 |
+
*
|
174 |
+
* @return string
|
175 |
+
*/
|
176 |
+
protected function convertStatus($status)
|
177 |
+
{
|
178 |
+
switch($status){
|
179 |
+
case 'authorized':
|
180 |
+
return '<span style="color: #40A500;"> ' . Mage::helper('gene_braintree')->__('Authorized') . '</span>';
|
181 |
+
break;
|
182 |
+
case 'submitted_for_settlement':
|
183 |
+
return '<span style="color: #40A500;">' . Mage::helper('gene_braintree')->__('Submitted For Settlement') . '</span>';
|
184 |
+
break;
|
185 |
+
case 'settling':
|
186 |
+
return '<span style="color: #40A500;">' . Mage::helper('gene_braintree')->__('Settling') . '</span>';
|
187 |
+
break;
|
188 |
+
case 'settled':
|
189 |
+
return '<span style="color: #40A500;">' . Mage::helper('gene_braintree')->__('Settled') . '</span>';
|
190 |
+
break;
|
191 |
+
case 'voided':
|
192 |
+
return '<span style="color: #ed4737;">' . Mage::helper('gene_braintree')->__('Voided') . '</span>';
|
193 |
+
break;
|
194 |
+
}
|
195 |
+
|
196 |
+
return ucwords($status);
|
197 |
+
}
|
198 |
+
|
199 |
+
/**
|
200 |
+
* Return the wrapper class
|
201 |
+
*
|
202 |
+
* @return Gene_Braintree_Model_Wrapper_Braintree
|
203 |
+
*/
|
204 |
+
protected function _getWrapper()
|
205 |
+
{
|
206 |
+
return Mage::getSingleton('gene_braintree/wrapper_braintree');
|
207 |
+
}
|
208 |
+
|
209 |
+
}
|
app/code/community/Gene/Braintree/Block/Paypal/Info.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
*
|
6 |
* @author Dave Macaulay <dave@gene.co.uk>
|
7 |
*/
|
8 |
-
class Gene_Braintree_Block_Paypal_Info extends
|
9 |
{
|
10 |
|
11 |
/**
|
@@ -37,14 +37,14 @@ class Gene_Braintree_Block_Paypal_Info extends Mage_Payment_Block_Info
|
|
37 |
// Check we're in the admin area
|
38 |
if(Mage::app()->getStore()->isAdmin()) {
|
39 |
|
|
|
|
|
|
|
40 |
// Show these details to the admin only
|
41 |
$data = array_merge(
|
42 |
$data, array(
|
43 |
-
$this->__('Braintree Transaction ID') => $this->getInfo()->getLastTransId(),
|
44 |
$this->__('Payment ID') => $this->getInfo()->getAdditionalInformation('payment_id'),
|
45 |
-
$this->__('Authorization ID') => $this->getInfo()->getAdditionalInformation(
|
46 |
-
'authorization_id'
|
47 |
-
)
|
48 |
)
|
49 |
);
|
50 |
|
5 |
*
|
6 |
* @author Dave Macaulay <dave@gene.co.uk>
|
7 |
*/
|
8 |
+
class Gene_Braintree_Block_Paypal_Info extends Gene_Braintree_Block_Info
|
9 |
{
|
10 |
|
11 |
/**
|
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 |
// Show these details to the admin only
|
44 |
$data = array_merge(
|
45 |
$data, array(
|
|
|
46 |
$this->__('Payment ID') => $this->getInfo()->getAdditionalInformation('payment_id'),
|
47 |
+
$this->__('Authorization ID') => $this->getInfo()->getAdditionalInformation('authorization_id')
|
|
|
|
|
48 |
)
|
49 |
);
|
50 |
|
app/code/community/Gene/Braintree/Helper/Data.php
CHANGED
@@ -30,4 +30,18 @@ class Gene_Braintree_Helper_Data extends Mage_Core_Helper_Abstract
|
|
30 |
Braintree_Transaction::SETTLEMENT_PENDING => $this->__('Settlement Pending')
|
31 |
);
|
32 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
}
|
30 |
Braintree_Transaction::SETTLEMENT_PENDING => $this->__('Settlement Pending')
|
31 |
);
|
32 |
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Force the prices to two decimal places
|
36 |
+
* Magento sometimes doesn't return certain totals in the correct format, yet Braintree requires them to always
|
37 |
+
* be in two decimal places, thus the need for this function
|
38 |
+
*
|
39 |
+
* @param $price
|
40 |
+
*
|
41 |
+
* @return string
|
42 |
+
*/
|
43 |
+
public function formatPrice($price)
|
44 |
+
{
|
45 |
+
return number_format($price, 2, '.', '');
|
46 |
+
}
|
47 |
}
|
app/code/community/Gene/Braintree/Model/Paymentmethod/Abstract.php
CHANGED
@@ -106,4 +106,91 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
|
|
106 |
return $this;
|
107 |
}
|
108 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
}
|
106 |
return $this;
|
107 |
}
|
108 |
|
109 |
+
/**
|
110 |
+
* Refund specified amount for payment
|
111 |
+
*
|
112 |
+
* @param \Varien_Object $payment
|
113 |
+
* @param float $amount
|
114 |
+
*
|
115 |
+
* @return $this
|
116 |
+
* @throws \Mage_Core_Exception
|
117 |
+
*/
|
118 |
+
public function refund(Varien_Object $payment, $amount)
|
119 |
+
{
|
120 |
+
try {
|
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 |
+
|
128 |
+
// Init the environment
|
129 |
+
$this->_getWrapper()->init($payment->getOrder()->getStoreId());
|
130 |
+
|
131 |
+
// Convert the refund amount
|
132 |
+
$refundAmount = $this->_getWrapper()->getCaptureAmount($payment->getOrder(), $amount);
|
133 |
+
|
134 |
+
// Retrieve the transaction ID
|
135 |
+
$transactionId = $this->_getWrapper()->getCleanTransactionId($invoice->getTransactionId());
|
136 |
+
|
137 |
+
// Load the transaction from Braintree
|
138 |
+
$transaction = Braintree_Transaction::find($transactionId);
|
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 |
+
|
143 |
+
// If we're doing a partial refund and it's not settled it's a no go
|
144 |
+
if ($transaction->amount != $refundAmount) {
|
145 |
+
Mage::throwException($this->_getHelper()->__('This transaction has not yet settled, please wait until the transaction has settled to process a partial refund.'));
|
146 |
+
}
|
147 |
+
}
|
148 |
+
|
149 |
+
// Swap between refund and void
|
150 |
+
$result = ($transaction->status === Braintree_Transaction::SETTLED || (isset($transaction->paypal) && isset($transaction->paypal['paymentId']) && !empty($transaction->paypal['paymentId'])))
|
151 |
+
? Braintree_Transaction::refund($transactionId, $refundAmount)
|
152 |
+
: Braintree_Transaction::void($transactionId);
|
153 |
+
|
154 |
+
// If it's a success close the transaction
|
155 |
+
if ($result->success) {
|
156 |
+
|
157 |
+
// Pass over the transaction ID
|
158 |
+
$payment->getCreditmemo()->setRefundTransactionId($result->transaction->id);
|
159 |
+
|
160 |
+
// Only close the transaction once the
|
161 |
+
if($transaction->amount == $refundAmount) {
|
162 |
+
|
163 |
+
$payment->setIsTransactionClosed(1);
|
164 |
+
|
165 |
+
// Mark the invoice as canceled if the invoice was completely refunded
|
166 |
+
$invoice->setState(Mage_Sales_Model_Order_Invoice::STATE_CANCELED);
|
167 |
+
}
|
168 |
+
|
169 |
+
} else {
|
170 |
+
if($result->errors->deepSize() > 0) {
|
171 |
+
Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
|
172 |
+
} else {
|
173 |
+
Mage::throwException('An unknown error has occurred whilst trying to process the transaction');
|
174 |
+
}
|
175 |
+
}
|
176 |
+
|
177 |
+
} catch (Exception $e) {
|
178 |
+
Mage::throwException($this->_getHelper()->__('An error occurred whilst trying to process the refund: ') . $e->getMessage());
|
179 |
+
}
|
180 |
+
|
181 |
+
return $this;
|
182 |
+
}
|
183 |
+
|
184 |
+
/**
|
185 |
+
* Set transaction ID into creditmemo for informational purposes
|
186 |
+
* @param Mage_Sales_Model_Order_Creditmemo $creditmemo
|
187 |
+
* @param Mage_Sales_Model_Order_Payment $payment
|
188 |
+
* @return Mage_Payment_Model_Method_Abstract
|
189 |
+
*/
|
190 |
+
public function processCreditmemo($creditmemo, $payment)
|
191 |
+
{
|
192 |
+
// Copy the refund transaction ID from the credit memo
|
193 |
+
$creditmemo->setTransactionId($creditmemo->getRefundTransactionId());
|
194 |
+
return $this;
|
195 |
+
}
|
196 |
}
|
app/code/community/Gene/Braintree/Model/Paymentmethod/Creditcard.php
CHANGED
@@ -32,9 +32,9 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
32 |
protected $_canAuthorize = true;
|
33 |
protected $_canCapture = true;
|
34 |
protected $_canCapturePartial = true;
|
35 |
-
protected $_canRefund =
|
36 |
-
protected $_canRefundInvoicePartial =
|
37 |
-
protected $_canVoid =
|
38 |
protected $_canUseInternal = true;
|
39 |
protected $_canUseCheckout = true;
|
40 |
protected $_canUseForMultishipping = false;
|
@@ -102,31 +102,67 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
102 |
}
|
103 |
|
104 |
/**
|
105 |
-
*
|
106 |
-
* @param Varien_Object $payment
|
107 |
-
* @param $amount
|
108 |
-
* @param bool $shouldCapture
|
109 |
*
|
110 |
-
* @
|
111 |
*/
|
112 |
-
|
113 |
{
|
|
|
|
|
|
|
114 |
// Retrieve the post data from the request
|
115 |
$paymentPost = Mage::app()->getRequest()->getPost('payment');
|
116 |
|
117 |
// Confirm that we have a nonce from Braintree
|
118 |
-
if(!isset($paymentPost['card_payment_method_token']) || (isset($paymentPost['card_payment_method_token']) && $paymentPost['card_payment_method_token'] == 'threedsecure')) {
|
119 |
if ((!isset($paymentPost['payment_method_nonce']) || empty($paymentPost['payment_method_nonce']))) {
|
|
|
|
|
|
|
120 |
Mage::throwException(
|
121 |
$this->_getHelper()->__('Your card payment has failed, please try again.')
|
122 |
);
|
123 |
}
|
124 |
-
} else if(isset($paymentPost['card_payment_method_token']) && empty($paymentPost['card_payment_method_token'])) {
|
|
|
|
|
|
|
125 |
Mage::throwException(
|
126 |
$this->_getHelper()->__('Your card payment has failed, please try again.')
|
127 |
);
|
128 |
}
|
129 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
// Get the device data for fraud screening
|
131 |
$deviceData = Mage::app()->getRequest()->getPost('device_data');
|
132 |
|
@@ -137,20 +173,8 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
137 |
try {
|
138 |
|
139 |
// Pass over the CVV/CCV
|
140 |
-
if($this->requireCcv() && isset($paymentPost['cc_cid'])) {
|
141 |
-
|
142 |
$paymentArray['cvv'] = $paymentPost['cc_cid'];
|
143 |
-
|
144 |
-
} else if($this->requireCcv() && !isset($paymentPost['cc_cid']) && empty($paymentPost['card_payment_method_token'])) {
|
145 |
-
|
146 |
-
// Log it
|
147 |
-
Gene_Braintree_Model_Debug::log('CVV required but not present in request');
|
148 |
-
|
149 |
-
// Politely inform the user
|
150 |
-
Mage::throwException(
|
151 |
-
$this->_getHelper()->__('We require a CVV when creating card transactions.')
|
152 |
-
);
|
153 |
-
|
154 |
}
|
155 |
|
156 |
// Check to see whether we're using a payment method token?
|
@@ -190,6 +214,16 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
190 |
$threeDSecure = false;
|
191 |
}
|
192 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
193 |
// Retrieve the amount we should capture
|
194 |
$amount = $this->_getWrapper()->getCaptureAmount($payment->getOrder(), $amount);
|
195 |
|
@@ -308,16 +342,61 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
308 |
// Has the payment already been authorized?
|
309 |
if ($payment->getCcTransId()) {
|
310 |
|
311 |
-
//
|
312 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
313 |
|
314 |
-
|
315 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
316 |
|
317 |
if($result->success) {
|
318 |
$this->_processSuccessResult($payment, $result, $amount);
|
319 |
} else if($result->errors->deepSize() > 0) {
|
320 |
-
Mage::throwException($result->errors);
|
321 |
} else {
|
322 |
Mage::throwException($result->transaction->processorSettlementResponseCode.': '.$result->transaction->processorSettlementResponseText);
|
323 |
}
|
@@ -330,6 +409,68 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
|
|
330 |
return $this;
|
331 |
}
|
332 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
333 |
/**
|
334 |
* Processes successful authorize/clone result
|
335 |
*
|
32 |
protected $_canAuthorize = true;
|
33 |
protected $_canCapture = true;
|
34 |
protected $_canCapturePartial = true;
|
35 |
+
protected $_canRefund = true;
|
36 |
+
protected $_canRefundInvoicePartial = true;
|
37 |
+
protected $_canVoid = true;
|
38 |
protected $_canUseInternal = true;
|
39 |
protected $_canUseCheckout = true;
|
40 |
protected $_canUseForMultishipping = false;
|
102 |
}
|
103 |
|
104 |
/**
|
105 |
+
* Validate payment method information object
|
|
|
|
|
|
|
106 |
*
|
107 |
+
* @return $this
|
108 |
*/
|
109 |
+
public function validate()
|
110 |
{
|
111 |
+
// Run the built in Magento validation
|
112 |
+
parent::validate();
|
113 |
+
|
114 |
// Retrieve the post data from the request
|
115 |
$paymentPost = Mage::app()->getRequest()->getPost('payment');
|
116 |
|
117 |
// Confirm that we have a nonce from Braintree
|
118 |
+
if (!isset($paymentPost['card_payment_method_token']) || (isset($paymentPost['card_payment_method_token']) && $paymentPost['card_payment_method_token'] == 'threedsecure')) {
|
119 |
if ((!isset($paymentPost['payment_method_nonce']) || empty($paymentPost['payment_method_nonce']))) {
|
120 |
+
|
121 |
+
Gene_Braintree_Model_Debug::log('Card payment has failed, missing token/nonce');
|
122 |
+
|
123 |
Mage::throwException(
|
124 |
$this->_getHelper()->__('Your card payment has failed, please try again.')
|
125 |
);
|
126 |
}
|
127 |
+
} else if (isset($paymentPost['card_payment_method_token']) && empty($paymentPost['card_payment_method_token'])) {
|
128 |
+
|
129 |
+
Gene_Braintree_Model_Debug::log('No saved card token present');
|
130 |
+
|
131 |
Mage::throwException(
|
132 |
$this->_getHelper()->__('Your card payment has failed, please try again.')
|
133 |
);
|
134 |
}
|
135 |
|
136 |
+
// If the CVV is required and it's not been sent in the request throw an error
|
137 |
+
if ($this->requireCcv() && (!isset($paymentPost['cc_cid']) || empty($paymentPost['cc_cid'])) && empty($paymentPost['card_payment_method_token'])) {
|
138 |
+
|
139 |
+
// Log it
|
140 |
+
Gene_Braintree_Model_Debug::log('CVV required but not present in request');
|
141 |
+
|
142 |
+
// Politely inform the user
|
143 |
+
Mage::throwException(
|
144 |
+
$this->_getHelper()->__('We require a CVV when creating card transactions.')
|
145 |
+
);
|
146 |
+
|
147 |
+
}
|
148 |
+
|
149 |
+
|
150 |
+
return $this;
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Psuedo _authorize function so we can pass in extra data
|
155 |
+
* @param Varien_Object $payment
|
156 |
+
* @param $amount
|
157 |
+
* @param bool $shouldCapture
|
158 |
+
*
|
159 |
+
* @throws Mage_Core_Exception
|
160 |
+
*/
|
161 |
+
protected function _authorize(Varien_Object $payment, $amount, $shouldCapture = false, $token = false)
|
162 |
+
{
|
163 |
+
// Retrieve the post data from the request
|
164 |
+
$paymentPost = Mage::app()->getRequest()->getPost('payment');
|
165 |
+
|
166 |
// Get the device data for fraud screening
|
167 |
$deviceData = Mage::app()->getRequest()->getPost('device_data');
|
168 |
|
173 |
try {
|
174 |
|
175 |
// Pass over the CVV/CCV
|
176 |
+
if ($this->requireCcv() && isset($paymentPost['cc_cid'])) {
|
|
|
177 |
$paymentArray['cvv'] = $paymentPost['cc_cid'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
}
|
179 |
|
180 |
// Check to see whether we're using a payment method token?
|
214 |
$threeDSecure = false;
|
215 |
}
|
216 |
|
217 |
+
// If a token is present in the request use that
|
218 |
+
if($token) {
|
219 |
+
|
220 |
+
// Remove this unneeded data
|
221 |
+
unset($paymentArray['paymentMethodNonce'], $paymentArray['cvv']);
|
222 |
+
|
223 |
+
// Send the token as the payment array
|
224 |
+
$paymentArray['paymentMethodToken'] = $token;
|
225 |
+
}
|
226 |
+
|
227 |
// Retrieve the amount we should capture
|
228 |
$amount = $this->_getWrapper()->getCaptureAmount($payment->getOrder(), $amount);
|
229 |
|
342 |
// Has the payment already been authorized?
|
343 |
if ($payment->getCcTransId()) {
|
344 |
|
345 |
+
// Convert the capture amount to the correct currency
|
346 |
+
$captureAmount = $this->_getWrapper()->getCaptureAmount($payment->getOrder(), $amount);
|
347 |
+
|
348 |
+
// Has the authorization already been settled? Partial invoicing
|
349 |
+
if($this->authorizationUsed($payment)) {
|
350 |
+
|
351 |
+
// Set the token as false
|
352 |
+
$token = false;
|
353 |
+
|
354 |
+
// Was the original payment created with a token?
|
355 |
+
if($additionalInfoToken = $payment->getAdditionalInformation('token')) {
|
356 |
|
357 |
+
try {
|
358 |
+
// Init the environment
|
359 |
+
$this->_getWrapper()->init($payment->getOrder()->getStoreId());
|
360 |
+
|
361 |
+
// Attempt to find the token
|
362 |
+
Braintree_PaymentMethod::find($additionalInfoToken);
|
363 |
+
|
364 |
+
// Set the token if a success
|
365 |
+
$token = $additionalInfoToken;
|
366 |
+
|
367 |
+
} catch (Exception $e) {
|
368 |
+
$token = false;
|
369 |
+
}
|
370 |
+
|
371 |
+
}
|
372 |
+
|
373 |
+
// If we managed to find a token use that for the capture
|
374 |
+
if($token) {
|
375 |
+
|
376 |
+
// Stop processing the rest of the method
|
377 |
+
// We pass $amount instead of $captureAmount as the authorize function contains the conversion
|
378 |
+
$this->_authorize($payment, $amount, true, $token);
|
379 |
+
return $this;
|
380 |
+
|
381 |
+
} else {
|
382 |
+
|
383 |
+
// Attempt to clone the transaction
|
384 |
+
$result = $this->_getWrapper()->init($payment->getOrder()->getStoreId())->cloneTransaction($payment->getLastTransId(), $captureAmount);
|
385 |
+
}
|
386 |
+
|
387 |
+
} else {
|
388 |
+
|
389 |
+
// Init the environment
|
390 |
+
$result = $this->_getWrapper()->init($payment->getOrder()->getStoreId())->submitForSettlement($payment->getCcTransId(), $captureAmount);
|
391 |
+
|
392 |
+
// Log the result
|
393 |
+
Gene_Braintree_Model_Debug::log(array('capture:submitForSettlement' => $result));
|
394 |
+
}
|
395 |
|
396 |
if($result->success) {
|
397 |
$this->_processSuccessResult($payment, $result, $amount);
|
398 |
} else if($result->errors->deepSize() > 0) {
|
399 |
+
Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
|
400 |
} else {
|
401 |
Mage::throwException($result->transaction->processorSettlementResponseCode.': '.$result->transaction->processorSettlementResponseText);
|
402 |
}
|
409 |
return $this;
|
410 |
}
|
411 |
|
412 |
+
/**
|
413 |
+
* If we're doing authorize, has the payment already got more than one transaction?
|
414 |
+
*
|
415 |
+
* @param \Varien_Object $payment
|
416 |
+
*
|
417 |
+
* @return int
|
418 |
+
*/
|
419 |
+
public function authorizationUsed(Varien_Object $payment)
|
420 |
+
{
|
421 |
+
$collection = Mage::getModel('sales/order_payment_transaction')
|
422 |
+
->getCollection()
|
423 |
+
->addFieldToFilter('payment_id', $payment->getId())
|
424 |
+
->addFieldToFilter('txn_type', Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE);
|
425 |
+
|
426 |
+
return $collection->getSize();
|
427 |
+
}
|
428 |
+
|
429 |
+
/**
|
430 |
+
* Void payment abstract method
|
431 |
+
*
|
432 |
+
* @param Varien_Object $payment
|
433 |
+
*
|
434 |
+
* @return Mage_Payment_Model_Abstract
|
435 |
+
*/
|
436 |
+
public function void(Varien_Object $payment)
|
437 |
+
{
|
438 |
+
try {
|
439 |
+
// Init the environment
|
440 |
+
$this->_getWrapper()->init($payment->getOrder()->getStoreId());
|
441 |
+
|
442 |
+
// Retrieve the transaction ID
|
443 |
+
$transactionId = $this->_getWrapper()->getCleanTransactionId($payment->getLastTransId());
|
444 |
+
|
445 |
+
// Load the transaction from Braintree
|
446 |
+
$transaction = Braintree_Transaction::find($transactionId);
|
447 |
+
|
448 |
+
// If the transaction hasn't yet settled we can't do partial refunds
|
449 |
+
if ($transaction->status !== Braintree_Transaction::AUTHORIZED || $transaction->status !== Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT) {
|
450 |
+
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.'));
|
451 |
+
}
|
452 |
+
|
453 |
+
// Swap between refund and void
|
454 |
+
$result = Braintree_Transaction::void($transactionId);
|
455 |
+
|
456 |
+
// If it's a success close the transaction
|
457 |
+
if ($result->success) {
|
458 |
+
$payment->setIsTransactionClosed(1);
|
459 |
+
} else {
|
460 |
+
if($result->errors->deepSize() > 0) {
|
461 |
+
Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
|
462 |
+
} else {
|
463 |
+
Mage::throwException('Unknown');
|
464 |
+
}
|
465 |
+
}
|
466 |
+
|
467 |
+
} catch (Exception $e) {
|
468 |
+
Mage::throwException($this->_getHelper()->__('An error occurred whilst trying to void the transaction: ') . $e->getMessage());
|
469 |
+
}
|
470 |
+
|
471 |
+
return $this;
|
472 |
+
}
|
473 |
+
|
474 |
/**
|
475 |
* Processes successful authorize/clone result
|
476 |
*
|
app/code/community/Gene/Braintree/Model/Paymentmethod/Paypal.php
CHANGED
@@ -32,8 +32,8 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
32 |
protected $_canAuthorize = false;
|
33 |
protected $_canCapture = true;
|
34 |
protected $_canCapturePartial = false;
|
35 |
-
protected $_canRefund =
|
36 |
-
protected $_canRefundInvoicePartial =
|
37 |
protected $_canVoid = false;
|
38 |
protected $_canUseInternal = false;
|
39 |
protected $_canUseCheckout = true;
|
@@ -73,6 +73,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
|
|
73 |
$paymentPost = Mage::app()->getRequest()->getPost('payment');
|
74 |
|
75 |
// Confirm that we have a nonce from Braintree
|
|
|
76 |
if(!isset($paymentPost['paypal_payment_method_token'])) {
|
77 |
if ((!isset($paymentPost['payment_method_nonce']) || empty($paymentPost['payment_method_nonce']))) {
|
78 |
Mage::throwException(
|
32 |
protected $_canAuthorize = false;
|
33 |
protected $_canCapture = true;
|
34 |
protected $_canCapturePartial = false;
|
35 |
+
protected $_canRefund = true;
|
36 |
+
protected $_canRefundInvoicePartial = true;
|
37 |
protected $_canVoid = false;
|
38 |
protected $_canUseInternal = false;
|
39 |
protected $_canUseCheckout = true;
|
73 |
$paymentPost = Mage::app()->getRequest()->getPost('payment');
|
74 |
|
75 |
// Confirm that we have a nonce from Braintree
|
76 |
+
// We cannot utilise the validate() function as these checks need to happen at the capture point
|
77 |
if(!isset($paymentPost['paypal_payment_method_token'])) {
|
78 |
if ((!isset($paymentPost['payment_method_nonce']) || empty($paymentPost['payment_method_nonce']))) {
|
79 |
Mage::throwException(
|
app/code/community/Gene/Braintree/Model/Wrapper/Braintree.php
CHANGED
@@ -248,6 +248,31 @@ class Gene_Braintree_Model_Wrapper_Braintree extends Mage_Core_Model_Abstract
|
|
248 |
return $this->braintreeId;
|
249 |
}
|
250 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
251 |
|
252 |
/**
|
253 |
* Validate the credentials within the admin area
|
@@ -262,10 +287,10 @@ class Gene_Braintree_Model_Wrapper_Braintree extends Mage_Core_Model_Abstract
|
|
262 |
|
263 |
// If we're within the admin we want to grab these values from whichever store we're modifying
|
264 |
if(Mage::app()->getStore()->isAdmin()) {
|
265 |
-
Braintree_Configuration::environment(
|
266 |
-
Braintree_Configuration::merchantId(
|
267 |
-
Braintree_Configuration::publicKey(
|
268 |
-
Braintree_Configuration::privateKey(
|
269 |
} else {
|
270 |
$this->init();
|
271 |
}
|
@@ -293,7 +318,7 @@ class Gene_Braintree_Model_Wrapper_Braintree extends Mage_Core_Model_Abstract
|
|
293 |
// Check to see if we've been passed the merchant account ID?
|
294 |
if(!$merchantAccountId) {
|
295 |
if(Mage::app()->getStore()->isAdmin()) {
|
296 |
-
$merchantAccountId =
|
297 |
} else {
|
298 |
$merchantAccountId = $this->getMerchantAccountId();
|
299 |
}
|
@@ -463,7 +488,7 @@ class Gene_Braintree_Model_Wrapper_Braintree extends Mage_Core_Model_Abstract
|
|
463 |
$request = array(
|
464 |
'amount' => $amount,
|
465 |
'orderId' => $order->getIncrementId(),
|
466 |
-
'merchantAccountId' => $this->getMerchantAccountId(),
|
467 |
'channel' => 'MagentoVZero',
|
468 |
'options' => array(
|
469 |
'submitForSettlement' => $submitForSettlement,
|
@@ -608,17 +633,17 @@ class Gene_Braintree_Model_Wrapper_Braintree extends Mage_Core_Model_Abstract
|
|
608 |
*
|
609 |
* @return mixed
|
610 |
*/
|
611 |
-
public function getMerchantAccountId()
|
612 |
{
|
613 |
// If multi-currency is enabled use the mapped merchant account ID
|
614 |
-
if($currencyCode = $this->hasMappedCurrencyCode()) {
|
615 |
|
616 |
// Return the mapped currency code
|
617 |
return $currencyCode;
|
618 |
}
|
619 |
|
620 |
// Otherwise return the one from the store
|
621 |
-
return Mage::getStoreConfig(self::BRAINTREE_MERCHANT_ACCOUNT_ID_PATH);
|
622 |
}
|
623 |
|
624 |
/**
|
@@ -626,18 +651,19 @@ class Gene_Braintree_Model_Wrapper_Braintree extends Mage_Core_Model_Abstract
|
|
626 |
*
|
627 |
* @return bool
|
628 |
*/
|
629 |
-
public function hasMappedCurrencyCode()
|
630 |
{
|
631 |
// If multi-currency is enabled use the mapped merchant account ID
|
632 |
-
if($this->currencyMappingEnabled()) {
|
633 |
|
634 |
// Retrieve the mapping from the config
|
635 |
-
$mapping = Mage::helper('core')->jsonDecode(Mage::getStoreConfig(self::BRAINTREE_MULTI_CURRENCY_MAPPING));
|
636 |
|
637 |
// Verify it decoded correctly
|
638 |
if(is_array($mapping) && !empty($mapping)) {
|
639 |
|
640 |
-
|
|
|
641 |
|
642 |
// Verify we have a mapping value for this currency
|
643 |
if(isset($mapping[$currency]) && !empty($mapping[$currency])) {
|
@@ -652,73 +678,78 @@ class Gene_Braintree_Model_Wrapper_Braintree extends Mage_Core_Model_Abstract
|
|
652 |
}
|
653 |
|
654 |
/**
|
655 |
-
*
|
656 |
*
|
657 |
-
* @return bool
|
658 |
*/
|
659 |
-
public function
|
660 |
{
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
// Retrieve the current from the session
|
667 |
-
return Mage::app()->getStore()->getCurrentCurrencyCode();
|
668 |
}
|
669 |
|
670 |
/**
|
671 |
-
*
|
672 |
*
|
673 |
-
* @return
|
674 |
*/
|
675 |
-
public function
|
676 |
{
|
677 |
-
return
|
678 |
-
|
679 |
-
|
|
|
|
|
|
|
680 |
}
|
681 |
|
682 |
/**
|
683 |
* If we have a mapped currency code we need to convert the currency
|
684 |
*
|
685 |
-
* @param $
|
|
|
686 |
*
|
687 |
-
* @return
|
|
|
688 |
*/
|
689 |
-
public function getCaptureAmount(Mage_Sales_Model_Order $order, $amount)
|
690 |
{
|
691 |
// If we've got a mapped currency code the amount is going to change
|
692 |
-
if($this->hasMappedCurrencyCode()) {
|
693 |
-
|
694 |
-
// Convert the current
|
695 |
-
$convertedCurrency = Mage::helper('directory')->currencyConvert($amount, $order->getBaseCurrencyCode(), $this->getCurrencyCode());
|
696 |
|
697 |
-
//
|
698 |
-
$
|
699 |
-
|
700 |
-
|
701 |
-
);
|
702 |
|
703 |
-
|
|
|
704 |
}
|
705 |
|
706 |
-
|
|
|
707 |
}
|
708 |
|
709 |
/**
|
710 |
-
*
|
711 |
*
|
712 |
-
* @return
|
|
|
713 |
*/
|
714 |
-
|
715 |
{
|
716 |
-
|
717 |
-
|
718 |
-
return $order['currency'];
|
719 |
-
}
|
720 |
|
721 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
722 |
}
|
723 |
|
724 |
/**
|
@@ -756,4 +787,51 @@ class Gene_Braintree_Model_Wrapper_Braintree extends Mage_Core_Model_Abstract
|
|
756 |
return $customer;
|
757 |
}
|
758 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
759 |
}
|
248 |
return $this->braintreeId;
|
249 |
}
|
250 |
|
251 |
+
/**
|
252 |
+
* Return the admin config value
|
253 |
+
**/
|
254 |
+
protected function getAdminConfigValue($path)
|
255 |
+
{
|
256 |
+
// If we have the getConfigDataValue use that
|
257 |
+
if(method_exists('Mage_Adminhtml_Model_Config_Data','getConfigDataValue')) {
|
258 |
+
return Mage::getSingleton('adminhtml/config_data')->getConfigDataValue($path);
|
259 |
+
}
|
260 |
+
|
261 |
+
// Otherwise use the default amazing getStoreConfig
|
262 |
+
return Mage::getStoreConfig($path);
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* If a transaction has been voided it's transaction ID can change
|
267 |
+
*
|
268 |
+
* @param $transactionId
|
269 |
+
*
|
270 |
+
* @return string
|
271 |
+
*/
|
272 |
+
public function getCleanTransactionId($transactionId)
|
273 |
+
{
|
274 |
+
return strtok($transactionId, '-');
|
275 |
+
}
|
276 |
|
277 |
/**
|
278 |
* Validate the credentials within the admin area
|
287 |
|
288 |
// If we're within the admin we want to grab these values from whichever store we're modifying
|
289 |
if(Mage::app()->getStore()->isAdmin()) {
|
290 |
+
Braintree_Configuration::environment($this->getAdminConfigValue(self::BRAINTREE_ENVIRONMENT_PATH));
|
291 |
+
Braintree_Configuration::merchantId($this->getAdminConfigValue(self::BRAINTREE_MERCHANT_ID_PATH));
|
292 |
+
Braintree_Configuration::publicKey($this->getAdminConfigValue(self::BRAINTREE_PUBLIC_KEY_PATH));
|
293 |
+
Braintree_Configuration::privateKey($this->getAdminConfigValue(self::BRAINTREE_PRIVATE_KEY_PATH));
|
294 |
} else {
|
295 |
$this->init();
|
296 |
}
|
318 |
// Check to see if we've been passed the merchant account ID?
|
319 |
if(!$merchantAccountId) {
|
320 |
if(Mage::app()->getStore()->isAdmin()) {
|
321 |
+
$merchantAccountId = $this->getAdminConfigValue(self::BRAINTREE_MERCHANT_ACCOUNT_ID_PATH);
|
322 |
} else {
|
323 |
$merchantAccountId = $this->getMerchantAccountId();
|
324 |
}
|
488 |
$request = array(
|
489 |
'amount' => $amount,
|
490 |
'orderId' => $order->getIncrementId(),
|
491 |
+
'merchantAccountId' => $this->getMerchantAccountId($order),
|
492 |
'channel' => 'MagentoVZero',
|
493 |
'options' => array(
|
494 |
'submitForSettlement' => $submitForSettlement,
|
633 |
*
|
634 |
* @return mixed
|
635 |
*/
|
636 |
+
public function getMerchantAccountId(Mage_Sales_Model_Order $order = null)
|
637 |
{
|
638 |
// If multi-currency is enabled use the mapped merchant account ID
|
639 |
+
if($currencyCode = $this->hasMappedCurrencyCode($order)) {
|
640 |
|
641 |
// Return the mapped currency code
|
642 |
return $currencyCode;
|
643 |
}
|
644 |
|
645 |
// Otherwise return the one from the store
|
646 |
+
return Mage::getStoreConfig(self::BRAINTREE_MERCHANT_ACCOUNT_ID_PATH, ($order ? $order->getStoreId() : false));
|
647 |
}
|
648 |
|
649 |
/**
|
651 |
*
|
652 |
* @return bool
|
653 |
*/
|
654 |
+
public function hasMappedCurrencyCode(Mage_Sales_Model_Order $order = null)
|
655 |
{
|
656 |
// If multi-currency is enabled use the mapped merchant account ID
|
657 |
+
if($this->currencyMappingEnabled($order)) {
|
658 |
|
659 |
// Retrieve the mapping from the config
|
660 |
+
$mapping = Mage::helper('core')->jsonDecode(Mage::getStoreConfig(self::BRAINTREE_MULTI_CURRENCY_MAPPING, ($order ? $order->getStoreId() : false)));
|
661 |
|
662 |
// Verify it decoded correctly
|
663 |
if(is_array($mapping) && !empty($mapping)) {
|
664 |
|
665 |
+
// If we haven't been given an order use the quote currency code
|
666 |
+
$currency = (!$order ? $this->getQuote()->getQuoteCurrencyCode() : $order->getOrderCurrencyCode());
|
667 |
|
668 |
// Verify we have a mapping value for this currency
|
669 |
if(isset($mapping[$currency]) && !empty($mapping[$currency])) {
|
678 |
}
|
679 |
|
680 |
/**
|
681 |
+
* Do we have currency mapping enabled?
|
682 |
*
|
683 |
+
* @return bool
|
684 |
*/
|
685 |
+
public function currencyMappingEnabled(Mage_Sales_Model_Order $order = null)
|
686 |
{
|
687 |
+
return Mage::getStoreConfigFlag(self::BRAINTREE_MULTI_CURRENCY)
|
688 |
+
&& Mage::getStoreConfig(self::BRAINTREE_MULTI_CURRENCY_MAPPING)
|
689 |
+
&& ((!$order ? $this->getQuote()->getQuoteCurrencyCode() : $order->getOrderCurrencyCode())
|
690 |
+
!= (!$order ? $this->getQuote()->getBaseCurrencyCode() : $order->getBaseCurrencyCode()));
|
|
|
|
|
|
|
691 |
}
|
692 |
|
693 |
/**
|
694 |
+
* Get the current quote
|
695 |
*
|
696 |
+
* @return \Mage_Sales_Model_Quote
|
697 |
*/
|
698 |
+
public function getQuote()
|
699 |
{
|
700 |
+
// If we're within the admin return the admin quote
|
701 |
+
if(Mage::app()->getStore()->isAdmin()) {
|
702 |
+
return Mage::getSingleton('adminhtml/session_quote')->getQuote();
|
703 |
+
}
|
704 |
+
|
705 |
+
return Mage::helper('checkout')->getQuote();
|
706 |
}
|
707 |
|
708 |
/**
|
709 |
* If we have a mapped currency code we need to convert the currency
|
710 |
*
|
711 |
+
* @param \Mage_Sales_Model_Order $order
|
712 |
+
* @param $amount
|
713 |
*
|
714 |
+
* @return string
|
715 |
+
* @throws \Zend_Currency_Exception
|
716 |
*/
|
717 |
+
public function getCaptureAmount(Mage_Sales_Model_Order $order = null, $amount)
|
718 |
{
|
719 |
// If we've got a mapped currency code the amount is going to change
|
720 |
+
if($this->hasMappedCurrencyCode($order)) {
|
|
|
|
|
|
|
721 |
|
722 |
+
// If we don't have an order yet get the quote capture amount
|
723 |
+
if($order === null) {
|
724 |
+
return $this->convertCaptureAmount($this->getQuote()->getBaseCurrencyCode(), $this->getQuote()->getQuoteCurrencyCode(), $amount);
|
725 |
+
}
|
|
|
726 |
|
727 |
+
// Convert the capture amount
|
728 |
+
return $this->convertCaptureAmount($order->getBaseCurrencyCode(), $order->getOrderCurrencyCode(), $amount);
|
729 |
}
|
730 |
|
731 |
+
// Always make sure the number has two decimal places
|
732 |
+
return Mage::helper('gene_braintree')->formatPrice($amount);
|
733 |
}
|
734 |
|
735 |
/**
|
736 |
+
* @param $amount
|
737 |
*
|
738 |
+
* @return string
|
739 |
+
* @throws \Zend_Currency_Exception
|
740 |
*/
|
741 |
+
public function convertCaptureAmount($baseCurrencyCode, $orderQuoteCurrencyCode, $amount)
|
742 |
{
|
743 |
+
// Convert the current
|
744 |
+
$convertedCurrency = Mage::helper('directory')->currencyConvert($amount, $baseCurrencyCode, $orderQuoteCurrencyCode);
|
|
|
|
|
745 |
|
746 |
+
// Format it to a precision of 2
|
747 |
+
$options = array(
|
748 |
+
'currency' => $orderQuoteCurrencyCode,
|
749 |
+
'display' => ''
|
750 |
+
);
|
751 |
+
|
752 |
+
return Mage::app()->getLocale()->currency($orderQuoteCurrencyCode)->toCurrency($convertedCurrency, $options);
|
753 |
}
|
754 |
|
755 |
/**
|
787 |
return $customer;
|
788 |
}
|
789 |
|
790 |
+
/**
|
791 |
+
* Clone a transaction
|
792 |
+
*
|
793 |
+
* @param $transactionId
|
794 |
+
* @param $amount
|
795 |
+
*
|
796 |
+
* @return bool|mixed
|
797 |
+
*/
|
798 |
+
public function cloneTransaction($transactionId, $amount, $submitForSettlement = true)
|
799 |
+
{
|
800 |
+
// Attempt to clone the transaction
|
801 |
+
try {
|
802 |
+
$result = Braintree_Transaction::cloneTransaction($transactionId, array(
|
803 |
+
'amount' => $amount,
|
804 |
+
'options' => array(
|
805 |
+
'submitForSettlement' => $submitForSettlement
|
806 |
+
)
|
807 |
+
));
|
808 |
+
|
809 |
+
return $result;
|
810 |
+
|
811 |
+
} catch (Exception $e) {
|
812 |
+
|
813 |
+
// Log the issue
|
814 |
+
Gene_Braintree_Model_Debug::log(array('cloneTransaction' => $e));
|
815 |
+
|
816 |
+
return false;
|
817 |
+
}
|
818 |
+
}
|
819 |
+
|
820 |
+
/**
|
821 |
+
* Parse Braintree errors as a string
|
822 |
+
*
|
823 |
+
* @param $braintreeErrors
|
824 |
+
*
|
825 |
+
* @return string
|
826 |
+
*/
|
827 |
+
public function parseErrors($braintreeErrors)
|
828 |
+
{
|
829 |
+
$errors = array();
|
830 |
+
foreach($braintreeErrors as $error) {
|
831 |
+
$errors[] = $error->code . ': ' . $error->message;
|
832 |
+
}
|
833 |
+
|
834 |
+
return implode(', ', $errors);
|
835 |
+
}
|
836 |
+
|
837 |
}
|
app/code/community/Gene/Braintree/controllers/CheckoutController.php
CHANGED
@@ -40,7 +40,7 @@ class Gene_Braintree_CheckoutController extends Mage_Core_Controller_Front_Actio
|
|
40 |
$jsonResponse = array(
|
41 |
'billingName' => $billingName,
|
42 |
'billingPostcode' => $billingPostcode,
|
43 |
-
'grandTotal' =>
|
44 |
'currencyCode' => $quote->getQuoteCurrencyCode(),
|
45 |
'threeDSecure' => Mage::getSingleton('gene_braintree/paymentmethod_creditcard')->is3DEnabled()
|
46 |
);
|
40 |
$jsonResponse = array(
|
41 |
'billingName' => $billingName,
|
42 |
'billingPostcode' => $billingPostcode,
|
43 |
+
'grandTotal' => Mage::helper('gene_braintree')->formatPrice($quote->getGrandTotal()),
|
44 |
'currencyCode' => $quote->getQuoteCurrencyCode(),
|
45 |
'threeDSecure' => Mage::getSingleton('gene_braintree/paymentmethod_creditcard')->is3DEnabled()
|
46 |
);
|
app/code/community/Gene/Braintree/etc/config.xml
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Gene_Braintree>
|
5 |
-
<version>1.0.
|
6 |
</Gene_Braintree>
|
7 |
</modules>
|
8 |
<global>
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Gene_Braintree>
|
5 |
+
<version>1.0.3</version>
|
6 |
</Gene_Braintree>
|
7 |
</modules>
|
8 |
<global>
|
app/design/adminhtml/default/default/template/gene/braintree/creditcard/info.phtml
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
|
2 |
<div id="braintree_creditcard_logo" style="padding-top: 5px;padding-left: 2px;">
|
3 |
-
<img src="
|
4 |
</div>
|
5 |
|
6 |
<?php if ($_specificInfo = $this->getSpecificInformation()):?>
|
@@ -14,4 +14,8 @@
|
|
14 |
</table>
|
15 |
<?php endif;?>
|
16 |
|
|
|
|
|
|
|
|
|
17 |
<?php echo $this->getChildHtml()?>
|
1 |
|
2 |
<div id="braintree_creditcard_logo" style="padding-top: 5px;padding-left: 2px;">
|
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()):?>
|
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 |
+
|
21 |
<?php echo $this->getChildHtml()?>
|
app/design/adminhtml/default/default/template/gene/braintree/paypal/info.phtml
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
|
2 |
<div id="braintree_paypal_logo" style="padding-top: 5px;padding-left: 2px;">
|
3 |
-
<img src="
|
4 |
</div>
|
5 |
|
6 |
<?php if ($_specificInfo = $this->getSpecificInformation()):?>
|
@@ -8,7 +8,7 @@
|
|
8 |
<?php foreach ($_specificInfo as $_label => $_value):?>
|
9 |
<tr>
|
10 |
<th width="180"><?php echo $this->escapeHtml($_label)?>:</td>
|
11 |
-
<td><?php echo nl2br(implode($this->getValueAsArray($_value,
|
12 |
</tr>
|
13 |
<?php endforeach; ?>
|
14 |
</table>
|
1 |
|
2 |
<div id="braintree_paypal_logo" style="padding-top: 5px;padding-left: 2px;">
|
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()):?>
|
8 |
<?php foreach ($_specificInfo as $_label => $_value):?>
|
9 |
<tr>
|
10 |
<th width="180"><?php echo $this->escapeHtml($_label)?>:</td>
|
11 |
+
<td><?php echo nl2br(implode($this->getValueAsArray($_value, false), "\n"))?></td>
|
12 |
</tr>
|
13 |
<?php endforeach; ?>
|
14 |
</table>
|
app/design/frontend/base/default/template/gene/braintree/creditcard.phtml
CHANGED
@@ -6,8 +6,8 @@ $_code = $this->getMethodCode()
|
|
6 |
|
7 |
<?php if($this->hasSavedDetails() && $this->getMethod()->isVaultEnabled()): ?>
|
8 |
|
9 |
-
<label><?php echo $this->__('Saved Cards'); ?></label
|
10 |
-
<p><?php echo $this->__('The following credit cards accounts are currently linked with your account.'); ?></p>
|
11 |
<table cellspacing="0" cellpadding="0" id="creditcard-saved-accounts">
|
12 |
<?php
|
13 |
$count = 0;
|
@@ -22,7 +22,7 @@ $_code = $this->getMethodCode()
|
|
22 |
<?php endif; ?>
|
23 |
</td>
|
24 |
<td valign="middle">
|
25 |
-
<label for="<?php echo $savedDetail->token; ?>" style="line-height: 48px;">
|
26 |
<img src="<?php echo $this->getSkinUrl('images/gene/braintree/' . $this->getCardIcon($savedDetail->cardType)) ?>" align="left" /> xxxx - xxxx - xxxx - <?php echo $savedDetail->last4; ?> <em><?php echo $this->__('Expires:'); ?></em> <?php echo $savedDetail->expirationMonth; ?>/<?php echo $savedDetail->expirationYear; ?>
|
27 |
</label>
|
28 |
</td>
|
@@ -150,7 +150,7 @@ $_code = $this->getMethodCode()
|
|
150 |
CreditCardInit = true;
|
151 |
|
152 |
// Always set the amount as it's needed within 3D secure requests
|
153 |
-
vzero.setAmount('<?php echo Mage::getSingleton('checkout/cart')->getQuote()->collectTotals()->getGrandTotal(); ?>');
|
154 |
|
155 |
// We now need to set this information into the browser
|
156 |
vzero.setBillingName("<?php echo $this->jsQuoteEscape(Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress()->getName(), '"'); ?>");
|
6 |
|
7 |
<?php if($this->hasSavedDetails() && $this->getMethod()->isVaultEnabled()): ?>
|
8 |
|
9 |
+
<label><?php echo $this->__('Saved Cards'); ?></label><br />
|
10 |
+
<p style="padding-left: 0;"><?php echo $this->__('The following credit cards accounts are currently linked with your account.'); ?></p>
|
11 |
<table cellspacing="0" cellpadding="0" id="creditcard-saved-accounts">
|
12 |
<?php
|
13 |
$count = 0;
|
22 |
<?php endif; ?>
|
23 |
</td>
|
24 |
<td valign="middle">
|
25 |
+
<label for="<?php echo $savedDetail->token; ?>" style="line-height: 48px;width: auto;">
|
26 |
<img src="<?php echo $this->getSkinUrl('images/gene/braintree/' . $this->getCardIcon($savedDetail->cardType)) ?>" align="left" /> xxxx - xxxx - xxxx - <?php echo $savedDetail->last4; ?> <em><?php echo $this->__('Expires:'); ?></em> <?php echo $savedDetail->expirationMonth; ?>/<?php echo $savedDetail->expirationYear; ?>
|
27 |
</label>
|
28 |
</td>
|
150 |
CreditCardInit = true;
|
151 |
|
152 |
// Always set the amount as it's needed within 3D secure requests
|
153 |
+
vzero.setAmount('<?php echo Mage::helper('gene_braintree')->formatPrice(Mage::getSingleton('checkout/cart')->getQuote()->collectTotals()->getGrandTotal()); ?>');
|
154 |
|
155 |
// We now need to set this information into the browser
|
156 |
vzero.setBillingName("<?php echo $this->jsQuoteEscape(Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress()->getName(), '"'); ?>");
|
app/design/frontend/base/default/template/gene/braintree/paypal.phtml
CHANGED
@@ -61,7 +61,7 @@
|
|
61 |
PayPalInit = true;
|
62 |
|
63 |
// Always set the amount as it's needed within 3D secure requests
|
64 |
-
vzeroPaypal.setPricing('<?php echo Mage::getSingleton('checkout/cart')->getQuote()->collectTotals()->getGrandTotal(); ?>', '<?php echo Mage::getSingleton('checkout/cart')->getQuote()->getQuoteCurrencyCode(); ?>');
|
65 |
}
|
66 |
|
67 |
$$('#paypal-saved-accounts input[type="radio"]').each(function(elm) {
|
61 |
PayPalInit = true;
|
62 |
|
63 |
// Always set the amount as it's needed within 3D secure requests
|
64 |
+
vzeroPaypal.setPricing('<?php echo Mage::helper('gene_braintree')->formatPrice(Mage::getSingleton('checkout/cart')->getQuote()->collectTotals()->getGrandTotal()); ?>', '<?php echo Mage::getSingleton('checkout/cart')->getQuote()->getQuoteCurrencyCode(); ?>');
|
65 |
}
|
66 |
|
67 |
$$('#paypal-saved-accounts input[type="radio"]').each(function(elm) {
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Gene_Braintree</name>
|
4 |
-
<version>1.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 @@ Easily add PayPal to your checkout. We've built the best PayPal integration arou
|
|
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>magento@gene.co.uk</email></author></authors>
|
39 |
-
<date>2015-
|
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="eaaf6c74be4233a315d5aa5932f7c9ca"/><file name="Currency.php" hash="9ffa8a2ded53be75e88a60a024883b07"/><file name="Moduleversion.php" hash="fe3836bde24bb31c4c4585f2cd2f20ed"/><file name="Version.php" hash="ce58278a4faf965301cc2d8b2da4483c"/></dir></dir></dir></dir><dir name="Cart"><file name="Totals.php" hash="a03c441e8143896f92d02931a809f666"/></dir><dir name="Creditcard"><file name="Info.php" hash="adb06dab5fb625e4bf71e8cd62230f9c"/><file name="Threedsecure.php" hash="7848d4ecac743be985f328fa969318bf"/></dir><file name="Creditcard.php" hash="989678324ff3fcddcc99cbe4613019fa"/><file name="Js.php" hash="50cdd6d01eddfbdcc0061f4369cbeb58"/><dir name="Paypal"><file name="Info.php" hash="a0206fad8b91aa382c3ac16b9651c723"/></dir><file name="Paypal.php" hash="36294a461378cceee66e99d45753c6e1"/><file name="Saved.php" hash="74ed8e70a404a814b94f21f88c1ca737"/></dir><dir name="Helper"><file name="Data.php" hash="a5b64dd6760e881b1823adfaeb7c1501"/></dir><dir name="Model"><file name="Debug.php" hash="f3360f71e2346881f93424792ed9f209"/><file name="Observer.php" hash="176b48ac3b74bfaa3c28f4126093b49b"/><dir name="Paymentmethod"><file name="Abstract.php" hash="cebdcee57db8ed28760313b6078348c3"/><file name="Creditcard.php" hash="4c1256ff5aef5c958a5059e3a3d3a1b3"/><file name="Paypal.php" hash="f7802643b422628d09ae2b5ae03163fb"/></dir><file name="Saved.php" hash="3b235b454a3692d1c3d5343e2a1c91e9"/><dir name="Source"><file name="Cctype.php" hash="d76aa6c3a4bd798e3a47695f579d21d4"/><dir name="Creditcard"><file name="CaptureAction.php" hash="6444cfc430de44f06e85bd9c8b80d77b"/><file name="PaymentAction.php" hash="a2f3f3d36a98df4d12f76b6ab77f9c47"/></dir><file name="Environment.php" hash="02567d2ddba74d06ac000b4ddb12723a"/><dir name="Paypal"><file name="Locale.php" hash="8988ca77f9c2aa2d19ff0b614a4b7621"/><file name="Paymenttype.php" hash="fe1fe4ee89d5b7a87c7c28716bb2f1cb"/></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="203dbffc8be8e9827f92c971bdb15337"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="BraintreeController.php" hash="7c621fa1548c04e24bb1136bcbbe1d72"/></dir><file name="CheckoutController.php" hash="6c97fd8d9894cebcd1f5d839c0901dd5"/><file name="SavedController.php" hash="036e97703c853a5bae064dd7cf5030a8"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c9c940beffa0ec19e4a1499a66f7fd12"/><file name="config.xml" hash="0394250964f9b7207d4e2d4f2c5e99d7"/><file name="system.xml" hash="01fc95e2c590d2fad81b007e361cfa63"/></dir><dir name="sql"><dir name="gene_braintree_setup"><file name="install-0.1.0.php" hash="7ef62b7c19b9da5990974da6edb3e77c"/></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="1ded19331e4656bd31d052eb729ff7c2"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="info.phtml" hash="2ae1e397b3a633dd305bc26c7b9c1065"/><file name="threedsecure.phtml" hash="ee8ad689afde041c39dd92ffa5274883"/></dir><file name="creditcard.phtml" hash="1d1795c1d29b37ac9cf090ad76f22bb5"/><dir name="customer"><file name="methods.phtml" hash="eb5e2d8f4a0f419fcf720c12062f808a"/><file name="saved.phtml" hash="691162b89ed085599f76072226ca2307"/></dir><dir name="js"><file name="amasty.phtml" hash="2f0601e50fc2fcf0ffe03a013737186c"/><file name="data.phtml" hash="7c77e2c13c9037ab993b7c7f8aa72d98"/><file name="default.phtml" hash="4fde57aa847f06bc02feaaf9097b1f57"/><file name="idev.phtml" hash="5fd739089dbe0191c1f44640f7ef2f76"/><file name="setup.phtml" hash="86a6da43f073b5fc75ce170a50af3bcd"/></dir><dir name="paypal"><file name="info.phtml" hash="5149b273730121e4dec3c3179820f747"/></dir><file name="paypal.phtml" hash="3c579ad7ba3290c15fcce027cdd66d16"/></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="1995e85eb47b909120ce8b9b537bf5db"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="info.phtml" hash="3c5f033eb99ab8d78517ae5eb45a3a1a"/></dir><file name="creditcard.phtml" hash="0c6b7806732c336ead14fab596f1b923"/><file name="js.phtml" hash="0a66005bfd1452be665299b11b6fbf8b"/><dir name="paypal"><file name="info.phtml" hash="53fae03530369f101f5eaed49508a1ee"/></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.js" hash="4a074b2952d6e3c0052f85442b284abc"/><file name="vzero.js" hash="0ea7d83df34c94eae8fa9d1c112d6824"/></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=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir></dir></dir></dir></dir></dir></target><target name="magelib"><dir name="Braintree"><file name="AddOn.php" hash="07bc690cf426276dfdd802c49cfd72a3"/><file name="AddOnGateway.php" hash="ed9a94155c1c13ba37910fd48bdad40a"/><file name="Address.php" hash="1d4e7f964ed208a381b352d21fc370b8"/><file name="AddressGateway.php" hash="11716dc4ede8b7455197d08b88c91568"/><file name="ApplePayCard.php" hash="6fdbe99722514408f613c417e0e48711"/><file name="ClientToken.php" hash="f606f4bbafaea470333290be52b0030d"/><file name="ClientTokenGateway.php" hash="ede93fa63f0e96d296f315180f5ff1ad"/><file name="CoinbaseAccount.php" hash="7a4992ed13c26ad3785cf7d3455ef5fb"/><file name="Collection.php" hash="0e7d31ffcbd9780fb554186bd2c194b0"/><file name="Configuration.php" hash="6414dae20a80d926c28bd681bb535934"/><file name="CreditCard.php" hash="cf0aab2bcdcc7c231ccedc05a0f853e4"/><file name="CreditCardGateway.php" hash="3c5c3d9cee27da71e338b51d42b685ee"/><file name="CreditCardVerification.php" hash="48d6ea546914278f4bea2fefb75e7836"/><file name="CreditCardVerificationGateway.php" hash="e020dd1c26cd8c3bd7eb55eed2f72346"/><file name="CreditCardVerificationSearch.php" hash="baa6ed22471ea1f142a4195d1e36f89a"/><file name="Customer.php" hash="69d834344b93277dbeadb4ee6a881a60"/><file name="CustomerGateway.php" hash="bde59d4c6d7418fcbd87d4484384705b"/><file name="CustomerSearch.php" hash="8aacc83dac341cd9afec5a3deab17593"/><file name="Descriptor.php" hash="3f5db5e817280ce7f2fa18a205281ad9"/><file name="Digest.php" hash="9d12d067770f55b123b8498fce4478fa"/><file name="Disbursement.php" hash="589534043e466d17fede916fd7986edc"/><file name="DisbursementDetails.php" hash="ae632207d0982e288a83aed401c880d9"/><file name="Discount.php" hash="763b3f9cde0ff3af3e8795cac4097595"/><file name="DiscountGateway.php" hash="42ca6f2f11074ec18eecd1506996a393"/><dir name="Dispute"><file name="TransactionDetails.php" hash="7fdea673a1295055508f42286ad57f4e"/></dir><file name="Dispute.php" hash="2ee0f4a77b7cfec4763b55627a57e348"/><file name="EqualityNode.php" hash="cfd6aa184186233b8d6d1ec0f0e79298"/><dir name="Error"><file name="Codes.php" hash="d0d1007255af20889a4874d028ebeab2"/><file name="ErrorCollection.php" hash="e28d638db56524f5bf3609fa725e6d55"/><file name="Validation.php" hash="bf4e2198300019c52ba56f16269d66ce"/><file name="ValidationErrorCollection.php" hash="9ef25d0126a0b4f6951da5334ae6f0dc"/></dir><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="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="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="8b214a63ed50539e75031caff78d4560"/><file name="Http.php" hash="5f6a9990a14684c82b6952937889412b"/><file name="Instance.php" hash="f0603b3f9213b53687e079c5621ac8f3"/><file name="IsNode.php" hash="e4b1f7bbfcbd24b1d08b97f94df592be"/><file name="KeyValueNode.php" hash="255595ec01a16906dd0c49faf67d9efb"/><dir name="MerchantAccount"><file name="AddressDetails.php" hash="1d265d864a884ebcf2504f55207cc0dd"/><file name="BusinessDetails.php" hash="c9ae627c4a4b526c2ecb0c07d70b3017"/><file name="FundingDetails.php" hash="7368f653fcbcc3d87924447b1763e616"/><file name="IndividualDetails.php" hash="68daf00759335cde82f176f0844e0d9b"/></dir><file name="MerchantAccount.php" hash="489844cfd91dcc6a53024af97b85f3c7"/><file name="MerchantAccountGateway.php" hash="6a9033758b8c02501fd835a96fc385b7"/><file name="Modification.php" hash="fcce6784af2e658affe4a67ca75d8230"/><file name="MultipleValueNode.php" hash="92700fa03011eaa9561010b3a160449c"/><file name="MultipleValueOrTextNode.php" hash="ef06bac18e2bc40974bdc0bcb854890f"/><file name="PartialMatchNode.php" hash="370c7e0ab8a445cfeef6b19ef1755f4d"/><file name="PartnerMerchant.php" hash="20c87322d040eac1abcdf12b8838ec1c"/><file name="PayPalAccount.php" hash="1bbe86a33bbf3e3620364ba0c2e9b6fe"/><file name="PayPalAccountGateway.php" hash="bdf94548085765927368c49bcf028f47"/><file name="PaymentInstrumentType.php" hash="84e2d2fcfe45cf7cf188dc46f302fac8"/><file name="PaymentMethod.php" hash="8aca88278367fcbd5404a0abae848a45"/><file name="PaymentMethodGateway.php" hash="ed81d66dcb097021c4f6518b9ea5e5cf"/><file name="PaymentMethodNonce.php" hash="a72e8ed6506327cdac92d8b082e4dd74"/><file name="PaymentMethodNonceGateway.php" hash="e8ee61d15b73bd2ef9efef8a6b5f4132"/><file name="Plan.php" hash="f73f24fcc57cfeb2e6f0e6312e531073"/><file name="PlanGateway.php" hash="8392fc6b714b30d16fe0308a1e81db4f"/><file name="RangeNode.php" hash="4ad9a92547423b3d54d69097114c3daf"/><file name="ResourceCollection.php" hash="8f437cb5014148c0e2f6049347ae795c"/><dir name="Result"><file name="CreditCardVerification.php" hash="27b965f1e197b0392879e24cccf6dd9c"/><file name="Error.php" hash="81b616e25f182c0c571ad4e9e6fbc611"/><file name="Successful.php" hash="56c6f9a3e5996d18e01a8d382cc03cde"/></dir><file name="RiskData.php" hash="dd74658f351fe8af26cee3016a076fb9"/><file name="SettlementBatchSummary.php" hash="0dcc2b5dd7071d9037cf5970fafe8668"/><file name="SettlementBatchSummaryGateway.php" hash="4ec1a7a1c8875693123430aa51410b22"/><file name="SignatureService.php" hash="4b78d3e5897e715dcc877c5f65b3cfae"/><dir name="Subscription"><file name="StatusDetails.php" hash="29e375f02150bfd7147591f0eb27cb4f"/></dir><file name="Subscription.php" hash="96db82b5b67a72d4287d79b7c691b3d7"/><file name="SubscriptionGateway.php" hash="34118ee95b83d8904a47b388cbb8cfea"/><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="89bb29ef4552037973fe04d344f657ef"/><file name="TransactionAmounts.php" hash="ed9bf1f57d871542c32d11de9e031f05"/><file name="VenmoSdk.php" hash="6ce94deccd1f968596011487c7e69cc7"/></dir><file name="TextNode.php" hash="94c95ec9645de57acace2179fef7fb43"/><dir name="Transaction"><file name="AddressDetails.php" hash="ff52a4a48248085b7ea92e992160e413"/><file name="ApplePayCardDetails.php" hash="c4dd87cd46fe7269e1bd51c867adf7cb"/><file name="CoinbaseDetails.php" hash="d19a625f8de98698b8277c25660358f0"/><file name="CreditCardDetails.php" hash="aac5eb1f5804d4f979b9c71f7b98cb36"/><file name="CustomerDetails.php" hash="e137895c646127312be44292c84a2d81"/><file name="PayPalDetails.php" hash="ede299e376bce7714838d79ca3d40842"/><file name="StatusDetails.php" hash="7c6e719c51bf13bdfd07615030100ac6"/><file name="SubscriptionDetails.php" hash="1cf1f511d1545a2e27b8d3f4bee800ca"/></dir><file name="Transaction.php" hash="9970a0fa9d6af3e543703426da99a3c4"/><file name="TransactionGateway.php" hash="37500b8a181a18375c171d4a5a4938c6"/><file name="TransactionSearch.php" hash="41dd086066fa57582161032249b3d8ee"/><file name="TransparentRedirect.php" hash="154c9850be5175a5cd1b35bdf78ae939"/><file name="TransparentRedirectGateway.php" hash="89f002df5a2abafcaa9676a3e2935c75"/><file name="UnknownPaymentMethod.php" hash="811394ea4bee98a651dc5e1cba8223da"/><file name="Util.php" hash="2cf47c3acd49da4a6c2b0a9a55701d7b"/><file name="Version.php" hash="1ebf13fcec95da846f917f74e030714b"/><file name="WebhookNotification.php" hash="f58be59156e5728f491da4235a58e994"/><file name="WebhookTesting.php" hash="c40311458bb64e37b4c08eb88df37805"/><dir name="Xml"><file name="Generator.php" hash="f82af40e5759c3d46909f3dec2498d02"/><file name="Parser.php" hash="4e6df3327a04915715333460733df93c"/></dir><file name="Xml.php" hash="dc69e05bea21e3d1185d45d53e4747db"/></dir><dir name="."><file name="Braintree.php" hash="ee3e665877882e5b5076ff51dc8111bd"/></dir><dir name="ssl"><file name="api_braintreegateway_com.ca.crt" hash="04beb23c767547e980c76eb68c7eab15"/><file name="sandbox_braintreegateway_com.ca.crt" hash="f1b529883c7c2cbb4251658f5da7b4c9"/></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Gene_Braintree.csv" hash="00ae6dc359bc0d9c48bfc90a865232a3"/></dir></dir></target></contents>
|
42 |
<compatible/>
|
43 |
<dependencies><required><php><min>5.2.1</min><max>6.0.0</max></php><package><name/><channel>connect.magentocommerce.com/core</channel><min/><max/></package></required></dependencies>
|
44 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Gene_Braintree</name>
|
4 |
+
<version>1.0.3</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>magento@gene.co.uk</email></author></authors>
|
39 |
+
<date>2015-06-08</date>
|
40 |
+
<time>13:19:19</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="eaaf6c74be4233a315d5aa5932f7c9ca"/><file name="Currency.php" hash="9ffa8a2ded53be75e88a60a024883b07"/><file name="Moduleversion.php" hash="fe3836bde24bb31c4c4585f2cd2f20ed"/><file name="Version.php" hash="ce58278a4faf965301cc2d8b2da4483c"/></dir></dir></dir></dir><dir name="Cart"><file name="Totals.php" hash="a03c441e8143896f92d02931a809f666"/></dir><dir name="Creditcard"><file name="Info.php" hash="8050c4c5321535fe93e62b47eab97b82"/><file name="Threedsecure.php" hash="7848d4ecac743be985f328fa969318bf"/></dir><file name="Creditcard.php" hash="989678324ff3fcddcc99cbe4613019fa"/><file name="Info.php" hash="2a8367489959ba9c1de4fe4c9afa62e4"/><file name="Js.php" hash="50cdd6d01eddfbdcc0061f4369cbeb58"/><dir name="Paypal"><file name="Info.php" hash="0874c0839a27c14ec9be47fed152e880"/></dir><file name="Paypal.php" hash="36294a461378cceee66e99d45753c6e1"/><file name="Saved.php" hash="74ed8e70a404a814b94f21f88c1ca737"/></dir><dir name="Helper"><file name="Data.php" hash="7ab1dba0f90dc067f0293e3f34bdf387"/></dir><dir name="Model"><file name="Debug.php" hash="f3360f71e2346881f93424792ed9f209"/><file name="Observer.php" hash="176b48ac3b74bfaa3c28f4126093b49b"/><dir name="Paymentmethod"><file name="Abstract.php" hash="f6f818eb5720ceee4e43cff281209a88"/><file name="Creditcard.php" hash="c0c1307ada89f675ff97b96412205615"/><file name="Paypal.php" hash="6523279bdc21c8b047d85b99d251a26a"/></dir><file name="Saved.php" hash="3b235b454a3692d1c3d5343e2a1c91e9"/><dir name="Source"><file name="Cctype.php" hash="d76aa6c3a4bd798e3a47695f579d21d4"/><dir name="Creditcard"><file name="CaptureAction.php" hash="6444cfc430de44f06e85bd9c8b80d77b"/><file name="PaymentAction.php" hash="a2f3f3d36a98df4d12f76b6ab77f9c47"/></dir><file name="Environment.php" hash="02567d2ddba74d06ac000b4ddb12723a"/><dir name="Paypal"><file name="Locale.php" hash="8988ca77f9c2aa2d19ff0b614a4b7621"/><file name="Paymenttype.php" hash="fe1fe4ee89d5b7a87c7c28716bb2f1cb"/></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="3b59754d575df9960ad973102bd038e2"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="BraintreeController.php" hash="7c621fa1548c04e24bb1136bcbbe1d72"/></dir><file name="CheckoutController.php" hash="19551187f161f5df4e49a9a009c0adaf"/><file name="SavedController.php" hash="036e97703c853a5bae064dd7cf5030a8"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c9c940beffa0ec19e4a1499a66f7fd12"/><file name="config.xml" hash="9527dee069d34f723f74ac97e658a626"/><file name="system.xml" hash="01fc95e2c590d2fad81b007e361cfa63"/></dir><dir name="sql"><dir name="gene_braintree_setup"><file name="install-0.1.0.php" hash="7ef62b7c19b9da5990974da6edb3e77c"/></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="1ded19331e4656bd31d052eb729ff7c2"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="info.phtml" hash="2ae1e397b3a633dd305bc26c7b9c1065"/><file name="threedsecure.phtml" hash="ee8ad689afde041c39dd92ffa5274883"/></dir><file name="creditcard.phtml" hash="e741bce943fe9dbed1b4170ead312ed8"/><dir name="customer"><file name="methods.phtml" hash="eb5e2d8f4a0f419fcf720c12062f808a"/><file name="saved.phtml" hash="691162b89ed085599f76072226ca2307"/></dir><dir name="js"><file name="amasty.phtml" hash="2f0601e50fc2fcf0ffe03a013737186c"/><file name="data.phtml" hash="7c77e2c13c9037ab993b7c7f8aa72d98"/><file name="default.phtml" hash="4fde57aa847f06bc02feaaf9097b1f57"/><file name="idev.phtml" hash="5fd739089dbe0191c1f44640f7ef2f76"/><file name="setup.phtml" hash="86a6da43f073b5fc75ce170a50af3bcd"/></dir><dir name="paypal"><file name="info.phtml" hash="5149b273730121e4dec3c3179820f747"/></dir><file name="paypal.phtml" hash="4280fcf89509eb959171f2214779de35"/></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="1995e85eb47b909120ce8b9b537bf5db"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="info.phtml" hash="24c67bab482ea7383ce57d9a06bb9d6f"/></dir><file name="creditcard.phtml" hash="0c6b7806732c336ead14fab596f1b923"/><file name="js.phtml" hash="0a66005bfd1452be665299b11b6fbf8b"/><dir name="paypal"><file name="info.phtml" hash="a8f92f312f8aa5a9463f1d5c2a38cd1b"/></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.js" hash="4a074b2952d6e3c0052f85442b284abc"/><file name="vzero.js" hash="0ea7d83df34c94eae8fa9d1c112d6824"/></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=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir></dir></dir></dir></dir></dir></target><target name="magelib"><dir name="Braintree"><file name="AddOn.php" hash="07bc690cf426276dfdd802c49cfd72a3"/><file name="AddOnGateway.php" hash="ed9a94155c1c13ba37910fd48bdad40a"/><file name="Address.php" hash="1d4e7f964ed208a381b352d21fc370b8"/><file name="AddressGateway.php" hash="11716dc4ede8b7455197d08b88c91568"/><file name="ApplePayCard.php" hash="6fdbe99722514408f613c417e0e48711"/><file name="ClientToken.php" hash="f606f4bbafaea470333290be52b0030d"/><file name="ClientTokenGateway.php" hash="ede93fa63f0e96d296f315180f5ff1ad"/><file name="CoinbaseAccount.php" hash="7a4992ed13c26ad3785cf7d3455ef5fb"/><file name="Collection.php" hash="0e7d31ffcbd9780fb554186bd2c194b0"/><file name="Configuration.php" hash="6414dae20a80d926c28bd681bb535934"/><file name="CreditCard.php" hash="cf0aab2bcdcc7c231ccedc05a0f853e4"/><file name="CreditCardGateway.php" hash="3c5c3d9cee27da71e338b51d42b685ee"/><file name="CreditCardVerification.php" hash="48d6ea546914278f4bea2fefb75e7836"/><file name="CreditCardVerificationGateway.php" hash="e020dd1c26cd8c3bd7eb55eed2f72346"/><file name="CreditCardVerificationSearch.php" hash="baa6ed22471ea1f142a4195d1e36f89a"/><file name="Customer.php" hash="69d834344b93277dbeadb4ee6a881a60"/><file name="CustomerGateway.php" hash="bde59d4c6d7418fcbd87d4484384705b"/><file name="CustomerSearch.php" hash="8aacc83dac341cd9afec5a3deab17593"/><file name="Descriptor.php" hash="3f5db5e817280ce7f2fa18a205281ad9"/><file name="Digest.php" hash="9d12d067770f55b123b8498fce4478fa"/><file name="Disbursement.php" hash="589534043e466d17fede916fd7986edc"/><file name="DisbursementDetails.php" hash="ae632207d0982e288a83aed401c880d9"/><file name="Discount.php" hash="763b3f9cde0ff3af3e8795cac4097595"/><file name="DiscountGateway.php" hash="42ca6f2f11074ec18eecd1506996a393"/><dir name="Dispute"><file name="TransactionDetails.php" hash="7fdea673a1295055508f42286ad57f4e"/></dir><file name="Dispute.php" hash="2ee0f4a77b7cfec4763b55627a57e348"/><file name="EqualityNode.php" hash="cfd6aa184186233b8d6d1ec0f0e79298"/><dir name="Error"><file name="Codes.php" hash="d0d1007255af20889a4874d028ebeab2"/><file name="ErrorCollection.php" hash="e28d638db56524f5bf3609fa725e6d55"/><file name="Validation.php" hash="bf4e2198300019c52ba56f16269d66ce"/><file name="ValidationErrorCollection.php" hash="9ef25d0126a0b4f6951da5334ae6f0dc"/></dir><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="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="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="8b214a63ed50539e75031caff78d4560"/><file name="Http.php" hash="5f6a9990a14684c82b6952937889412b"/><file name="Instance.php" hash="f0603b3f9213b53687e079c5621ac8f3"/><file name="IsNode.php" hash="e4b1f7bbfcbd24b1d08b97f94df592be"/><file name="KeyValueNode.php" hash="255595ec01a16906dd0c49faf67d9efb"/><dir name="MerchantAccount"><file name="AddressDetails.php" hash="1d265d864a884ebcf2504f55207cc0dd"/><file name="BusinessDetails.php" hash="c9ae627c4a4b526c2ecb0c07d70b3017"/><file name="FundingDetails.php" hash="7368f653fcbcc3d87924447b1763e616"/><file name="IndividualDetails.php" hash="68daf00759335cde82f176f0844e0d9b"/></dir><file name="MerchantAccount.php" hash="489844cfd91dcc6a53024af97b85f3c7"/><file name="MerchantAccountGateway.php" hash="6a9033758b8c02501fd835a96fc385b7"/><file name="Modification.php" hash="fcce6784af2e658affe4a67ca75d8230"/><file name="MultipleValueNode.php" hash="92700fa03011eaa9561010b3a160449c"/><file name="MultipleValueOrTextNode.php" hash="ef06bac18e2bc40974bdc0bcb854890f"/><file name="PartialMatchNode.php" hash="370c7e0ab8a445cfeef6b19ef1755f4d"/><file name="PartnerMerchant.php" hash="20c87322d040eac1abcdf12b8838ec1c"/><file name="PayPalAccount.php" hash="1bbe86a33bbf3e3620364ba0c2e9b6fe"/><file name="PayPalAccountGateway.php" hash="bdf94548085765927368c49bcf028f47"/><file name="PaymentInstrumentType.php" hash="84e2d2fcfe45cf7cf188dc46f302fac8"/><file name="PaymentMethod.php" hash="8aca88278367fcbd5404a0abae848a45"/><file name="PaymentMethodGateway.php" hash="ed81d66dcb097021c4f6518b9ea5e5cf"/><file name="PaymentMethodNonce.php" hash="a72e8ed6506327cdac92d8b082e4dd74"/><file name="PaymentMethodNonceGateway.php" hash="e8ee61d15b73bd2ef9efef8a6b5f4132"/><file name="Plan.php" hash="f73f24fcc57cfeb2e6f0e6312e531073"/><file name="PlanGateway.php" hash="8392fc6b714b30d16fe0308a1e81db4f"/><file name="RangeNode.php" hash="4ad9a92547423b3d54d69097114c3daf"/><file name="ResourceCollection.php" hash="8f437cb5014148c0e2f6049347ae795c"/><dir name="Result"><file name="CreditCardVerification.php" hash="27b965f1e197b0392879e24cccf6dd9c"/><file name="Error.php" hash="81b616e25f182c0c571ad4e9e6fbc611"/><file name="Successful.php" hash="56c6f9a3e5996d18e01a8d382cc03cde"/></dir><file name="RiskData.php" hash="dd74658f351fe8af26cee3016a076fb9"/><file name="SettlementBatchSummary.php" hash="0dcc2b5dd7071d9037cf5970fafe8668"/><file name="SettlementBatchSummaryGateway.php" hash="4ec1a7a1c8875693123430aa51410b22"/><file name="SignatureService.php" hash="4b78d3e5897e715dcc877c5f65b3cfae"/><dir name="Subscription"><file name="StatusDetails.php" hash="29e375f02150bfd7147591f0eb27cb4f"/></dir><file name="Subscription.php" hash="96db82b5b67a72d4287d79b7c691b3d7"/><file name="SubscriptionGateway.php" hash="34118ee95b83d8904a47b388cbb8cfea"/><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="89bb29ef4552037973fe04d344f657ef"/><file name="TransactionAmounts.php" hash="ed9bf1f57d871542c32d11de9e031f05"/><file name="VenmoSdk.php" hash="6ce94deccd1f968596011487c7e69cc7"/></dir><file name="TextNode.php" hash="94c95ec9645de57acace2179fef7fb43"/><dir name="Transaction"><file name="AddressDetails.php" hash="ff52a4a48248085b7ea92e992160e413"/><file name="ApplePayCardDetails.php" hash="c4dd87cd46fe7269e1bd51c867adf7cb"/><file name="CoinbaseDetails.php" hash="d19a625f8de98698b8277c25660358f0"/><file name="CreditCardDetails.php" hash="aac5eb1f5804d4f979b9c71f7b98cb36"/><file name="CustomerDetails.php" hash="e137895c646127312be44292c84a2d81"/><file name="PayPalDetails.php" hash="ede299e376bce7714838d79ca3d40842"/><file name="StatusDetails.php" hash="7c6e719c51bf13bdfd07615030100ac6"/><file name="SubscriptionDetails.php" hash="1cf1f511d1545a2e27b8d3f4bee800ca"/></dir><file name="Transaction.php" hash="9970a0fa9d6af3e543703426da99a3c4"/><file name="TransactionGateway.php" hash="37500b8a181a18375c171d4a5a4938c6"/><file name="TransactionSearch.php" hash="41dd086066fa57582161032249b3d8ee"/><file name="TransparentRedirect.php" hash="154c9850be5175a5cd1b35bdf78ae939"/><file name="TransparentRedirectGateway.php" hash="89f002df5a2abafcaa9676a3e2935c75"/><file name="UnknownPaymentMethod.php" hash="811394ea4bee98a651dc5e1cba8223da"/><file name="Util.php" hash="2cf47c3acd49da4a6c2b0a9a55701d7b"/><file name="Version.php" hash="1ebf13fcec95da846f917f74e030714b"/><file name="WebhookNotification.php" hash="f58be59156e5728f491da4235a58e994"/><file name="WebhookTesting.php" hash="c40311458bb64e37b4c08eb88df37805"/><dir name="Xml"><file name="Generator.php" hash="f82af40e5759c3d46909f3dec2498d02"/><file name="Parser.php" hash="4e6df3327a04915715333460733df93c"/></dir><file name="Xml.php" hash="dc69e05bea21e3d1185d45d53e4747db"/></dir><dir name="."><file name="Braintree.php" hash="ee3e665877882e5b5076ff51dc8111bd"/></dir><dir name="ssl"><file name="api_braintreegateway_com.ca.crt" hash="04beb23c767547e980c76eb68c7eab15"/><file name="sandbox_braintreegateway_com.ca.crt" hash="f1b529883c7c2cbb4251658f5da7b4c9"/></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Gene_Braintree.csv" hash="00ae6dc359bc0d9c48bfc90a865232a3"/></dir></dir></target></contents>
|
42 |
<compatible/>
|
43 |
<dependencies><required><php><min>5.2.1</min><max>6.0.0</max></php><package><name/><channel>connect.magentocommerce.com/core</channel><min/><max/></package></required></dependencies>
|
44 |
</package>
|