/catalog/controller/extension/module/amazon_pay.php

https://gitlab.com/dadangnh/sb1-bon · PHP · 235 lines · 187 code · 46 blank · 2 comment · 52 complexity · 276a45872b60c49d82688071913b6aaf MD5 · raw file

  1. <?php
  2. class ControllerExtensionModuleAmazonPay extends Controller {
  3. public function index() {
  4. $this->load->model('extension/payment/amazon_login_pay');
  5. if ($this->config->get('amazon_login_pay_status') && $this->config->get('amazon_pay_status') && !empty($this->request->server['HTTPS']) && !($this->config->get('amazon_login_pay_minimum_total') > 0 && $this->config->get('amazon_login_pay_minimum_total') > $this->cart->getSubTotal())) {
  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_extension_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. if ($this->config->get('amazon_login_pay_test') == 'sandbox') {
  14. $data['amazon_login_pay_test'] = true;
  15. }
  16. $data['amazon_pay_return_url'] = $this->url->link('extension/module/amazon_pay/login', '', true);
  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 ($this->config->get('amazon_login_pay_language')) {
  33. $data['amazon_login_pay_language'] = $this->config->get('amazon_login_pay_language');
  34. } else {
  35. $data['amazon_login_pay_language'] = 'en-US';
  36. }
  37. return $this->load->view('extension/module/amazon_pay', $data);
  38. }
  39. }
  40. public function login() {
  41. $this->load->model('extension/payment/amazon_login_pay');
  42. $this->load->model('account/customer');
  43. $this->load->model('account/customer_group');
  44. $this->load->language('extension/payment/amazon_login_pay');
  45. unset($this->session->data['lpa']);
  46. unset($this->session->data['access_token']);
  47. if (isset($this->request->get['access_token'])) {
  48. $this->session->data['access_token'] = $this->request->get['access_token'];
  49. $user = $this->model_extension_payment_amazon_login_pay->getUserInfo($this->request->get['access_token']);
  50. } else {
  51. $user = array();
  52. }
  53. if ((array)$user) {
  54. if (isset($user->error)) {
  55. $this->model_extension_payment_amazon_login_pay->logger($user->error . ': ' . $user->error_description);
  56. $this->session->data['lpa']['error'] = $this->language->get('error_login');
  57. $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/loginFailure', '', true));
  58. }
  59. if ($this->customer->isLogged() && $this->customer->getEmail() != $user->email) {
  60. $this->session->data['lpa']['error'] = sprintf($this->language->get('error_login_email'), $this->config->get('config_name'));
  61. $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/loginFailure', '', true));
  62. } elseif ($this->customer->isLogged()) {
  63. $this->model_extension_payment_amazon_login_pay->logger('isLogged');
  64. $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/address', '', true));
  65. }
  66. $customer_info = $this->model_account_customer->getCustomerByEmail($user->email);
  67. $this->model_extension_payment_amazon_login_pay->logger($user);
  68. if ($this->config->get('amazon_login_pay_checkout') == 'guest') {
  69. $full_name = explode(' ', $user->name);
  70. $last_name = array_pop($full_name);
  71. $first_name = implode(' ', $full_name);
  72. $this->session->data['account'] = 'guest';
  73. $this->session->data['guest']['customer_group_id'] = $this->config->get('config_customer_group_id');
  74. $this->session->data['guest']['firstname'] = $first_name;
  75. $this->session->data['guest']['lastname'] = $last_name;
  76. $this->session->data['guest']['email'] = $user->email;
  77. $this->session->data['guest']['telephone'] = '';
  78. $this->session->data['guest']['fax'] = '';
  79. $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/address', '', true));
  80. } else if ($customer_info) {
  81. if ($this->validate($user->email)) {
  82. unset($this->session->data['guest']);
  83. $this->load->model('account/address');
  84. if ($this->config->get('config_tax_customer') == 'payment') {
  85. $payment_address = $this->model_account_address->getAddress($this->customer->getAddressId());
  86. if($payment_address){
  87. $this->session->data['payment_address'] = $payment_address;
  88. }
  89. }
  90. if ($this->config->get('config_tax_customer') == 'shipping') {
  91. $shipping_address = $this->model_account_address->getAddress($this->customer->getAddressId());
  92. if($shipping_address){
  93. $this->session->data['shipping_address'] = $shipping_address;
  94. }
  95. }
  96. if ($this->config->get('config_customer_activity')) {
  97. $this->load->model('account/activity');
  98. $activity_data = array(
  99. 'customer_id' => $this->customer->getId(),
  100. 'name' => $this->customer->getFirstName() . ' ' . $this->customer->getLastName()
  101. );
  102. $this->model_account_activity->addActivity('login', $activity_data);
  103. }
  104. $this->model_extension_payment_amazon_login_pay->logger('Customer logged in - ID: ' . $customer_info['customer_id'] . ', Email: ' . $customer_info['email']);
  105. } else {
  106. $this->model_extension_payment_amazon_login_pay->logger('Could not login to - ID: ' . $customer_info['customer_id'] . ', Email: ' . $customer_info['email']);
  107. $this->session->data['lpa']['error'] = $this->language->get('error_login');
  108. $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/loginFailure', '', true));
  109. }
  110. $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/address', '', true));
  111. } else {
  112. $country_id = 0;
  113. $zone_id = 0;
  114. $full_name = explode(' ', $user->name);
  115. $last_name = array_pop($full_name);
  116. $first_name = implode(' ', $full_name);
  117. $data = array(
  118. 'customer_group_id' => (int)$this->config->get('config_customer_group_id'),
  119. 'firstname' => $first_name,
  120. 'lastname' => $last_name,
  121. 'email' => $user->email,
  122. 'telephone' => '',
  123. 'fax' => '',
  124. 'password' => uniqid(rand(), true),
  125. 'company' => '',
  126. 'address_1' => '',
  127. 'address_2' => '',
  128. 'city' => '',
  129. 'postcode' => '',
  130. 'country_id' => (int)$country_id,
  131. 'zone_id' => (int)$zone_id,
  132. );
  133. $customer_id = $this->model_extension_payment_amazon_login_pay->addCustomer($data);
  134. $this->model_extension_payment_amazon_login_pay->logger('Customer ID created: ' . $customer_id);
  135. if ($this->validate($user->email)) {
  136. unset($this->session->data['guest']);
  137. $this->load->model('account/address');
  138. if ($this->config->get('config_tax_customer') == 'payment') {
  139. $payment_address = $this->model_account_address->getAddress($this->customer->getAddressId());
  140. if($payment_address){
  141. $this->session->data['payment_address'] = $payment_address;
  142. }
  143. }
  144. if ($this->config->get('config_tax_customer') == 'shipping') {
  145. $shipping_address = $this->model_account_address->getAddress($this->customer->getAddressId());
  146. if($shipping_address){
  147. $this->session->data['shipping_address'] = $shipping_address;
  148. }
  149. }
  150. if ($this->config->get('config_customer_activity')) {
  151. $this->load->model('account/activity');
  152. $activity_data = array(
  153. 'customer_id' => $this->customer->getId(),
  154. 'name' => $this->customer->getFirstName() . ' ' . $this->customer->getLastName()
  155. );
  156. $this->model_account_activity->addActivity('login', $activity_data);
  157. }
  158. $this->model_extension_payment_amazon_login_pay->logger('Customer logged in - ID: ' . $customer_id . ', Email: ' . $user->email);
  159. $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/address', '', true));
  160. } else {
  161. $this->model_extension_payment_amazon_login_pay->logger('Could not login to - ID: ' . $customer_id . ', Email: ' . $user->email);
  162. $this->session->data['lpa']['error'] = $this->language->get('error_login');
  163. $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/loginFailure', '', true));
  164. }
  165. }
  166. } else {
  167. $this->session->data['lpa']['error'] = $this->language->get('error_login');
  168. $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/loginFailure', '', true));
  169. }
  170. }
  171. public function logout() {
  172. unset($this->session->data['lpa']);
  173. unset($this->session->data['access_token']);
  174. // capital L in Amazon cookie name is required, do not alter for coding standards
  175. if (isset($this->request->cookie['amazon_Login_state_cache'])) {
  176. setcookie('amazon_Login_state_cache', '', time() - 4815162342);
  177. }
  178. }
  179. protected function validate($email) {
  180. if (!$this->customer->login($email, '', true)) {
  181. $this->error['warning'] = $this->language->get('error_login');
  182. }
  183. $customer_info = $this->model_account_customer->getCustomerByEmail($email);
  184. if ($customer_info && !$customer_info['approved']) {
  185. $this->error['warning'] = $this->language->get('error_approved');
  186. }
  187. return !$this->error;
  188. }
  189. }