amazon_pay.php (9143B)
1 <?php 2 class ControllerExtensionModuleAmazonPay extends Controller { 3 public function index() { 4 5 $this->load->model('extension/payment/amazon_login_pay'); 6 7 if ($this->config->get('payment_amazon_login_pay_status') && $this->config->get('amazon_pay_status') && !empty($this->request->server['HTTPS']) && !($this->config->get('payment_amazon_login_pay_minimum_total') > 0 && $this->config->get('payment_amazon_login_pay_minimum_total') > $this->cart->getSubTotal())) { 8 // capital L in Amazon cookie name is required, do not alter for coding standards 9 if (!$this->customer->isLogged() && isset($this->request->cookie['amazon_Login_state_cache'])) { 10 setcookie('amazon_Login_state_cache', '', time() - 4815162342); 11 } 12 13 $amazon_payment_js = $this->model_extension_payment_amazon_login_pay->getWidgetJs(); 14 $this->document->addScript($amazon_payment_js); 15 16 $data['payment_amazon_login_pay_client_id'] = $this->config->get('payment_amazon_login_pay_client_id'); 17 18 if ($this->config->get('payment_amazon_login_pay_test') == 'sandbox') { 19 $data['payment_amazon_login_pay_test'] = true; 20 } 21 22 $data['amazon_pay_return_url'] = $this->url->link('extension/module/amazon_pay/login', '', true); 23 24 if ($this->config->get('amazon_pay_button_type')) { 25 $data['amazon_pay_button_type'] = $this->config->get('amazon_pay_button_type'); 26 } else { 27 $data['amazon_pay_button_type'] = 'PwA'; 28 } 29 30 if ($this->config->get('amazon_pay_button_colour')) { 31 $data['amazon_pay_button_colour'] = $this->config->get('amazon_pay_button_colour'); 32 } else { 33 $data['amazon_pay_button_colour'] = 'Gold'; 34 } 35 36 if ($this->config->get('amazon_pay_button_size')) { 37 $data['amazon_pay_button_size'] = $this->config->get('amazon_pay_button_size'); 38 } else { 39 $data['amazon_pay_button_size'] = 'medium'; 40 } 41 42 if ($this->config->get('payment_amazon_login_pay_language')) { 43 $data['payment_amazon_login_pay_language'] = $this->config->get('payment_amazon_login_pay_language'); 44 } else { 45 $data['payment_amazon_login_pay_language'] = 'en-US'; 46 } 47 48 return $this->load->view('extension/module/amazon_pay', $data); 49 } 50 } 51 52 public function login() { 53 $this->load->model('extension/payment/amazon_login_pay'); 54 $this->load->model('account/customer'); 55 $this->load->model('account/customer_group'); 56 $this->load->language('extension/payment/amazon_login_pay'); 57 58 unset($this->session->data['lpa']); 59 unset($this->session->data['access_token']); 60 61 if (isset($this->request->get['access_token'])) { 62 $this->session->data['access_token'] = $this->request->get['access_token']; 63 $user = $this->model_extension_payment_amazon_login_pay->getUserInfo($this->request->get['access_token']); 64 } else { 65 $user = array(); 66 } 67 68 if ((array)$user) { 69 if (isset($user->error)) { 70 $this->model_extension_payment_amazon_login_pay->logger($user->error . ': ' . $user->error_description); 71 $this->session->data['lpa']['error'] = $this->language->get('error_login'); 72 $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/loginFailure', '', true)); 73 } 74 75 if ($this->customer->isLogged() && $this->customer->getEmail() != $user->email) { 76 $this->session->data['lpa']['error'] = sprintf($this->language->get('error_login_email'), $this->config->get('config_name')); 77 $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/loginFailure', '', true)); 78 } elseif ($this->customer->isLogged()) { 79 $this->model_extension_payment_amazon_login_pay->logger('isLogged'); 80 $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/address', '', true)); 81 } 82 83 $customer_info = $this->model_account_customer->getCustomerByEmail($user->email); 84 $this->model_extension_payment_amazon_login_pay->logger($user); 85 86 if ($this->config->get('payment_amazon_login_pay_checkout') == 'guest') { 87 $full_name = explode(' ', $user->name); 88 $last_name = array_pop($full_name); 89 $first_name = implode(' ', $full_name); 90 $this->session->data['account'] = 'guest'; 91 $this->session->data['guest']['customer_group_id'] = $this->config->get('config_customer_group_id'); 92 $this->session->data['guest']['firstname'] = $first_name; 93 $this->session->data['guest']['lastname'] = $last_name; 94 $this->session->data['guest']['email'] = $user->email; 95 $this->session->data['guest']['telephone'] = ''; 96 $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/address', '', true)); 97 } else if ($customer_info) { 98 if ($this->validate($user->email)) { 99 unset($this->session->data['guest']); 100 101 $this->load->model('account/address'); 102 103 if ($this->config->get('config_tax_customer') == 'payment') { 104 $payment_address = $this->model_account_address->getAddress($this->customer->getAddressId()); 105 if($payment_address){ 106 $this->session->data['payment_address'] = $payment_address; 107 } 108 } 109 110 if ($this->config->get('config_tax_customer') == 'shipping') { 111 $shipping_address = $this->model_account_address->getAddress($this->customer->getAddressId()); 112 if($shipping_address){ 113 $this->session->data['shipping_address'] = $shipping_address; 114 } 115 } 116 117 $this->model_extension_payment_amazon_login_pay->logger('Customer logged in - ID: ' . $customer_info['customer_id'] . ', Email: ' . $customer_info['email']); 118 } else { 119 $this->model_extension_payment_amazon_login_pay->logger('Could not login to - ID: ' . $customer_info['customer_id'] . ', Email: ' . $customer_info['email']); 120 $this->session->data['lpa']['error'] = $this->language->get('error_login'); 121 $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/loginFailure', '', true)); 122 } 123 124 $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/address', '', true)); 125 } else { 126 $country_id = 0; 127 $zone_id = 0; 128 129 $full_name = explode(' ', $user->name); 130 $last_name = array_pop($full_name); 131 $first_name = implode(' ', $full_name); 132 133 $data = array( 134 'customer_group_id' => (int)$this->config->get('config_customer_group_id'), 135 'firstname' => $first_name, 136 'lastname' => $last_name, 137 'email' => $user->email, 138 'telephone' => '', 139 'password' => uniqid(rand(), true), 140 'company' => '', 141 'address_1' => '', 142 'address_2' => '', 143 'city' => '', 144 'postcode' => '', 145 'country_id' => (int)$country_id, 146 'zone_id' => (int)$zone_id, 147 ); 148 149 $customer_id = $this->model_extension_payment_amazon_login_pay->addCustomer($data); 150 151 $this->model_extension_payment_amazon_login_pay->logger('Customer ID created: ' . $customer_id); 152 153 if ($this->validate($user->email)) { 154 unset($this->session->data['guest']); 155 156 $this->load->model('account/address'); 157 158 if ($this->config->get('config_tax_customer') == 'payment') { 159 $payment_address = $this->model_account_address->getAddress($this->customer->getAddressId()); 160 if($payment_address){ 161 $this->session->data['payment_address'] = $payment_address; 162 } 163 } 164 165 if ($this->config->get('config_tax_customer') == 'shipping') { 166 $shipping_address = $this->model_account_address->getAddress($this->customer->getAddressId()); 167 if($shipping_address){ 168 $this->session->data['shipping_address'] = $shipping_address; 169 } 170 } 171 172 $this->model_extension_payment_amazon_login_pay->logger('Customer logged in - ID: ' . $customer_id . ', Email: ' . $user->email); 173 $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/address', '', true)); 174 } else { 175 $this->model_extension_payment_amazon_login_pay->logger('Could not login to - ID: ' . $customer_id . ', Email: ' . $user->email); 176 $this->session->data['lpa']['error'] = $this->language->get('error_login'); 177 $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/loginFailure', '', true)); 178 } 179 } 180 } else { 181 182 $this->session->data['lpa']['error'] = $this->language->get('error_login'); 183 $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/loginFailure', '', true)); 184 } 185 } 186 187 public function logout() { 188 unset($this->session->data['lpa']); 189 unset($this->session->data['access_token']); 190 191 // capital L in Amazon cookie name is required, do not alter for coding standards 192 if (isset($this->request->cookie['amazon_Login_state_cache'])) { 193 setcookie('amazon_Login_state_cache', '', time() - 4815162342); 194 } 195 } 196 197 protected function validate($email) { 198 if (!$this->customer->login($email, '', true)) { 199 $this->error['warning'] = $this->language->get('error_login'); 200 } 201 202 $customer_info = $this->model_account_customer->getCustomerByEmail($email); 203 204 if ($customer_info && !$customer_info['status']) { 205 $this->error['warning'] = $this->language->get('error_approved'); 206 } 207 208 return !$this->error; 209 } 210 211 }