function paypalpaymentsproref_3dsecure($params)
 {
     if ($params['sandbox']) {
         $mapurl = "https://centineltest.cardinalcommerce.com/maps/txns.asp";
     } else {
         $mapurl = "https://paypal.cardinalcommerce.com/maps/txns.asp";
     }
     $currency = "";
     if ($params['currency'] == "USD") {
         $currency = "840";
     }
     if ($params['currency'] == "GBP") {
         $currency = "826";
     }
     if ($params['currency'] == "EUR") {
         $currency = "978";
     }
     if ($params['currency'] == "CAD") {
         $currency = "124";
     }
     $postfields = array();
     $postfields['MsgType'] = "cmpi_lookup";
     $postfields['Version'] = "1.7";
     $postfields['ProcessorId'] = $params['processorid'];
     $postfields['MerchantId'] = $params['merchantid'];
     $postfields['TransactionPwd'] = $params['transpw'];
     $postfields['UserAgent'] = $_SERVER['HTTP_USER_AGENT'];
     $postfields['BrowserHeader'] = $_SERVER['HTTP_ACCEPT'];
     $postfields['TransactionType'] = "C";
     $postfields['Amount'] = $params['amount'] * 100;
     $postfields['ShippingAmount'] = "0";
     $postfields['TaxAmount'] = "0";
     $postfields['CurrencyCode'] = $currency;
     $postfields['OrderNumber'] = $params['invoiceid'];
     $postfields['OrderDescription'] = $params['description'];
     $postfields['EMail'] = $params['clientdetails']['email'];
     $postfields['BillingFirstName'] = $params['clientdetails']['firstname'];
     $postfields['BillingLastName'] = $params['clientdetails']['lastname'];
     $postfields['BillingAddress1'] = $params['clientdetails']['address1'];
     $postfields['BillingAddress2'] = $params['clientdetails']['address2'];
     $postfields['BillingCity'] = $params['clientdetails']['city'];
     $postfields['BillingState'] = $params['clientdetails']['state'];
     $postfields['BillingPostalCode'] = $params['clientdetails']['postcode'];
     $postfields['BillingCountryCode'] = $params['clientdetails']['country'];
     $postfields['BillingPhone'] = $params['clientdetails']['phonenumber'];
     $postfields['ShippingFirstName'] = $params['clientdetails']['firstname'];
     $postfields['ShippingLastName'] = $params['clientdetails']['lastname'];
     $postfields['ShippingAddress1'] = $params['clientdetails']['address1'];
     $postfields['ShippingAddress2'] = $params['clientdetails']['address2'];
     $postfields['ShippingCity'] = $params['clientdetails']['city'];
     $postfields['ShippingState'] = $params['clientdetails']['state'];
     $postfields['ShippingPostalCode'] = $params['clientdetails']['postcode'];
     $postfields['ShippingCountryCode'] = $params['clientdetails']['country'];
     $postfields['ShippingPhone'] = $params['clientdetails']['phonenumber'];
     $postfields['CardNumber'] = $params['cardnum'];
     $postfields['CardExpMonth'] = substr($params['cardexp'], 0, 2);
     $postfields['CardExpYear'] = "20" . substr($params['cardexp'], 2, 2);
     $queryString = "<CardinalMPI>\n";
     foreach ($postfields as $name => $value) {
         $queryString .= "<" . $name . ">" . $value . "</" . $name . ">\n";
     }
     $queryString .= "</CardinalMPI>";
     $data = "cmpi_msg=" . urlencode($queryString);
     $response = curlCall($mapurl, $data);
     $xmlarray = XMLtoArray($response);
     $xmlarray = $xmlarray['CARDINALMPI'];
     $errorno = $xmlarray['ERRORNO'];
     $enrolled = $xmlarray['ENROLLED'];
     $eciflag = $xmlarray['ECIFLAG'];
     $transid = $xmlarray['TRANSACTIONID'];
     $acsurl = $xmlarray['ACSURL'];
     $pareq = $xmlarray['PAYLOAD'];
     $orderid = $xmlarray['ORDERID'];
     $_SESSION['Centinel_OrderId'] = $orderid;
     $_SESSION['Centinel_TransactionId'] = $transid;
     if ($errorno == 0) {
         if ($enrolled == "Y") {
             logTransaction("PayPal Pro Reference", $xmlarray, "3D Auth");
             $_SESSION['Centinel_Details'] = array("cardtype" => $params['cardtype'], "cardnum" => $params['cardnum'], "cardexp" => $params['cardexp'], "cccvv" => $params['cccvv'], "cardstart" => $params['cardstart'], "cardissuenum" => $params['cardissuenum']);
             $code = "<form method=\"POST\" action=\"" . $acsurl . "\">\n                <input type=hidden name=\"PaReq\" value=\"" . $pareq . "\">\n                <input type=hidden name=\"TermUrl\" value=\"" . $params['systemurl'] . "/modules/gateways/callback/paypalpaymentsproref.php\">\n                <input type=hidden name=\"MD\" value=\"" . $params['invoiceid'] . "\">\n                <noscript>\n                <center>\n                    <font color=\"red\">\n                        <h2>Processing your Payer Authentication Transaction</h2>\n                        <h3>JavaScript is currently disabled or is not supported by your browser.<br></h3>\n                        <h4>Please click Submit to continue the processing of your transaction.</h4>\n                    </font>\n                <input type=\"submit\" value=\"Submit\">\n                </center>\n                </noscript>\n            </form>";
             return $code;
         }
         $result = paypalpaymentsproref_capture($params);
         if ($result['status'] == "success") {
             logTransaction("PayPal Pro References 3D Capture", $result['rawdata'], "Successful");
             addInvoicePayment($params['invoiceid'], $result['transid'], "", "", "paypalpaymentsproref", "on");
             sendMessage("Credit Card Payment Confirmation", $params['invoiceid']);
             redirSystemURL("id=" . $params['invoiceid'] . "&paymentsuccess=true", "viewinvoice.php");
         } else {
             logTransaction("PayPal Pro References 3D Capture", $result['rawdata'], "Failed");
         }
     } else {
         logTransaction("PayPal Pro References 3D Secure", $xmlarray, "No 3D Auth");
     }
     return "declined";
 }
        if (strcasecmp("N", $paresstatus) == 0) {
            logTransaction("PayPal Pro Reference 3D Secure Callback", $_REQUEST, "Auth Failed");
        } else {
            logTransaction("PayPal Pro Reference 3D Secure Callback", $_REQUEST, "Unexpected Status, Capture Anyway");
            $auth = array("paresstatus" => $paresstatus, "cavv" => $cavv, "eciflag" => $eciflag, "xid" => $xid);
            $params = getCCVariables($invoiceid);
            if (isset($_SESSION['Centinel_Details'])) {
                $params['cardtype'] = $_SESSION['Centinel_Details']['cardtype'];
                $params['cardnum'] = $_SESSION['Centinel_Details']['cardnum'];
                $params['cardexp'] = $_SESSION['Centinel_Details']['cardexp'];
                $params['cccvv'] = $_SESSION['Centinel_Details']['cccvv'];
                $params['cardstart'] = $_SESSION['Centinel_Details']['cardstart'];
                $params['cardissuenum'] = $_SESSION['Centinel_Details']['cardissuenum'];
                unset($_SESSION['Centinel_Details']);
            }
            $result = paypalpaymentsproref_capture($params, $auth);
            if ($result['status'] == "success") {
                logTransaction("PayPal Pro Reference 3D Capture", $result['rawdata'], "Successful");
                addInvoicePayment($invoiceid, $result['transid'], "", "", "paypalpaymentsproref", "on");
                sendMessage("Credit Card Payment Confirmation", $invoiceid);
                $callbacksuccess = true;
            } else {
                logTransaction("PayPal Pro Reference 3D Capture", $result['rawdata'], "Failed");
            }
        }
    }
} else {
    logTransaction("PayPal Pro Reference 3D Secure Callback", $_REQUEST, "Error");
}
if (!$callbacksuccess) {
    sendMessage("Credit Card Payment Failed", $invoiceid);