Файл: online_qiwi.php
Строк: 116
<?
$full_home_path = dirname(__FILE__);
require_once($full_home_path."/_rootload.php");
define('QIWI_SERVER_URL', $full_home_path.'/_rootinc/qiwi/IShopServerWS.wsdl');
$s = new SoapServer($full_home_path.'/_rootinc/qiwi/IShopClientWS.wsdl', array('classmap' => array('tns:updateBill' => 'QIWIParam', 'tns:updateBillResponse' => 'QIWIResponse')));
$s->setClass('QIWIServer');
$s->handle();
class QIWIResponse {
public $updateBillResult;
}
class QIWIParam {
public $login;
public $password;
public $txn;
public $status;
}
class QIWIServer {
function updateBill($param) {
mconnect();
EnableLanguages();
$bill = GetBillById($param->txn);
$payy = GetPaymentSystemById($bill->paymentSystemId);
$qiwi_login=$payy->text1;
$qiwi_secret=decodePwd($payy->pass1);
###
$merchantCurrency = "RUB";
$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,2);
###
$signature = strtoupper(md5($param->txn.strtoupper(md5($qiwi_secret))));
$QIWIResult = new QIWIResponse();
# 0 - успех
# 13 - Сервер занят, повторите запрос позже
# 210 - счет не найден
# 241 - Сумма слишком мала
# 298 - Агента не существует в системе
# 300 - неизвестная ошибка
# 330 - ошибка шифрования
if (!$param->txn) { $error_msg = "Отсутствует идентификатор заказа."; $error_num = 210; }
else if (!$bill->id) { $error_msg = "Счет с идентификатором заказа # ".$param->txn." не найден."; $error_num = 210; }
else if ($param->password != $signature) { $error_msg = "Неправильная контрольная подпись."; $error_num = 330; }
else if ($param->status != 60) { $error_msg = "Неправильный статус платежа (".$param->status.")."; $error_num = 0; }
else {
$checkParams = array('login' => $qiwi_login, 'password' => $qiwi_secret, 'txn' => $param->txn);
$client = new SoapClient(QIWI_SERVER_URL, array('trace' => 1));
$result = $client->checkBill($checkParams);
if (!$result->amount) { $error_msg = "Ошибка подключения к QIWI для проверки суммы счета. (status code $result->status)"; $error_num = 300; }
else if ($result->amount < $bill->merchantmoney) { $error_msg = "Сумма оплаченного счета меньше суммы биллинговой системы ($result->amount < $bill->merchantmoney)."; $error_num = 241; }
else {
$error_num = 0;
MakeBillPayed($bill->id,1,"QIWI Merchant");
$QIWIResult->updateBillResult = $error_num;
return $QIWIResult;
exit;
}
}
$manager_email=GetSetting('manager_email');
$msg = "Автоматическая оплата через QIWI Merchant отклонена биллинг-системой по причине:nn$error_msgnnlogin: ".$param->login."npassword: ".$param->password."ntxn: ".$param->txn."nstatus: ".$param->status."nnMD5 by RootPanel: $signaturennIP: $ipnn--nRootPanel";
$subject = "Ошибка автоматической оплаты [QIWI]";
$admEmails=GetAdminEmailsWhereTrueParam("senderror");
if (count($admEmails) > 0) {
WriteMailLog($subject,$msg);
}
while (list($i,$em) = @each($admEmails)) {
sendmail($em,'',$manager_email,$subject,$msg);
}
$QIWIResult->updateBillResult = $error_num;
return $QIWIResult;
exit;
}
}
?>