exit; } } elseif (isset($_POST['LMI_SYS_INVS_NO']) && $_POST['LMI_SYS_INVS_NO'] && isset($_POST['LMI_SYS_TRANS_NO']) && $_POST['LMI_SYS_TRANS_NO']) { if (webmoney::checkResultParams($_POST, $arrTariffs)) { // логируем ответ в файл $logData = logs::logPaymentData($_POST, 'SUCCESS', 'webmoney'); // выполняем необходимые действия $ourData = $payments->explodeServiceString($_POST['SERVICE']); $payments->doAction($ourData[0], $ourData[1], webmoney::generateLogData($_POST, 'SUCCESS'), $_POST['LMI_PAYMENT_NO']); $payments->sendAdminEmail($logData, 'SUCCESS'); } else { // логируем ответ в файл $logData = logs::logPaymentData($_POST, 'FAIL', 'webmoney'); // выполняем необходимые действия $ourData = $payments->explodeServiceString($_POST['SERVICE']); $payments->doAction($ourData[0], $ourData[1], webmoney::generateLogData($_POST, 'FAIL'), $_POST['LMI_PAYMENT_NO']); $payments->sendAdminEmail($logData, 'FAIL'); } } else { // если неверные параметры платежа // логируем ответ в файл logs::logPaymentData($_POST, 'WRONG PARAMS', 'webmoney'); } } elseif (isset($_GET['success']) && !empty($_POST)) { if (isset($_POST['SERVICE']) && $_POST['SERVICE']) { $ourData = $payments->explodeServiceString($_POST['SERVICE']); $payments->succesAnswer($ourData[0]); } } elseif (isset($_GET['fail']) && !empty($_POST)) { if (isset($_POST['LMI_PAYMENT_NO']) && $_POST['LMI_PAYMENT_NO']) { $smarty->assignByRef('order_id', $_POST['LMI_PAYMENT_NO']);
/** * функция проверяет параметры полученные от сервера webmoney в оповещении о платеже ($_POST) * Проверяется наличие всех необходимых полей, услуга и ее стоимость * * @param (array) $arrData - массив параметров ($_POST от сервера Webmoney) * @param (array) $arrTariffs - тарифная сетка Webmoney * * @return bool */ static function checkResultParams(&$arrData, &$arrTariffs) { // проверяем порциями, чтобы было читабельнее if (!isset($arrData['LMI_PAYEE_PURSE']) || !$arrData['LMI_PAYEE_PURSE'] || $arrData['LMI_PAYEE_PURSE'] !== WEBMONEY_CONF_PAYEE_PURSE) { return false; } if (!isset($arrData['LMI_PAYMENT_AMOUNT']) || !$arrData['LMI_PAYMENT_AMOUNT'] || !isset($arrData['LMI_PAYMENT_NO']) || !$arrData['LMI_PAYMENT_NO']) { return false; } if (!isset($arrData['LMI_SYS_INVS_NO']) || !$arrData['LMI_SYS_INVS_NO'] || !isset($arrData['LMI_SYS_TRANS_NO']) || !$arrData['LMI_SYS_TRANS_NO']) { return false; } if (!isset($arrData['LMI_MODE']) || !isset($arrData['LMI_PAYER_WM']) || !$arrData['LMI_PAYER_WM'] || !isset($arrData['LMI_PAYER_PURSE']) || !$arrData['LMI_PAYER_PURSE']) { return false; } if (!isset($arrData['LMI_HASH']) || !$arrData['LMI_HASH'] || !isset($arrData['LMI_SYS_TRANS_DATE']) || !$arrData['LMI_SYS_TRANS_DATE']) { return false; } if (!isset($arrData['LMI_PAYMENT_DESC']) || !$arrData['LMI_PAYMENT_DESC'] || !isset($arrData['SERVICE']) || !$arrData['SERVICE']) { return false; } // проверяем подпись if (webmoney::refSign($arrData) != $arrData['LMI_HASH']) { return false; } // проверяем услугу и ее цену в тарифной сетке $payments = new payments(); $service = $payments->explodeServiceString($arrData['SERVICE']); if (!in_array($service[0], $arrTariffs) || $arrData['LMI_PAYMENT_AMOUNT'] != $arrTariffs[$service[0]]) { return false; } return true; }