if (isset($this->session->data['order_id'])) {
if ($this->config->get('sagepay_direct_test') == 'live') {
$url = 'https://live.sagepay.com/gateway/service/direct3dcallback.vsp';
} elseif ($this->config->get('sagepay_direct_test') == 'test') {
$url = 'https://test.sagepay.com/gateway/service/direct3dcallback.vsp';
} elseif ($this->config->get('sagepay_direct_test') == 'sim') {
$url = 'https://test.sagepay.com/Simulator/VSPDirectCallback.asp';
}
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_PORT, 443);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FORBID_REUSE, 1);
curl_setopt($curl, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($this->request->post));
$response = curl_exec($curl);
curl_close($curl);
$data = array();
$response_info = explode(chr(10), $response);
foreach ($response_info as $string) {
if (strpos($string, '=')) {
$parts = explode('=', $string, 2);
$data[trim($parts[0])] = trim($parts[1]);
}
}
if ($data['Status'] == 'OK' || $data['Status'] == 'AUTHENTICATED' || $data['Status'] == 'REGISTERED') {
$this->load->model('checkout/order');
$this->model_checkout_order->confirm($this->session->data['order_id'], $this->config->get('config_order_status_id'));
$message = '';
if (isset($data['TxAuthNo'])) {
$message .= 'TxAuthNo: ' . $data['TxAuthNo'] . "\n";
}
if (isset($data['AVSCV2'])) {
$message .= 'AVSCV2: ' . $data['AVSCV2'] . "\n";
}
if (isset($data['AddressResult'])) {
$message .= 'AddressResult: ' . $data['AddressResult'] . "\n";
}
if (isset($data['PostCodeResult'])) {
$message .= 'PostCodeResult: ' . $data['PostCodeResult'] . "\n";
}
if (isset($data['CV2Result'])) {
$message .= 'CV2Result: ' . $data['CV2Result'] . "\n";
}
if (isset($data['3DSecureStatus'])) {
$message .= '3DSecureStatus: ' . $data['3DSecureStatus'] . "\n";
}
if (isset($data['CAVV'])) {
$message .= 'CAVV: ' . $data['CAVV'] . "\n";
}
$this->model_checkout_order->update($this->session->data['order_id'], $this->config->get('sagepay_direct_order_status_id'), $message, false);
$this->redirect($this->url->link('checkout/success'));
} else {
$this->session->data['error'] = $data['StatusDetail'];
$this->redirect($this->url->link('checkout/checkout', '', 'SSL'));
}
} else {
$this->redirect($this->url->link('account/login', '', 'SSL'));
}