public function process_event(&$event) { global $DB; $this->force_connect(); $is_repeat = false; $message = false; $reserve_id = intval(@$event->data['reserve_id']); try { switch ($event->type) { case 'payback': $is_repeat = !ReservesPayback::getInstance()->doPayback($reserve_id); if (!$is_repeat) { $message = 'Средства возвращены.'; } break; case 'payout': $is_repeat = !ReservesPayout::getInstance()->doPayout($reserve_id); if (!$is_repeat) { $message = 'Средства выплачены.'; } break; } } catch (ReservesPayException $e) { $message = 'Ошибка: ' . $e->getMessage(); $is_repeat = $e->isRepeat(); } if ($message) { $this->log->notice(iconv('CP1251', 'UTF-8', sprintf(self::LOG_FORMAT, $event->type, $reserve_id, $message))); } if ($is_repeat) { $DB->query("SELECT pgq.insert_event('reserves', ?, ?)", $event->type, http_build_query($event->data)); } return PGQ_EVENT_OK; }
/** * Выплата по резерву * * @todo: пока только приспособлено только для заказа * но возможна доработка при работе резерва с любым другим объектом * * @param type $type - тип способа выплаты * @param type $params - данные * @return \xajaxResponse */ function reservesPayoutProcess($type, $params) { $objResponse =& new xajaxResponse(); $orderModel = TServiceOrderModel::model(); $uid = get_uid(false); $order_id = intval(@$params['oid']); $hash = @$params['hash']; $test_hash = md5(TServiceOrderModel::SOLT . $order_id); $error = false; try { if ($uid <= 0 || $hash !== $test_hash || !in_array($type, ReservesPayoutPopup::$payment_list)) { throw new Exception(); } $orderData = $orderModel->getCard($order_id, $uid); if (!$orderData || !$orderModel->isStatusEmpClose() || !$orderModel->isReserve()) { throw new Exception(); } $reserveInstance = $orderModel->getReserve(); if (!$reserveInstance->isAllowPayout($uid) || !$reserveInstance->isFrlAllowFinance()) { throw new Exception(); } $history = new tservices_order_history($order_id); $reservesPayout = new ReservesPayout(); $status = $reservesPayout->requestPayout($reserveInstance, $type); $is_done = $reserveInstance->changePayStatus($status); if ($is_done) { //@todo: передача данных устаревший способ но оставляем для поддержки пока //посностью не передем на обьекты $orderData['reserve_data'] = $reserveInstance->getReserveData(); //@todo: правильный способ - нужно оперировать обьектами $orderData['reserve'] = $reserveInstance; try { $doc = new DocGenReserves($orderData); $doc->generateInformLetterFRL(); } catch (Exception $e) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/log.php'; $log = new log('reserves_docs/' . SERVER . '-%d%m%Y.log', 'a', "%d.%m.%Y %H:%M:%S: "); $log->writeln(sprintf("Order Id = %s: %s", $orderData['id'], iconv('CP1251', 'UTF-8', $e->getMessage()))); //$sHtml = tservices_helper::getMessage($e->getMessage(),'error'); //$objResponse->call('TServices_Order.showBeforeStatus', $order_id, $sHtml); } } $feedback = @$params['feedback']; $is_feedback = !empty($feedback); $fbtype = @$params['fbtype']; //Сохраняем отзыв если он есть if ($is_feedback && !$orderModel->isFrlFeedback()) { $is_emp = false; $orderFeedbackModel = new TServiceOrderFeedbackModel(); $is_valid = $orderFeedbackModel->attributes(array('feedback' => $feedback, 'rating' => $fbtype, 'is_emp' => $is_emp, 'user_id' => $uid)); //Тут обрабатывать ошибки при валидации if (!$is_valid || !$orderFeedbackModel->addFeedback($order_id)) { return $objResponse; } $attributes = $orderFeedbackModel->attributes(); $orderData['frl_feedback'] = $attributes['feedback']; $orderData['frl_rating'] = $attributes['rating']; //Сохранить действие в историю $history->saveFeedback($is_emp, $fbtype); //Чистим кеш кол-во новых сообщений юзера после написания комментария $orderModel->clearCountEvent($orderData["emp_id"]); } $tserviceOrderStatusWidget = new TServiceOrderStatus(); $tserviceOrderStatusWidget->setIsEmp(false); $tserviceOrderStatusWidget->setOrder($orderData); $tserviceOrderStatusWidget->init(); ob_start(); $tserviceOrderStatusWidget->run(); $sHtml = ob_get_contents(); ob_end_clean(); $objResponse->assign('tservices_order_status_' . $order_id, 'innerHTML', $sHtml); $objResponse->script('window.order_feedback_factory = new OrderFeedbackFactory();'); } catch (Exception $e) { $error = $e->getMessage(); } if ($error !== false) { //Если есть ошибки то статус не обновляется и //в окошке попапа можно их показать или просто закрыть его $idx = ReservesPayoutPopup::getPopupId($order_id); $objResponse->script("\n var rp = window.reserves_payout_factory.getReservesPayout('{$idx}');\n if(rp) " . (!empty($error) ? "rp.show_error('{$error}');" : "rp.close_popup();\n ")); } else { //иначе статус обновился и нужно обновить JS события $objResponse->script("\n Bar_Ext.popuper();\n window.reserves_payout_factory = new ReservesPayoutFactory();\n "); } return $objResponse; }
if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) { $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/'); } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php'; //require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/config.php"); //require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/profiler.php"); //require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/billing.php"); //require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/reqv.php'); //require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_meta.php'); //require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/reserves/ReservesModelFactory.php'); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reserves/ReservesPayout.php'; //------------------------------------------------------------------------------ $results = array(); //------------------------------------------------------------------------------ try { $reservesPayout = new ReservesPayout(); $result = $reservesPayout->getDestinationCardSynonim('4149497813559384', '15100'); //('4268033703545624', '1000000'); print_r($result); exit; /* $request = new HTTP_Request2('https://paymentcard.yamoney.ru/gates/card/storeCard'); $request->setMethod(HTTP_Request2::METHOD_POST) ->addPostParameter(array( 'skr_destinationCardNumber' => '4268033703545624', 'sum' => '1000000', //'skr_errorUrl' => 'fl.ru', //'skr_successUrl' => 'fl.ru' ));
public function getPayoutsInfo() { require_once ABS_PATH . '/classes/reserves/ReservesPayout.php'; $reservesPayout = new ReservesPayout(); $payoutList = $reservesPayout->getPayouts($this->getID()); if ($payoutList) { foreach ($payoutList as $key => $payoutItem) { $payoutList[$key]['price'] = tservices_helper::cost_format($payoutItem['price'], true); $payoutList[$key]['status_txt'] = self::$_payout_status_txt[$payoutItem['status']]; $payoutList[$key]['error'] = $payoutItem['error'] == 0 ? 'нет' : $payoutItem['error']; $payoutList[$key]['date'] = date('d.m.Y H:i', strtotime($payoutItem['date'])); $payoutList[$key]['last'] = $payoutItem['last'] ? date('d.m.Y H:i', strtotime($payoutItem['last'])) : ' — '; $payoutList[$key]['techmessage'] = $payoutList[$key]['techmessage'] ? $payoutList[$key]['techmessage'] : ' — '; } } $payoutReqv = $reservesPayout->getPayoutReqv($this->getID()); if ($payoutReqv) { require_once ABS_PATH . '/classes/reserves/ReservesPayoutPopup.php'; $payoutReqv['pay_type_txt'] = ReservesPayoutPopup::$payments_short_text[$payoutReqv['pay_type']]; $payoutReqv['date'] = date('d.m.Y H:i', strtotime($payoutReqv['date'])); $payoutReqv['last'] = $payoutReqv['last'] ? date('d.m.Y H:i', strtotime($payoutReqv['last'])) : ' — '; $payoutReqv['fields'] = mb_unserialize($payoutReqv['fields']); $payoutReqv['is_bank'] = $payoutReqv['pay_type'] == ReservesPayoutPopup::PAYMENT_TYPE_BANK; $payoutReqv['is_allow_change_status'] = $payoutReqv['is_bank'] && !$this->isStatusPayPayed(); } $payoutLog = $reservesPayout->getErrorLog($this->getID()); $payouts = array('list' => $payoutList, 'reqv' => $payoutReqv, 'log' => $payoutLog); return $payouts; }
throw new Exception('No order_id param'); } if (!$type) { throw new Exception('No type param'); } $orderModel = TServiceOrderModel::model(); $orderModel->attributes(array('is_adm' => true)); $orderData = $orderModel->getCard($order_id, 0); if (!$orderData || !$orderModel->isStatusEmpClose() || !$orderModel->isReserve()) { throw new Exception('None'); } $reserveInstance = $orderModel->getReserve(); if (!$reserveInstance->isAllowPayout($orderData['frl_id']) || !$reserveInstance->isFrlAllowFinance()) { throw new Exception('Not isAllowPayout'); } $reservesPayout = new ReservesPayout(); $status = $reservesPayout->requestPayout($reserveInstance, $type); $results['status'] = (int) $status; $is_done = $reserveInstance->changePayStatus($status); $results['is_done'] = (int) $is_done; if ($is_done) { //@todo: передача данных устаревший способ но оставляем для поддержки пока //посностью не передем на обьекты $orderData['reserve_data'] = $reserveInstance->getReserveData(); //@todo: правильный способ - нужно оперировать обьектами $orderData['reserve'] = $reserveInstance; try { $doc = new DocGenReserves($orderData); //$doc->generateInformLetterFRL(); //@todo: генерируем документ когда резерв закрыт после всех выплат if ($reserveInstance->isClosed()) {