sagepay_direct.php (9758B)
1 <?php 2 class ControllerExtensionCreditCardSagepayDirect extends Controller { 3 public function index() { 4 if (!$this->customer->isLogged()) { 5 $this->session->data['redirect'] = $this->url->link('account/account', '', true); 6 7 $this->response->redirect($this->url->link('account/login', '', true)); 8 } 9 10 $this->load->language('extension/credit_card/sagepay_direct'); 11 12 $this->load->model('extension/payment/sagepay_direct'); 13 14 $this->document->setTitle($this->language->get('heading_title')); 15 16 $data['breadcrumbs'] = array(); 17 18 $data['breadcrumbs'][] = array( 19 'text' => $this->language->get('text_home'), 20 'href' => $this->url->link('common/home') 21 ); 22 23 $data['breadcrumbs'][] = array( 24 'text' => $this->language->get('text_account'), 25 'href' => $this->url->link('account/account', '', true) 26 ); 27 28 29 if (isset($this->session->data['success'])) { 30 $data['success'] = $this->session->data['success']; 31 unset($this->session->data['success']); 32 } else { 33 $data['success'] = ''; 34 } 35 36 if (isset($this->session->data['error_warning'])) { 37 $data['error_warning'] = $this->session->data['error_warning']; 38 unset($this->session->data['error_warning']); 39 } else { 40 $data['error_warning'] = ''; 41 } 42 43 if ($this->config->get('payment_sagepay_direct_card')) { 44 $data['cards'] = $this->model_extension_payment_sagepay_direct->getCards($this->customer->getId()); 45 $data['delete'] = $this->url->link('extension/credit_card/sagepay_direct/delete', 'card_id=', true); 46 47 if (isset($this->request->get['page'])) { 48 $page = $this->request->get['page']; 49 } else { 50 $page = 1; 51 } 52 53 $cards_total = count($data['cards']); 54 55 $pagination = new Pagination(); 56 $pagination->total = $cards_total; 57 $pagination->page = $page; 58 $pagination->limit = 10; 59 $pagination->url = $this->url->link('extension/credit_card/sagepay_direct', 'page={page}', true); 60 61 $data['pagination'] = $pagination->render(); 62 63 $data['results'] = sprintf($this->language->get('text_pagination'), ($cards_total) ? (($page - 1) * 10) + 1 : 0, ((($page - 1) * 10) > ($cards_total - 10)) ? $cards_total : ((($page - 1) * 10) + 10), $cards_total, ceil($cards_total / 10)); 64 } else { 65 $data['cards'] = false; 66 $data['pagination'] = false; 67 $data['results'] = false; 68 } 69 70 $data['back'] = $this->url->link('account/account', '', true); 71 $data['add'] = $this->url->link('extension/credit_card/sagepay_direct/add', '', true); 72 73 $data['column_left'] = $this->load->controller('common/column_left'); 74 $data['column_right'] = $this->load->controller('common/column_right'); 75 $data['content_top'] = $this->load->controller('common/content_top'); 76 $data['content_bottom'] = $this->load->controller('common/content_bottom'); 77 $data['footer'] = $this->load->controller('common/footer'); 78 $data['header'] = $this->load->controller('common/header'); 79 80 $this->response->setOutput($this->load->view('extension/credit_card/sagepay_direct_list', $data)); 81 } 82 83 public function add() { 84 if (!$this->customer->isLogged()) { 85 $this->session->data['redirect'] = $this->url->link('account/account', '', true); 86 87 $this->response->redirect($this->url->link('account/login', '', true)); 88 } 89 90 $this->load->language('extension/credit_card/sagepay_direct'); 91 92 $this->load->model('extension/payment/sagepay_direct'); 93 94 $this->document->setTitle($this->language->get('heading_title')); 95 96 $data['breadcrumbs'] = array(); 97 98 $data['breadcrumbs'][] = array( 99 'text' => $this->language->get('text_home'), 100 'href' => $this->url->link('common/home') 101 ); 102 103 $data['breadcrumbs'][] = array( 104 'text' => $this->language->get('text_account'), 105 'href' => $this->url->link('account/account', '', true) 106 ); 107 108 $data['add'] = $this->url->link('extension/credit_card/sagepay_direct/addCard', '', true); 109 $data['back'] = $this->url->link('extension/credit_card/sagepay_direct', '', true); 110 111 $data['cards'] = array(); 112 113 $data['cards'][] = array( 114 'text' => 'Visa', 115 'value' => 'VISA' 116 ); 117 118 $data['cards'][] = array( 119 'text' => 'MasterCard', 120 'value' => 'MC' 121 ); 122 123 $data['cards'][] = array( 124 'text' => 'Visa Delta/Debit', 125 'value' => 'DELTA' 126 ); 127 128 $data['cards'][] = array( 129 'text' => 'Solo', 130 'value' => 'SOLO' 131 ); 132 133 $data['cards'][] = array( 134 'text' => 'Maestro', 135 'value' => 'MAESTRO' 136 ); 137 138 $data['cards'][] = array( 139 'text' => 'Visa Electron UK Debit', 140 'value' => 'UKE' 141 ); 142 143 $data['cards'][] = array( 144 'text' => 'American Express', 145 'value' => 'AMEX' 146 ); 147 148 $data['cards'][] = array( 149 'text' => 'Diners Club', 150 'value' => 'DC' 151 ); 152 153 $data['cards'][] = array( 154 'text' => 'Japan Credit Bureau', 155 'value' => 'JCB' 156 ); 157 158 $data['months'] = array(); 159 160 for ($i = 1; $i <= 12; $i++) { 161 $data['months'][] = array( 162 'text' => strftime('%B', mktime(0, 0, 0, $i, 1, 2000)), 163 'value' => sprintf('%02d', $i) 164 ); 165 } 166 167 $today = getdate(); 168 169 $data['year_valid'] = array(); 170 171 for ($i = $today['year'] - 10; $i < $today['year'] + 1; $i++) { 172 $data['year_valid'][] = array( 173 'text' => strftime('%Y', mktime(0, 0, 0, 1, 1, $i)), 174 'value' => strftime('%Y', mktime(0, 0, 0, 1, 1, $i)) 175 ); 176 } 177 178 $data['year_expire'] = array(); 179 180 for ($i = $today['year']; $i < $today['year'] + 11; $i++) { 181 $data['year_expire'][] = array( 182 'text' => strftime('%Y', mktime(0, 0, 0, 1, 1, $i)), 183 'value' => strftime('%Y', mktime(0, 0, 0, 1, 1, $i)) 184 ); 185 } 186 187 $data['column_left'] = $this->load->controller('common/column_left'); 188 $data['column_right'] = $this->load->controller('common/column_right'); 189 $data['content_top'] = $this->load->controller('common/content_top'); 190 $data['content_bottom'] = $this->load->controller('common/content_bottom'); 191 $data['footer'] = $this->load->controller('common/footer'); 192 $data['header'] = $this->load->controller('common/header'); 193 194 $this->response->setOutput($this->load->view('extension/credit_card/sagepay_direct_form', $data)); 195 } 196 197 public function delete() { 198 $this->load->language('extension/credit_card/sagepay_direct'); 199 $this->load->model('extension/payment/sagepay_direct'); 200 201 $card = $this->model_extension_payment_sagepay_direct->getCard($this->request->get['card_id'], false); 202 203 if (!empty($card['token'])) { 204 if ($this->config->get('payment_sagepay_direct_test') == 'live') { 205 $url = 'https://live.sagepay.com/gateway/service/removetoken.vsp'; 206 } else { 207 $url = 'https://test.sagepay.com/gateway/service/removetoken.vsp'; 208 } 209 210 $payment_data['VPSProtocol'] = '3.00'; 211 $payment_data['Vendor'] = $this->config->get('payment_sagepay_direct_vendor'); 212 $payment_data['TxType'] = 'REMOVETOKEN'; 213 $payment_data['Token'] = $card['token']; 214 215 $response_data = $this->model_extension_payment_sagepay_direct->sendCurl($url, $payment_data); 216 217 if ($response_data['Status'] == 'OK') { 218 $this->model_extension_payment_sagepay_direct->deleteCard($this->request->get['card_id']); 219 220 $this->session->data['success'] = $this->language->get('text_success_card'); 221 } else { 222 $this->session->data['error_warning'] = $this->language->get('text_fail_card'); 223 } 224 } else { 225 $this->session->data['error_warning'] = $this->language->get('text_fail_card'); 226 } 227 228 $this->response->redirect($this->url->link('acredit_card/sagepay_direct', '', true)); 229 } 230 231 public function addCard() { 232 $this->load->language('extension/credit_card/sagepay_direct'); 233 $this->load->model('checkout/order'); 234 $this->load->model('extension/payment/sagepay_direct'); 235 236 $payment_data = array(); 237 238 if ($this->config->get('payment_sagepay_direct_test') == 'live') { 239 $url = 'https://live.sagepay.com/gateway/service/directtoken.vsp'; 240 } else { 241 $url = 'https://test.sagepay.com/gateway/service/directtoken.vsp'; 242 } 243 $payment_data['VPSProtocol'] = '3.00'; 244 245 $payment_data['ReferrerID'] = 'E511AF91-E4A0-42DE-80B0-09C981A3FB61'; 246 $payment_data['TxType'] = 'TOKEN'; 247 $payment_data['Vendor'] = $this->config->get('payment_sagepay_direct_vendor'); 248 $payment_data['Currency'] = $this->session->data['currency']; 249 $payment_data['CardHolder'] = $this->request->post['cc_owner']; 250 $payment_data['CardNumber'] = $this->request->post['cc_number']; 251 $payment_data['ExpiryDate'] = $this->request->post['cc_expire_date_month'] . substr($this->request->post['cc_expire_date_year'], 2); 252 $payment_data['CV2'] = $this->request->post['cc_cvv2']; 253 $payment_data['CardType'] = $this->request->post['cc_type']; 254 255 $response_data = $this->model_extension_payment_sagepay_direct->sendCurl($url, $payment_data); 256 257 if ($response_data['Status'] == 'OK') { 258 $card_data = array(); 259 $card_data['customer_id'] = $this->customer->getId(); 260 $card_data['Token'] = $response_data['Token']; 261 $card_data['Last4Digits'] = substr(str_replace(' ', '', $payment_data['CardNumber']), -4, 4); 262 $card_data['ExpiryDate'] = $this->request->post['cc_expire_date_month'] . '/' . substr($this->request->post['cc_expire_date_year'], 2); 263 $card_data['CardType'] = $payment_data['CardType']; 264 $this->model_extension_payment_sagepay_direct->addCard($card_data); 265 $this->session->data['success'] = $this->language->get('text_success_add_card'); 266 } else { 267 $this->session->data['error_warning'] = $response_data['Status'] . ': ' . $response_data['StatusDetail']; 268 $this->model_extension_payment_sagepay_direct->logger('Response data: ', $this->session->data['error_warning']); 269 } 270 271 $this->response->redirect($this->url->link('extension/credit_card/sagepay_direct', '', true)); 272 } 273 }