worldpay.php (12852B)
1 <?php 2 class ControllerExtensionPaymentWorldpay extends Controller { 3 private $error = array(); 4 5 public function index() { 6 $this->load->language('extension/payment/worldpay'); 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_worldpay', $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['error_service_key'])) { 21 $data['error_service_key'] = $this->error['error_service_key']; 22 } else { 23 $data['error_service_key'] = ''; 24 } 25 26 if (isset($this->error['error_client_key'])) { 27 $data['error_client_key'] = $this->error['error_client_key']; 28 } else { 29 $data['error_client_key'] = ''; 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/worldpay', 'user_token=' . $this->session->data['user_token'], true) 47 ); 48 49 $data['action'] = $this->url->link('extension/payment/worldpay', '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_worldpay_service_key'])) { 54 $data['payment_worldpay_service_key'] = $this->request->post['payment_worldpay_service_key']; 55 } else { 56 $data['payment_worldpay_service_key'] = $this->config->get('payment_worldpay_service_key'); 57 } 58 59 if (isset($this->request->post['payment_worldpay_client_key'])) { 60 $data['payment_worldpay_client_key'] = $this->request->post['payment_worldpay_client_key']; 61 } else { 62 $data['payment_worldpay_client_key'] = $this->config->get('payment_worldpay_client_key'); 63 } 64 65 if (isset($this->request->post['payment_worldpay_total'])) { 66 $data['payment_worldpay_total'] = $this->request->post['payment_worldpay_total']; 67 } else { 68 $data['payment_worldpay_total'] = $this->config->get('payment_worldpay_total'); 69 } 70 71 if (isset($this->request->post['worldpay_card'])) { 72 $data['worldpay_card'] = $this->request->post['worldpay_card']; 73 } else { 74 $data['worldpay_card'] = $this->config->get('worldpay_card'); 75 } 76 77 if (isset($this->request->post['worldpay_order_status_id'])) { 78 $data['worldpay_order_status_id'] = $this->request->post['worldpay_order_status_id']; 79 } else { 80 $data['worldpay_order_status_id'] = $this->config->get('worldpay_order_status_id'); 81 } 82 83 $this->load->model('localisation/order_status'); 84 85 $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); 86 87 if (isset($this->request->post['worldpay_geo_zone_id'])) { 88 $data['worldpay_geo_zone_id'] = $this->request->post['worldpay_geo_zone_id']; 89 } else { 90 $data['worldpay_geo_zone_id'] = $this->config->get('worldpay_geo_zone_id'); 91 } 92 93 $this->load->model('localisation/geo_zone'); 94 95 $data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones(); 96 97 if (isset($this->request->post['worldpay_status'])) { 98 $data['worldpay_status'] = $this->request->post['worldpay_status']; 99 } else { 100 $data['worldpay_status'] = $this->config->get('worldpay_status'); 101 } 102 103 if (isset($this->request->post['worldpay_debug'])) { 104 $data['worldpay_debug'] = $this->request->post['worldpay_debug']; 105 } else { 106 $data['worldpay_debug'] = $this->config->get('worldpay_debug'); 107 } 108 109 if (isset($this->request->post['worldpay_sort_order'])) { 110 $data['worldpay_sort_order'] = $this->request->post['worldpay_sort_order']; 111 } else { 112 $data['worldpay_sort_order'] = $this->config->get('worldpay_sort_order'); 113 } 114 115 if (isset($this->request->post['worldpay_secret_token'])) { 116 $data['worldpay_secret_token'] = $this->request->post['worldpay_secret_token']; 117 } elseif ($this->config->get('worldpay_secret_token')) { 118 $data['worldpay_secret_token'] = $this->config->get('worldpay_secret_token'); 119 } else { 120 $data['worldpay_secret_token'] = sha1(uniqid(mt_rand(), 1)); 121 } 122 123 $data['worldpay_webhook_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/worldpay/webhook&token=' . $data['worldpay_secret_token']; 124 125 $data['worldpay_cron_job_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/worldpay/cron&token=' . $data['worldpay_secret_token']; 126 127 if ($this->config->get('worldpay_last_cron_job_run')) { 128 $data['worldpay_last_cron_job_run'] = $this->config->get('worldpay_last_cron_job_run'); 129 } else { 130 $data['worldpay_last_cron_job_run'] = ''; 131 } 132 133 $this->load->model('localisation/geo_zone'); 134 135 $data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones(); 136 137 $this->load->model('localisation/order_status'); 138 139 $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); 140 141 if (isset($this->request->post['worldpay_entry_success_status_id'])) { 142 $data['worldpay_entry_success_status_id'] = $this->request->post['worldpay_entry_success_status_id']; 143 } else { 144 $data['worldpay_entry_success_status_id'] = $this->config->get('worldpay_entry_success_status_id'); 145 } 146 147 if (isset($this->request->post['worldpay_entry_failed_status_id'])) { 148 $data['worldpay_entry_failed_status_id'] = $this->request->post['worldpay_entry_failed_status_id']; 149 } else { 150 $data['worldpay_entry_failed_status_id'] = $this->config->get('worldpay_entry_failed_status_id'); 151 } 152 153 if (isset($this->request->post['worldpay_entry_settled_status_id'])) { 154 $data['worldpay_entry_settled_status_id'] = $this->request->post['worldpay_entry_settled_status_id']; 155 } else { 156 $data['worldpay_entry_settled_status_id'] = $this->config->get('worldpay_entry_settled_status_id'); 157 } 158 159 if (isset($this->request->post['worldpay_refunded_status_id'])) { 160 $data['worldpay_refunded_status_id'] = $this->request->post['worldpay_refunded_status_id']; 161 } else { 162 $data['worldpay_refunded_status_id'] = $this->config->get('worldpay_refunded_status_id'); 163 } 164 165 if (isset($this->request->post['worldpay_entry_partially_refunded_status_id'])) { 166 $data['worldpay_entry_partially_refunded_status_id'] = $this->request->post['worldpay_entry_partially_refunded_status_id']; 167 } else { 168 $data['worldpay_entry_partially_refunded_status_id'] = $this->config->get('worldpay_entry_partially_refunded_status_id'); 169 } 170 171 if (isset($this->request->post['worldpay_entry_charged_back_status_id'])) { 172 $data['worldpay_entry_charged_back_status_id'] = $this->request->post['worldpay_entry_charged_back_status_id']; 173 } else { 174 $data['worldpay_entry_charged_back_status_id'] = $this->config->get('worldpay_entry_charged_back_status_id'); 175 } 176 177 if (isset($this->request->post['worldpay_entry_information_requested_status_id'])) { 178 $data['worldpay_entry_information_requested_status_id'] = $this->request->post['worldpay_entry_information_requested_status_id']; 179 } else { 180 $data['worldpay_entry_information_requested_status_id'] = $this->config->get('worldpay_entry_information_requested_status_id'); 181 } 182 183 if (isset($this->request->post['worldpay_entry_information_supplied_status_id'])) { 184 $data['worldpay_entry_information_supplied_status_id'] = $this->request->post['worldpay_entry_information_supplied_status_id']; 185 } else { 186 $data['worldpay_entry_information_supplied_status_id'] = $this->config->get('worldpay_entry_information_supplied_status_id'); 187 } 188 189 if (isset($this->request->post['worldpay_entry_chargeback_reversed_status_id'])) { 190 $data['worldpay_entry_chargeback_reversed_status_id'] = $this->request->post['worldpay_entry_chargeback_reversed_status_id']; 191 } else { 192 $data['worldpay_entry_chargeback_reversed_status_id'] = $this->config->get('worldpay_entry_chargeback_reversed_status_id'); 193 } 194 195 $data['header'] = $this->load->controller('common/header'); 196 $data['column_left'] = $this->load->controller('common/column_left'); 197 $data['footer'] = $this->load->controller('common/footer'); 198 199 $this->response->setOutput($this->load->view('extension/payment/worldpay', $data)); 200 } 201 202 public function install() { 203 $this->load->model('extension/payment/worldpay'); 204 $this->model_extension_payment_worldpay->install(); 205 } 206 207 public function uninstall() { 208 $this->load->model('extension/payment/worldpay'); 209 $this->model_extension_payment_worldpay->uninstall(); 210 } 211 212 public function order() { 213 214 if ($this->config->get('worldpay_status')) { 215 216 $this->load->model('extension/payment/worldpay'); 217 218 $worldpay_order = $this->model_extension_payment_worldpay->getOrder($this->request->get['order_id']); 219 220 if (!empty($worldpay_order)) { 221 $this->load->language('extension/payment/worldpay'); 222 223 $worldpay_order['total_released'] = $this->model_extension_payment_worldpay->getTotalReleased($worldpay_order['worldpay_order_id']); 224 225 $worldpay_order['total_formatted'] = $this->currency->format($worldpay_order['total'], $worldpay_order['currency_code'], false); 226 $worldpay_order['total_released_formatted'] = $this->currency->format($worldpay_order['total_released'], $worldpay_order['currency_code'], false); 227 228 $data['worldpay_order'] = $worldpay_order; 229 230 $data['order_id'] = $this->request->get['order_id']; 231 232 $data['user_token'] = $this->request->get['user_token']; 233 234 return $this->load->view('extension/payment/worldpay_order', $data); 235 } 236 } 237 } 238 239 public function refund() { 240 $this->load->language('extension/payment/worldpay'); 241 $json = array(); 242 243 if (isset($this->request->post['order_id']) && !empty($this->request->post['order_id'])) { 244 $this->load->model('extension/payment/worldpay'); 245 246 $worldpay_order = $this->model_extension_payment_worldpay->getOrder($this->request->post['order_id']); 247 248 $refund_response = $this->model_extension_payment_worldpay->refund($this->request->post['order_id'], $this->request->post['amount']); 249 250 $this->model_extension_payment_worldpay->logger('Refund result: ' . print_r($refund_response, 1)); 251 252 if ($refund_response['status'] == 'success') { 253 $this->model_extension_payment_worldpay->addTransaction($worldpay_order['worldpay_order_id'], 'refund', $this->request->post['amount'] * -1); 254 255 $total_refunded = $this->model_extension_payment_worldpay->getTotalRefunded($worldpay_order['worldpay_order_id']); 256 $total_released = $this->model_extension_payment_worldpay->getTotalReleased($worldpay_order['worldpay_order_id']); 257 258 $this->model_extension_payment_worldpay->updateRefundStatus($worldpay_order['worldpay_order_id'], 1); 259 260 $json['msg'] = $this->language->get('text_refund_ok_order'); 261 $json['data'] = array(); 262 $json['data']['created'] = date("Y-m-d H:i:s"); 263 $json['data']['amount'] = $this->currency->format(($this->request->post['amount'] * -1), $worldpay_order['currency_code'], false); 264 $json['data']['total_released'] = $this->currency->format($total_released, $worldpay_order['currency_code'], false); 265 $json['data']['total_refund'] = $this->currency->format($total_refunded, $worldpay_order['currency_code'], false); 266 $json['data']['refund_status'] = 1; 267 $json['error'] = false; 268 } else { 269 $json['error'] = true; 270 $json['msg'] = isset($refund_response['message']) && !empty($refund_response['message']) ? (string)$refund_response['message'] : 'Unable to refund'; 271 } 272 } else { 273 $json['error'] = true; 274 $json['msg'] = 'Missing data'; 275 } 276 277 $this->response->setOutput(json_encode($json)); 278 } 279 280 protected function validate() { 281 if (!$this->user->hasPermission('modify', 'extension/payment/worldpay')) { 282 $this->error['warning'] = $this->language->get('error_permission'); 283 } 284 285 if (!$this->request->post['payment_worldpay_service_key']) { 286 $this->error['error_service_key'] = $this->language->get('error_service_key'); 287 } 288 289 if (!$this->request->post['payment_worldpay_client_key']) { 290 $this->error['error_client_key'] = $this->language->get('error_client_key'); 291 } 292 293 return !$this->error; 294 } 295 }