Файл: online_kkbkz.php
Строк: 153
<?
$full_home_path = dirname(__FILE__);
require_once($full_home_path."/_rootload.php");
if (getenv("REQUEST_METHOD") != "POST") {
mconnect();
$manager_email=GetSetting('manager_email');
$msg = "С IP-адреса $ip произошло обращение к скрипту online_kkbkz.php по GET-протоколу.nnБудьте внимательны, т.к. возможно кто-то пытается взломать систему.nn--nRootPanel";
$subject = "Возможная попытка взлома билинга [Казкоммерцбанк]";
$admEmails=GetAdminEmailsWhereTrueParam("senderror");
if (count($admEmails) > 0) {
WriteMailLog($subject,$msg);
}
while (list($i,$em) = @each($admEmails)) {
sendmail($em,'',$manager_email,$subject,$msg);
}
mclose();
exit;
}
$response = stripslashes(htmlDecode($response));
if ($response) {
mconnect();
EnableLanguages();
$xml_parser = new KKBxml();
$result = $xml_parser->parse($response);
$bill = GetBillById(intval($result['ORDER_ORDER_ID']));
$payy = GetPaymentSystemById($bill->paymentSystemId);
$kkbkz_public_key=$payy->text5;
$kkbkz_test=$payy->check1;
$kkbkz_merchant_certificate_id=$payy->text4;
$kkbkz_merchant_id=$payy->text2;
$kkbkz_merchant_name=$payy->text1;
$kkbkz_private_key=$payy->text6;
$kkbkz_private_key_pass=decodePwd($payy->pass1);
$kkbkz_shop_id=$payy->text3;
if (in_array("ERROR",$result)) {
if ($result["ERROR_TYPE"] == "ERROR") {
$error_msg = "Ошибка системы: ".$result["ERROR"];
} else if ($result["ERROR_TYPE"] == "system") {
$error_msg = "Ошибка системы банка > Code: '".$result["ERROR_CODE"]."' Text: '".$result["ERROR_CHARDATA"]."' Time: '".$result["ERROR_TIME"]."' Order_ID: '".$result["RESPONSE_ORDER_ID"]."'";
} else if ($result["ERROR_TYPE"] == "auth") {
$error_msg = "Ошибка аутентификации в системе банка > Code: '".$result["ERROR_CODE"]."' Text: '".$result["ERROR_CHARDATA"]."' Time: '".$result["ERROR_TIME"]."' Order_ID: '".$result["RESPONSE_ORDER_ID"]."'";
}
}
else if (in_array("DOCUMENT",$result)) {
$kkb = new KKBSign();
$kkb->invert();
$data = kkb_split_sign($response,"BANK");
$check = $kkb->check_sign64($data['LETTER'], $data['RAWSIGN'], $kkbkz_public_key);
if ($check == 1) {
###
$merchantCurrency = "KZT";
$bill->merchantmoney = ($bill->money_host+$bill->money_domain+$bill->money_addons+$bill->money_shop+$bill->money) * GetCurrencyKoeficientByCode($merchantCurrency);
$bill->merchantmoney = $bill->merchantmoney + ($bill->merchantmoney/100)*$payy->small1; $bill->merchantmoney = round($bill->merchantmoney);
###
if (!$result['ORDER_ORDER_ID']) { $error_msg = "Отсутствует номер счета биллинг-системы."; }
else if (!$bill->id) { $error_msg = "Счет # ".$result['ORDER_ORDER_ID']." не найден."; }
else if (intval($result['PAYMENT_AMOUNT']) < intval($bill->merchantmoney)) { $error_msg = "Неправильная сумма оплаты. Сумма счета в биллинге $bill->merchantmoney."; }
else if ($kkbkz_test) { $error_msg = "Тестовый режим работы."; }
else if ($result['PAYMENT_RESPONSE_CODE'] != "00") { $error_msg = "Неправильный код результата авторизации (".$result['PAYMENT_RESPONSE_CODE'].")."; }
else {
print "0";
$kkb = new KKBSign();
$kkb->invert();
$kkb->load_private_key($kkbkz_private_key, $kkbkz_private_key_pass);
$merchant = '<merchant id="'.$kkbkz_merchant_id.'"><command type="complete"/><payment reference="'.$result['PAYMENT_REFERENCE'].'" approval_code="'.$result['PAYMENT_APPROVAL_CODE'].'" orderid="'.$result['ORDER_ORDER_ID'].'" amount="'.$result['PAYMENT_AMOUNT'].'" currency_code="'.$result['ORDER_CURRENCY'].'"/></merchant>';
$merchant_sign = '<merchant_sign type="RSA" cert_id="'.$kkbkz_merchant_certificate_id.'">'.$kkb->sign64($merchant).'</merchant_sign>';
$xml = "<document>".$merchant.$merchant_sign."</document>";
$curlOut = "XML:n$xml";
if ($kkbkz_test) { $url = "http://3dsecure.kkb.kz/jsp/remote/control.jsp"; } else { $url = "https://epay.kkb.kz/jsp/remote/control.jsp"; }
$fp = curl_init();
curl_setopt($fp, CURLOPT_URL, $url."?".urlencode($xml));
curl_setopt($fp, CURL_HTTP_VERSION_1_0, 1);
curl_setopt($fp, CURLOPT_POST, 0);
curl_setopt($fp, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($fp, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($fp, CURLOPT_RETURNTRANSFER,1);
curl_setopt($fp, CURLOPT_TIMEOUT, 120);
$curl_result = curl_exec($fp);
$curl_result = @preg_replace("/^[^<]+/","",$curl_result);
if (@curl_errno($fp)) {
$error_msg = "cURL Error ".@curl_errno($fp).": ".@curl_error($fp);
} else {
$xml_parser = new KKBxml();
$result2 = $xml_parser->parse($curl_result);
if (in_array("ERROR",$result2)) {
if ($result2["ERROR_TYPE"] == "ERROR") {
$error_msg = "Level 2. Ошибка системы: ".$result2["ERROR"];
} else if ($result2["ERROR_TYPE"] == "system") {
$error_msg = "Level 2. Ошибка системы банка > Code: '".$result2["ERROR_CODE"]."' Text: '".$result2["ERROR_CHARDATA"]."' Time: '".$result2["ERROR_TIME"]."' Order_ID: '".$result2["RESPONSE_ORDER_ID"]."'";
} else if ($result2["ERROR_TYPE"] == "auth") {
$error_msg = "Level 2. Ошибка аутентификации в системе банка > Code: '".$result2["ERROR_CODE"]."' Text: '".$result2["ERROR_CHARDATA"]."' Time: '".$result2["ERROR_TIME"]."' Order_ID: '".$result2["RESPONSE_ORDER_ID"]."'";
}
}
else if (in_array("DOCUMENT",$result2)) {
if ($result2['RESPONSE_CODE'] != "00") { $error_msg = "Level 2. Неправильный код результата авторизации (".$result2['RESPONSE_CODE'].")."; }
else {
MakeBillPayed($bill->id,1,"Казкоммерцбанк (".$result['CUSTOMER_NAME'].", reference ".$result['PAYMENT_REFERENCE'].")");
mclose();
exit;
}
} else {
$error_msg = "Level 2. Неизвестный тип XML документа.";
}
}
}
} else if ($check == 0) {
$error_msg = "Неправильная подпись.";
} else {
$error_msg = "Ошибка проверки подписи: ".$kkb->estatus;
}
} else {
$error_msg = "Неизвестный тип XML документа.";
}
ob_start();
var_export($response);
$dump_response = ob_get_clean();
ob_start();
var_export($result);
$dump_result = ob_get_clean();
ob_start();
var_export($result2);
$dump_result2 = ob_get_clean();
$manager_email=GetSetting('manager_email');
$msg = "Автоматическая оплата через Казкоммерцбанк отклонена биллинг-системой по причине:nn$error_msgnnRESPONSE:n$dump_responsennRESULT:n$dump_resultnn$curlOutnnCURL_RESULT:n$curl_resultnnRESULT2:n$dump_result2nnIP: $ipnn--nRootPanel";
$subject = "Ошибка автоматической оплаты [Казкоммерцбанк]";
$admEmails=GetAdminEmailsWhereTrueParam("senderror");
if (count($admEmails) > 0) {
WriteMailLog($subject,$msg);
}
while (list($i,$em) = @each($admEmails)) {
sendmail($em,'',$manager_email,$subject,$msg);
}
mclose();
print "0";
}
?>