/** * check 3d secure Authentication response and take relavent action * */ protected function _Handle3DCallBackResponse() { require(dirname(__FILE__).'/lib/CentinelClient.php'); $centinelClient = new CentinelClient; $centinelClient->Add("MsgType", "cmpi_authenticate"); $centinelClient->Add("Version", "1.7"); $centinelClient->Add("ProcessorId", $this->GetValue('cardinalprocessorid')); $centinelClient->Add("MerchantId", $this->GetValue('cardinalmerchantid')); $centinelClient->Add("TransactionPwd", $this->GetValue('cardinaltransactionpwd')); $centinelClient->Add("TransactionType", 'C'); $centinelClient->Add("TransactionId", $_SESSION['CHECKOUT']['CardinalTransactionId']); $centinelClient->Add("PAResPayload", $_REQUEST['PaRes']); $this->_testmode = $this->GetValue("testmode") == "YES"; if ($this->_testmode) { $transactionURL = $this->_cardinalTestTransactionURL; } else { $transactionURL = $this->_cardinalLiveTransactionURL; } $centinelClient->sendHTTP($transactionURL, "30", "30"); if($centinelClient->getValue("ErrorNo") == '0') { $PAResStatus = $centinelClient->getValue("PAResStatus"); $SignatureVerification = $centinelClient->getValue("SignatureVerification"); //if cardholder is authticated successfully if(($PAResStatus == 'Y' || $PAResStatus == 'A') && $SignatureVerification =='Y') { $DPFields = array ( 'AUTHSTATUS3DS' => $centinelClient->getValue("PAResStatus"), 'MPIVENDOR3DS' => $_SESSION['CHECKOUT']['CardinalEnrolled'], 'CAVV' => $centinelClient->getValue("Cavv"), 'ECI' => $centinelClient->getValue("EciFlag"), 'XID' => $centinelClient->getValue("Xid"), ); if($this->_doDirectPayment($_SESSION['CHECKOUT']['CardDetails'], $DPFields)) { return ORDER_STATUS_AWAITING_FULFILLMENT; } else { return ORDER_STATUS_DECLINED; } } else { $this->RedirectToOrderConfirmation(GetLang('UnauthorizedMessage'), true); exit; } } else { //redirect back to order confirmation page. $this->RedirectToOrderConfirmation($centinelClient->getValue("ErrorDesc"), true); exit; } }