function preparePayment($sbr_id, $mode_type) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pskb.php'; $objResponse = new xajaxResponse(); // $objResponse->call('finance_spinn_hide'); $sbr_id = __paramValue('int', $sbr_id); $mode_type = __paramValue('int', $mode_type); if (!$sbr_id || !$mode_type) { $objResponse->call('finance_raise_err', 'Запрос не может быть обработан.'); return $objResponse; } $uid = get_uid(0); if (!$uid) { $objResponse->redirect('/'); return $objResponse; } $sbr = sbr_meta::getInstance(); if (!$sbr->initFromId($sbr_id)) { $objResponse->call('finance_raise_err', 'Запрос не может быть обработан.'); return $objResponse; } if ($sbr->status == sbr::STATUS_REFUSED) { $objResponse->call('finance_raise_err', 'Запрос не может быть обработан. Исполнитель отказался от сделки.'); return $objResponse; } if ($sbr->data['scheme_type'] != sbr::SCHEME_LC) { $objResponse->call('finance_raise_err', 'Указанная схема не поддерживается.'); return $objResponse; } $pskb = new pskb($sbr); $lc = $pskb->getLC(); if ($lc['state'] == pskb::STATE_COVER) { $objResponse->script('document.location.reload();'); return $objResponse; } if ($lc['lc_id'] > 0 && $lc['state'] == pskb::STATE_ERR) { $resp = $pskb->_checks(json_encode(array('id' => array($lc['lc_id'])))); $lc_ch = $resp[$lc['lc_id']]; if ($lc_ch->state == pskb::STATE_NEW) { $user = $pskb->initPskbUser($mode_type); $checkReqvNew = $pskb->getMd5Reqvs($user->getParams()); $checkReqvOld = $pskb->getMd5Reqvs($lc, 'Cust'); $pskb->diffUserReqvs($checkReqvNew, $checkReqvOld); } elseif ($lc_ch->state == pskb::STATE_COVER) { $pskb->upLC(array('state' => 'new'), $lc['lc_id']); pskb::checkStatus(array($lc['lc_id']), $in, $out); $objResponse->script('document.location.reload();'); return $objResponse; } } if ($pskb->prepareLC($mode_type) && ($pskb_lc = $pskb->reserve())) { if (is_object($pskb_lc)) { // Все идет по плану $objResponse->call('finance_add_fld', 'source', onlinedengi::SOURCE_ID); $objResponse->call('finance_add_fld', 'order_id', $pskb_lc->id); $objResponse->call('finance_add_fld', 'nickname', $pskb_lc->id); $objResponse->call('finance_add_fld', 'amount', $sbr->getReserveSum(true, pskb::$exrates_map[$mode_type])); $objResponse->call('xajax_checkPayment', $sbr_id); } elseif ($pskb_lc == 'no_different') { $pskb->upLC(array('state' => 'new'), $lc['lc_id']); if ($mode_type == onlinedengi::CARD) { $objResponse->call('pskb_frame', $lc['lc_id'], pskb::getNonceSign($lc['lc_id'])); } else { $objResponse->call('finance_add_fld', 'source', onlinedengi::SOURCE_ID); $objResponse->call('finance_add_fld', 'order_id', $lc['lc_id']); $objResponse->call('finance_add_fld', 'nickname', $lc['lc_id']); $objResponse->call('finance_add_fld', 'amount', $sbr->getReserveSum(true, pskb::$exrates_map[$mode_type])); $objResponse->call('finance_send_frm'); } } } else { $objResponse->call('finance_raise_err', $pskb->getError()); } return $objResponse; }
<?php ini_set('max_execution_time', '0'); ini_set('memory_limit', '512M'); define('IS_OPENED', true); if (!$_SERVER['DOCUMENT_ROOT']) { $_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__); } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/config.php'; //require_once("classes/log.php"); //$log = new log('minutly/minutly-sbr-'.SERVER.'-%d%m%Y[%H].log', 'w'); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pskb.php'; /* * проверка статуса новых аккредитивов и покрытия */ pskb::checkStatus(null, $in, $out); /* * проверка аккредитивов в статусе trans (перечисление денег) */ if (date('i') % 5 == 0) { pskb::checkStagePayoputForSuperCheck(null, $in, $out); } if (pskb::PSKB_SUPERCHECK && date('i') % 2 == 0) { // сократим до раз в две минуты, раньше смысла нет. Ответ от ПСКБ формируется до 5 минут pskb::checkStagePayouts(null, $in, $out); } elseif (!pskb::PSKB_SUPERCHECK) { // Если отключен суперчек по старому pskb::checkStagePayouts(null, $in, $out); } if (date('i') % 2 == 0) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_adm.php';
/** * Создает аккредитив. Регистрирует, если необходимо, кошельки для пользователей. * В случае создания кошельков банк отправляет пользователям смс с временным паролем. * * @param type $sum Сумма резерва * * @return pskb_lc */ public function reserve() { $lc = $this->getLC(); $numDog = $this->_sbr->data['id']; if ($lc['lc_id'] > 0 && $lc['state'] == self::STATE_ERR) { $resp = $this->_checks(json_encode(array('id' => array($lc['lc_id'])))); $lc_ch = $resp[$lc['lc_id']]; if ($lc_ch->state == self::STATE_NEW) { if ($this->not_different_finance) { return 'no_different'; } else { $this->upLC(array('lc_id' => null), $lc['lc_id']); // Нужен новый аккредитив, изменились данные резерва $lc['lc_id'] = null; } } elseif ($lc_ch->state == self::STATE_COVER) { $this->upLC(array('state' => 'new'), $lc['lc_id']); pskb::checkStatus(array($lc['lc_id']), $in, $out); return true; } } if (!$lc) { $this->_setError('Ошибка запроса.'); return false; } if ($lc['lc_id'] && $lc['state'] == self::STATE_NEW) { $this->_setError('Аккредитив уже создан. Ожидается оплата.'); return false; } $cdate = new LocalDateTime(); $cdate->getExcDaysInit(false, true); $stages = $this->_sbr->getStages(); $work_time = 0; foreach ($stages as $stage) { $work_time += $stage->data['work_time']; $cdate->start_time = "now + {$work_time} day"; $cdate->setTimestamp(strtotime("now + {$work_time} day")); $cdate->getWorkForDay(self::TEMP_STAGE_DELAY); $work_time += $cdate->getCountDays(); } // Считаем 5 рабочих дней $cdate->getWorkForDay(self::DATE_COVER_DELAY, true); $cover_time = $cdate->getTimestamp(); $exec_time = $cover_time + 3600 * 24 * $work_time; $end_time = $exec_time + 3600 * 24 * self::DATE_END_DELAY; $dateCoverLC = date('d.m.Y', $cover_time); $dateExecLC = date('d.m.Y', $exec_time); $dateEndLC = date('d.m.Y', $end_time); $resp = $this->_addLC($lc['sum'], $this->_sbr->data['id'], $dateExecLC, $dateEndLC, $dateCoverLC, $lc['tagCust'], $lc['alienCust'], $lc['nameCust'], $lc['numCust'], $lc['psCust'], $lc['accCust'], $lc['innCust'], $lc['nameBankCust'], $lc['swiftCust'], $lc['corAccbankCust'], $lc['emailCust'], $lc['cityBankCust'], $lc['cntrBankCust'], $lc['tagPerf'], $lc['alienPerf'], $lc['namePerf'], $lc['numPerf'], $lc['psPerf'], $lc['accPerf'], $lc['innPerf'], $lc['nameBankPerf'], $lc['swiftPerf'], $lc['corAccbankPerf'], $lc['emailPerf'], $lc['cityBankPerf'], $lc['cntrBankPerf'], $this->_sbr->data['cost']); $dateCoverLC = date('Y-m-d', $cover_time); $dateExecLC = date('Y-m-d', $exec_time); $dateEndLC = date('Y-m-d', $end_time); if ($resp->id) { $data = array('lc_id' => $resp->id, 'dateCoverLC' => $dateCoverLC, 'dateExecLC' => $dateExecLC, 'dateEndLC' => $dateEndLC, 'state' => $resp->state, 'stateReason' => $resp->stateReason); $res = $this->upLC($data, $this->_sbr->data['id'], 'sbr_id'); } else { $this->_setError('Ошибка создания аккредитива.'); $resp = false; } return $resp; }