protected function getView() { //https://сервер/index.php?BANK_ID=BBTYPE=1&PAY_ID=12345&PAY_DATE=2009-04-15 11:22:33&ACCOUNT=54321&PAY_AMOUNT=1100&SIGN=827CCB0EEA8A706C4C34A16891F84E7B $config = $this->toolkit->getConfig('ctBank'); $userMapper = $this->toolkit->getMapper('user', 'user'); $bankMapper = $this->toolkit->getMapper('ctData', 'ctDataBank'); $bank_title = $this->request->getString('BANK_ID', SC_GET); $bank = $bankMapper->searchOneByField('title', $bank_title); switch ($this->request->getInteger('TYPE', SC_GET)) { case 1: $action = 'payment'; break; case 4: $action = 'check'; break; default: return $this->forward404(); } $validator = new formValidator(); $validator->disableCSRF(); $validator->submit('TYPE'); // Проверка в запросе обязательного поля bank_id $validator->rule('callbackwmsg', 'BANK_ID', 0, array(array($this, 'checkBank'), $bank)); $validator->rule('required', 'SIGN', 4); $validator->rule('callback', 'SIGN', 4, array(array($this, 'checkSign'), $bank)); $validator->rule('required', 'ACCOUNT', 2); $validator->rule('callback', 'ACCOUNT', 5, array(array($this, 'checkAccount'), $bank)); $validator->rule('in', 'CHECK_BY', 'not in range', array('login', 'card_number')); // Проверит линковку аккаунта к школе if ($action == 'payment') { $validator->rule('required', 'PAY_AMOUNT', 2); $validator->rule('numeric', 'PAY_AMOUNT', 3); $validator->rule('required', 'PAY_ID', 2); $validator->rule('callbackwmsg', 'PAY_ID', 0, array(array($this, 'checkPayId'), $bank)); $validator->rule('required', 'PAY_DATE', 2); $validator->rule('regex', 'PAY_DATE', 3, '!\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}!'); // Валидатор поля типа платежа // $validator->rule('required', 'ACCOUNT_TYPE', 2); $validator->rule('callback', 'ACCOUNT_TYPE', 3, array(array($this, 'checkAccountType'))); } if ($validator->validate()) { $user = $this->getUser(); if ($action == 'payment') { // Заберем настройки модуля if (!$config->exists('comission')) { throw new mzzRuntimeException('"comission" value not found in configs/ctBank.php'); } $pay_id = $this->request->getString('PAY_ID', SC_GET); $sum = $this->request->getInteger('PAY_AMOUNT', SC_GET) / 100; //PAY_AMOUNT – сумма платежа в копейках $enrolledSum = $sum * (100 - $config->get('comission')) / 100; if (preg_match('!\\A([a-z]{2})!i', $pay_id, $match)) { $bank_name = $match[1]; } else { $bank_name = ''; } // Получим тип аккаунта на который класть деньги $ctBillLocalAccountTypeMapper = $this->toolkit->getMapper('ctBillLocal', 'ctBillLocalAccountType'); $account_type = $this->request->getInteger('ACCOUNT_TYPE', SC_GET); if (empty($account_type)) { $account_type = 1; } $ctBillLocalAccountType = $ctBillLocalAccountTypeMapper->searchByKey($account_type); // Получим аккаунт $account = $user->getAccount($ctBillLocalAccountType->getName()); $accountType = $account->getAccountType(); // Осуществляем платеж if ($account && $account->enrollPayment($sum, 'Платеж через терминал ' . $bank_name . ' (' . $pay_id . ')', $accountType->getDefaultEnrollmentSubtype())) { $status = 0; $msg = 'Платеж принят'; // Создадим запись о платеже $ctBankOnlinepayPaymentMapper = $this->toolkit->getMapper('ctBank', 'ctBankOnlinepayPayment'); $payment = $ctBankOnlinepayPaymentMapper->create(); $payment->setBankId($bank->getId()); $payment->setPayId($pay_id); $payment->setUserId($user->getId()); $payment->setDate(time()); $payment->setSum($sum); $payment->setEnrolledSum($enrolledSum); $payment->setStatus($status); $ctBankOnlinepayPaymentMapper->save($payment); } else { $status = 21; $msg = 'Ошибка биллинга'; } } else { $status = 0; $msg = 'Абонент существует'; $this->view->assign('login', $user->getLogin()); $this->view->assign('fio', $user->getFullname()); $this->view->assign('balance', $user->getAccount()->getBalance()); $ctCardServiceInfo = $user->getctCardServiceInfo(); // Проверим есть ли запись об этом учение в таблице с абонентской платой if ($ctCardServiceInfo && (double) $ctCardServiceInfo->getSum()) { $cardAccount = $user->getAccount('cardservice'); if ($cardAccount && $cardAccount->getBalance()) { $this->view->assign('cardservice_balance', $cardAccount->getBalance()); } $this->view->assign('block_status', $user->getAccount()->getBlockStatus()); } } } else { $status = reset($validator->getErrors()); } if (isset($msg)) { $this->view->assign('message', $msg); } //var_dump($validator->getErrors()); $this->view->assign('status', $status); }