sagepay_direct.php (14701B)
1 <?php 2 class ControllerExtensionPaymentSagepayDirect extends Controller { 3 private $error = array(); 4 5 public function index() { 6 $this->load->language('extension/payment/sagepay_direct'); 7 8 $this->document->setTitle($this->language->get('heading_title')); 9 10 $this->load->model('setting/setting'); 11 12 if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { 13 $this->model_setting_setting->editSetting('payment_sagepay_direct', $this->request->post); 14 15 $this->session->data['success'] = $this->language->get('text_success'); 16 17 $this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true)); 18 } 19 20 if (isset($this->error['warning'])) { 21 $data['error_warning'] = $this->error['warning']; 22 } else { 23 $data['error_warning'] = ''; 24 } 25 26 if (isset($this->error['vendor'])) { 27 $data['error_vendor'] = $this->error['vendor']; 28 } else { 29 $data['error_vendor'] = ''; 30 } 31 32 $data['breadcrumbs'] = array(); 33 34 $data['breadcrumbs'][] = array( 35 'text' => $this->language->get('text_home'), 36 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) 37 ); 38 39 $data['breadcrumbs'][] = array( 40 'text' => $this->language->get('text_extension'), 41 'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true) 42 ); 43 44 $data['breadcrumbs'][] = array( 45 'text' => $this->language->get('heading_title'), 46 'href' => $this->url->link('extension/payment/sagepay_direct', 'user_token=' . $this->session->data['user_token'], true) 47 ); 48 49 $data['action'] = $this->url->link('extension/payment/sagepay_direct', 'user_token=' . $this->session->data['user_token'], true); 50 51 $data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true); 52 53 if (isset($this->request->post['payment_sagepay_direct_vendor'])) { 54 $data['payment_sagepay_direct_vendor'] = $this->request->post['payment_sagepay_direct_vendor']; 55 } else { 56 $data['payment_sagepay_direct_vendor'] = $this->config->get('payment_sagepay_direct_vendor'); 57 } 58 59 if (isset($this->request->post['payment_sagepay_direct_password'])) { 60 $data['payment_sagepay_direct_password'] = $this->request->post['payment_sagepay_direct_password']; 61 } else { 62 $data['payment_sagepay_direct_password'] = $this->config->get('payment_sagepay_direct_password'); 63 } 64 65 if (isset($this->request->post['payment_sagepay_direct_test'])) { 66 $data['payment_sagepay_direct_test'] = $this->request->post['payment_sagepay_direct_test']; 67 } else { 68 $data['payment_sagepay_direct_test'] = $this->config->get('payment_sagepay_direct_test'); 69 } 70 71 if (isset($this->request->post['payment_sagepay_direct_transaction'])) { 72 $data['payment_sagepay_direct_transaction'] = $this->request->post['payment_sagepay_direct_transaction']; 73 } else { 74 $data['payment_sagepay_direct_transaction'] = $this->config->get('payment_sagepay_direct_transaction'); 75 } 76 77 if (isset($this->request->post['payment_sagepay_direct_total'])) { 78 $data['payment_sagepay_direct_total'] = $this->request->post['payment_sagepay_direct_total']; 79 } else { 80 $data['payment_sagepay_direct_total'] = $this->config->get('payment_sagepay_direct_total'); 81 } 82 83 if (isset($this->request->post['payment_sagepay_direct_card'])) { 84 $data['payment_sagepay_direct_card'] = $this->request->post['payment_sagepay_direct_card']; 85 } else { 86 $data['payment_sagepay_direct_card'] = $this->config->get('payment_sagepay_direct_card'); 87 } 88 89 if (isset($this->request->post['payment_sagepay_direct_order_status_id'])) { 90 $data['payment_sagepay_direct_order_status_id'] = $this->request->post['payment_sagepay_direct_order_status_id']; 91 } else { 92 $data['payment_sagepay_direct_order_status_id'] = $this->config->get('payment_sagepay_direct_order_status_id'); 93 } 94 95 $this->load->model('localisation/order_status'); 96 97 $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); 98 99 if (isset($this->request->post['payment_sagepay_direct_geo_zone_id'])) { 100 $data['payment_sagepay_direct_geo_zone_id'] = $this->request->post['payment_sagepay_direct_geo_zone_id']; 101 } else { 102 $data['payment_sagepay_direct_geo_zone_id'] = $this->config->get('payment_sagepay_direct_geo_zone_id'); 103 } 104 105 $this->load->model('localisation/geo_zone'); 106 107 $data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones(); 108 109 if (isset($this->request->post['payment_sagepay_direct_status'])) { 110 $data['payment_sagepay_direct_status'] = $this->request->post['payment_sagepay_direct_status']; 111 } else { 112 $data['payment_sagepay_direct_status'] = $this->config->get('payment_sagepay_direct_status'); 113 } 114 115 if (isset($this->request->post['payment_sagepay_direct_debug'])) { 116 $data['payment_sagepay_direct_debug'] = $this->request->post['payment_sagepay_direct_debug']; 117 } else { 118 $data['payment_sagepay_direct_debug'] = $this->config->get('payment_sagepay_direct_debug'); 119 } 120 121 if (isset($this->request->post['payment_sagepay_direct_sort_order'])) { 122 $data['payment_sagepay_direct_sort_order'] = $this->request->post['payment_sagepay_direct_sort_order']; 123 } else { 124 $data['payment_sagepay_direct_sort_order'] = $this->config->get('payment_sagepay_direct_sort_order'); 125 } 126 127 if (isset($this->request->post['payment_sagepay_direct_cron_job_token'])) { 128 $data['payment_sagepay_direct_cron_job_token'] = $this->request->post['payment_sagepay_direct_cron_job_token']; 129 } elseif ($this->config->get('payment_sagepay_direct_cron_job_token')) { 130 $data['payment_sagepay_direct_cron_job_token'] = $this->config->get('payment_sagepay_direct_cron_job_token'); 131 } else { 132 $data['payment_sagepay_direct_cron_job_token'] = sha1(uniqid(mt_rand(), 1)); 133 } 134 135 $data['sagepay_direct_cron_job_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/sagepay_direct/cron&token=' . $data['payment_sagepay_direct_cron_job_token']; 136 137 if ($this->config->get('payment_sagepay_direct_last_cron_job_run')) { 138 $data['payment_sagepay_direct_last_cron_job_run'] = $this->config->get('payment_sagepay_direct_last_cron_job_run'); 139 } else { 140 $data['payment_sagepay_direct_last_cron_job_run'] = ''; 141 } 142 143 $data['header'] = $this->load->controller('common/header'); 144 $data['column_left'] = $this->load->controller('common/column_left'); 145 $data['footer'] = $this->load->controller('common/footer'); 146 147 $this->response->setOutput($this->load->view('extension/payment/sagepay_direct', $data)); 148 } 149 150 public function install() { 151 $this->load->model('extension/payment/sagepay_direct'); 152 $this->model_extension_payment_sagepay_direct->install(); 153 } 154 155 public function uninstall() { 156 $this->load->model('extension/payment/sagepay_direct'); 157 $this->model_extension_payment_sagepay_direct->uninstall(); 158 } 159 160 public function order() { 161 if ($this->config->get('payment_sagepay_direct_status')) { 162 $this->load->model('extension/payment/sagepay_direct'); 163 164 $sagepay_direct_order = $this->model_extension_payment_sagepay_direct->getOrder($this->request->get['order_id']); 165 166 if (!empty($sagepay_direct_order)) { 167 $this->load->language('extension/payment/sagepay_direct'); 168 169 $sagepay_direct_order['total_released'] = $this->model_extension_payment_sagepay_direct->getTotalReleased($sagepay_direct_order['sagepay_direct_order_id']); 170 171 $sagepay_direct_order['total_formatted'] = $this->currency->format($sagepay_direct_order['total'], $sagepay_direct_order['currency_code'], false, false); 172 $sagepay_direct_order['total_released_formatted'] = $this->currency->format($sagepay_direct_order['total_released'], $sagepay_direct_order['currency_code'], false, false); 173 174 $data['sagepay_direct_order'] = $sagepay_direct_order; 175 176 $data['auto_settle'] = $sagepay_direct_order['settle_type']; 177 178 $data['order_id'] = $this->request->get['order_id']; 179 180 $data['user_token'] = $this->request->get['user_token']; 181 182 return $this->load->view('extension/payment/sagepay_direct_order', $data); 183 } 184 } 185 } 186 187 public function void() { 188 $this->load->language('extension/payment/sagepay_direct'); 189 $json = array(); 190 191 if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '') { 192 $this->load->model('extension/payment/sagepay_direct'); 193 194 $sagepay_direct_order = $this->model_extension_payment_sagepay_direct->getOrder($this->request->post['order_id']); 195 196 $void_response = $this->model_extension_payment_sagepay_direct->void($this->request->post['order_id']); 197 198 $this->model_extension_payment_sagepay_direct->logger('Void result', $void_response); 199 200 if ($void_response['Status'] == 'OK') { 201 $this->model_extension_payment_sagepay_direct->addTransaction($sagepay_direct_order['sagepay_direct_order_id'], 'void', 0.00); 202 $this->model_extension_payment_sagepay_direct->updateVoidStatus($sagepay_direct_order['sagepay_direct_order_id'], 1); 203 204 $json['msg'] = $this->language->get('text_void_ok'); 205 206 $json['data'] = array(); 207 $json['data']['date_added'] = date("Y-m-d H:i:s"); 208 $json['error'] = false; 209 } else { 210 $json['error'] = true; 211 $json['msg'] = isset($void_response['StatuesDetail']) && !empty($void_response['StatuesDetail']) ? (string)$void_response['StatuesDetail'] : 'Unable to void'; 212 } 213 } else { 214 $json['error'] = true; 215 $json['msg'] = 'Missing data'; 216 } 217 218 $this->response->addHeader('Content-Type: application/json'); 219 $this->response->setOutput(json_encode($json)); 220 } 221 222 public function release() { 223 $this->load->language('extension/payment/sagepay_direct'); 224 $json = array(); 225 226 if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '' && isset($this->request->post['amount']) && $this->request->post['amount'] > 0) { 227 $this->load->model('extension/payment/sagepay_direct'); 228 229 $sagepay_direct_order = $this->model_extension_payment_sagepay_direct->getOrder($this->request->post['order_id']); 230 231 $release_response = $this->model_extension_payment_sagepay_direct->release($this->request->post['order_id'], $this->request->post['amount']); 232 233 $this->model_extension_payment_sagepay_direct->logger('Release result', $release_response); 234 235 if ($release_response['Status'] == 'OK') { 236 $this->model_extension_payment_sagepay_direct->addTransaction($sagepay_direct_order['sagepay_direct_order_id'], 'payment', $this->request->post['amount']); 237 238 $total_released = $this->model_extension_payment_sagepay_direct->getTotalReleased($sagepay_direct_order['sagepay_direct_order_id']); 239 240 if ($total_released >= $sagepay_direct_order['total'] || $sagepay_direct_order['settle_type'] == 0) { 241 $this->model_extension_payment_sagepay_direct->updateReleaseStatus($sagepay_direct_order['sagepay_direct_order_id'], 1); 242 $release_status = 1; 243 $json['msg'] = $this->language->get('text_release_ok_order'); 244 } else { 245 $release_status = 0; 246 $json['msg'] = $this->language->get('text_release_ok'); 247 } 248 249 $json['data'] = array(); 250 $json['data']['date_added'] = date("Y-m-d H:i:s"); 251 $json['data']['amount'] = $this->request->post['amount']; 252 $json['data']['release_status'] = $release_status; 253 $json['data']['total'] = (float)$total_released; 254 $json['error'] = false; 255 } else { 256 $json['error'] = true; 257 $json['msg'] = isset($release_response['StatusDetail']) && !empty($release_response['StatusDetail']) ? (string)$release_response['StatusDetail'] : 'Unable to release'; 258 } 259 } else { 260 $json['error'] = true; 261 $json['msg'] = $this->language->get('error_data_missing'); 262 } 263 264 $this->response->addHeader('Content-Type: application/json'); 265 $this->response->setOutput(json_encode($json)); 266 } 267 268 public function rebate() { 269 $this->load->language('extension/payment/sagepay_direct'); 270 $json = array(); 271 272 if (isset($this->request->post['order_id']) && !empty($this->request->post['order_id'])) { 273 $this->load->model('extension/payment/sagepay_direct'); 274 275 $sagepay_direct_order = $this->model_extension_payment_sagepay_direct->getOrder($this->request->post['order_id']); 276 277 $rebate_response = $this->model_extension_payment_sagepay_direct->rebate($this->request->post['order_id'], $this->request->post['amount']); 278 279 $this->model_extension_payment_sagepay_direct->logger('Rebate result', $rebate_response); 280 281 if ($rebate_response['Status'] == 'OK') { 282 $this->model_extension_payment_sagepay_direct->addTransaction($sagepay_direct_order['sagepay_direct_order_id'], 'rebate', $this->request->post['amount'] * -1); 283 284 $total_rebated = $this->model_extension_payment_sagepay_direct->getTotalRebated($sagepay_direct_order['sagepay_direct_order_id']); 285 $total_released = $this->model_extension_payment_sagepay_direct->getTotalReleased($sagepay_direct_order['sagepay_direct_order_id']); 286 287 if ($total_released <= 0 && $sagepay_direct_order['release_status'] == 1) { 288 $this->model_extension_payment_sagepay_direct->updateRebateStatus($sagepay_direct_order['sagepay_direct_order_id'], 1); 289 $rebate_status = 1; 290 $json['msg'] = $this->language->get('text_rebate_ok_order'); 291 } else { 292 $rebate_status = 0; 293 $json['msg'] = $this->language->get('text_rebate_ok'); 294 } 295 296 $json['data'] = array(); 297 $json['data']['date_added'] = date("Y-m-d H:i:s"); 298 $json['data']['amount'] = $this->request->post['amount'] * -1; 299 $json['data']['total_released'] = (float)$total_released; 300 $json['data']['total_rebated'] = (float)$total_rebated; 301 $json['data']['rebate_status'] = $rebate_status; 302 $json['error'] = false; 303 } else { 304 $json['error'] = true; 305 $json['msg'] = isset($rebate_response['StatusDetail']) && !empty($rebate_response['StatusDetail']) ? (string)$rebate_response['StatusDetail'] : 'Unable to rebate'; 306 } 307 } else { 308 $json['error'] = true; 309 $json['msg'] = 'Missing data'; 310 } 311 312 $this->response->addHeader('Content-Type: application/json'); 313 $this->response->setOutput(json_encode($json)); 314 } 315 316 protected function validate() { 317 if (!$this->user->hasPermission('modify', 'extension/payment/sagepay_direct')) { 318 $this->error['warning'] = $this->language->get('error_permission'); 319 } 320 321 if (!$this->request->post['payment_sagepay_direct_vendor']) { 322 $this->error['vendor'] = $this->language->get('error_vendor'); 323 } 324 325 return !$this->error; 326 } 327 }