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