12) $strErrorMessage .= GetMessage("AN_CC_MONTH")." "; elseif (mb_strlen($INPUT_CARD_EXP_MONTH) < 2) $INPUT_CARD_EXP_MONTH = "0".$INPUT_CARD_EXP_MONTH; $INPUT_CARD_EXP_YEAR = intval($_REQUEST["ccard_date2"]); if ($INPUT_CARD_EXP_YEAR < $year) $strErrorMessage .= GetMessage("AN_CC_YEAR")." "; $INPUT_CARD_CODE = Trim($_REQUEST["ccard_code"]); if ($strErrorMessage <> '') $bCanProcess = False; } $ORDER_ID = intval($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["ID"]); if ($bCanProcess) { // Merchant Account Information $strPostQueryString = "x_version=3.1"; $strPostQueryString .= "&x_login=".urlencode(CSalePaySystemAction::GetParamValue("PS_LOGIN")); $strPostQueryString .= "&x_tran_key=".urlencode(CSalePaySystemAction::GetParamValue("PS_TRANSACTION_KEY")); $strPostQueryString .= "&x_test_request=".(CSalePaySystemAction::GetParamValue("TEST_TRANSACTION") ? "TRUE" : "FALSE").""; // Gateway Response Configuration $strPostQueryString .= "&x_delim_data=True"; $strPostQueryString .= "&x_relay_response=False"; $strPostQueryString .= "&x_delim_char=,"; $strPostQueryString .= "&x_encap_char=|"; $arTmp = array("x_first_name" => "FIRST_NAME", "x_last_name" => "LAST_NAME", "x_company" => "COMPANY", "x_address" => "ADDRESS", "x_city" => "CITY", "x_state" => "STATE", "x_zip" => "ZIP", "x_country" => "COUNTRY", "x_phone" => "PHONE", "x_fax" => "FAX" ); foreach ($arTmp as $key => $value) { if (($val = CSalePaySystemAction::GetParamValue($value)) !== False) $strPostQueryString .= "&".$key."=".urlencode($val); } // Additional Customer Data $strPostQueryString .= "&x_cust_id=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["USER_ID"]); $strPostQueryString .= "&x_customer_ip=".urlencode($_SERVER["REMOTE_ADDR"]); // Email Settings if (($val = CSalePaySystemAction::GetParamValue("EMAIL")) !== False) $strPostQueryString .= "&x_email=".urlencode($val); $strPostQueryString .= "&x_email_customer=FALSE"; $strPostQueryString .= "&x_merchant_email=".urlencode(COption::GetOptionString("sale", "order_email", "")); // Invoice Information $strPostQueryString .= "&x_invoice_num=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["ID"]); $strPostQueryString .= "&x_description=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["DATE_INSERT"]); // Customer Shipping Address $arTmp = array("x_ship_to_first_name" => "SHIP_FIRST_NAME", "x_ship_to_last_name" => "SHIP_LAST_NAME", "x_ship_to_company" => "SHIP_COMPANY", "x_ship_to_address" => "SHIP_ADDRESS", "x_ship_to_city" => "SHIP_CITY", "x_ship_to_state" => "SHIP_STATE", "x_ship_to_zip" => "SHIP_ZIP", "x_ship_to_country" => "SHIP_COUNTRY" ); foreach ($arTmp as $key => $value) { if (($val = CSalePaySystemAction::GetParamValue($value)) !== False) $strPostQueryString .= "&".$key."=".urlencode($val); } // Transaction Data $strPostQueryString .= "&x_amount=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["SHOULD_PAY"]); $strPostQueryString .= "&x_currency_code=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["CURRENCY"]); $strPostQueryString .= "&x_method=CC"; $strPostQueryString .= "&x_type=AUTH_CAPTURE"; $strPostQueryString .= "&x_recurring_billing=NO"; $strPostQueryString .= "&x_card_num=".urlencode($INPUT_CARD_NUM); $strPostQueryString .= "&x_exp_date=".urlencode($INPUT_CARD_EXP_MONTH.$INPUT_CARD_EXP_YEAR); // MMYYYY $strPostQueryString .= "&x_card_code=".urlencode($INPUT_CARD_CODE); // Level 2 Data $strPostQueryString .= "&x_tax=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["TAX_VALUE"]); $strPostQueryString .= "&x_freight=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["PRICE_DELIVERY"]); $strResult = QueryGetData("secure.authorize.net", 443, "/gateway/transact.dll", $strPostQueryString, $errno, $errstr, "POST", "ssl://"); $mass = explode("|,|", "|,".$strResult); $strHashValue = CSalePaySystemAction::GetParamValue("HASH_VALUE"); if ($strHashValue <> '') { if (md5($strHashValue.(CSalePaySystemAction::GetParamValue("PS_LOGIN")).$mass[7].sprintf("%.2f", $GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["SHOULD_PAY"])) != mb_strtolower($mass[38])) { $mass = array(); $mass[1] = 3; $mass[4] = "MD5 transaction signature is incorrect!"; $mass[3] = 0; $mass[2] = 0; } } $strPS_STATUS = ((intval($mass[1])==1) ? "Y" : "N"); $strPS_STATUS_CODE = $mass[3]; if ($strPS_STATUS=="Y") $strPS_STATUS_DESCRIPTION = "Approval Code: ".$mass[5].(!empty($mass[7]) ? "; Transaction ID: ".$mass[7] : ""); else { $strPS_STATUS_DESCRIPTION = (intval($mass[1])==2 ? "Declined" : "Error").": ".$mass[4]." (Reason Code ".$mass[3]." / Sub ".$mass[2].")"; $strErrorMessage .= (intval($mass[1])==2 ? "Transaction was declined" : "Error while processing transaction").": ".$mass[4]." (".$mass[3]."/".$mass[2].")"; } $strPS_STATUS_MESSAGE = ""; if (!empty($mass[6])) $strPS_STATUS_MESSAGE .= "\nAVS Result: [".$mass[6]."] ".$arAVSErr[$mass[6]].";"; if (!empty($mass[39])) $strPS_STATUS_MESSAGE .= "\nCard Code Result: [".$mass[39]."] ".$arCVVErr[$mass[39]].";"; if (!empty($mass[40])) $strPS_STATUS_MESSAGE .= "\nCAVV: [".$mass[40]."] ".$arCAVVErr[$mass[40]].";"; $strPS_SUM = $mass[10]; $arFields = array( "PS_STATUS" => $strPS_STATUS, "PS_STATUS_CODE" => $strPS_STATUS_CODE, "PS_STATUS_DESCRIPTION" => $strPS_STATUS_DESCRIPTION, "PS_STATUS_MESSAGE" => $strPS_STATUS_MESSAGE, "PS_SUM" => $strPS_SUM, "PS_CURRENCY" => $GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["CURRENCY"], "PS_RESPONSE_DATE" => Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG))) ); if (CSalePaySystemAction::GetParamValue("AUTO_PAY") === 'Y') { $arOrder = CSaleOrder::GetByID($ORDER_ID); if ($arOrder["PRICE"] == $arFields["PS_SUM"] && $arFields["PS_STATUS"] == "Y") { CSaleOrder::PayOrder($arOrder["ID"], "Y"); } } CSaleOrder::Update($ORDER_ID, $arFields); if ($strErrorMessage == '') $bSuccessProcess = True; } if ($bSuccessProcess) { ?>