PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/catalog/controller/extension/credit_card/sagepay_direct.php

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