realex.php (13984B)
1 <?php 2 class ControllerExtensionPaymentRealex extends Controller { 3 public function index() { 4 $this->load->language('extension/payment/realex'); 5 6 $data['entry_cc_type'] = $this->language->get('entry_cc_type'); 7 8 $data['help_select_card'] = $this->language->get('help_select_card'); 9 10 $data['button_confirm'] = $this->language->get('button_confirm'); 11 12 $this->load->model('checkout/order'); 13 14 $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']); 15 16 if ($this->config->get('payment_realex_live_demo') == 1) { 17 $data['action'] = $this->config->get('payment_realex_live_url'); 18 } else { 19 $data['action'] = $this->config->get('payment_realex_demo_url'); 20 } 21 22 if ($this->config->get('payment_realex_card_select') == 1) { 23 $card_types = array( 24 'visa' => $this->language->get('text_card_visa'), 25 'mc' => $this->language->get('text_card_mc'), 26 'amex' => $this->language->get('text_card_amex'), 27 'switch' => $this->language->get('text_card_switch'), 28 'laser' => $this->language->get('text_card_laser'), 29 'diners' => $this->language->get('text_card_diners'), 30 ); 31 32 $data['cards'] = array(); 33 34 $accounts = $this->config->get('payment_realex_account'); 35 36 foreach ($accounts as $card => $account) { 37 if (isset($account['enabled']) && $account['enabled'] == 1) { 38 $data['cards'][] = array( 39 'type' => $card_types[$card], 40 'account' => (isset($account['default']) && $account['default'] == 1 ? $this->config->get('payment_realex_merchant_id') : $account['merchant_id']), 41 ); 42 } 43 } 44 45 $data['card_select'] = true; 46 } else { 47 $data['card_select'] = false; 48 } 49 50 if ($this->config->get('payment_realex_auto_settle') == 0) { 51 $data['settle'] = 0; 52 } elseif ($this->config->get('payment_realex_auto_settle') == 1) { 53 $data['settle'] = 1; 54 } elseif ($this->config->get('payment_realex_auto_settle') == 2) { 55 $data['settle'] = 'MULTI'; 56 } 57 58 $data['tss'] = (int)$this->config->get('payment_realex_tss_check'); 59 $data['merchant_id'] = $this->config->get('payment_realex_merchant_id'); 60 61 $data['timestamp'] = strftime("%Y%m%d%H%M%S"); 62 $data['order_id'] = $this->session->data['order_id'] . 'T' . $data['timestamp'] . mt_rand(1, 999); 63 64 $data['amount'] = round($this->currency->format($order_info['total'], $order_info['currency_code'], $order_info['currency_value'], false) * 100); 65 $data['currency'] = $order_info['currency_code']; 66 67 $tmp = $data['timestamp'] . '.' . $data['merchant_id'] . '.' . $data['order_id'] . '.' . $data['amount'] . '.' . $data['currency']; 68 $hash = sha1($tmp); 69 $tmp = $hash . '.' . $this->config->get('payment_realex_secret'); 70 $data['hash'] = sha1($tmp); 71 72 $data['billing_code'] = filter_var(str_replace('-', '', $order_info['payment_postcode']), FILTER_SANITIZE_NUMBER_INT) . '|' . filter_var(str_replace('-', '', $order_info['payment_address_1']), FILTER_SANITIZE_NUMBER_INT); 73 $data['payment_country'] = $order_info['payment_iso_code_2']; 74 75 if ($this->cart->hasShipping()) { 76 $data['shipping_code'] = filter_var(str_replace('-', '', $order_info['shipping_postcode']), FILTER_SANITIZE_NUMBER_INT) . '|' . filter_var(str_replace('-', '', $order_info['shipping_address_1']), FILTER_SANITIZE_NUMBER_INT); 77 $data['shipping_country'] = $order_info['shipping_iso_code_2']; 78 } else { 79 $data['shipping_code'] = filter_var(str_replace('-', '', $order_info['payment_postcode']), FILTER_SANITIZE_NUMBER_INT) . '|' . filter_var(str_replace('-', '', $order_info['payment_address_1']), FILTER_SANITIZE_NUMBER_INT); 80 $data['shipping_country'] = $order_info['payment_iso_code_2']; 81 } 82 83 $data['response_url'] = HTTPS_SERVER . 'index.php?route=extension/payment/realex/notify'; 84 85 return $this->load->view('extension/payment/realex', $data); 86 } 87 88 public function notify() { 89 $this->load->model('extension/payment/realex'); 90 91 $this->model_extension_payment_realex->logger(print_r($this->request->post, 1)); 92 93 $this->load->language('extension/payment/realex'); 94 95 $hash = sha1($this->request->post['TIMESTAMP'] . '.' . $this->config->get('payment_realex_merchant_id') . '.' . $this->request->post['ORDER_ID'] . '.' . $this->request->post['RESULT'] . '.' . $this->request->post['MESSAGE'] . '.' . $this->request->post['PASREF'] . '.' . $this->request->post['AUTHCODE']); 96 $tmp = $hash . '.' . $this->config->get('payment_realex_secret'); 97 $hash = sha1($tmp); 98 99 //Check to see if hashes match or not 100 if ($hash != $this->request->post['SHA1HASH']) { 101 $data['text_response'] = $this->language->get('text_hash_failed'); 102 $data['text_link'] = sprintf($this->language->get('text_link'), $this->url->link('checkout/checkout', '', true)); 103 } else { 104 $this->load->model('checkout/order'); 105 106 $order_id_parts = explode('T', $this->request->post['ORDER_ID']); 107 $order_id = (int)$order_id_parts[0]; 108 109 $order_info = $this->model_checkout_order->getOrder($order_id); 110 111 $auto_settle = (int)$this->config->get('payment_realex_auto_settle'); 112 $tss = (int)$this->config->get('payment_realex_tss_check'); 113 114 $message = '<strong>' . $this->language->get('text_result') . ':</strong> ' . $this->request->post['RESULT']; 115 $message .= '<br /><strong>' . $this->language->get('text_message') . ':</strong> ' . $this->request->post['MESSAGE']; 116 117 if (isset($this->request->post['ORDER_ID'])) { 118 $message .= '<br /><strong>' . $this->language->get('text_order_ref') . ':</strong> ' . $this->request->post['ORDER_ID']; 119 } 120 121 if (isset($this->request->post['CVNRESULT'])) { 122 $message .= '<br /><strong>' . $this->language->get('text_cvn_result') . ':</strong> ' . $this->request->post['CVNRESULT']; 123 } 124 125 if (isset($this->request->post['AVSPOSTCODERESULT'])) { 126 $message .= '<br /><strong>' . $this->language->get('text_avs_postcode') . ':</strong> ' . $this->request->post['AVSPOSTCODERESULT']; 127 } 128 129 if (isset($this->request->post['AVSADDRESSRESULT'])) { 130 $message .= '<br /><strong>' . $this->language->get('text_avs_address') . ':</strong> ' . $this->request->post['AVSADDRESSRESULT']; 131 } 132 133 //3D Secure message 134 if (isset($this->request->post['ECI']) && isset($this->request->post['CAVV']) && isset($this->request->post['XID'])) { 135 $eci = $this->request->post['ECI']; 136 137 if (($this->request->post['ECI'] == 6 || $this->request->post['ECI'] == 1) && empty($this->request->post['CAVV']) && empty($this->request->post['XID'])) { 138 $scenario_id = 1; 139 } 140 141 if (($this->request->post['ECI'] == 5 || $this->request->post['ECI'] == 0) && !empty($this->request->post['CAVV']) && !empty($this->request->post['XID'])) { 142 $scenario_id = 5; 143 } 144 145 if (($this->request->post['ECI'] == 6 || $this->request->post['ECI'] == 1) && !empty($this->request->post['CAVV']) && !empty($this->request->post['XID'])) { 146 $scenario_id = 6; 147 } 148 149 if (isset($scenario_id)) { 150 $scenario_message = $this->language->get('text_3d_s' . $scenario_id); 151 } else { 152 if (isset($this->request->post['CARDTYPE'])) { 153 if ($this->request->post['CARDTYPE'] == 'VISA') { 154 $eci = 7; 155 } else { 156 $eci = 2; 157 } 158 } 159 160 $scenario_message = $this->language->get('text_3d_liability'); 161 } 162 163 $message .= '<br /><strong>' . $this->language->get('text_eci') . ':</strong> (' . $eci . ') ' . $scenario_message; 164 } 165 166 if ($tss == 1 && isset($this->request->post['TSS'])) { 167 $message .= '<br /><strong>' . $this->language->get('text_tss') . ':</strong> ' . $this->request->post['TSS']; 168 } 169 170 if (isset($this->request->post['TIMESTAMP'])) { 171 $message .= '<br /><strong>' . $this->language->get('text_timestamp') . ':</strong> ' . $this->request->post['TIMESTAMP']; 172 } 173 174 if (isset($this->request->post['CARDDIGITS'])) { 175 $message .= '<br /><strong>' . $this->language->get('text_card_digits') . ':</strong> ' . $this->request->post['CARDDIGITS']; 176 } 177 178 if (isset($this->request->post['CARDTYPE'])) { 179 $message .= '<br /><strong>' . $this->language->get('text_card_type') . ':</strong> ' . $this->request->post['CARDTYPE']; 180 } 181 182 if (isset($this->request->post['EXPDATE'])) { 183 $message .= '<br /><strong>' . $this->language->get('text_card_exp') . ':</strong> ' . $this->request->post['EXPDATE']; 184 } 185 186 if (isset($this->request->post['CARDNAME'])) { 187 $message .= '<br /><strong>' . $this->language->get('text_card_name') . ':</strong> ' . $this->request->post['CARDNAME']; 188 } 189 190 if (isset($this->request->post['DCCAUTHCARDHOLDERAMOUNT']) && isset($this->request->post['DCCAUTHRATE'])) { 191 $message .= '<br /><strong>DCCAUTHCARDHOLDERAMOUNT:</strong> ' . $this->request->post['DCCAUTHCARDHOLDERAMOUNT']; 192 $message .= '<br /><strong>DCCAUTHRATE:</strong> ' . $this->request->post['DCCAUTHRATE']; 193 $message .= '<br /><strong>DCCAUTHCARDHOLDERCURRENCY:</strong> ' . $this->request->post['DCCAUTHCARDHOLDERCURRENCY']; 194 $message .= '<br /><strong>DCCAUTHMERCHANTCURRENCY:</strong> ' . $this->request->post['DCCAUTHMERCHANTCURRENCY']; 195 $message .= '<br /><strong>DCCAUTHMERCHANTAMOUNT:</strong> ' . $this->request->post['DCCAUTHMERCHANTAMOUNT']; 196 $message .= '<br /><strong>DCCCCP:</strong> ' . $this->request->post['DCCCCP']; 197 $message .= '<br /><strong>DCCRATE:</strong> ' . $this->request->post['DCCRATE']; 198 $message .= '<br /><strong>DCCMARGINRATEPERCENTAGE:</strong> ' . $this->request->post['DCCMARGINRATEPERCENTAGE']; 199 $message .= '<br /><strong>DCCEXCHANGERATESOURCENAME:</strong> ' . $this->request->post['DCCEXCHANGERATESOURCENAME']; 200 $message .= '<br /><strong>DCCCOMMISSIONPERCENTAGE:</strong> ' . $this->request->post['DCCCOMMISSIONPERCENTAGE']; 201 $message .= '<br /><strong>DCCEXCHANGERATESOURCETIMESTAMP:</strong> ' . $this->request->post['DCCEXCHANGERATESOURCETIMESTAMP']; 202 $message .= '<br /><strong>DCCCHOICE:</strong> ' . $this->request->post['DCCCHOICE']; 203 } 204 205 if ($this->request->post['RESULT'] == "00") { 206 $realex_order_id = $this->model_extension_payment_realex->addOrder($order_info, $this->request->post['PASREF'], $this->request->post['AUTHCODE'], $this->request->post['ACCOUNT'], $this->request->post['ORDER_ID']); 207 208 if ($auto_settle == 1) { 209 $this->model_extension_payment_realex->addTransaction($realex_order_id, 'payment', $order_info); 210 $this->model_checkout_order->addOrderHistory($order_id, $this->config->get('payment_realex_order_status_success_settled_id'), $message, false); 211 } else { 212 $this->model_extension_payment_realex->addTransaction($realex_order_id, 'auth', 0.00); 213 $this->model_checkout_order->addOrderHistory($order_id, $this->config->get('payment_realex_order_status_success_unsettled_id'), $message, false); 214 } 215 216 $data['text_response'] = $this->language->get('text_success'); 217 $data['text_link'] = sprintf($this->language->get('text_link'), $this->url->link('checkout/success', '', true)); 218 } elseif ($this->request->post['RESULT'] == "101") { 219 // Decline 220 $this->model_extension_payment_realex->addHistory($order_id, $this->config->get('payment_realex_order_status_decline_id'), $message); 221 $data['text_response'] = $this->language->get('text_decline'); 222 $data['text_link'] = sprintf($this->language->get('text_link'), $this->url->link('checkout/checkout', '', true)); 223 } elseif ($this->request->post['RESULT'] == "102") { 224 // Referal B 225 $this->model_extension_payment_realex->addHistory($order_id, $this->config->get('payment_realex_order_status_decline_pending_id'), $message); 226 $data['text_response'] = $this->language->get('text_decline'); 227 $data['text_link'] = sprintf($this->language->get('text_link'), $this->url->link('checkout/checkout', '', true)); 228 } elseif ($this->request->post['RESULT'] == "103") { 229 // Referal A 230 $this->model_extension_payment_realex->addHistory($order_id, $this->config->get('payment_realex_order_status_decline_stolen_id'), $message); 231 $data['text_response'] = $this->language->get('text_decline'); 232 $data['text_link'] = sprintf($this->language->get('text_link'), $this->url->link('checkout/checkout', '', true)); 233 } elseif ($this->request->post['RESULT'] == "200") { 234 // Error Connecting to Bank 235 $this->model_extension_payment_realex->addHistory($order_id, $this->config->get('payment_realex_order_status_decline_bank_id'), $message); 236 $data['text_response'] = $this->language->get('text_bank_error'); 237 $data['text_link'] = sprintf($this->language->get('text_link'), $this->url->link('checkout/checkout', '', true)); 238 } elseif ($this->request->post['RESULT'] == "204") { 239 // Error Connecting to Bank 240 $this->model_extension_payment_realex->addHistory($order_id, $this->config->get('payment_realex_order_status_decline_bank_id'), $message); 241 $data['text_response'] = $this->language->get('text_bank_error'); 242 $data['text_link'] = sprintf($this->language->get('text_link'), $this->url->link('checkout/checkout', '', true)); 243 } elseif ($this->request->post['RESULT'] == "205") { 244 // Comms Error 245 $this->model_extension_payment_realex->addHistory($order_id, $this->config->get('payment_realex_order_status_decline_bank_id'), $message); 246 $data['text_response'] = $this->language->get('text_bank_error'); 247 $data['text_link'] = sprintf($this->language->get('text_link'), $this->url->link('checkout/checkout', '', true)); 248 } else { 249 // Other error 250 $this->model_extension_payment_realex->addHistory($order_id, $this->config->get('payment_realex_order_status_decline_id'), $message); 251 $data['text_response'] = $this->language->get('text_generic_error'); 252 $data['text_link'] = sprintf($this->language->get('text_link'), $this->url->link('checkout/checkout', '', true)); 253 } 254 } 255 256 $this->response->setOutput($this->load->view('extension/payment/realex_response', $data)); 257 } 258 }