Sttl_Authorize - Version 1.0.1

Version Notes

Store Customer information on Authorize.net Secure Servers. The method is PCI compliant.

Download this release

Release Info

Developer Silvertouch
Extension Sttl_Authorize
Version 1.0.1
Comparing to
See all releases


Version 1.0.1

Files changed (23) hide show
  1. SILVER_AuthorizeCIM-User_Guide-V.1.0.1.doc +0 -0
  2. app/code/local/Sttl/Authorizecim/Block/Form/Cim.php +176 -0
  3. app/code/local/Sttl/Authorizecim/Block/Info/Cim.php +49 -0
  4. app/code/local/Sttl/Authorizecim/Helper/Data.php +24 -0
  5. app/code/local/Sttl/Authorizecim/Model/Api.php +908 -0
  6. app/code/local/Sttl/Authorizecim/Model/Mysql4/Transaction.php +28 -0
  7. app/code/local/Sttl/Authorizecim/Model/Mysql4/Transaction/Collection.php +29 -0
  8. app/code/local/Sttl/Authorizecim/Model/Payment.php +683 -0
  9. app/code/local/Sttl/Authorizecim/Model/System/Config/Backend/Encrypted.php +58 -0
  10. app/code/local/Sttl/Authorizecim/Model/System/Config/Source/Cctype.php +24 -0
  11. app/code/local/Sttl/Authorizecim/Model/System/Config/Source/Method.php +47 -0
  12. app/code/local/Sttl/Authorizecim/Model/System/Config/Source/PaymentAction.php +33 -0
  13. app/code/local/Sttl/Authorizecim/Model/System/Config/Source/Yesno.php +33 -0
  14. app/code/local/Sttl/Authorizecim/Model/Transaction.php +29 -0
  15. app/code/local/Sttl/Authorizecim/etc/config.xml +119 -0
  16. app/code/local/Sttl/Authorizecim/etc/system.xml +193 -0
  17. app/code/local/Sttl/Authorizecim/sql/authorizecim_setup/mysql4-install-1.0.0.php +37 -0
  18. app/code/local/Sttl/Authorizecim/sql/authorizecim_setup/mysql4-upgrade-1.0.0-1.0.1.php +24 -0
  19. app/design/adminhtml/default/default/template/authorizecim/form/cim.phtml +117 -0
  20. app/design/adminhtml/default/default/template/authorizecim/form/cim_1.phtml +163 -0
  21. app/design/frontend/base/default/template/authorizecim/form/cim.phtml +169 -0
  22. app/etc/modules/Sttl_Authorizecim.xml +28 -0
  23. package.xml +24 -0
SILVER_AuthorizeCIM-User_Guide-V.1.0.1.doc ADDED
Binary file
app/code/local/Sttl/Authorizecim/Block/Form/Cim.php ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Silver Touch Technologies Limited.
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
12
+ *
13
+ * @category Sttl
14
+ * @package Sttl_Authorizecim
15
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
16
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
17
+ */
18
+ class Sttl_Authorizecim_Block_Form_Cim extends Mage_Payment_Block_Form {
19
+
20
+ protected function _construct() {
21
+ parent::_construct();
22
+ $this->setTemplate('authorizecim/form/cim.phtml');
23
+ }
24
+
25
+ /**
26
+ * Retrieve payment configuration object
27
+ *
28
+ * @return Mage_Payment_Model_Config
29
+ */
30
+ protected function _getConfig() {
31
+ return Mage::getSingleton('payment/config');
32
+ }
33
+
34
+ /**
35
+ * Retrieve availables credit card types
36
+ *
37
+ * @return array
38
+ */
39
+ public function getCcAvailableTypes() {
40
+ $types = $this->_getConfig()->getCcTypes();
41
+ if ($method = $this->getMethod()) {
42
+ $availableTypes = $method->getConfigData('cctypes');
43
+ if ($availableTypes) {
44
+ $availableTypes = explode(',', $availableTypes);
45
+ foreach ($types as $code => $name) {
46
+ if (!in_array($code, $availableTypes)) {
47
+ unset($types[$code]);
48
+ }
49
+ }
50
+ }
51
+ }
52
+ return $types;
53
+ }
54
+
55
+ /**
56
+ * Retrieve credit card expire months
57
+ *
58
+ * @return array
59
+ */
60
+ public function getCcMonths() {
61
+ $months = $this->getData('cc_months');
62
+ if (is_null($months)) {
63
+ $months[0] = $this->__('Month');
64
+ $months = array_merge($months, $this->_getConfig()->getMonths());
65
+ $this->setData('cc_months', $months);
66
+ }
67
+ return $months;
68
+ }
69
+
70
+ /**
71
+ * Retrieve credit card expire years
72
+ *
73
+ * @return array
74
+ */
75
+ public function getCcYears() {
76
+ $years = $this->getData('cc_years');
77
+ if (is_null($years)) {
78
+ $years = $this->_getConfig()->getYears();
79
+ $years = array(0 => $this->__('Year')) + $years;
80
+ $this->setData('cc_years', $years);
81
+ }
82
+ return $years;
83
+ }
84
+
85
+ /**
86
+ * Retrive has verification configuration
87
+ *
88
+ * @return boolean
89
+ */
90
+ public function hasVerification() {
91
+ if ($this->getMethod()) {
92
+ $configData = $this->getMethod()->getConfigData('useccv');
93
+ if (is_null($configData)) {
94
+ return false;
95
+ }
96
+ return (bool) $configData;
97
+ }
98
+ return true;
99
+ }
100
+
101
+ /*
102
+ * Whether switch/solo card type available
103
+ */
104
+
105
+ public function hasSsCardType() {
106
+ $availableTypes = explode(',', $this->getMethod()->getConfigData('cctypes'));
107
+ $ssPresenations = array_intersect(array('SS', 'SM', 'SO'), $availableTypes);
108
+ if ($availableTypes && count($ssPresenations) > 0) {
109
+ return true;
110
+ }
111
+ return false;
112
+ }
113
+
114
+ /*
115
+ * solo/switch card start year
116
+ * @return array
117
+ */
118
+
119
+ public function getSsStartYears() {
120
+ $years = array();
121
+ $first = date("Y");
122
+
123
+ for ($index = 5; $index >= 0; $index--) {
124
+ $year = $first - $index;
125
+ $years[$year] = $year;
126
+ }
127
+ $years = array(0 => $this->__('Year')) + $years;
128
+ return $years;
129
+ }
130
+
131
+ /**
132
+ * Render block HTML
133
+ *
134
+ * @return string
135
+ */
136
+ protected function _toHtml() {
137
+ Mage::dispatchEvent('payment_form_block_to_html_before', array(
138
+ 'block' => $this
139
+ ));
140
+ return parent::_toHtml();
141
+ }
142
+
143
+ public function getOldCreditCard() {
144
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
145
+ $paymentArray = array();
146
+ $customerEmail = Mage::getSingleton('checkout/session')->getQuote()->getCustomerEmail();
147
+ $collection = Mage::getModel('authorizecim/transaction')->getCollection()
148
+ ->addFieldToFilter('email', $customerEmail)
149
+ ->getFirstItem();
150
+ $card = Mage::getModel('authorizecim/api')->getPaymentCreditCard($collection->getProfileId());
151
+ if ($card && count($card)) {
152
+ $key = 0;
153
+ foreach ($card as $profile) {
154
+ $paymentProfileId = $profile->customerPaymentProfileId;
155
+ $cardNumber = $profile->payment->creditCard->cardNumber;
156
+ $expirationDate = $profile->payment->creditCard->expirationDate;
157
+
158
+ foreach ($paymentProfileId as $payment) {
159
+ $value = (string) $payment;
160
+ }
161
+
162
+ foreach ($cardNumber as $payment) {
163
+ $cardNo = (string) $payment;
164
+ }
165
+ $paymentArray[$key] = array('value' => (string) $value, 'label' => (string) $cardNo);
166
+ $key++;
167
+ }
168
+ }
169
+
170
+ return $paymentArray;
171
+ } else {
172
+ return false;
173
+ }
174
+ }
175
+
176
+ }
app/code/local/Sttl/Authorizecim/Block/Info/Cim.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Silver Touch Technologies Limited.
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
12
+ *
13
+ * @category Sttl
14
+ * @package Sttl_Authorizecim
15
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
16
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
17
+ */
18
+ class Sttl_Authorizecim_Block_Info_Cim extends Mage_Payment_Block_Info_Cc {
19
+
20
+ protected function _prepareSpecificInformation($transport = null) {
21
+
22
+ if (null !== $this->_paymentSpecificInformation) {
23
+ return $this->_paymentSpecificInformation;
24
+ }
25
+ $info = $this->getInfo();
26
+ if ($info->getData('last_trans_id')):
27
+ $orderId = $this->getInfo()->getOrder()->getId();
28
+ $CimCollection = Mage::getModel('authorizecim/transaction')->getCollection()
29
+ ->addFieldToFilter('order_id', $orderId);
30
+ if($CimCollection->count()){
31
+ $cim = $CimCollection->getFirstItem();
32
+ $cardType = $cim->getCardType();
33
+ $cardno = $cim->getCclast4();
34
+ }else{
35
+ $card = Mage::getModel('authorizecim/api')->getPaymentDetail($info->getData('last_trans_id'));
36
+ $cardType = $card->cardType;
37
+ $cardno = $card->cardNumber;
38
+ }
39
+ $transport = new Varien_Object();
40
+ $transport->addData(array(
41
+ Mage::helper('payment')->__('Credit Card Type') => $cardType,
42
+ Mage::helper('payment')->__('Credit Card Number') => $cardno,
43
+ ));
44
+ endif;
45
+ $transport = parent::_prepareSpecificInformation($transport);
46
+ return $transport;
47
+ }
48
+
49
+ }
app/code/local/Sttl/Authorizecim/Helper/Data.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Silver Touch Technologies Limited.
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
12
+ *
13
+ * @category Sttl
14
+ * @package Sttl_Authorizecim
15
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
16
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
17
+ */
18
+ class Sttl_Authorizecim_Helper_Data extends Mage_Core_Helper_Data {
19
+
20
+ public function displayOldCard() {
21
+ return Mage::getStoreConfigFlag('payment/authorizecim/display_cc');
22
+ }
23
+
24
+ }
app/code/local/Sttl/Authorizecim/Model/Api.php ADDED
@@ -0,0 +1,908 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Silver Touch Technologies Limited.
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
12
+ *
13
+ * @category Sttl
14
+ * @package Sttl_Authorizecim
15
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
16
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
17
+ */
18
+ class Sttl_Authorizecim_Model_Api extends Mage_Payment_Model_Method_Abstract {
19
+
20
+ /** CIM gateway url live */
21
+ const CGI_URL = 'https://api.authorize.net/xml/v1/request.api';
22
+
23
+ /** CIM gateway url test */
24
+ const CGI_URL_TEST = 'https://apitest.authorize.net/xml/v1/request.api';
25
+ const XML_PATH_GENERATION_LOGIN = 'payment/authorizecim/login';
26
+ const XML_PATH_GENERATION_TRANSACTION = 'payment/authorizecim/trans_key';
27
+
28
+ protected $_code = 'authorizecim';
29
+
30
+ /**
31
+ * Fields that should be replaced in debug with '***'
32
+ *
33
+ * @var array
34
+ */
35
+ protected $_debugReplacePrivateDataKeys = array('name', 'transactionKey', 'cardNumber', 'expirationDate', '');
36
+
37
+ /**
38
+ * Authorize
39
+ *
40
+ * @param Varien_Object $orderPayment
41
+ * @return Mage_GoogleCheckout_Model_Payment
42
+ */
43
+ public function getPaymentCreditCard($profileId) {
44
+ $customerProfile = $this->getCustomerProfile($profileId);
45
+ return $customerProfile;
46
+ }
47
+
48
+ public function getPaymentDetail($transactionId) {
49
+ $customertransactionDetail = $this->getCustomerTransactionDetail($transactionId);
50
+ return $customertransactionDetail;
51
+ }
52
+
53
+ /**
54
+ * Authorize.NET
55
+ *
56
+ * @return merchant Authentiocation xml request
57
+ */
58
+ protected function merchantAuthenticationBlock() {
59
+ return "<merchantAuthentication>" .
60
+ "<name>" . Mage::getStoreConfig(self::XML_PATH_GENERATION_LOGIN) . "</name>" .
61
+ "<transactionKey>" . Mage::getStoreConfig(self::XML_PATH_GENERATION_TRANSACTION) . "</transactionKey>" .
62
+ "</merchantAuthentication>";
63
+ }
64
+
65
+ /**
66
+ * Authorize.NET
67
+ *
68
+ * @param Varien_Object $orderPayment
69
+ * @param customerProfileId of Authorize.net
70
+ * @return Payment Profile Id from Authorize.net
71
+ */
72
+ protected function checkPaymentProfile($customerProfileId, Varien_Object $payment) {
73
+ $ccId = substr($payment->getCcNumber(), -4);
74
+ $cardExists = array();
75
+
76
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
77
+ "<getCustomerProfileRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
78
+ $this->merchantAuthenticationBlock() .
79
+ "<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
80
+ "</getCustomerProfileRequest>";
81
+
82
+ $customerresponse = $this->sendRequestViaCurl($content);
83
+ $parsedresponse = simplexml_load_string($customerresponse, "SimpleXMLElement", LIBXML_NOWARNING);
84
+ if ($parsedresponse) {
85
+ if (Sttl_Authorizecim_Model_Payment::RESPONSE_RESULT_CODE != $parsedresponse->messages->resultCode) {
86
+ $message = Mage::helper('paygate')->__("The operation failed with the following errors: ");
87
+ foreach ($parsedresponse->messages->message as $msg) {
88
+ $message .= Mage::helper('paygate')->__("[" . htmlspecialchars($msg->code) . "] " . htmlspecialchars($msg->text));
89
+ }
90
+ if(!count($parsedresponse->messages->message)){
91
+ $message = strip_tags($customerresponse);
92
+ }
93
+ Mage::throwException($message);
94
+ } else {
95
+ $paymentProfiles = $parsedresponse->profile->paymentProfiles;
96
+ if (count($paymentProfiles)) {
97
+ foreach ($paymentProfiles as $profile) {
98
+ $paymentProfileId = $profile->customerPaymentProfileId;
99
+ $cardNumber = substr($profile->payment->creditCard->cardNumber, -4);
100
+
101
+ if ($ccId != $cardNumber) {
102
+ $cardExists[] = 'false';
103
+ } else {
104
+ $cardExists[] = 'true';
105
+ break;
106
+ }
107
+ }
108
+ }
109
+ if (in_array('true', $cardExists)) {
110
+ return $paymentProfileId;
111
+ } else {
112
+ return '';
113
+ }
114
+ $cimCollection = Mage::getModel('authorizecim/transaction')->getCollection()
115
+ ->addFieldToFilter('payment_id', $paymentProfileId);
116
+
117
+ if ($cimCollection->count()) {
118
+ $cimCollection = $cimCollection->getFirstItem();
119
+ return $customerPaymentProfileId = $cimCollection->getPaymentId();
120
+ } else {
121
+ return '';
122
+ }
123
+ }
124
+ } else {
125
+ if($customerresponse){
126
+ $message = strip_tags($customerresponse);
127
+ }else{
128
+ $message = Mage::helper('paygate')->__("There has been some error occured while getting payment response.");
129
+ }
130
+ Mage::throwException($message);
131
+ }
132
+
133
+ //return $content;
134
+ }
135
+
136
+ /**
137
+ * Send request to gateway for fetching customer profile details
138
+ *
139
+ * @param customerProfileId of Authorize.net
140
+ * @return Payment Profile from Authorize.net
141
+ */
142
+ protected function getCustomerProfile($customerProfileId) {
143
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
144
+ "<getCustomerProfileRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
145
+ $this->merchantAuthenticationBlock() .
146
+ "<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
147
+ "</getCustomerProfileRequest>";
148
+
149
+ $customerresponse = $this->sendRequestViaCurl($content);
150
+ if ($customerresponse) {
151
+ $parsedresponse = simplexml_load_string($customerresponse, "SimpleXMLElement", LIBXML_NOWARNING);
152
+ if (Sttl_Authorizecim_Model_Payment::RESPONSE_RESULT_CODE != $parsedresponse->messages->resultCode) {
153
+ return false;
154
+ } else {
155
+ $paymentProfiles = $parsedresponse->profile->paymentProfiles;
156
+ if (count($paymentProfiles)) {
157
+ return $paymentProfiles;
158
+ }
159
+ }
160
+ } else {
161
+ return false;
162
+ }
163
+ }
164
+
165
+ protected function getCustomerTransactionDetail($customertransactionId) {
166
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
167
+ "<getTransactionDetailsRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
168
+ $this->merchantAuthenticationBlock() .
169
+ "<transId>" . $customertransactionId . "</transId>" .
170
+ "</getTransactionDetailsRequest>";
171
+ $customerresponse = $this->sendRequestViaCurl($content);
172
+ $parsedresponse = simplexml_load_string($customerresponse, "SimpleXMLElement", LIBXML_NOWARNING);
173
+ if (Sttl_Authorizecim_Model_Payment::RESPONSE_RESULT_CODE != $parsedresponse->messages->resultCode) {
174
+ return false;
175
+ } else {
176
+ $parsedresponse = $parsedresponse->transaction->payment->creditCard;
177
+ if (count($parsedresponse)) {
178
+ return $parsedresponse;
179
+ }
180
+ }
181
+ }
182
+
183
+ /**
184
+ * Check Shippping profile at Authorize.net
185
+ *
186
+ * @param customerProfileId of Authorize.net
187
+ * @return Shipping Id from Authorize.net
188
+ */
189
+ protected function checkShippingProfile($customerProfileId) {
190
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
191
+ "<getCustomerProfileRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
192
+ $this->merchantAuthenticationBlock() .
193
+ "<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
194
+ "</getCustomerProfileRequest>";
195
+ $customerresponse = $this->sendRequestViaCurl($content);
196
+ $parsedresponse = simplexml_load_string($customerresponse, "SimpleXMLElement", LIBXML_NOWARNING);
197
+ if (Sttl_Authorizecim_Model_Payment::RESPONSE_RESULT_CODE != $parsedresponse->messages->resultCode) {
198
+ $message = Mage::helper('paygate')->__('The operation failed with the following errors: ');
199
+ foreach ($parsedresponse->messages->message as $msg) {
200
+ $message .= Mage::helper('paygate')->__("[" . htmlspecialchars($msg->code) . "] " . htmlspecialchars($msg->text));
201
+ }
202
+ if(!count($parsedresponse->messages->message)){
203
+ $message = strip_tags($customerresponse);
204
+ }
205
+ Mage::throwException($message);
206
+ } else {
207
+ $shippingProfileId = $parsedresponse->profile->shipToList->customerAddressId;
208
+ $cimCollection = Mage::getModel('authorizecim/transaction')->getCollection()
209
+ ->addFieldToFilter('shipping_id', $shippingProfileId);
210
+
211
+ if ($cimCollection->count()) {
212
+ $cimCollection = $cimCollection->getFirstItem();
213
+ return $customerPaymentProfileId = $cimCollection->getShippingId();
214
+ } else {
215
+ return '';
216
+ }
217
+ }
218
+ }
219
+
220
+ /**
221
+ * Create Customer Profile Authorize.net Request
222
+ *
223
+ * @param customerProfileId of Authorize.net
224
+ */
225
+ protected function _buildCustomerRequest(Varien_Object $payment) {
226
+ $order = $payment->getOrder();
227
+
228
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
229
+ "<createCustomerProfileRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
230
+ $this->merchantAuthenticationBlock() .
231
+ "<profile>";
232
+
233
+ if (!empty($order)) {
234
+ $billing = $order->getBillingAddress();
235
+ $cust_email = $billing->getEmail();
236
+ if (!empty($cust_email)) {
237
+ $customer_email = $cust_email;
238
+ } else {
239
+ $quote = Mage::getSingleton('checkout/session')->getQuote();
240
+ $billingAddress = $quote->getBillingAddress();
241
+ $customer_email = $billingAddress->getEmail();
242
+ }
243
+
244
+ $content .="<description></description>" .
245
+ "<email>" . $customer_email . "</email>";
246
+ }
247
+
248
+ $content .="</profile>" .
249
+ "</createCustomerProfileRequest>";
250
+
251
+ return $content;
252
+ }
253
+
254
+ /**
255
+ * Delete Customer Profile Authorize.net Request
256
+ *
257
+ * @param customerProfileId of Authorize.net
258
+ */
259
+ protected function _deleteCustomerProfile($customerProfileId, $isNew) {
260
+ if ($isNew) {
261
+ $request = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
262
+ "<deleteCustomerProfileRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
263
+ $this->merchantAuthenticationBlock() .
264
+ "<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
265
+ "</deleteCustomerProfileRequest>";
266
+ $this->sendRequestViaCurl($request);
267
+ }
268
+ }
269
+
270
+ /**
271
+ * Send request via Fsockopen
272
+ */
273
+ protected function sendRequestViaFsockopen($host, $path, $content) {
274
+ $posturl = "ssl://" . $host;
275
+ $header = "Host: $host\r\n";
276
+ $header .= "User-Agent: PHP Script\r\n";
277
+ $header .= "Content-Type: text/xml\r\n";
278
+ $header .= "Content-Length: " . strlen($content) . "\r\n";
279
+ $header .= "Connection: close\r\n\r\n";
280
+ $fp = fsockopen($posturl, 443, $errno, $errstr, 30);
281
+ if (!$fp) {
282
+ $body = false;
283
+ } else {
284
+ error_reporting(E_ERROR);
285
+ fputs($fp, "POST $path HTTP/1.1\r\n");
286
+ fputs($fp, $header . $content);
287
+ fwrite($fp, $out);
288
+ $response = "";
289
+ while (!feof($fp)) {
290
+ $response = $response . fgets($fp, 128);
291
+ }
292
+ fclose($fp);
293
+ error_reporting(E_ALL ^ E_NOTICE);
294
+
295
+ $len = strlen($response);
296
+ $bodypos = strpos($response, "\r\n\r\n");
297
+ if ($bodypos <= 0) {
298
+ $bodypos = strpos($response, "\n\n");
299
+ }
300
+ while ($bodypos < $len && $response [$bodypos] != '<') {
301
+ $bodypos++;
302
+ }
303
+ $body = substr($response, $bodypos);
304
+ }
305
+ return $body;
306
+ }
307
+
308
+ /**
309
+ * Send request via Curl
310
+ */
311
+ protected function sendRequestViaCurl($content) {
312
+ $this->_debug(array('request' => $content));
313
+ $err = false;
314
+ $posturl = $this->getConfigData('cgi_url');
315
+ $posturl = $posturl ? $posturl : self::CGI_URL;
316
+ $ch = curl_init();
317
+ curl_setopt($ch, CURLOPT_URL, $posturl);
318
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
319
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
320
+ curl_setopt($ch, CURLOPT_HEADER, 1);
321
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
322
+ curl_setopt($ch, CURLOPT_POST, 1);
323
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
324
+ //curl_setopt($ch, CURLOPT_PROXY, "192.168.0.6:3128");
325
+ $response = curl_exec($ch);
326
+ if ($response === false) {
327
+ $err = curl_error($ch);
328
+ }
329
+ curl_close($ch);
330
+ if ($err) {
331
+ Mage::log(Mage::helper('paygate')->__($err));
332
+ return;
333
+ }
334
+ $len = strlen($response);
335
+ $bodypos = strpos($response, "\r\n\r\n");
336
+ if ($bodypos <= 0) {
337
+ $bodypos = strpos($response, "\n\n");
338
+ }
339
+ while ($bodypos < $len && $response[$bodypos] != '<') {
340
+ $bodypos++;
341
+ }
342
+ $body = substr($response, $bodypos);
343
+ $this->_debug(array('response' => $body));
344
+ return $body;
345
+ }
346
+
347
+ /**
348
+ * Prepare request to gateway for creating customer payment profile
349
+ *
350
+ * @link http://www.authorize.net/support/AIM_guide.pdf
351
+ * @param Varien_Object $orderPayment
352
+ * @return unknown
353
+ */
354
+ protected function _buildPaymentRequest(Varien_Object $payment, $customerProfileId) {
355
+ $order = $payment->getOrder();
356
+
357
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
358
+ "<createCustomerPaymentProfileRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
359
+ $this->merchantAuthenticationBlock() .
360
+ "<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
361
+ "<paymentProfile>";
362
+
363
+ if (!empty($order)) {
364
+ $billing = $order->getBillingAddress();
365
+ $cust_email = $billing->getEmail();
366
+ if (!empty($cust_email)) {
367
+ $customer_email = $cust_email;
368
+ $first_name = $billing->getFirstname();
369
+ $last_name = $billing->getLastname();
370
+ $telephone = $billing->getTelephone();
371
+ } else {
372
+ $quote = Mage::getSingleton('checkout/session')->getQuote();
373
+ $billingAddress = $quote->getBillingAddress();
374
+ $customer_email = $billingAddress->getEmail();
375
+ $first_name = $billingAddress->getFirstname();
376
+ $last_name = $billingAddress->getLastname();
377
+ $telephone = $billingAddress->getTelephone();
378
+ }
379
+ $content .="<billTo>" .
380
+ "<firstName>" . $first_name . "</firstName>" .
381
+ "<lastName>" . $last_name . "</lastName>" .
382
+ "<phoneNumber>" . $telephone . "</phoneNumber>" .
383
+ "</billTo>";
384
+ }
385
+ $content .="<payment>" .
386
+ "<creditCard>" .
387
+ "<cardNumber>" . $payment->getCcNumber() . "</cardNumber>" .
388
+ "<expirationDate>" . sprintf('%04d-%02d', $payment->getCcExpYear(), $payment->getCcExpMonth()) . "</expirationDate>" . // required format for API is YYYY-MM
389
+ "</creditCard>" .
390
+ "</payment>" .
391
+ "</paymentProfile>" .
392
+ //"<validationMode>testMode</validationMode>". // liveMode or testMode
393
+ "</createCustomerPaymentProfileRequest>";
394
+ return $content;
395
+ }
396
+
397
+ /**
398
+ * Prepare request to gateway for creating customer shipping address request
399
+ *
400
+ * @link http://www.authorize.net/support/AIM_guide.pdf
401
+ * @param Varien_Object $orderPayment
402
+ * @return unknown
403
+ */
404
+ protected function _buildShippingRequest(Varien_Object $payment, $customerProfileId) {
405
+ $order = $payment->getOrder();
406
+
407
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
408
+ "<createCustomerShippingAddressRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
409
+ $this->merchantAuthenticationBlock() .
410
+ "<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
411
+ "<address>";
412
+ if (!empty($order)) {
413
+ $shipping = $order->getShippingAddress();
414
+ $billing = $order->getBillingAddress();
415
+ /* added fix for virtual products */
416
+ if(!$shipping){
417
+ $shipping = $billing;
418
+ }
419
+ /* added fix for virtual products */
420
+ $content .="<firstName>" . $shipping->getFirstname() . "</firstName>" .
421
+ "<lastName>" . $shipping->getLastname() . "</lastName>" .
422
+ "<company>" . $shipping->getCompany() . "</company>" .
423
+ "<address>" . $shipping->getStreet(1) . "</address>" .
424
+ "<city>" . $shipping->getCity() . "</city>" .
425
+ "<state>" . $shipping->getRegion() . "</state>" .
426
+ "<zip>" . $shipping->getPostcode() . "</zip>" .
427
+ "<country>" . $shipping->getCountry() . "</country>" .
428
+ "<phoneNumber>" . $billing->getTelephone() . "</phoneNumber>" .
429
+ "<faxNumber>" . $billing->getFax() . "</faxNumber>";
430
+ }
431
+
432
+ $content .="</address>" .
433
+ "</createCustomerShippingAddressRequest>";
434
+ return $content;
435
+ }
436
+
437
+ /**
438
+ * Prepare request to gateway for creating customer profile transaction
439
+ *
440
+ * @link http://www.authorize.net/support/AIM_guide.pdf
441
+ * @param Varien_Object $orderPayment
442
+ * @return unknown
443
+ */
444
+ protected function _buildTransactionRequest(Varien_Object $payment, $customerProfileId, $paymentProfileId, $ShippingAddressId) {
445
+ $order = $payment->getOrder();
446
+
447
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
448
+ "<createCustomerProfileTransactionRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
449
+ $this->merchantAuthenticationBlock() .
450
+ "<transaction>" .
451
+ "<profileTransAuthOnly>" .
452
+ "<amount>" . $payment->getAmount() . "</amount>" // should include tax, shipping, and everything.
453
+ ;
454
+
455
+ if ($order->getTaxAmount()) {
456
+ $content .="<tax>" .
457
+ "<amount>" . $order->getTaxAmount() . "</amount>" .
458
+ "<name>Tax</name>" .
459
+ "<description>Tax</description>" .
460
+ "</tax>";
461
+ }
462
+
463
+ $shipping_method = $order->getShippingMethod();
464
+ if (empty($shipping_method)) {
465
+ $shipping_method = $order->getShippingDescription();
466
+ }
467
+
468
+ $content.="<shipping>" .
469
+ "<amount>" . $order->getShippingAmount() . "</amount>" .
470
+ "<name>" . $shipping_method . "</name>" .
471
+ "<description>" . $order->getShippingDescription() . "</description>" .
472
+ "</shipping>";
473
+ if (!empty($order)) {
474
+
475
+ $items = $order->getAllItems();
476
+
477
+ foreach ($items as $_item) {
478
+
479
+ $content .="<lineItems>" .
480
+ "<itemId>" . $_item->getId() . "</itemId>" .
481
+ "<name><![CDATA[" . substr($_item->getName(), 0, 30) . "]]></name>" .
482
+ "<description>Description of item sold</description>" .
483
+ "<quantity>" . $_item->getQtyOrdered() . "</quantity>" .
484
+ "<unitPrice>" . $_item->getPrice() . "</unitPrice>" .
485
+ "<taxable>false</taxable>" .
486
+ "</lineItems>";
487
+ }
488
+ }
489
+ $content .="<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
490
+ "<customerPaymentProfileId>" . $paymentProfileId . "</customerPaymentProfileId>" .
491
+ "<customerShippingAddressId>" . $ShippingAddressId . "</customerShippingAddressId>";
492
+
493
+ if ($order && $order->getIncrementId()) {
494
+ $content .="<order>" .
495
+ "<invoiceNumber>" . $order->getIncrementId() . "</invoiceNumber>" .
496
+ "</order>";
497
+ }
498
+
499
+ $content .="</profileTransAuthOnly>" .
500
+ "</transaction>" .
501
+ "</createCustomerProfileTransactionRequest>";
502
+ return $content;
503
+ }
504
+
505
+ /**
506
+ * Prepare request to gateway for creating customer profile transaction
507
+ *
508
+ * @link http://www.authorize.net/support/AIM_guide.pdf
509
+ * @param Varien_Object $orderPayment
510
+ * @return unknown
511
+ */
512
+ protected function _buildTransactionCaptureRequest(Varien_Object $payment, $customerProfileId, $paymentProfileId, $ShippingAddressId) {
513
+ $order = $payment->getOrder();
514
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
515
+ "<createCustomerProfileTransactionRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
516
+ $this->merchantAuthenticationBlock() .
517
+ "<transaction>" .
518
+ "<profileTransAuthCapture>" .
519
+ "<amount>" . $payment->getAmount() . "</amount>"; // should include tax, shipping, and everything.
520
+
521
+
522
+ if ($order->getTaxAmount()) {
523
+ $content .="<tax>" .
524
+ "<amount>" . $order->getTaxAmount() . "</amount>" .
525
+ "<name>Tax</name>" .
526
+ "<description>Tax</description>" .
527
+ "</tax>";
528
+ }
529
+
530
+ $shipping_method = $order->getShippingMethod();
531
+ if (empty($shipping_method)) {
532
+ $shipping_method = $order->getShippingDescription();
533
+ }
534
+
535
+ $content.="<shipping>" .
536
+ "<amount>" . $order->getShippingAmount() . "</amount>" .
537
+ "<name>" . $shipping_method . "</name>" .
538
+ "<description>" . $order->getShippingDescription() . "</description>" .
539
+ "</shipping>";
540
+
541
+ if (!empty($order)) {
542
+
543
+ $items = $order->getAllItems();
544
+
545
+ foreach ($items as $_item) {
546
+
547
+ $content .="<lineItems>" .
548
+ "<itemId>" . $_item->getId() . "</itemId>" .
549
+ "<name><![CDATA[" . substr($_item->getName(), 0, 30) . "]]></name>" .
550
+ "<description>Description of item sold</description>" .
551
+ "<quantity>" . $_item->getQtyOrdered() . "</quantity>" .
552
+ "<unitPrice>" . $_item->getPrice() . "</unitPrice>" .
553
+ "<taxable>false</taxable>" .
554
+ "</lineItems>";
555
+ }
556
+ }
557
+ $content .="<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
558
+ "<customerPaymentProfileId>" . $paymentProfileId . "</customerPaymentProfileId>" .
559
+ "<customerShippingAddressId>" . $ShippingAddressId . "</customerShippingAddressId>";
560
+
561
+ if ($order && $order->getIncrementId()) {
562
+ $content .="<order>" .
563
+ "<invoiceNumber>" . $order->getIncrementId() . "</invoiceNumber>" .
564
+ "</order>";
565
+ }
566
+
567
+ $content .="</profileTransAuthCapture>" .
568
+ "</transaction>" .
569
+ "</createCustomerProfileTransactionRequest>";
570
+ return $content;
571
+ }
572
+
573
+ /**
574
+ * Prepare request to gateway for creating customer profile transaction
575
+ *
576
+ * @link http://www.authorize.net/support/AIM_guide.pdf
577
+ * @param Varien_Object $orderPayment
578
+ * @return unknown
579
+ */
580
+ protected function _buildProAuthCaptureRequest(Varien_Object $payment, $customerProfileId, $paymentProfileId, $ShippingAddressId) {
581
+ $order = $payment->getOrder();
582
+
583
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
584
+ "<createCustomerProfileTransactionRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
585
+ $this->merchantAuthenticationBlock() .
586
+ "<transaction>" .
587
+ "<profileTransPriorAuthCapture>" .
588
+ "<amount>" . $payment->getAmount() . "</amount>"; // should include tax, shipping, and everything.
589
+ if ($order->getTaxAmount()) {
590
+ $content .="<tax>" .
591
+ "<amount>" . $order->getTaxAmount() . "</amount>" .
592
+ "<name>Tax</name>" .
593
+ "<description>Tax</description>" .
594
+ "</tax>";
595
+ }
596
+
597
+ $shipping_method = $order->getShippingMethod();
598
+ if (empty($shipping_method)) {
599
+ $shipping_method = $order->getShippingDescription();
600
+ }
601
+
602
+ $content.=
603
+ "<shipping>" .
604
+ "<amount>" . $order->getShippingAmount() . "</amount>" .
605
+ "<name>" . $shipping_method . "</name>" .
606
+ "<description>" . $order->getShippingDescription() . "</description>" .
607
+ "</shipping>";
608
+
609
+ if (!empty($order)) {
610
+
611
+ $items = $order->getAllItems();
612
+
613
+ foreach ($items as $_item) {
614
+
615
+ $content .="<lineItems>" .
616
+ "<itemId>" . $_item->getId() . "</itemId>" .
617
+ "<name><![CDATA[" . substr($_item->getName(), 0, 30) . "]]></name>" .
618
+ "<description>Description of item sold</description>" .
619
+ "<quantity>" . $_item->getQtyOrdered() . "</quantity>" .
620
+ "<unitPrice>" . $_item->getPrice() . "</unitPrice>" .
621
+ "<taxable>true</taxable>" .
622
+ "</lineItems>";
623
+ }
624
+ }
625
+ $content .="<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
626
+ "<customerPaymentProfileId>" . $paymentProfileId . "</customerPaymentProfileId>" .
627
+ "<customerShippingAddressId>" . $ShippingAddressId . "</customerShippingAddressId>" .
628
+ "<transId>" . $payment->getCimTransactionid() . "</transId>";
629
+
630
+ $content .="</profileTransPriorAuthCapture>" .
631
+ "</transaction>" .
632
+ "</createCustomerProfileTransactionRequest>";
633
+
634
+
635
+
636
+ return $content;
637
+ }
638
+
639
+ /**
640
+ * Prepare request to gateway for creating customer profile transaction
641
+ *
642
+ * @link http://www.authorize.net/support/AIM_guide.pdf
643
+ * @param Varien_Object $orderPayment
644
+ * @return unknown
645
+ */
646
+ protected function _buildCaptureRequest(Varien_Object $payment, $customerProfileId, $paymentProfileId, $ShippingAddressId) {
647
+ $order = $payment->getOrder();
648
+
649
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
650
+ "<createCustomerProfileTransactionRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
651
+ $this->merchantAuthenticationBlock() .
652
+ "<transaction>" .
653
+ "<profileTransCaptureOnly>" .
654
+ "<amount>" . $payment->getAmount() . "</amount>"; // should include tax, shipping, and everything.
655
+
656
+ if ($order->getTaxAmount()) {
657
+ $content .="<tax>" .
658
+ "<amount>" . $order->getTaxAmount() . "</amount>" .
659
+ "<name>Tax</name>" .
660
+ "<description>Tax</description>" .
661
+ "</tax>";
662
+ }
663
+
664
+ $shipping_method = $order->getShippingMethod();
665
+ if (empty($shipping_method)) {
666
+ $shipping_method = $order->getShippingDescription();
667
+ }
668
+
669
+ $content.=
670
+ "<shipping>" .
671
+ "<amount>" . $order->getShippingAmount() . "</amount>" .
672
+ "<name>" . $shipping_method . "</name>" .
673
+ "<description>" . $order->getShippingDescription() . "</description>" .
674
+ "</shipping>";
675
+
676
+ if (!empty($order)) {
677
+ $items = $order->getAllItems();
678
+ foreach ($items as $_item) {
679
+ $content .="<lineItems>" .
680
+ "<itemId>" . $_item->getId() . "</itemId>" .
681
+ "<name><![CDATA[" . substr($_item->getName(), 0, 30) . "]]></name>" .
682
+ "<description>Description of item sold</description>" .
683
+ "<quantity>" . $_item->getQtyOrdered() . "</quantity>" .
684
+ "<unitPrice>" . $_item->getPrice() . "</unitPrice>" .
685
+ "<taxable>false</taxable>" .
686
+ "</lineItems>";
687
+ }
688
+ }
689
+ $content .="<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
690
+ "<customerPaymentProfileId>" . $paymentProfileId . "</customerPaymentProfileId>" .
691
+ "<customerShippingAddressId>" . $ShippingAddressId . "</customerShippingAddressId>";
692
+
693
+ if ($order && $order->getIncrementId()) {
694
+ $content .="<order>" .
695
+ "<invoiceNumber>" . $order->getIncrementId() . "</invoiceNumber>" .
696
+ "</order>";
697
+ }
698
+
699
+ $content .="<taxExempt>false</taxExempt>" .
700
+ "<recurringBilling>false</recurringBilling>" .
701
+ "<cardCode>000</cardCode>" .
702
+ "<approvalCode>000000</approvalCode>" .
703
+ "</profileTransCaptureOnly>" .
704
+ "</transaction>" .
705
+ "</createCustomerProfileTransactionRequest>";
706
+ return $content;
707
+ }
708
+
709
+ /**
710
+ * Prepare request to gateway
711
+ *
712
+ * @link http://www.authorize.net/support/CIM_guide.pdf
713
+ * @param Mage_Sales_Model_Document $order
714
+ * @return unknown
715
+ */
716
+ protected function _buildVoidRequest(Varien_Object $payment, $customerProfileId, $paymentProfileId, $ShippingAddressId) {
717
+ $order = $payment->getOrder();
718
+ $CimCollection = Mage::getModel('authorizecim/transaction')->getCollection()
719
+ ->addFieldToFilter('order_payment_id', $payment->getId())
720
+ ->addFieldToFilter('order_id', $order->getId())
721
+ ->getFirstItem();
722
+
723
+ $customerProfileId = $CimCollection->getProfileId();
724
+ $paymentProfileId = $CimCollection->getPaymentId();
725
+ $ShippingAddressId = $CimCollection->getShippingId();
726
+ $cardNumber = $CimCollection->getCclast4();
727
+ $transId = $CimCollection->getTxnId();
728
+
729
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
730
+ "<createCustomerProfileTransactionRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
731
+ $this->merchantAuthenticationBlock() .
732
+ "<transaction>" .
733
+ "<profileTransVoid>";
734
+
735
+ $content .="<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
736
+ "<customerPaymentProfileId>" . $paymentProfileId . "</customerPaymentProfileId>" .
737
+ "<customerShippingAddressId>" . $ShippingAddressId . "</customerShippingAddressId>";
738
+
739
+ $content .="<transId>" . $transId . "</transId>" .
740
+ "</profileTransVoid>" .
741
+ "</transaction>" .
742
+ "</createCustomerProfileTransactionRequest>";
743
+
744
+ return array('req' => $content, 'cpid' => $customerProfileId, 'cppid' => $paymentProfileId, 'csid' => $ShippingAddressId, 'cc' => $cardNumber);
745
+ }
746
+
747
+ /**
748
+ * Prepare request to gateway
749
+ *
750
+ * @link http://www.authorize.net/support/CIM_guide.pdf
751
+ * @param Mage_Sales_Model_Document $order
752
+ * @return unknown
753
+ */
754
+ protected function _buildRefundRequest(Varien_Object $payment, $amount) {
755
+ $order = $payment->getOrder();
756
+ $CimCollection = Mage::getModel('authorizecim/transaction')->getCollection()
757
+ ->addFieldToFilter('order_payment_id', $payment->getId())
758
+ ->addFieldToFilter('order_id', $order->getId());
759
+
760
+ if (!$CimCollection->count())
761
+ return array();
762
+ $CimCollection = $CimCollection->getFirstItem();
763
+
764
+ $customerProfileId = $CimCollection->getProfileId();
765
+ $paymentProfileId = $CimCollection->getPaymentId();
766
+ $ShippingAddressId = $CimCollection->getShippingId();
767
+ $transId = $CimCollection->getTxnId();
768
+ $card = $this->getPaymentDetail($transId);
769
+ $cardNumber = $card->cardNumber;
770
+
771
+ $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
772
+ "<createCustomerProfileTransactionRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
773
+ $this->merchantAuthenticationBlock() .
774
+ "<transaction>" .
775
+ "<profileTransRefund>";
776
+ $content .="<amount>" . $amount . "</amount>";
777
+ if ($order->getTaxAmount()) {
778
+ $content .="<tax>" .
779
+ "<amount>" . $order->getTaxAmount() . "</amount>" .
780
+ "<name>Tax</name>" .
781
+ "<description>Tax</description>" .
782
+ "</tax>";
783
+ }
784
+
785
+ $shipping_method = $order->getShippingMethod();
786
+ if (empty($shipping_method)) {
787
+ $shipping_method = $order->getShippingDescription();
788
+ }
789
+
790
+ $content.="<shipping>" .
791
+ "<amount>" . $order->getShippingAmount() . "</amount>" .
792
+ "<name>" . $shipping_method . "</name>" .
793
+ "<description>" . $order->getShippingDescription() . "</description>" .
794
+ "</shipping>";
795
+ if (!empty($order)) {
796
+
797
+ $items = $order->getAllItems();
798
+ if (count($items)) {
799
+ foreach ($items as $_item) {
800
+ $content .="<lineItems>" .
801
+ "<itemId>" . $_item->getId() . "</itemId>" .
802
+ "<name><![CDATA[" . substr($_item->getName(), 0, 30) . "]]></name>" .
803
+ "<description>Description of item sold</description>" .
804
+ "<quantity>" . $_item->getQtyOrdered() . "</quantity>" .
805
+ "<unitPrice>" . $_item->getPrice() . "</unitPrice>" .
806
+ "</lineItems>";
807
+ }
808
+ }
809
+ }
810
+
811
+ $content .="<customerProfileId>" . $customerProfileId . "</customerProfileId>" .
812
+ "<customerPaymentProfileId>" . $paymentProfileId . "</customerPaymentProfileId>" .
813
+ "<customerShippingAddressId>" . $ShippingAddressId . "</customerShippingAddressId>" .
814
+ "<creditCardNumberMasked>" . $cardNumber . "</creditCardNumberMasked>";
815
+ $content .="<order>" .
816
+ "<invoiceNumber>" . $order->getIncrementId() . "</invoiceNumber>" .
817
+ "<description>description of transaction</description>" .
818
+ "<purchaseOrderNumber>" . $order->getIncrementId() . "</purchaseOrderNumber>" .
819
+ "</order>";
820
+ $content .="<transId>" . $transId . "</transId>" .
821
+ "</profileTransRefund>" .
822
+ "</transaction>" .
823
+ "</createCustomerProfileTransactionRequest>";
824
+ return array('req' => $content, 'cpid' => $customerProfileId, 'cppid' => $paymentProfileId, 'csid' => $ShippingAddressId, 'cc' => $cardNumber);
825
+ }
826
+
827
+ /**
828
+ * Get config action to process initialization
829
+ *
830
+ * @return string
831
+ */
832
+ public function getConfigPaymentAction() {
833
+ $paymentAction = $this->getConfigData('payment_action');
834
+ return empty($paymentAction) ? true : $paymentAction;
835
+ }
836
+
837
+ /**
838
+ * Gateway response wrapper
839
+ *
840
+ * @param string $text
841
+ * @return string
842
+ */
843
+ protected function _wrapGatewayError($text) {
844
+ return Mage::helper('paygate')->__('Gateway error: %s', $text);
845
+ }
846
+
847
+ /**
848
+ * Round up and cast specified amount to float or string
849
+ *
850
+ * @param string|float $amount
851
+ * @param bool $asFloat
852
+ * @return string|float
853
+ */
854
+ protected function _formatAmount($amount, $asFloat = false) {
855
+ $amount = sprintf('%.2F', $amount); // "f" depends on locale, "F" doesn't
856
+ return $asFloat ? (float) $amount : $amount;
857
+ }
858
+
859
+ /**
860
+ * Add payment transaction
861
+ *
862
+ * @param Mage_Sales_Model_Order_Payment $payment
863
+ * @param string $transactionId
864
+ * @param string $transactionType
865
+ * @param array $transactionDetails
866
+ * @param array $transactionAdditionalInfo
867
+ * @return null|Mage_Sales_Model_Order_Payment_Transaction
868
+ */
869
+ protected function _addTransaction(Mage_Sales_Model_Order_Payment $payment, $transactionId, $transactionType, array $transactionDetails = array(), array $transactionAdditionalInfo = array(), $message = false
870
+ ) {
871
+ $payment->setTransactionId($transactionId);
872
+ $payment->resetTransactionAdditionalInfo();
873
+ foreach ($transactionDetails as $key => $value) {
874
+ $payment->setData($key, $value);
875
+ }
876
+ foreach ($transactionAdditionalInfo as $key => $value) {
877
+ $payment->setTransactionAdditionalInfo($key, $value);
878
+ }
879
+ $transaction = $payment->addTransaction($transactionType, null, false, $message);
880
+ foreach ($transactionDetails as $key => $value) {
881
+ $payment->unsetData($key);
882
+ }
883
+ $payment->unsLastTransId();
884
+
885
+ /**
886
+ * It for self using
887
+ */
888
+ $transaction->setMessage($message);
889
+
890
+ return $transaction;
891
+ }
892
+
893
+ /**
894
+ * Log debug data to file
895
+ *
896
+ * @param mixed $debugData
897
+ */
898
+ protected function _debug($debugData) {
899
+ if ($this->getDebugFlag()) {
900
+ foreach ($this->_debugReplacePrivateDataKeys as $k) {
901
+ $debugData = preg_replace('/<' . $k . '>.*?<\/' . $k . '>/i', '<' . $k . '>***********</' . $k . '>', $debugData);
902
+ }
903
+ Mage::getModel('core/log_adapter', 'payment_' . $this->getCode() . '.log')
904
+ ->log($debugData);
905
+ }
906
+ }
907
+
908
+ }
app/code/local/Sttl/Authorizecim/Model/Mysql4/Transaction.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Silver Touch Technologies Limited.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
11
+ *
12
+ * @category Sttl
13
+ * @package Sttl_Authorizecim
14
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
15
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
16
+ */
17
+
18
+
19
+ class Sttl_Authorizecim_Model_Mysql4_Transaction extends Mage_Core_Model_Mysql4_Abstract
20
+ {
21
+ public function _construct()
22
+ {
23
+ $this->_init('authorizecim/transaction', 'authorize_id');
24
+
25
+ }
26
+
27
+
28
+ }
app/code/local/Sttl/Authorizecim/Model/Mysql4/Transaction/Collection.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Silver Touch Technologies Limited.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
11
+ *
12
+ * @category Sttl
13
+ * @package Sttl_Authorizecim
14
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
15
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
16
+ */
17
+
18
+ class Sttl_Authorizecim_Model_Mysql4_Transaction_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
19
+ {
20
+
21
+ protected $_previewFlag;
22
+
23
+ public function _construct()
24
+ {
25
+ parent::_construct();
26
+ $this->_init('authorizecim/transaction');
27
+ }
28
+
29
+ }
app/code/local/Sttl/Authorizecim/Model/Payment.php ADDED
@@ -0,0 +1,683 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Silver Touch Technologies Limited.
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
12
+ *
13
+ * @category Sttl
14
+ * @package Sttl_Authorizecim
15
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
16
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
17
+ */
18
+ class Sttl_Authorizecim_Model_Payment extends Sttl_Authorizecim_Model_Api {
19
+
20
+ const XML_PAYMENT_ACTION = 'payment/authorizecim/payment_action';
21
+ const REQUEST_TYPE_AUTH_ONLY = 'AUTH_ONLY';
22
+ const REQUEST_TYPE_AUTH_CAPTURE = 'AUTH_CAPTURE';
23
+ const REQUEST_TYPE_VOID = 'VOID';
24
+ const REQUEST_TYPE_CREDIT = 'CREDIT';
25
+ const RESPONSE_RESULT_CODE = 'Ok';
26
+
27
+ protected $_formBlockType = 'authorizecim/form_cim';
28
+ protected $_infoBlockType = 'authorizecim/info_cim';
29
+ protected $_isGateway = true;
30
+ protected $_canAuthorize = true;
31
+ protected $_canCapture = true;
32
+ protected $_canCapturePartial = false;
33
+ protected $_canRefund = true;
34
+ protected $_canRefundInvoicePartial = true;
35
+ protected $_canVoid = true;
36
+ protected $_canUseCheckout = true;
37
+ protected $_canSaveCc = false;
38
+
39
+ /**
40
+ * Can be edit order (renew order)
41
+ *
42
+ * @return bool
43
+ */
44
+ public function canEdit() {
45
+ return false;
46
+ }
47
+
48
+ public function isAvailable($quote = null) {
49
+ $useGuest = $this->getConfigData('use_guest');
50
+ if (!$useGuest) {
51
+ $checkoutMethod = $quote->getCheckoutMethod();
52
+ if ($checkoutMethod == Mage_Checkout_Model_Type_Onepage::METHOD_GUEST) {
53
+ return false;
54
+ }
55
+ }
56
+ return parent::isAvailable($quote);
57
+ }
58
+
59
+ /**
60
+ * Authorize
61
+ *
62
+ * @param Varien_Object $orderPayment
63
+ * @return Mage_GoogleCheckout_Model_Payment
64
+ */
65
+ public function authorize(Varien_Object $payment, $amount) {
66
+ $isNew = $_paymentProfileId = $message = null;
67
+ $order = $payment->getOrder();
68
+ $total = $order->getBaseGrandTotal();
69
+ $amount = $total; //+$amount;
70
+
71
+ if ($amount <= 0) {
72
+ Mage::throwException(Mage::helper('paygate')->__('Invalid amount for authorization.'));
73
+ }
74
+ $payment->setAmount($amount);
75
+
76
+ $payment_values = Mage::app()->getRequest()->getParam('payment');
77
+ if (array_key_exists('cim_payment_profileid', $payment_values)) {
78
+ $cim_payment_profileid = $payment_values['cim_payment_profileid'];
79
+ if (!empty($cim_payment_profileid)) {
80
+ $_paymentProfileId = $cim_payment_profileid;
81
+ }
82
+ }
83
+
84
+ $billing = $order->getBillingAddress();
85
+ if (!$billing->getEmail() && Mage::getSingleton('customer/session')->isLoggedIn()) {
86
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
87
+ $billing->setEmail($customer->getEmail());
88
+ }
89
+ $cimCollection = Mage::getModel('authorizecim/transaction')->getCollection()
90
+ ->addFieldToFilter('email', $billing->getEmail());
91
+ if ($cimCollection->getSize()) {
92
+ $customerColection = $cimCollection->getFirstItem();
93
+ $customerProfileId = $customerColection->getProfileId();
94
+ $payment->setCimCustomerProfileid($customerProfileId);
95
+ } else {
96
+ $customerrequest = $this->_buildCustomerRequest($payment);
97
+ $customerresponse = $this->sendRequestViaCurl($customerrequest);
98
+ $parsedresponse = simplexml_load_string($customerresponse, "SimpleXMLElement", LIBXML_NOWARNING);
99
+
100
+ if (self::RESPONSE_RESULT_CODE != $parsedresponse->messages->resultCode) {
101
+ $message = Mage::helper('paygate')->__("The operation failed with the following errors: ");
102
+ foreach ($parsedresponse->messages->message as $msg) {
103
+ $message .= Mage::helper('paygate')->__("[" . htmlspecialchars($msg->code) . "] " . htmlspecialchars($msg->text));
104
+ }
105
+ if(!count($parsedresponse->messages->message)){
106
+ $message = strip_tags($customerresponse);
107
+ }
108
+ } else {
109
+ $isNew = true;
110
+ $customerProfileId = $parsedresponse->customerProfileId;
111
+ $payment->setCimCustomerProfileid($customerProfileId);
112
+ }
113
+ if ($message) {
114
+ Mage::throwException($message);
115
+ }
116
+ }
117
+
118
+ if ($_paymentProfileId) {
119
+ $paymentProfile = $_paymentProfileId;
120
+ } else {
121
+ $paymentProfile = $this->checkPaymentProfile($customerProfileId, $payment);
122
+ }
123
+ /* Payment Profile */
124
+ if (!$paymentProfile) {
125
+ $request = $this->_buildPaymentRequest($payment, $customerProfileId);
126
+ $Paymentresponse = $this->sendRequestViaCurl($request);
127
+ $parsedPaymentresponse = simplexml_load_string($Paymentresponse, "SimpleXMLElement", LIBXML_NOWARNING);
128
+ //$parsedPaymentresponse = simplexml_load_string($Paymentresponse);
129
+ if (self::RESPONSE_RESULT_CODE != $parsedPaymentresponse->messages->resultCode) {
130
+ $message = Mage::helper('paygate')->__("The operation failed with the following errors: ");
131
+ foreach ($parsedPaymentresponse->messages->message as $msg) {
132
+ $message .= Mage::helper('paygate')->__("[" . htmlspecialchars($msg->code) . "] " . htmlspecialchars($msg->text));
133
+ }
134
+ if(!count($parsedPaymentresponse->messages->message)){
135
+ $message = strip_tags($Paymentresponse);
136
+ }
137
+ } else {
138
+ $paymentProfileId = $parsedPaymentresponse->customerPaymentProfileId;
139
+ $payment->setCimPaymentProfileid($paymentProfileId);
140
+ }
141
+ if ($message) {
142
+ $payment->setSkipTransactionCreation(true);
143
+ $this->_deleteCustomerProfile($customerProfileId, $isNew);
144
+ Mage::throwException($message);
145
+ }
146
+ } else {
147
+ $payment->setCimPaymentProfileid($paymentProfile);
148
+ $paymentProfileId = $paymentProfile;
149
+ }
150
+
151
+ /* Shipping Profile */
152
+ $shippingProfile = $this->checkShippingProfile($customerProfileId);
153
+
154
+ if (!$shippingProfile) {
155
+ $ShippingRequest = $this->_buildShippingRequest($payment, $customerProfileId);
156
+ $ShippingResponse = $this->sendRequestViaCurl($ShippingRequest);
157
+ $parsedShippingresponse = simplexml_load_string($ShippingResponse, "SimpleXMLElement", LIBXML_NOWARNING);
158
+ //$parsedShippingresponse = simplexml_load_string($ShippingResponse);
159
+
160
+ if (self::RESPONSE_RESULT_CODE != $parsedShippingresponse->messages->resultCode) {
161
+ $message = Mage::helper('paygate')->__("The operation failed with the following errors: ");
162
+ foreach ($parsedShippingresponse->messages->message as $msg) {
163
+ $message .= Mage::helper('paygate')->__("[" . htmlspecialchars($msg->code) . "] " . htmlspecialchars($msg->text));
164
+ }
165
+ if(!count($parsedShippingresponse->messages->message)){
166
+ $message = strip_tags($ShippingResponse);
167
+ }
168
+ } else {
169
+ $ShippingAddressId = $parsedShippingresponse->customerAddressId;
170
+ $payment->setCimShippingAddressid($ShippingAddressId);
171
+ }
172
+ if ($message) {
173
+ $payment->setSkipTransactionCreation(true);
174
+ $this->_deleteCustomerProfile($customerProfileId, $isNew);
175
+ Mage::throwException($message);
176
+ }
177
+ } else {
178
+ $payment->setCimShippingAddressid($shippingProfile);
179
+ $ShippingAddressId = $shippingProfile;
180
+ }
181
+
182
+ /* Transaction Profile */
183
+ $transactionAction = Mage::getStoreConfig(self::XML_PAYMENT_ACTION);
184
+ if ($transactionAction == self::ACTION_AUTHORIZE) {
185
+ $TransactionRequest = $this->_buildTransactionRequest($payment, $customerProfileId, $paymentProfileId, $ShippingAddressId);
186
+ $TransactionResponse = $this->sendRequestViaCurl($TransactionRequest);
187
+ $parsedresponse = simplexml_load_string($TransactionResponse, "SimpleXMLElement", LIBXML_NOWARNING);
188
+
189
+ if (self::RESPONSE_RESULT_CODE != $parsedresponse->messages->resultCode) {
190
+ $payment->setSkipTransactionCreation(true);
191
+ $errorText = $parsedresponse->messages->message->code . "-" . $parsedresponse->messages->message->text;
192
+ $this->_deleteCustomerProfile($customerProfileId, $isNew);
193
+ Mage::throwException($this->_wrapGatewayError($errorText));
194
+ return $this;
195
+ }
196
+ if (isset($parsedresponse->directResponse)) {
197
+ $directResponseFields = explode(",", $parsedresponse->directResponse);
198
+ $responseCode = $directResponseFields[0]; // 1 = Approved 2 = Declined 3 = Error
199
+ if ($responseCode != 1) {
200
+ $errorText = $parsedresponse->messages->message->code . "-" . $parsedresponse->messages->message->text;
201
+ $this->_deleteCustomerProfile($customerProfileId, $isNew);
202
+ Mage::throwException($this->_wrapGatewayError($errorText));
203
+ return $this;
204
+ }
205
+ $responseReasonCode = $directResponseFields[2]; // See http://www.authorize.net/support/AIM_guide.pdf
206
+ $responseReasonText = $directResponseFields[3];
207
+ $approvalCode = $directResponseFields[4]; // Authorization code
208
+
209
+ $cclast4 = $directResponseFields[50]; // CC last 4 digits
210
+ $cctype = $directResponseFields[51]; // CC type
211
+
212
+ $transId = $directResponseFields[6];
213
+ $transId = htmlspecialchars($transId);
214
+ $payment->setCimTransactionid($transId);
215
+ $payment->setTransactionId($transId);
216
+ $payment->setIsTransactionClosed(0);
217
+ }
218
+ } else {
219
+ $TransactionRequest = $this->_buildTransactionCaptureRequest($payment, $customerProfileId, $paymentProfileId, $ShippingAddressId);
220
+ $TransactionResponse = $this->sendRequestViaCurl($TransactionRequest);
221
+ $parsedresponse = simplexml_load_string($TransactionResponse, "SimpleXMLElement", LIBXML_NOWARNING);
222
+ //$parsedresponse = simplexml_load_string($TransactionResponse);
223
+ if (self::RESPONSE_RESULT_CODE != $parsedresponse->messages->resultCode) {
224
+ $payment->setSkipTransactionCreation(true);
225
+ $errorText = $parsedresponse->messages->message->code . "-" . $parsedresponse->messages->message->text;
226
+ $this->_deleteCustomerProfile($customerProfileId, $isNew);
227
+ Mage::throwException($this->_wrapGatewayError($errorText));
228
+ return $this;
229
+ }
230
+ if (isset($parsedresponse->directResponse)) {
231
+ $directResponseFields = explode(",", $parsedresponse->directResponse);
232
+ $responseCode = $directResponseFields[0]; // 1 = Approved 2 = Declined 3 = Error
233
+ if ($responseCode != 1) {
234
+ $errorText = $parsedresponse->messages->message->code . "-" . $transresponse->messages->message->text;
235
+ $this->_deleteCustomerProfile($customerProfileId, $isNew);
236
+ Mage::throwException($this->_wrapGatewayError($errorText));
237
+ return $this;
238
+ }
239
+ $responseReasonCode = $directResponseFields[2]; // See http://www.authorize.net/support/AIM_guide.pdf
240
+ $responseReasonText = $directResponseFields[3];
241
+ $approvalCode = $directResponseFields[4]; // Authorization code
242
+
243
+ $transId = $directResponseFields[6];
244
+ $transId = htmlspecialchars($transId);
245
+
246
+ $cclast4 = $directResponseFields[50]; // CC last 4 digits
247
+ $cctype = $directResponseFields[51]; // CC type
248
+
249
+ $payment->setCimTransactionid($transId);
250
+ $payment->setTransactionId($transId);
251
+ $payment->setIsTransactionClosed(0);
252
+ }
253
+ }
254
+ $cust_email = $billing->getEmail();
255
+ if (!empty($cust_email)) {
256
+ $customer_email = $cust_email;
257
+ } else {
258
+ $quote = Mage::getSingleton('checkout/session')->getQuote();
259
+ $billingAddress = $quote->getBillingAddress();
260
+ $customer_email = $billingAddress->getEmail();
261
+ }
262
+
263
+ /* transaction save */
264
+ $data = array('order_id' => $order->getId(), 'email' => $customer_email, 'cclast4' => $cclast4,
265
+ 'card_type' => $cctype, 'order_payment_id' => $payment->getId(), 'profile_id' => $customerProfileId,
266
+ 'payment_id' => $paymentProfileId, 'shipping_id' => $ShippingAddressId, 'txn_id' => $transId, 'response' => $TransactionResponse);
267
+ $this->saveTransactionDetails($data);
268
+ return $this;
269
+ }
270
+
271
+ /* Send capture request to gateway
272
+
273
+ *
274
+ * @param Varien_Object $payment
275
+ * @param decimal $amount
276
+ * @return Mage_Paygate_Model_Authorizenet
277
+ * @throws Mage_Core_Exception
278
+ */
279
+
280
+ public function capture(Varien_Object $payment, $amount) {
281
+ $transaction_details = $payment->getAuthorizationTransaction();
282
+ if (!empty($transaction_details)) {
283
+ $order_id = $transaction_details->getOrderId();
284
+ $transModel = Mage::getModel('authorizecim/transaction')
285
+ ->getCollection()
286
+ ->addFieldToFilter('order_id', $order_id);
287
+
288
+ if ($transModel->getSize()) {
289
+ $trandaction_profile = $transModel->getFirstItem();
290
+ $customer_profile_id = $trandaction_profile->getProfileId();
291
+ $customer_payment_id = $trandaction_profile->getPaymentId();
292
+ $customer_shipping_id = $trandaction_profile->getShippingId();
293
+ $payment->setAnetTransType(self::REQUEST_TYPE_AUTH_CAPTURE);
294
+ $order = $payment->getOrder();
295
+ $billing = $order->getBillingAddress();
296
+ $payment->setAmount($amount);
297
+ $TransactionRequest = $this->_buildCaptureRequest($payment, $customer_profile_id, $customer_payment_id, $customer_shipping_id);
298
+ $TransactionResponse = $this->sendRequestViaCurl($TransactionRequest);
299
+ $transresponse = simplexml_load_string($TransactionResponse, "SimpleXMLElement", LIBXML_NOWARNING);
300
+ if (isset($transresponse->directResponse)) {
301
+ $directResponseFields = explode(",", $transresponse->directResponse);
302
+ $responseCode = $directResponseFields[0]; // 1 = Approved 2 = Declined 3 = Error
303
+ if ($responseCode == 1) {
304
+ $responseReasonCode = $directResponseFields[2]; // See http://www.authorize.net/support/AIM_guide.pdf
305
+ $responseReasonText = $directResponseFields[3];
306
+ $approvalCode = $directResponseFields[4]; // Authorization code
307
+ $transId = $directResponseFields[6];
308
+ $transId = htmlspecialchars($transId);
309
+
310
+ $cclast4 = $directResponseFields[50];
311
+ $cardType = $directResponseFields[51];
312
+
313
+ $payment->setStatus(self::STATUS_APPROVED);
314
+ $payment->setLastTransId($transId);
315
+ if (!$payment->getParentTransactionId() || $transId != $payment->getParentTransactionId()) {
316
+ $payment->setTransactionId($transId);
317
+ $payment->setIsTransactionClosed(0);
318
+ }
319
+ $payment->setCimTransactionid($transId);
320
+
321
+ /* transaction save */
322
+ $data = array('order_id' => $order->getId(), 'email' => $billing->getEmail(), 'cclast4' => $cclast4,
323
+ 'card_type' => $cardType, 'order_payment_id' => $payment->getId(), 'profile_id' => $customer_profile_id,
324
+ 'payment_id' => $customer_payment_id, 'shipping_id' => $customer_shipping_id, 'txn_id' => $transId, 'response' => $TransactionResponse);
325
+ $this->saveTransactionDetails($data);
326
+ }
327
+
328
+ if (self::RESPONSE_RESULT_CODE != $transresponse->messages->resultCode) {
329
+ $payment->setSkipTransactionCreation(true);
330
+ $errorText = $transresponse->messages->message->code . "-" . $transresponse->messages->message->text;
331
+ Mage::throwException($this->_wrapGatewayError($errorText));
332
+ }
333
+ } else {
334
+ $payment->setSkipTransactionCreation(true);
335
+ Mage::throwException(Mage::helper('paygate')->__('Error in capturing the payment.'));
336
+ }
337
+ } else {
338
+ //Authorize Capture
339
+ $this->authorize_capture($payment, $amount);
340
+ }
341
+ } else {
342
+ //Authorize Capture
343
+ $this->authorize_capture($payment, $amount);
344
+ }
345
+ }
346
+
347
+ protected function authorize_capture(Varien_Object $payment, $amount) {
348
+ $isNew = $message = null;
349
+ $order = $payment->getOrder();
350
+ $total = $order->getBaseGrandTotal();
351
+ $amount = $total; //+$amount;
352
+
353
+ if ($amount <= 0) {
354
+ Mage::throwException(Mage::helper('paygate')->__('Invalid amount for authorization.'));
355
+ }
356
+ $payment->setAmount($amount);
357
+
358
+ $payment_values = Mage::app()->getRequest()->getParam('payment');
359
+ if (array_key_exists('cim_payment_profileid', $payment_values)) {
360
+
361
+ $cim_payment_profileid = $payment_values['cim_payment_profileid'];
362
+ if (!empty($cim_payment_profileid)) {
363
+ $_paymentProfileId = $cim_payment_profileid;
364
+ }
365
+ }
366
+
367
+ $billing = $order->getBillingAddress();
368
+ if (!$billing->getEmail() && Mage::getSingleton('customer/session')->isLoggedIn()) {
369
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
370
+ $billing->setEmail($customer->getEmail());
371
+ }
372
+ $cimCollection = Mage::getModel('authorizecim/transaction')->getCollection()
373
+ ->addFieldToFilter('email', $billing->getEmail());
374
+ if ($cimCollection->getSize()) {
375
+ $customerColection = $cimCollection->getFirstItem();
376
+ $customerProfileId = $customerColection->getProfileId();
377
+ $payment->setCimCustomerProfileid($customerProfileId);
378
+ } else {
379
+ $customerrequest = $this->_buildCustomerRequest($payment);
380
+ $customerresponse = $this->sendRequestViaCurl($customerrequest);
381
+
382
+ $parsedresponse = simplexml_load_string($customerresponse, "SimpleXMLElement", LIBXML_NOWARNING);
383
+
384
+ if (self::RESPONSE_RESULT_CODE != $parsedresponse->messages->resultCode) {
385
+ $payment->setSkipTransactionCreation(true);
386
+ $message = Mage::helper('paygate')->__('The operation failed with the following errors: ');
387
+ foreach ($parsedresponse->messages->message as $msg) {
388
+ $message .= Mage::helper('paygate')->__("[" . htmlspecialchars($msg->code) . "] " . htmlspecialchars($msg->text));
389
+ }
390
+ if(!count($parsedresponse->messages->message)){
391
+ $message = strip_tags($customerresponse);
392
+ }
393
+ } else {
394
+ $isNew = true;
395
+ $customerProfileId = $parsedresponse->customerProfileId;
396
+ $payment->setCimCustomerProfileid($customerProfileId);
397
+ }
398
+ if ($message) {
399
+ $payment->setSkipTransactionCreation(true);
400
+ Mage::throwException($message);
401
+ }
402
+ }
403
+
404
+ if (!empty($_paymentProfileId)) {
405
+ $paymentProfile = $_paymentProfileId;
406
+ } else {
407
+ $paymentProfile = $this->checkPaymentProfile($customerProfileId, $payment);
408
+ }
409
+
410
+ /* Payment Profile */
411
+ if (!$paymentProfile) {
412
+ $request = $this->_buildPaymentRequest($payment, $customerProfileId);
413
+ $Paymentresponse = $this->sendRequestViaCurl($request);
414
+ $parsedPaymentresponse = simplexml_load_string($Paymentresponse, "SimpleXMLElement", LIBXML_NOWARNING);
415
+ if (self::RESPONSE_RESULT_CODE != $parsedPaymentresponse->messages->resultCode) {
416
+ $message = Mage::helper('paygate')->__('The operation failed with the following errors: ');
417
+ foreach ($parsedPaymentresponse->messages->message as $msg) {
418
+ $message .= Mage::helper('paygate')->__("[" . htmlspecialchars($msg->code) . "] " . htmlspecialchars($msg->text));
419
+ }
420
+ if(!count($parsedPaymentresponse->messages->message)){
421
+ $message = strip_tags($Paymentresponse);
422
+ }
423
+ } else {
424
+ $paymentProfileId = $parsedPaymentresponse->customerPaymentProfileId;
425
+ $payment->setCimPaymentProfileid($paymentProfileId);
426
+ }
427
+ if ($message) {
428
+ $payment->setSkipTransactionCreation(true);
429
+ $this->_deleteCustomerProfile($customerProfileId, $isNew);
430
+ Mage::throwException($message);
431
+ }
432
+ } else {
433
+ $payment->setCimPaymentProfileid($paymentProfile);
434
+ $paymentProfileId = $paymentProfile;
435
+ }
436
+
437
+ /* Shipping Profile */
438
+ $shippingProfile = $this->checkShippingProfile($customerProfileId);
439
+
440
+ if (!$shippingProfile) {
441
+ $ShippingRequest = $this->_buildShippingRequest($payment, $customerProfileId);
442
+ $ShippingResponse = $this->sendRequestViaCurl($ShippingRequest);
443
+ $parsedShippingresponse = simplexml_load_string($ShippingResponse, "SimpleXMLElement", LIBXML_NOWARNING);
444
+
445
+ if (self::RESPONSE_RESULT_CODE != $parsedShippingresponse->messages->resultCode) {
446
+ $message = Mage::helper('paygate')->__('The operation failed with the following errors: ');
447
+ foreach ($parsedShippingresponse->messages->message as $msg) {
448
+ $message .= Mage::helper('paygate')->__("[" . htmlspecialchars($msg->code) . "] " . htmlspecialchars($msg->text));
449
+ }
450
+ if(!count($parsedShippingresponse->messages->message)){
451
+ $message = strip_tags($ShippingResponse);
452
+ }
453
+ } else {
454
+ $ShippingAddressId = $parsedShippingresponse->customerAddressId;
455
+ $payment->setCimShippingAddressid($ShippingAddressId);
456
+ }
457
+ if ($message) {
458
+ $payment->setSkipTransactionCreation(true);
459
+ $this->_deleteCustomerProfile($customerProfileId, $isNew);
460
+ Mage::throwException($message);
461
+ }
462
+ } else {
463
+ $payment->setCimShippingAddressid($shippingProfile);
464
+ $ShippingAddressId = $shippingProfile;
465
+ }
466
+
467
+ $TransactionRequest = $this->_buildTransactionCaptureRequest($payment, $customerProfileId, $paymentProfileId, $ShippingAddressId);
468
+ $TransactionResponse = $this->sendRequestViaCurl($TransactionRequest);
469
+ $parsedresponse = simplexml_load_string($TransactionResponse, "SimpleXMLElement", LIBXML_NOWARNING);
470
+ if (self::RESPONSE_RESULT_CODE != $parsedresponse->messages->resultCode) {
471
+ $errorText = $parsedresponse->messages->message->code . "-" . $parsedresponse->messages->message->text;
472
+ $this->_deleteCustomerProfile($customerProfileId, $isNew);
473
+ Mage::throwException($this->_wrapGatewayError($errorText));
474
+ return $this;
475
+ }
476
+
477
+ if (isset($parsedresponse->directResponse)) {
478
+ $directResponseFields = explode(",", $parsedresponse->directResponse);
479
+ $responseCode = $directResponseFields[0]; // 1 = Approved 2 = Declined 3 = Error
480
+
481
+ if ($responseCode != 1) {
482
+ $payment->setSkipTransactionCreation(true);
483
+ $errorText = $parsedresponse->messages->message->code . "-" . $parsedresponse->messages->message->text;
484
+ $this->_deleteCustomerProfile($customerProfileId, $isNew);
485
+ Mage::throwException($this->_wrapGatewayError($errorText));
486
+ return $this;
487
+ }
488
+
489
+ $responseReasonCode = $directResponseFields[2]; // See http://www.authorize.net/support/AIM_guide.pdf
490
+ $responseReasonText = $directResponseFields[3];
491
+ $approvalCode = $directResponseFields[4]; // Authorization code
492
+ $transId = $directResponseFields[6];
493
+ $transId = htmlspecialchars($transId);
494
+
495
+ $cclast4 = $directResponseFields[50];
496
+ $cardType = $directResponseFields[51];
497
+
498
+ $payment->setStatus(self::STATUS_APPROVED);
499
+ $payment->setLastTransId($transId);
500
+ $payment->setCimTransactionid($transId);
501
+ $payment->setTransactionId($transId);
502
+ $payment->setIsTransactionClosed(0);
503
+
504
+ $cust_email = $billing->getEmail();
505
+ if (!empty($cust_email)) {
506
+ $customer_email = $cust_email;
507
+ } else {
508
+ $quote = Mage::getSingleton('checkout/session')->getQuote();
509
+ $billingAddress = $quote->getBillingAddress();
510
+ $customer_email = $billingAddress->getEmail();
511
+ }
512
+
513
+ /* transaction save */
514
+ $data = array('order_id' => $order->getId(), 'email' => $customer_email, 'cclast4' => $cclast4,
515
+ 'card_type' => $cardType, 'order_payment_id' => $payment->getId(), 'profile_id' => $customerProfileId,
516
+ 'payment_id' => $paymentProfileId, 'shipping_id' => $ShippingAddressId, 'txn_id' => $transId, 'response' => $TransactionResponse);
517
+ $this->saveTransactionDetails($data);
518
+ }
519
+ return $this;
520
+ }
521
+
522
+ /**
523
+ * Void the payment through gateway
524
+ *
525
+ * @param Varien_Object $payment
526
+ * @return Mage_Paygate_Model_Authorizenet
527
+ * @throws Mage_Core_Exception
528
+ */
529
+ public function void(Varien_Object $payment) {
530
+ if ($payment->getParentTransactionId()) {
531
+ $payment->setAnetTransType(self::REQUEST_TYPE_VOID);
532
+
533
+ $TransactionRequestArr = $this->_buildVoidRequest($payment, $payment->getCimCustomerProfileid(), $payment->getCimPaymentProfileid(), $payment->getCimShippingAddressid());
534
+ if (is_array($TransactionRequestArr) && count($TransactionRequestArr) > 0) {
535
+ $TransactionRequest = $TransactionRequestArr['req'];
536
+ $TransactionResponse = $this->sendRequestViaCurl($TransactionRequest);
537
+ $transresponse = simplexml_load_string($TransactionResponse, "SimpleXMLElement", LIBXML_NOWARNING);
538
+ if (self::RESPONSE_RESULT_CODE != $transresponse->messages->resultCode) {
539
+ $message = Mage::helper('paygate')->__("The operation failed with the following errors: ");
540
+ foreach ($transresponse->messages->message as $msg) {
541
+ $message .= Mage::helper('paygate')->__("[" . htmlspecialchars($msg->code) . "] " . htmlspecialchars($msg->text));
542
+ }
543
+ if(!count($transresponse->messages->message)){
544
+ $message = strip_tags($TransactionResponse);
545
+ }
546
+ } else {
547
+ if (isset($transresponse->directResponse)) {
548
+ $directResponseFields = explode(",", $transresponse->directResponse);
549
+ $responseCode = $directResponseFields[0]; // 1 = Approved 2 = Declined 3 = Error
550
+ if ($responseCode == 1) {
551
+ $transId = $directResponseFields[6];
552
+ $transId = htmlspecialchars($transId);
553
+
554
+ $cclast4 = $directResponseFields[50];
555
+ $cardType = $directResponseFields[51];
556
+
557
+ $payment->setLastTransId($transId);
558
+ $payment->setIsTransactionClosed(1);
559
+ $order = $payment->getOrder();
560
+ $billing = $order->getBillingAddress();
561
+ $customer_profile_id = $TransactionRequestArr['cpid'];
562
+ $customer_payment_id = $TransactionRequestArr['cppid'];
563
+ $customer_shipping_id = $TransactionRequestArr['csid'];
564
+
565
+ /* transaction save */
566
+ $data = array('order_id' => $order->getId(), 'email' => $billing->getEmail(), 'cclast4' => $cclast4,
567
+ 'card_type' => $cardType, 'order_payment_id' => $payment->getId(), 'profile_id' => $customer_profile_id,
568
+ 'payment_id' => $customer_payment_id, 'shipping_id' => $customer_shipping_id, 'txn_id' => $transId, 'response' => $TransactionResponse);
569
+ $this->saveTransactionDetails($data);
570
+
571
+ $payment->setStatus(self::STATUS_SUCCESS);
572
+ return $this;
573
+ }
574
+ }
575
+ $payment->setSkipTransactionCreation(true);
576
+ $payment->setStatus(self::STATUS_ERROR);
577
+ $errorText = $transresponse->messages->message->code . "-" . $transresponse->messages->message->text;
578
+ Mage::throwException($errorText);
579
+ }
580
+ } else {
581
+ $payment->setSkipTransactionCreation(true);
582
+ $payment->setStatus(self::STATUS_ERROR);
583
+ Mage::throwException(Mage::helper('paygate')->__('Transaction not found.'));
584
+ }
585
+ } else {
586
+ $payment->setSkipTransactionCreation(true);
587
+ $payment->setStatus(self::STATUS_ERROR);
588
+ Mage::throwException(Mage::helper('paygate')->__('Invalid transaction ID.'));
589
+ }
590
+ }
591
+
592
+ public function cancel(Varien_Object $payment) {
593
+ return $this->void($payment);
594
+ }
595
+
596
+ /**
597
+ * Refund the amount
598
+ * Need to decode Last 4 digits for request.
599
+ *
600
+ * @param Varien_Object $payment
601
+ * @param decimal $amount
602
+ * @return Mage_Authorizenet_Model_Directpost
603
+ * @throws Mage_Core_Exception
604
+ */
605
+ public function refund(Varien_Object $payment, $amount) {
606
+ if (!$this->canRefund()) {
607
+ Mage::throwException(Mage::helper('payment')->__('Refund action is not available.'));
608
+ }
609
+ if ($payment->getParentTransactionId()) {
610
+ $order = $payment->getOrder();
611
+ $payment->setAnetTransType(self::REQUEST_TYPE_CREDIT);
612
+ $TransactionRequestArr = $this->_buildRefundRequest($payment, $amount);
613
+ $TransactionRequest = $TransactionRequestArr['req'];
614
+ $TransactionResponse = $this->sendRequestViaCurl($TransactionRequest);
615
+ $transresponse = simplexml_load_string($TransactionResponse, "SimpleXMLElement", LIBXML_NOWARNING);
616
+ if (self::RESPONSE_RESULT_CODE != $transresponse->messages->resultCode) {
617
+ $message = Mage::helper('paygate')->__("The operation failed with the following errors: ");
618
+ foreach ($transresponse->messages->message as $msg) {
619
+ $message .= Mage::helper('paygate')->__("[" . htmlspecialchars($msg->code) . "] " . htmlspecialchars($msg->text));
620
+ }
621
+ if(!count($transresponse->messages->message)){
622
+ $message = strip_tags($TransactionResponse);
623
+ }
624
+ } else {
625
+ if (isset($transresponse->directResponse)) {
626
+ $directResponseFields = explode(",", $transresponse->directResponse);
627
+ $responseCode = $directResponseFields[0]; // 1 = Approved 2 = Declined 3 = Error
628
+ if ($responseCode == 1) {
629
+ $transId = $directResponseFields[6];
630
+ $transId = htmlspecialchars($transId);
631
+
632
+ $cclast4 = $directResponseFields[50];
633
+ $cardType = $directResponseFields[51];
634
+ /**
635
+ * If it is last amount for refund, transaction with type "capture" will be closed
636
+ * and card will has last transaction with type "refund"
637
+ */
638
+ $payment->setLastTransId($transId);
639
+ if (!$payment->getParentTransactionId() || $transId != $payment->getParentTransactionId()) {
640
+ $payment->setTransactionId($transId);
641
+ }
642
+ $payment->setIsTransactionClosed(0);
643
+
644
+ if ($this->_formatAmount($order->getTotalRefunded()) == $this->_formatAmount($order->getTotalInvoiced())) {
645
+ $payment->setIsTransactionClosed(1);
646
+ }
647
+ $payment->setStatus(self::STATUS_SUCCESS);
648
+ $billing = $order->getBillingAddress();
649
+
650
+ /* transaction save */
651
+ $data = array('order_id' => $order->getId(), 'email' => $billing->getEmail(), 'cclast4' => $cclast4,
652
+ 'card_type' => $cardType, 'order_payment_id' => $payment->getId(), 'profile_id' => $TransactionRequestArr['cpid'],
653
+ 'payment_id' => $TransactionRequestArr['cppid'], 'shipping_id' => $TransactionRequestArr['csid'], 'txn_id' => $transId, 'response' => $TransactionResponse);
654
+ $this->saveTransactionDetails($data);
655
+
656
+ return $this;
657
+ }
658
+ }
659
+ }
660
+ $payment->setSkipTransactionCreation(true);
661
+ $payment->setStatus(self::STATUS_ERROR);
662
+ $errorText = $transresponse->messages->message->code . "-" . $transresponse->messages->message->text;
663
+ Mage::throwException(Mage::helper('paygate')->__($errorText));
664
+ return $this;
665
+ } else {
666
+ $payment->setSkipTransactionCreation(true);
667
+ $payment->setStatus(self::STATUS_ERROR);
668
+ Mage::throwException(Mage::helper('paygate')->__('Invalid transaction ID.'));
669
+ return $this;
670
+ }
671
+ }
672
+
673
+ /* save authorizecim transaction details */
674
+
675
+ protected function saveTransactionDetails($data) {
676
+ $transModel = Mage::getModel('authorizecim/transaction');
677
+ $transModel->setData($data)
678
+ ->setCreated(Mage::getModel('core/date')->date())
679
+ ->save();
680
+ return $transModel->getId();
681
+ }
682
+
683
+ }
app/code/local/Sttl/Authorizecim/Model/System/Config/Backend/Encrypted.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Silver Touch Technologies Limited.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
11
+ *
12
+ * @category Sttl
13
+ * @package Sttl_Authorizecim
14
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
15
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
16
+ */
17
+
18
+ class Sttl_Authorizecim_Model_System_Config_Backend_Encrypted extends Mage_Core_Model_Config_Data
19
+ {
20
+
21
+ /**
22
+ * Decrypt value after loading
23
+ *
24
+ */
25
+ protected function _afterLoad()
26
+ {
27
+ $value = (string)$this->getValue();
28
+ if (!empty($value) && ($decrypted = Mage::helper('core')->decrypt($value))) {
29
+ $this->setValue($decrypted);
30
+ }
31
+ }
32
+
33
+ /**
34
+ * Encrypt value before saving
35
+ *
36
+ */
37
+ protected function _beforeSave()
38
+ {
39
+ $value = (string)$this->getValue();
40
+ // don't change value, if an obscured value came
41
+ if (preg_match('/^\*+$/', $this->getValue())) {
42
+ $value = $this->getOldValue();
43
+ }
44
+ if (!empty($value) && ($encrypted = Mage::helper('core')->encrypt($value))) {
45
+ $this->setValue($encrypted);
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Get & decrypt old value from configuration
51
+ *
52
+ * @return string
53
+ */
54
+ public function getOldValue()
55
+ {
56
+ return Mage::helper('core')->decrypt(parent::getOldValue());
57
+ }
58
+ }
app/code/local/Sttl/Authorizecim/Model/System/Config/Source/Cctype.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Silver Touch Technologies Limited.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
11
+ *
12
+ * @category Sttl
13
+ * @package Sttl_Authorizecim
14
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
15
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
16
+ */
17
+
18
+ class Sttl_Authorizecim_Model_System_Config_Source_Cctype extends Mage_Payment_Model_Source_Cctype
19
+ {
20
+ public function getAllowedTypes()
21
+ {
22
+ return array('VI', 'MC', 'AE', 'DI', 'OT');
23
+ }
24
+ }
app/code/local/Sttl/Authorizecim/Model/System/Config/Source/Method.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Silver Touch Technologies Limited.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
11
+ *
12
+ * @category Sttl
13
+ * @package Sttl_Authorizecim
14
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
15
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
16
+ */
17
+ class Sttl_Authorizecim_Model_System_Config_Source_Method
18
+ {
19
+
20
+ /**
21
+ * Options getter
22
+ *
23
+ * @return array
24
+ */
25
+ public function toOptionArray()
26
+ {
27
+ return array(
28
+ array('value' => 'createCustomerProfileRequest', 'label'=>Mage::helper('authorizecim')->__('createCustomerProfileRequest')),
29
+ array('value' => 'createCustomerPaymentProfileRequest', 'label'=>Mage::helper('authorizecim')->__('createCustomerPaymentProfileRequest')),
30
+ array('value' => 'createCustomerShippingAddressRequest', 'label'=>Mage::helper('authorizecim')->__('createCustomerShippingAddressRequest')),
31
+ array('value' => 'createCustomerProfileTransactionRequest', 'label'=>Mage::helper('authorizecim')->__('createCustomerProfileTransactionRequest')),
32
+ array('value' => 'deleteCustomerProfileRequest', 'label'=>Mage::helper('authorizecim')->__('deleteCustomerProfileRequest')),
33
+ array('value' => 'deleteCustomerPaymentProfileRequest', 'label'=>Mage::helper('authorizecim')->__('deleteCustomerPaymentProfileRequest')),
34
+ array('value' => 'deleteCustomerShippingAddressRequest', 'label'=>Mage::helper('authorizecim')->__('deleteCustomerShippingAddressRequest')),
35
+ array('value' => 'getCustomerProfileIdsRequest', 'label'=>Mage::helper('authorizecim')->__('getCustomerProfileIdsRequest')),
36
+ array('value' => 'getCustomerProfileRequest', 'label'=>Mage::helper('authorizecim')->__('getCustomerProfileRequest')),
37
+ array('value' => 'getCustomerPaymentProfileRequest', 'label'=>Mage::helper('authorizecim')->__('getCustomerPaymentProfileRequest')),
38
+ array('value' => 'getCustomerShippingAddressRequest', 'label'=>Mage::helper('authorizecim')->__('getCustomerShippingAddressRequest')),
39
+ array('value' => 'updateCustomerProfileRequest', 'label'=>Mage::helper('authorizecim')->__('updateCustomerProfileRequest')),
40
+ array('value' => 'updateCustomerPaymentProfileRequest', 'label'=>Mage::helper('authorizecim')->__('updateCustomerPaymentProfileRequest')),
41
+ array('value' => 'updateCustomerShippingAddressRequest', 'label'=>Mage::helper('authorizecim')->__('updateCustomerShippingAddressRequest')),
42
+ array('value' => 'updateSplitTenderGroupRequest', 'label'=>Mage::helper('authorizecim')->__('updateSplitTenderGroupRequest')),
43
+ array('value' => 'validateCustomerPaymentProfileRequest', 'label'=>Mage::helper('authorizecim')->__('validateCustomerPaymentProfileRequest')),
44
+ );
45
+ }
46
+
47
+ }
app/code/local/Sttl/Authorizecim/Model/System/Config/Source/PaymentAction.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Silver Touch Technologies Limited.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
11
+ *
12
+ * @category Sttl
13
+ * @package Sttl_Authorizecim
14
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
15
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
16
+ */
17
+ class Sttl_Authorizecim_Model_System_Config_Source_PaymentAction
18
+ {
19
+ public function toOptionArray()
20
+ {
21
+ return array(
22
+ array(
23
+ 'value' => Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE,
24
+ 'label' => Mage::helper('paygate')->__('Authorize Only')
25
+ ),
26
+ array(
27
+ 'value' => Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE_CAPTURE,
28
+ 'label' => Mage::helper('paygate')->__('Authorize and Capture')
29
+ ),
30
+
31
+ );
32
+ }
33
+ }
app/code/local/Sttl/Authorizecim/Model/System/Config/Source/Yesno.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Silver Touch Technologies Limited.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
11
+ *
12
+ * @category Sttl
13
+ * @package Sttl_Authorizecim
14
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
15
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
16
+ */
17
+ class Sttl_Authorizecim_Model_System_Config_Source_Yesno
18
+ {
19
+
20
+ /**
21
+ * Options getter
22
+ *
23
+ * @return array
24
+ */
25
+ public function toOptionArray()
26
+ {
27
+ return array(
28
+ array('value' => 1, 'label'=>Mage::helper('authorizecim')->__('Yes')),
29
+ array('value' => 0, 'label'=>Mage::helper('authorizecim')->__('No')),
30
+ );
31
+ }
32
+
33
+ }
app/code/local/Sttl/Authorizecim/Model/Transaction.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Silver Touch Technologies Limited.
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
12
+ *
13
+ * @category Sttl
14
+ * @package Sttl_Authorizecim
15
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
16
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
17
+ */
18
+ class Sttl_Authorizecim_Model_Transaction extends Mage_Core_Model_Abstract {
19
+
20
+ protected $_collection = null;
21
+ protected $_optionCollection = null;
22
+ protected static $_url = null;
23
+
24
+ public function _construct() {
25
+ parent::_construct();
26
+ $this->_init('authorizecim/transaction');
27
+ }
28
+
29
+ }
app/code/local/Sttl/Authorizecim/etc/config.xml ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Silver Touch Technologies Limited.
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
12
+ *
13
+ * @category Sttl
14
+ * @package Sttl_Authorizecim
15
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
16
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
17
+ */
18
+ -->
19
+ <config>
20
+ <modules>
21
+ <Sttl_Authorizecim>
22
+ <version>1.0.2</version>
23
+ </Sttl_Authorizecim>
24
+ </modules>
25
+ <adminhtml>
26
+ <acl>
27
+ <resources>
28
+ <all>
29
+ <title>Allow Everything</title>
30
+ </all>
31
+ <admin>
32
+ <children>
33
+ <authorizecim>
34
+ <title>Authorize Module</title>
35
+ <sort_order>40</sort_order>
36
+ </authorizecim>
37
+ <system>
38
+ <children>
39
+ <config>
40
+ <children>
41
+ <authorizecim translate="title" module="authorizecim">
42
+ <title>Authorize Setting</title>
43
+ <sort_order>50</sort_order>
44
+ </authorizecim>
45
+ </children>
46
+ </config>
47
+ </children>
48
+ </system>
49
+ </children>
50
+ </admin>
51
+ </resources>
52
+ </acl>
53
+ </adminhtml>
54
+ <global>
55
+ <blocks>
56
+ <authorizecim>
57
+ <class>Sttl_Authorizecim_Block</class>
58
+ </authorizecim>
59
+ </blocks>
60
+ <models>
61
+ <authorizecim>
62
+ <class>Sttl_Authorizecim_Model</class>
63
+ <resourceModel>authorizecim_mysql4</resourceModel>
64
+ </authorizecim>
65
+ <authorizecim_mysql4>
66
+ <class>Sttl_Authorizecim_Model_Mysql4</class>
67
+ <entities>
68
+ <transaction>
69
+ <table>authorizecim_transaction</table>
70
+ </transaction>
71
+ </entities>
72
+ </authorizecim_mysql4>
73
+ </models>
74
+ <helpers>
75
+ <authorizecim>
76
+ <class>Sttl_Authorizecim_Helper</class>
77
+ </authorizecim>
78
+ </helpers>
79
+ <resources>
80
+ <authorizecim_setup>
81
+ <setup>
82
+ <module>Sttl_Authorizecim</module>
83
+ </setup>
84
+ <connection>
85
+ <use>core_setup</use>
86
+ </connection>
87
+ </authorizecim_setup>
88
+ <authorizecim_write>
89
+ <connection>
90
+ <use>core_write</use>
91
+ </connection>
92
+ </authorizecim_write>
93
+ <authorizecim_read>
94
+ <connection>
95
+ <use>core_read</use>
96
+ </connection>
97
+ </authorizecim_read>
98
+ </resources>
99
+ </global>
100
+ <default>
101
+ <payment>
102
+ <authorizecim>
103
+ <active>0</active>
104
+ <display_cc>1</display_cc>
105
+ <title>Credit Card (Authorize.net CIM)</title>
106
+ <model>authorizecim/payment</model>
107
+ <cctypes>AE,VI,MC,DI</cctypes>
108
+ <debug>0</debug>
109
+ <cgi_url>https://apitest.authorize.net/xml/v1/request.api</cgi_url>
110
+ <login backend_model="adminhtml/system_config_backend_encrypted"/>
111
+ <order_status>processing</order_status>
112
+ <payment_action>authorize</payment_action>
113
+ <trans_key backend_model="adminhtml/system_config_backend_encrypted"/>
114
+ <allowspecific>0</allowspecific>
115
+ <currency>USD</currency>
116
+ </authorizecim>
117
+ </payment>
118
+ </default>
119
+ </config>
app/code/local/Sttl/Authorizecim/etc/system.xml ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Silver Touch Technologies Limited.
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
12
+ *
13
+ * @category Sttl
14
+ * @package Sttl_Authorizecim
15
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
16
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
17
+ */
18
+ -->
19
+ <config>
20
+ <sections>
21
+ <payment translate="label" module="authorizecim">
22
+ <groups>
23
+ <authorizecim translate="label">
24
+ <label>Authorize.net CIM</label>
25
+ <frontend_type>text</frontend_type>
26
+ <sort_order>1001</sort_order>
27
+ <show_in_default>1</show_in_default>
28
+ <show_in_website>0</show_in_website>
29
+ <show_in_store>0</show_in_store>
30
+ <fields>
31
+ <active translate="label">
32
+ <label>Authorize CIM Enable</label>
33
+ <frontend_type>select</frontend_type>
34
+ <source_model>authorizecim/system_config_source_yesno</source_model>
35
+ <sort_order>1</sort_order>
36
+ <show_in_default>1</show_in_default>
37
+ <show_in_website>1</show_in_website>
38
+ <show_in_store>1</show_in_store>
39
+ </active>
40
+ <display_cc translate="label">
41
+ <label>Display Old Cards</label>
42
+ <frontend_type>select</frontend_type>
43
+ <source_model>authorizecim/system_config_source_yesno</source_model>
44
+ <sort_order>5</sort_order>
45
+ <show_in_default>1</show_in_default>
46
+ <show_in_website>1</show_in_website>
47
+ <show_in_store>1</show_in_store>
48
+ </display_cc>
49
+ <use_guest translate="label">
50
+ <label>Use for Guest Users</label>
51
+ <frontend_type>select</frontend_type>
52
+ <source_model>authorizecim/system_config_source_yesno</source_model>
53
+ <sort_order>5</sort_order>
54
+ <show_in_default>1</show_in_default>
55
+ <show_in_website>1</show_in_website>
56
+ <show_in_store>1</show_in_store>
57
+ </use_guest>
58
+ <title translate="label">
59
+ <label>Title</label>
60
+ <frontend_type>text</frontend_type>
61
+ <sort_order>10</sort_order>
62
+ <show_in_default>1</show_in_default>
63
+ <show_in_website>1</show_in_website>
64
+ <show_in_store>1</show_in_store>
65
+ </title>
66
+ <login translate="label">
67
+ <label>API Login ID</label>
68
+ <frontend_type>obscure</frontend_type>
69
+ <backend_model>authorizecim/system_config_backend_encrypted</backend_model>
70
+ <sort_order>20</sort_order>
71
+ <show_in_default>1</show_in_default>
72
+ <show_in_website>1</show_in_website>
73
+ <show_in_store>1</show_in_store>
74
+ </login>
75
+ <trans_key translate="label">
76
+ <label>Transaction Key</label>
77
+ <frontend_type>obscure</frontend_type>
78
+ <backend_model>authorizecim/system_config_backend_encrypted</backend_model>
79
+ <sort_order>30</sort_order>
80
+ <show_in_default>1</show_in_default>
81
+ <show_in_website>1</show_in_website>
82
+ <show_in_store>1</show_in_store>
83
+ </trans_key>
84
+ <payment_action translate="label">
85
+ <label>Payment Action</label>
86
+ <frontend_type>select</frontend_type>
87
+ <source_model>authorizecim/system_config_source_paymentAction</source_model>
88
+ <sort_order>40</sort_order>
89
+ <show_in_default>1</show_in_default>
90
+ <show_in_website>1</show_in_website>
91
+ <show_in_store>0</show_in_store>
92
+ </payment_action>
93
+ <order_status translate="label">
94
+ <label>New Order Status</label>
95
+ <frontend_type>select</frontend_type>
96
+ <source_model>adminhtml/system_config_source_order_status_processing</source_model>
97
+ <sort_order>50</sort_order>
98
+ <show_in_default>1</show_in_default>
99
+ <show_in_website>1</show_in_website>
100
+ <show_in_store>0</show_in_store>
101
+ </order_status>
102
+ <cgi_url>
103
+ <label>Gateway URL</label>
104
+ <frontend_type>text</frontend_type>
105
+ <sort_order>70</sort_order>
106
+ <show_in_default>1</show_in_default>
107
+ <show_in_website>1</show_in_website>
108
+ <show_in_store>0</show_in_store>
109
+ </cgi_url>
110
+ <currency translate="label">
111
+ <label>Accepted Currency</label>
112
+ <frontend_type>select</frontend_type>
113
+ <source_model>adminhtml/system_config_source_currency</source_model>
114
+ <sort_order>80</sort_order>
115
+ <show_in_default>1</show_in_default>
116
+ <show_in_website>1</show_in_website>
117
+ <show_in_store>0</show_in_store>
118
+ </currency>
119
+ <debug translate="label">
120
+ <label>Debug</label>
121
+ <frontend_type>select</frontend_type>
122
+ <source_model>adminhtml/system_config_source_yesno</source_model>
123
+ <sort_order>90</sort_order>
124
+ <show_in_default>1</show_in_default>
125
+ <show_in_website>1</show_in_website>
126
+ <show_in_store>0</show_in_store>
127
+ </debug>
128
+ <cctypes translate="label">
129
+ <label>Credit Card Types</label>
130
+ <frontend_type>multiselect</frontend_type>
131
+ <source_model>authorizecim/system_config_source_cctype</source_model>
132
+ <sort_order>100</sort_order>
133
+ <show_in_default>1</show_in_default>
134
+ <show_in_website>1</show_in_website>
135
+ <show_in_store>0</show_in_store>
136
+ </cctypes>
137
+ <useccv translate="label">
138
+ <label>Credit Card Verification</label>
139
+ <frontend_type>select</frontend_type>
140
+ <source_model>adminhtml/system_config_source_yesno</source_model>
141
+ <sort_order>110</sort_order>
142
+ <show_in_default>1</show_in_default>
143
+ <show_in_website>1</show_in_website>
144
+ <show_in_store>0</show_in_store>
145
+ </useccv>
146
+ <allowspecific translate="label">
147
+ <label>Payment from Applicable Countries</label>
148
+ <frontend_type>allowspecific</frontend_type>
149
+ <sort_order>150</sort_order>
150
+ <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
151
+ <show_in_default>1</show_in_default>
152
+ <show_in_website>1</show_in_website>
153
+ <show_in_store>0</show_in_store>
154
+ </allowspecific>
155
+ <specificcountry translate="label">
156
+ <label>Payment from Specific Countries</label>
157
+ <frontend_type>multiselect</frontend_type>
158
+ <sort_order>160</sort_order>
159
+ <source_model>adminhtml/system_config_source_country</source_model>
160
+ <show_in_default>1</show_in_default>
161
+ <show_in_website>1</show_in_website>
162
+ <show_in_store>0</show_in_store>
163
+ </specificcountry>
164
+ <min_order_total translate="label">
165
+ <label>Minimum Order Total</label>
166
+ <frontend_type>text</frontend_type>
167
+ <sort_order>170</sort_order>
168
+ <show_in_default>1</show_in_default>
169
+ <show_in_website>1</show_in_website>
170
+ <show_in_store>0</show_in_store>
171
+ </min_order_total>
172
+ <max_order_total translate="label">
173
+ <label>Maximum Order Total</label>
174
+ <frontend_type>text</frontend_type>
175
+ <sort_order>180</sort_order>
176
+ <show_in_default>1</show_in_default>
177
+ <show_in_website>1</show_in_website>
178
+ <show_in_store>0</show_in_store>
179
+ </max_order_total>
180
+ <sort_order translate="label">
181
+ <label>Sort Order</label>
182
+ <frontend_type>text</frontend_type>
183
+ <sort_order>200</sort_order>
184
+ <show_in_default>1</show_in_default>
185
+ <show_in_website>1</show_in_website>
186
+ <show_in_store>0</show_in_store>
187
+ </sort_order>
188
+ </fields>
189
+ </authorizecim>
190
+ </groups>
191
+ </payment>
192
+ </sections>
193
+ </config>
app/code/local/Sttl/Authorizecim/sql/authorizecim_setup/mysql4-install-1.0.0.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Silver Touch Technologies Limited.
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
12
+ *
13
+ * @category Sttl
14
+ * @package Sttl_Authorizecim
15
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
16
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
17
+ */
18
+ $installer = $this;
19
+
20
+ $installer->startSetup();
21
+ $installer->run("
22
+ CREATE TABLE {$this->getTable('authorizecim/transaction')} (
23
+ `authorize_id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
24
+ `email` VARCHAR( 50 ) NOT NULL,
25
+ `order_id` INT( 11 ) NOT NULL ,
26
+ `order_payment_id` INT( 11 ) NOT NULL ,
27
+ `profile_id` double NOT NULL ,
28
+ `payment_id` double NOT NULL ,
29
+ `shipping_id` double NOT NULL ,
30
+ `txn_id` double NOT NULL ,
31
+ `response` TEXT NOT NULL ,
32
+ `created` DATETIME NOT NULL
33
+ ) ENGINE = innodb;
34
+ ");
35
+
36
+ $installer->endSetup();
37
+ ?>
app/code/local/Sttl/Authorizecim/sql/authorizecim_setup/mysql4-upgrade-1.0.0-1.0.1.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Silver Touch Technologies Limited.
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
12
+ *
13
+ * @category Sttl
14
+ * @package Sttl_Authorizecim
15
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
16
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
17
+ */
18
+ $installer = $this;
19
+
20
+ $installer->startSetup();
21
+ $installer->run("ALTER TABLE {$this->getTable('authorizecim/transaction')} ADD COLUMN `cclast4` VARCHAR(50) NULL;");
22
+ $installer->run("ALTER TABLE {$this->getTable('authorizecim/transaction')} ADD COLUMN `card_type` VARCHAR(50) NULL;");
23
+ $installer->endSetup();
24
+ ?>
app/design/adminhtml/default/default/template/authorizecim/form/cim.phtml ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package default_default
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <?php $_code=$this->getMethodCode() ?>
28
+ <ul id="payment_form_<?php echo $_code ?>" style="display:none">
29
+ <li>
30
+ <div class="input-box">
31
+ <label for="<?php echo $_code ?>_cc_type"><?php echo Mage::helper('payment')->__('Credit Card Type') ?> <span class="required">*</span></label><br/>
32
+ <select id="<?php echo $_code ?>_cc_type" name="payment[cc_type]" class="required-entry validate-cc-type-select">
33
+ <?php $_ccType = $this->getInfoData('cc_type') ?>
34
+ <option value=""></option>
35
+ <?php foreach ($this->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
36
+ <option value="<?php echo $_typeCode ?>" <?php if($_typeCode==$_ccType): ?>selected="selected"<?php endif ?>><?php echo $_typeName ?></option>
37
+ <?php endforeach ?>
38
+ </select>
39
+ </div>
40
+ </li>
41
+ <li>
42
+ <div class="input-box">
43
+ <label for="<?php echo $_code ?>_cc_number"><?php echo Mage::helper('payment')->__('Credit Card Number') ?> <span class="required">*</span></label><br/>
44
+ <input type="text" id="<?php echo $_code ?>_cc_number" name="payment[cc_number]" title="<?php echo Mage::helper('payment')->__('Credit Card Number') ?>" class="input-text validate-cc-number" value="<?php echo $this->getInfoData('cc_number')?>"/>
45
+ </div>
46
+ </li>
47
+ <li>
48
+ <div class="input-box">
49
+ <label for="<?php echo $_code ?>_expiration"><?php echo Mage::helper('payment')->__('Expiration Date') ?> <span class="required">*</span></label><br/>
50
+ <select id="<?php echo $_code ?>_expiration" style="width:140px;" name="payment[cc_exp_month]" class="validate-cc-exp required-entry">
51
+ <?php $_ccExpMonth = $this->getInfoData('cc_exp_month') ?>
52
+ <?php foreach ($this->getCcMonths() as $k=>$v): ?>
53
+ <option value="<?php echo $k ?>" <?php if($k==$_ccExpMonth): ?>selected="selected"<?php endif ?>><?php echo $v ?></option>
54
+ <?php endforeach ?>
55
+ </select>
56
+ <?php $_ccExpYear = $this->getInfoData('cc_exp_year') ?>
57
+ <select id="<?php echo $_code ?>_expiration_yr" style="width:103px;" name="payment[cc_exp_year]" class="required-entry">
58
+ <?php foreach ($this->getCcYears() as $k=>$v): ?>
59
+ <option value="<?php echo $k ? $k : '' ?>" <?php if($k==$_ccExpYear): ?>selected="selected"<?php endif ?>><?php echo $v ?></option>
60
+ <?php endforeach ?>
61
+ </select>
62
+ </div>
63
+ </li>
64
+ <?php if($this->hasVerification()): ?>
65
+ <li>
66
+ <div class="input-box">
67
+ <label for="<?php echo $_code ?>_cc_cid"><?php echo Mage::helper('payment')->__('Card Verification Number') ?> <span class="required">*</span></label><br/>
68
+ <input type="text" title="<?php echo Mage::helper('payment')->__('Card Verification Number') ?>" class="required-entry input-text validate-cc-cvn" id="<?php echo $_code ?>_cc_cid" name="payment[cc_cid]" style="width:3em;" value="<?php echo $this->getInfoData('cc_cid')?>"/>
69
+ </div>
70
+ </li>
71
+ <?php endif; ?>
72
+
73
+ <?php if ($this->hasSsCardType()): ?>
74
+ <li id="<?php echo $_code ?>_cc_type_ss_div">
75
+ <ul class="inner-form">
76
+ <li class="form-alt"><label for="<?php echo $_code ?>_cc_issue" class="required"><em>*</em><?php echo $this->__('Switch/Solo/Maestro Only') ?></label></li>
77
+ <li>
78
+ <label for="<?php echo $_code ?>_cc_issue"><?php echo $this->__('Issue Number') ?>:</label>
79
+ <span class="input-box">
80
+ <input type="text" title="<?php echo $this->__('Issue Number') ?>" class="input-text validate-cc-ukss cvv" id="<?php echo $_code ?>_cc_issue" name="payment[cc_ss_issue]" value="" />
81
+ </span>
82
+ </li>
83
+
84
+ <li>
85
+ <label for="<?php echo $_code ?>_start_month"><?php echo $this->__('Start Date') ?>:</label>
86
+ <div class="input-box">
87
+ <select id="<?php echo $_code ?>_start_month" name="payment[cc_ss_start_month]" class="validate-cc-ukss month">
88
+ <?php foreach ($this->getCcMonths() as $k=>$v): ?>
89
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$this->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
90
+ <?php endforeach ?>
91
+ </select>
92
+ <select id="<?php echo $_code ?>_start_year" name="payment[cc_ss_start_year]" class="validate-cc-ukss year">
93
+ <?php foreach ($this->getSsStartYears() as $k=>$v): ?>
94
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$this->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
95
+ <?php endforeach ?>
96
+ </select>
97
+ </div>
98
+ </li>
99
+ <li class="adv-container">&nbsp;</li>
100
+ </ul>
101
+ <script type="text/javascript">
102
+ //<![CDATA[
103
+ var SSChecked<?php echo $_code ?> = function() {
104
+ var elm = $('<?php echo $_code ?>_cc_type');
105
+ if (['SS','SM','SO'].indexOf(elm.value) != -1) {
106
+ $('<?php echo $_code ?>_cc_type_ss_div').show();
107
+ } else {
108
+ $('<?php echo $_code ?>_cc_type_ss_div').hide();
109
+ }
110
+ };
111
+ Event.observe($('<?php echo $_code ?>_cc_type'), 'change', SSChecked<?php echo $_code ?>);
112
+ SSChecked<?php echo $_code ?>();
113
+ //]]>
114
+ </script>
115
+ </li>
116
+ <?php endif; ?>
117
+ </ul>
app/design/adminhtml/default/default/template/authorizecim/form/cim_1.phtml ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Silver Touch Technologies Limited.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
11
+ *
12
+ * @category Sttl
13
+ * @package Sttl_Authorizecim
14
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
15
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
16
+ */
17
+
18
+ ?>
19
+ <?php $_code=$this->getMethodCode() ?>
20
+ <ul class="form-list" id="payment_form_<?php echo $_code ?>" style="display:none;">
21
+ <?php if(Mage::helper('authorizecim')->displayOldCard()):
22
+ $cards = $this->getOldCreditCard();
23
+ if(!empty($cards)):?>
24
+ <li>
25
+ <label for="cim_payment_profileid" ><?php echo $this->__('Use Old Credit Card') ?></label>
26
+ <div class="input-box">
27
+ <select id="cim_payment_profileid" name="payment[cim_payment_profileid]" class="cc-select" onChange="usecreditcard(this.value)">
28
+ <option value=""><?php echo $this->__('--Please Select--')?></option>
29
+ <?php foreach ($cards as $_typeCode => $_typeName): ?>
30
+ <option value="<?php echo $_typeName['value'] ?>"<?php /*if($_typeName['value']==$_ccType): ?> selected="selected"<?php endif*/ ?>><?php echo $_typeName['label'] ?></option>
31
+ <?php endforeach ?>
32
+ </select>
33
+ </div>
34
+ </li>
35
+ <li>&nbsp;
36
+ </li>
37
+ <?php endif; ?>
38
+ <?php endif; ?>
39
+ <li>
40
+ <ul id="authorizecim_form">
41
+ <li>
42
+ <label for="<?php echo $_code ?>_cc_type" class="required"><em>*</em><?php echo $this->__('Credit Card Type') ?></label>
43
+ <div class="input-box">
44
+ <select id="<?php echo $_code ?>_cc_type" name="payment[cc_type]" class="required-entry validate-cc-type-select">
45
+ <option value=""><?php echo $this->__('--Please Select--')?></option>
46
+ <?php $_ccType = $this->getInfoData('cc_type') ?>
47
+ <?php foreach ($this->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
48
+ <option value="<?php echo $_typeCode ?>"<?php /*if($_typeCode==$_ccType): ?> selected="selected"<?php endif*/ ?>><?php echo $_typeName ?></option>
49
+ <?php endforeach ?>
50
+ </select>
51
+ </div>
52
+ </li>
53
+ <li>
54
+ <label for="<?php echo $_code ?>_cc_number" class="required"><em>*</em><?php echo $this->__('Credit Card Number') ?></label>
55
+ <div class="input-box">
56
+ <input type="text" id="<?php echo $_code ?>_cc_number" name="payment[cc_number]" title="<?php echo $this->__('Credit Card Number') ?>" class="input-text validate-cc-number validate-cc-type" value="" />
57
+ </div>
58
+ </li>
59
+ <li id="<?php echo $_code ?>_cc_type_exp_div">
60
+ <label for="<?php echo $_code ?>_expiration" class="required"><em>*</em><?php echo $this->__('Expiration Date') ?></label>
61
+ <div class="input-box">
62
+ <div class="v-fix">
63
+ <select id="<?php echo $_code ?>_expiration" name="payment[cc_exp_month]" class="month validate-cc-exp required-entry">
64
+ <?php $_ccExpMonth = $this->getInfoData('cc_exp_month') ?>
65
+ <?php foreach ($this->getCcMonths() as $k=>$v): ?>
66
+ <option value="<?php echo $k?$k:'' ?>"<?php /*if($k==$_ccExpMonth): ?> selected="selected"<?php endif*/ ?>><?php echo $v ?></option>
67
+ <?php endforeach ?>
68
+ </select>
69
+ </div>
70
+ <div class="v-fix">
71
+ <?php $_ccExpYear = $this->getInfoData('cc_exp_year') ?>
72
+ <select id="<?php echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" class="year required-entry">
73
+ <?php foreach ($this->getCcYears() as $k=>$v): ?>
74
+ <option value="<?php echo $k?$k:'' ?>"<?php /*if($k==$_ccExpYear): ?> selected="selected"<?php endif*/ ?>><?php echo $v ?></option>
75
+ <?php endforeach ?>
76
+ </select>
77
+ </div>
78
+ </div>
79
+ </li>
80
+ <?php echo $this->getChildHtml() ?>
81
+ <?php if($this->hasVerification()): ?>
82
+ <li id="<?php echo $_code ?>_cc_type_cvv_div">
83
+ <label for="<?php echo $_code ?>_cc_cid" class="required"><em>*</em><?php echo $this->__('Card Verification Number') ?></label>
84
+
85
+ <div class="input-box">
86
+ <div class="v-fix">
87
+ <input type="text" title="<?php echo $this->__('Card Verification Number') ?>" class="input-text cvv required-entry validate-cc-cvn" id="<?php echo $_code ?>_cc_cid" name="payment[cc_cid]" value="" />
88
+ </div>
89
+ <a href="#" class="cvv-what-is-this"><?php echo $this->__('What is this?') ?></a>
90
+ </div>
91
+ </li>
92
+ <?php endif; ?>
93
+ <?php if ($this->hasSsCardType()): ?>
94
+ <li id="<?php echo $_code ?>_cc_type_ss_div">
95
+ <ul class="inner-form">
96
+ <li class="form-alt"><label for="<?php echo $_code ?>_cc_issue" class="required"><em>*</em><?php echo $this->__('Switch/Solo/Maestro Only') ?></label></li>
97
+ <li>
98
+ <label for="<?php echo $_code ?>_cc_issue"><?php echo $this->__('Issue Number') ?>:</label>
99
+ <span class="input-box">
100
+ <input type="text" title="<?php echo $this->__('Issue Number') ?>" class="input-text validate-cc-ukss cvv" id="<?php echo $_code ?>_cc_issue" name="payment[cc_ss_issue]" value="" />
101
+ </span>
102
+ </li>
103
+ <li>
104
+ <label for="<?php echo $_code ?>_start_month"><?php echo $this->__('Start Date') ?>:</label>
105
+ <div class="input-box">
106
+ <div class="v-fix">
107
+ <select id="<?php echo $_code ?>_start_month" name="payment[cc_ss_start_month]" class="validate-cc-ukss month">
108
+ <?php foreach ($this->getCcMonths() as $k=>$v): ?>
109
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$this->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
110
+ <?php endforeach ?>
111
+ </select>
112
+ </div>
113
+ <div class="v-fix">
114
+ <select id="<?php echo $_code ?>_start_year" name="payment[cc_ss_start_year]" class="validate-cc-ukss year">
115
+ <?php foreach ($this->getSsStartYears() as $k=>$v): ?>
116
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$this->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
117
+ <?php endforeach ?>
118
+ </select>
119
+ </div>
120
+ </div>
121
+ </li>
122
+ <li class="adv-container">&nbsp;</li>
123
+ </ul>
124
+ </ul>
125
+ </li>
126
+ <script type="text/javascript">
127
+ //<![CDATA[
128
+ var SSChecked<?php echo $_code ?> = function() {
129
+ var elm = $('<?php echo $_code ?>_cc_type');
130
+ if (['SS','SM','SO'].indexOf(elm.value) != -1) {
131
+ $('<?php echo $_code ?>_cc_type_ss_div').show();
132
+ } else {
133
+ $('<?php echo $_code ?>_cc_type_ss_div').hide();
134
+ }
135
+ };
136
+
137
+ Event.observe($('<?php echo $_code ?>_cc_type'), 'change', SSChecked<?php echo $_code ?>);
138
+ SSChecked<?php echo $_code ?>();
139
+ //]]>
140
+ </script>
141
+ </li>
142
+ <?php endif; ?>
143
+ <script type="text/javascript">
144
+ usecreditcard = function(value) {
145
+
146
+ if (value != "") {
147
+ $('authorizecim_form').hide();
148
+
149
+ $('<?php echo $_code ?>_cc_type').addClassName('required-entry validate-cc-type-select');
150
+ $('<?php echo $_code ?>_cc_number').addClassName('validate-cc-number validate-cc-type');
151
+ $('<?php echo $_code ?>_expiration').addClassName('required-entry');
152
+ $('<?php echo $_code ?>_expiration_yr').addClassName('required-entry');
153
+ } else {
154
+
155
+ $('authorizecim_form').show();
156
+ $('<?php echo $_code ?>_cc_type').removeClassName('required-entry validate-cc-type-select');
157
+ $('<?php echo $_code ?>_cc_number').removeClassName('validate-cc-number validate-cc-type');
158
+ $('<?php echo $_code ?>_expiration').removeClassName('required-entry');
159
+ $('<?php echo $_code ?>_expiration_yr').removeClassName('required-entry');
160
+ }
161
+ };
162
+ </script>
163
+ </ul>
app/design/frontend/base/default/template/authorizecim/form/cim.phtml ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Silver Touch Technologies Limited.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
11
+ *
12
+ * @category Sttl
13
+ * @package Sttl_Authorizecim
14
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
15
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
16
+ */
17
+ ?>
18
+ <?php $_code = $this->getMethodCode() ?>
19
+ <ul class="form-list" id="payment_form_<?php echo $_code ?>" style="display:none;">
20
+ <?php
21
+ $hasCards = false;
22
+ if ($this->helper('authorizecim')->displayOldCard()):
23
+ $cards = $this->getOldCreditCard();
24
+ if (!empty($cards)): $hasCards = true;
25
+ ?>
26
+ <li>
27
+ <label for="cim_payment_profileid" ><?php echo $this->__('Use Saved Cards') ?></label>
28
+ <div class="input-box">
29
+ <select id="cim_payment_profileid" name="payment[cim_payment_profileid]" class="cc-select" onChange="usecreditcard(this.value)">
30
+ <option value=""><?php echo $this->__('--Please Select--') ?></option>
31
+ <?php foreach ($cards as $_typeCode => $_typeName): ?>
32
+ <option value="<?php echo $_typeName['value'] ?>"<?php /* if($_typeName['value']==$_ccType): ?> selected="selected"<?php endif */ ?>><?php echo $_typeName['label'] ?></option>
33
+ <?php endforeach ?>
34
+ </select>
35
+ </div>
36
+ </li>
37
+ <?php endif; ?>
38
+ <?php endif; ?>
39
+ <li>
40
+ <ul id="authorizecim_form"<?php echo ($hasCards ? ' style="margin-top: 15px;"' : ''); ?>>
41
+ <li>
42
+ <label for="<?php echo $_code ?>_cc_type" class="required"><em>*</em><?php echo $this->__('Credit Card Type') ?></label>
43
+ <div class="input-box">
44
+ <select id="<?php echo $_code ?>_cc_type" name="payment[cc_type]" class="required-entry validate-cc-type-select">
45
+ <option value=""><?php echo $this->__('--Please Select--') ?></option>
46
+ <?php $_ccType = $this->getInfoData('cc_type') ?>
47
+ <?php foreach ($this->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
48
+ <option value="<?php echo $_typeCode ?>"<?php if ($_typeCode == $_ccType): ?> selected="selected"<?php endif ?>><?php echo $_typeName ?></option>
49
+ <?php endforeach ?>
50
+ </select>
51
+ </div>
52
+ </li>
53
+ <li>
54
+ <label for="<?php echo $_code ?>_cc_number" class="required"><em>*</em><?php echo $this->__('Credit Card Number') ?></label>
55
+ <div class="input-box">
56
+ <input type="text" id="<?php echo $_code ?>_cc_number" name="payment[cc_number]" title="<?php echo $this->__('Credit Card Number') ?>" class="input-text validate-cc-number validate-cc-type" value="" />
57
+ </div>
58
+ </li>
59
+ <li id="<?php echo $_code ?>_cc_type_exp_div">
60
+ <label for="<?php echo $_code ?>_expiration" class="required"><em>*</em><?php echo $this->__('Expiration Date') ?></label>
61
+ <div class="input-box">
62
+ <div class="v-fix">
63
+ <select id="<?php echo $_code ?>_expiration" name="payment[cc_exp_month]" class="month validate-cc-exp required-entry">
64
+ <?php $_ccExpMonth = $this->getInfoData('cc_exp_month') ?>
65
+ <?php foreach ($this->getCcMonths() as $k => $v): ?>
66
+ <option value="<?php echo $k ? $k : '' ?>"<?php /* if($k==$_ccExpMonth): ?> selected="selected"<?php endif */ ?>><?php echo $v ?></option>
67
+ <?php endforeach ?>
68
+ </select>
69
+ </div>
70
+ <div class="v-fix">
71
+ <?php $_ccExpYear = $this->getInfoData('cc_exp_year') ?>
72
+ <select id="<?php echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" class="year required-entry">
73
+ <?php foreach ($this->getCcYears() as $k => $v): ?>
74
+ <option value="<?php echo $k ? $k : '' ?>"<?php /* if($k==$_ccExpYear): ?> selected="selected"<?php endif */ ?>><?php echo $v ?></option>
75
+ <?php endforeach ?>
76
+ </select>
77
+ </div>
78
+ </div>
79
+ </li>
80
+ <?php echo $this->getChildHtml() ?>
81
+ <?php if ($this->hasVerification()): ?>
82
+ <li id="<?php echo $_code ?>_cc_type_cvv_div">
83
+ <label for="<?php echo $_code ?>_cc_cid" class="required"><em>*</em><?php echo $this->__('Card Verification Number') ?></label>
84
+
85
+ <div class="input-box">
86
+ <div class="v-fix">
87
+ <input type="text" title="<?php echo $this->__('Card Verification Number') ?>" class="input-text cvv required-entry validate-cc-cvn" id="<?php echo $_code ?>_cc_cid" name="payment[cc_cid]" value="" />
88
+ </div>
89
+ <a href="#" class="cvv-what-is-this"><?php echo $this->__('What is this?') ?></a>
90
+ </div>
91
+ </li>
92
+ <?php endif; ?>
93
+ <?php if ($this->hasSsCardType()): ?>
94
+ <li id="<?php echo $_code ?>_cc_type_ss_div">
95
+ <ul class="inner-form">
96
+ <li class="form-alt"><label for="<?php echo $_code ?>_cc_issue" class="required"><em>*</em><?php echo $this->__('Switch/Solo/Maestro Only') ?></label></li>
97
+ <li>
98
+ <label for="<?php echo $_code ?>_cc_issue"><?php echo $this->__('Issue Number') ?>:</label>
99
+ <span class="input-box">
100
+ <input type="text" title="<?php echo $this->__('Issue Number') ?>" class="input-text validate-cc-ukss cvv" id="<?php echo $_code ?>_cc_issue" name="payment[cc_ss_issue]" value="" />
101
+ </span>
102
+ </li>
103
+ <li>
104
+ <label for="<?php echo $_code ?>_start_month"><?php echo $this->__('Start Date') ?>:</label>
105
+ <div class="input-box">
106
+ <div class="v-fix">
107
+ <select id="<?php echo $_code ?>_start_month" name="payment[cc_ss_start_month]" class="validate-cc-ukss month">
108
+ <?php foreach ($this->getCcMonths() as $k => $v): ?>
109
+ <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $this->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
110
+ <?php endforeach ?>
111
+ </select>
112
+ </div>
113
+ <div class="v-fix">
114
+ <select id="<?php echo $_code ?>_start_year" name="payment[cc_ss_start_year]" class="validate-cc-ukss year">
115
+ <?php foreach ($this->getSsStartYears() as $k => $v): ?>
116
+ <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $this->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
117
+ <?php endforeach ?>
118
+ </select>
119
+ </div>
120
+ </div>
121
+ </li>
122
+ <li class="adv-container">&nbsp;</li>
123
+ </ul>
124
+ </li>
125
+ </ul>
126
+ </li>
127
+ <script type="text/javascript">
128
+ //<![CDATA[
129
+ var SSChecked<?php echo $_code ?> = function() {
130
+ var elm = $('<?php echo $_code ?>_cc_type');
131
+ if (['SS', 'SM', 'SO'].indexOf(elm.value) != -1) {
132
+ $('<?php echo $_code ?>_cc_type_ss_div').show();
133
+ } else {
134
+ $('<?php echo $_code ?>_cc_type_ss_div').hide();
135
+ }
136
+ };
137
+
138
+ Event.observe($('<?php echo $_code ?>_cc_type'), 'change', SSChecked<?php echo $_code ?>);
139
+ SSChecked<?php echo $_code ?>();
140
+ //]]>
141
+ </script>
142
+ </li>
143
+ <?php endif; ?>
144
+ </ul>
145
+ <?php if ($hasCards): ?>
146
+ <script type="text/javascript">
147
+ //<![CDATA[
148
+ Event.observe($("cim_payment_profileid"), 'change', function() {
149
+ var val = $("cim_payment_profileid").value;
150
+ usecreditcard(val);
151
+ });
152
+ usecreditcard = function(value) {
153
+ if (value !== "") {
154
+ $('authorizecim_form').hide();
155
+ $('<?php echo $_code ?>_cc_type').addClassName('required-entry validate-cc-type-select');
156
+ $('<?php echo $_code ?>_cc_number').addClassName('validate-cc-number validate-cc-type');
157
+ $('<?php echo $_code ?>_expiration').addClassName('required-entry');
158
+ $('<?php echo $_code ?>_expiration_yr').addClassName('required-entry');
159
+ } else {
160
+ $('authorizecim_form').show();
161
+ $('<?php echo $_code ?>_cc_type').removeClassName('required-entry validate-cc-type-select');
162
+ $('<?php echo $_code ?>_cc_number').removeClassName('validate-cc-number validate-cc-type');
163
+ $('<?php echo $_code ?>_expiration').removeClassName('required-entry');
164
+ $('<?php echo $_code ?>_expiration_yr').removeClassName('required-entry');
165
+ }
166
+ }
167
+ //]]>
168
+ </script>
169
+ <?php endif; ?>
app/etc/modules/Sttl_Authorizecim.xml ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Silver Touch Technologies Limited.
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
12
+ *
13
+ * @category Sttl
14
+ * @package Sttl_Authorizecim
15
+ * @copyright Copyright (c) 2011 Silver Touch Technologies Limited. (http://www.silvertouch.com/MagentoExtensions)
16
+ * @license http://www.silvertouch.com/MagentoExtensions/LICENSE.txt
17
+ */ -->
18
+ <config>
19
+ <modules>
20
+ <Sttl_Authorizecim>
21
+ <active>true</active>
22
+ <codePool>local</codePool>
23
+ <depends>
24
+ <Mage_Payment/>
25
+ </depends>
26
+ </Sttl_Authorizecim>
27
+ </modules>
28
+ </config>
package.xml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Sttl_Authorizecim</name>
4
+ <version>1.0.2</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://www.extension.silvertouch.com/licence">STTL</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Store Customer information on Authorize.net Secure Servers. The method is PCI compliant.</summary>
10
+ <description> The extension does not store CVV information and is thus PCI Compliant.&#xD;
11
+ All credit card related sensitive information will be saved on the Authorize.net secure servers. This makes your website completely SAFE and PCI compliant.&#xD;
12
+ A unique transaction ID will be created with each order. Using this transaction ID, we can capture payment, make refund and partial refund.&#xD;
13
+ Place orders through the Magento back end using the module and get payments in realtime.&#xD;
14
+ Enable/Disable the saved credit card details feature. If it is enabled, customer entered CC details will be automatically stored once the transaction is complete.&#xD;
15
+ The stored Credit Card details are displayed to customers in DROP DOWN to select any one at time of second payment.&#xD;
16
+ Split invoices or Multiple Invoices can also be generated for a single order.</description>
17
+ <notes>Store Customer information on Authorize.net Secure Servers. The method is PCI compliant.</notes>
18
+ <authors><author><name>Silvertouch</name><user>silvertouch</user><email>magento@silvertouch.com</email></author></authors>
19
+ <date>2014-11-27</date>
20
+ <time>07:01:45</time>
21
+ <contents><target name="magelocal"><dir name="Sttl"><dir name="Authorizecim"><dir name="Block"><dir name="Form"><file name="Cim.php" hash="780bb66cabad486addb3b33ef3976849"/></dir><dir name="Info"><file name="Cim.php" hash="29ce6bab73d82dd737222995ec684c7c"/></dir></dir><dir name="Helper"><file name="Data.php" hash="eac908b6e9796b06b46ef430213a1d25"/></dir><dir name="Model"><file name="Api.php" hash="249bd438b1a250f024a4fc8d27278727"/><dir name="Mysql4"><dir name="Transaction"><file name="Collection.php" hash="5ad3dcb791519bfccc34be021fb68572"/></dir><file name="Transaction.php" hash="48fea4dff97f25044ec4a7160fcad446"/></dir><file name="Payment.php" hash="1154efaefabdd467bcaccd79d25b8f80"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Encrypted.php" hash="386fac227eb4d2b27fa607c41a5901b8"/></dir><dir name="Source"><file name="Cctype.php" hash="da072261358e593ccf948ec213677f75"/><file name="Method.php" hash="62c3344c8161b192e237c3cda332557c"/><file name="PaymentAction.php" hash="c73dce91da2f91c3280880ac2d077fe7"/><file name="Yesno.php" hash="82d3d861803882979dd3939b287ff1d6"/></dir></dir></dir><file name="Transaction.php" hash="4bcc439d13e7d49403e2db9f37e53032"/></dir><dir name="etc"><file name="config.xml" hash="cd1edb5e96a8b766e4d35048e84a8ce6"/><file name="system.xml" hash="7656f0b87fca83f0b7f6505a04d6e24d"/></dir><dir name="sql"><dir name="authorizecim_setup"><file name="mysql4-install-1.0.0.php" hash="d77cb5dd3de267977121e5e2a778fbab"/><file name="mysql4-upgrade-1.0.0-1.0.1.php" hash="22793c1493f3cc6f454d75b34c401bd8"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Sttl_Authorizecim.xml" hash="3ac020daad6c9ed617f11c0a15e146c8"/></dir></target><target name="mage"><dir name="."><file name="SILVER_AuthorizeCIM-User_Guide-V.1.0.1.doc" hash="96cd6725fb4804e48862fb9d372b9a4f"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="authorizecim"><dir name="form"><file name="cim.phtml" hash="90230d3f5d218bde9935d8a2fda6b600"/><file name="cim_1.phtml" hash="41eb14bfb9f3fbd0b79b4d22c0cb51a8"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="authorizecim"><dir name="form"><file name="cim.phtml" hash="62aa593c1c31ced3f5c2507940e2ce9c"/></dir></dir></dir></dir></dir></dir></target></contents>
22
+ <compatible/>
23
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
24
+ </package>