/catalog/controller/module/amazon_pay.php

https://gitlab.com/reclamare/mao · PHP · 202 lines · 160 code · 40 blank · 2 comment · 44 complexity · ebcf5dc90c6f5c5e4dce7007fa2e59e0 MD5 · raw file

  1. <?php
  2. class ControllerModuleAmazonPay extends Controller {
  3. public function index() {
  4. $this->load->model('payment/amazon_login_pay');
  5. if ($this->config->get('amazon_login_pay_status') && $this->config->get('amazon_pay_status') && !empty($_SERVER['HTTPS']) && !($this->config->get('amazon_login_pay_minimum_total') > 0 && $this->config->get('amazon_login_pay_minimum_total') > $this->cart->getTotal())) {
  6. // capital L in Amazon cookie name is required, do not alter for coding standards
  7. if (!$this->customer->isLogged() && isset($this->request->cookie['amazon_Login_state_cache'])) {
  8. setcookie('amazon_Login_state_cache', '', time() - 4815162342);
  9. }
  10. $amazon_payment_js = $this->model_payment_amazon_login_pay->getWidgetJs();
  11. $this->document->addScript($amazon_payment_js);
  12. $data['amazon_login_pay_client_id'] = $this->config->get('amazon_login_pay_client_id');
  13. $data['amazon_pay_return_url'] = $this->url->link('module/amazon_pay/login', '', 'SSL');
  14. if ($this->config->get('amazon_login_pay_test') == 'sandbox') {
  15. $data['amazon_login_pay_test'] = true;
  16. }
  17. if ($this->config->get('amazon_pay_button_type')) {
  18. $data['amazon_pay_button_type'] = $this->config->get('amazon_pay_button_type');
  19. } else {
  20. $data['amazon_pay_button_type'] = 'PwA';
  21. }
  22. if ($this->config->get('amazon_pay_button_colour')) {
  23. $data['amazon_pay_button_colour'] = $this->config->get('amazon_pay_button_colour');
  24. } else {
  25. $data['amazon_pay_button_colour'] = 'Gold';
  26. }
  27. if ($this->config->get('amazon_pay_button_size')) {
  28. $data['amazon_pay_button_size'] = $this->config->get('amazon_pay_button_size');
  29. } else {
  30. $data['amazon_pay_button_size'] = 'medium';
  31. }
  32. if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/amazon_pay.tpl')) {
  33. return $this->load->view($this->config->get('config_template') . '/template/module/amazon_pay.tpl', $data);
  34. } else {
  35. return $this->load->view('default/template/module/amazon_pay.tpl', $data);
  36. }
  37. }
  38. }
  39. public function login() {
  40. $this->load->model('payment/amazon_login_pay');
  41. $this->load->model('account/customer');
  42. $this->load->model('account/customer_group');
  43. $this->load->language('payment/amazon_login_pay');
  44. unset($this->session->data['lpa']);
  45. unset($this->session->data['access_token']);
  46. if (isset($this->request->get['access_token'])) {
  47. $this->session->data['access_token'] = $this->request->get['access_token'];
  48. $user = $this->model_payment_amazon_login_pay->getUserInfo($this->request->get['access_token']);
  49. }
  50. if ((array)$user) {
  51. if (isset($user->error)) {
  52. $this->model_payment_amazon_login_pay->logger($user->error . ': ' . $user->error_description);
  53. $this->session->data['lpa']['error'] = $this->language->get('error_login');
  54. $this->response->redirect($this->url->link('payment/amazon_login_pay/loginFailure', '', 'SSL'));
  55. }
  56. if ($this->customer->isLogged() && $this->customer->getEmail() != $user->email) {
  57. $this->session->data['lpa']['error'] = sprintf($this->language->get('error_login_email'), $this->config->get('config_name'));
  58. $this->response->redirect($this->url->link('payment/amazon_login_pay/loginFailure', '', 'SSL'));
  59. } elseif ($this->customer->isLogged()) {
  60. $this->model_payment_amazon_login_pay->logger('isLogged');
  61. $this->response->redirect($this->url->link('payment/amazon_login_pay/address', '', 'SSL'));
  62. }
  63. $customer_info = $this->model_account_customer->getCustomerByEmail($user->email);
  64. $this->model_payment_amazon_login_pay->logger($user);
  65. if ($customer_info) {
  66. if ($this->validate($user->email)) {
  67. unset($this->session->data['guest']);
  68. $this->load->model('account/address');
  69. if ($this->config->get('config_tax_customer') == 'payment') {
  70. $this->session->data['payment_address'] = $this->model_account_address->getAddress($this->customer->getAddressId());
  71. }
  72. if ($this->config->get('config_tax_customer') == 'shipping') {
  73. $this->session->data['shipping_address'] = $this->model_account_address->getAddress($this->customer->getAddressId());
  74. }
  75. $this->load->model('account/activity');
  76. $activity_data = array(
  77. 'customer_id' => $this->customer->getId(),
  78. 'name' => $this->customer->getFirstName() . ' ' . $this->customer->getLastName()
  79. );
  80. $this->model_account_activity->addActivity('login', $activity_data);
  81. $this->model_payment_amazon_login_pay->logger('Customer logged in - ID: ' . $customer_info['customer_id'] . ', Email: ' . $customer_info['email']);
  82. } else {
  83. $this->model_payment_amazon_login_pay->logger('Could not login to - ID: ' . $customer_info['customer_id'] . ', Email: ' . $customer_info['email']);
  84. $this->session->data['lpa']['error'] = $this->language->get('error_login');
  85. $this->response->redirect($this->url->link('payment/amazon_login_pay/loginFailure', '', 'SSL'));
  86. }
  87. $this->response->redirect($this->url->link('payment/amazon_login_pay/address', '', 'SSL'));
  88. } else {
  89. $country_id = 0;
  90. $zone_id = 0;
  91. $full_name = explode(' ', $user->name);
  92. $last_name = array_pop($full_name);
  93. $first_name = implode(' ', $full_name);
  94. $data = array(
  95. 'customer_group_id' => (int)$this->config->get('config_customer_group_id'),
  96. 'firstname' => $first_name,
  97. 'lastname' => $last_name,
  98. 'email' => $user->email,
  99. 'telephone' => '',
  100. 'fax' => '',
  101. 'password' => uniqid(rand(), true),
  102. 'company' => '',
  103. 'address_1' => '',
  104. 'address_2' => '',
  105. 'city' => '',
  106. 'postcode' => '',
  107. 'country_id' => (int)$country_id,
  108. 'zone_id' => (int)$zone_id,
  109. );
  110. $customer_id = $this->model_account_customer->addCustomer($data);
  111. $this->model_payment_amazon_login_pay->logger('Customer ID created: ' . $customer_id);
  112. if ($this->validate($user->email)) {
  113. unset($this->session->data['guest']);
  114. $this->load->model('account/address');
  115. if ($this->config->get('config_tax_customer') == 'payment') {
  116. $this->session->data['payment_address'] = $this->model_account_address->getAddress($this->customer->getAddressId());
  117. }
  118. if ($this->config->get('config_tax_customer') == 'shipping') {
  119. $this->session->data['shipping_address'] = $this->model_account_address->getAddress($this->customer->getAddressId());
  120. }
  121. $this->load->model('account/activity');
  122. $activity_data = array(
  123. 'customer_id' => $this->customer->getId(),
  124. 'name' => $this->customer->getFirstName() . ' ' . $this->customer->getLastName()
  125. );
  126. $this->model_account_activity->addActivity('login', $activity_data);
  127. $this->model_payment_amazon_login_pay->logger('Customer logged in - ID: ' . $customer_id . ', Email: ' . $user->email);
  128. $this->response->redirect($this->url->link('payment/amazon_login_pay/address', '', 'SSL'));
  129. } else {
  130. $this->model_payment_amazon_login_pay->logger('Could not login to - ID: ' . $customer_id . ', Email: ' . $user->email);
  131. $this->session->data['lpa']['error'] = $this->language->get('error_login');
  132. $this->response->redirect($this->url->link('payment/amazon_login_pay/loginFailure', '', 'SSL'));
  133. }
  134. }
  135. } else {
  136. $this->session->data['lpa']['error'] = $this->language->get('error_login');
  137. $this->response->redirect($this->url->link('payment/amazon_login_pay/loginFailure', '', 'SSL'));
  138. }
  139. }
  140. public function logout() {
  141. unset($this->session->data['lpa']);
  142. unset($this->session->data['access_token']);
  143. // capital L in Amazon cookie name is required, do not alter for coding standards
  144. if (isset($this->request->cookie['amazon_Login_state_cache'])) {
  145. setcookie('amazon_Login_state_cache', '', time() - 4815162342);
  146. }
  147. }
  148. protected function validate($email) {
  149. if (!$this->customer->login($email, '', true)) {
  150. $this->error['warning'] = $this->language->get('error_login');
  151. }
  152. $customer_info = $this->model_account_customer->getCustomerByEmail($email);
  153. if ($customer_info && !$customer_info['approved']) {
  154. $this->error['warning'] = $this->language->get('error_approved');
  155. }
  156. if (!$this->error) {
  157. return true;
  158. } else {
  159. return false;
  160. }
  161. }
  162. }