/** * Функция для автооплаты (учитывает состояние личного счета). * * @param billing $bill Объект биллинга (должен быть подготовлен резерв перед оплатой @see self::preparePayments()) * @param float $ammount Сумма для списывания */ public static function autoPayed(billing $bill, $ammount) { if ($bill->reserved <= 0) { return false; } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wallet/wallet.php'; $complete = false; $wallet = WalletTypes::initWalletByType($bill->user['uid']); // Пытаемся оплатить из личного счета иначе автооплатой если она включена // @todo при неудаче покупки пробовать ли оплатить через привязанный кошелек? if ($bill->acc['sum'] >= $ammount) { $bill->transaction = $bill->account->start_transaction($bill->user['uid'], 0); $complete = $bill->completeOrders($bill->reserved); if ($complete) { $bill->account->commit_transaction($bill->transaction, $bill->user['uid'], null); } } elseif (WalletTypes::checkWallet($wallet)) { if ($wallet->api->checkToken()) { // Проводим списывание денег $complete = $wallet->payment($ammount); } else { // Ключ не действителен сообщаем об этом владельцу $complete = false; } } // Если все плохо отменяем операции if (!$complete) { $success = $bill->setReserveStatus($bill->reserved, self::RESERVE_CANCEL_STATUS); if ($success) { $bill->updateOrderListStatus($bill->reserved, self::STATUS_DELETE); } } return $complete; }
if (!($freeze_set || $freezed_now)) { return; } ?> <div class="b-layout__txt <?php echo !$pro_last ? 'b-layout__txt_hide' : ''; ?> buyed_pro"> <table class="b-layout__table b-layout__table_center b-layout__table_width_940 b-layout__table_margtop_20 b-layout__table_margbot_30"> <tr class="b-layout__tr"> <td id="autoprolong_html" class="b-layout__td b-layout__td_left b-layout__td_width_50ps b-layout__td_width_full_ipad"> <?php if ($u_is_pro_auto_prolong == 't') { ?> <?php $wallet = WalletTypes::initWalletByType(get_uid(false)); if ($wallet != false) { include $_SERVER['DOCUMENT_ROOT'] . '/bill/widget/tpl.info_wallet.php'; } else { $service = array('auto' => $u_is_pro_auto_prolong, 'id' => get_uid(false)); $_SESSION['redirect_uri_wallet'] = is_emp() ? '/payed-emp/' : '/payed/'; ?> <span class="walletInfo"> <div class="b-layout__h3 b-layout__h3_padbot_5">Автопродление</div> </span> <span id="wallet"> <?php $popup_content = $_SERVER['DOCUMENT_ROOT'] . '/bill/widget/popups/popup.wallet.php'; include $_SERVER['DOCUMENT_ROOT'] . '/bill/widget/tpl.popup.php'; ?>
public function failAutoprolong($info, $service = 'pro') { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wallet/wallet.php'; $user = $info['user']; if ($user['bill_subscribe'] == 'f') { return; } $date = date('j') . ' ' . monthtostr(date('n'), true) . ' ' . date('Y года'); $cost = $info['sum_cost']; $wallet = WalletTypes::initWalletByType($user['uid']); $type = WalletTypes::checkWallet($wallet) ? $wallet->data['type'] : -1; $walletName = WalletTypes::getNameWallet($type, 3, $user['acc_id']); if ($service == 'pro') { $this->subject = 'FL.ru: Автопродление аккаунта PRO отключено'; $message = "Сегодня, {$date}, должно было состояться повторное списание средств для автоматического продления срока действия вашего аккаунта PRO.<br/>"; $message .= "Всего с {$walletName} должно быть списано {$cost} " . ending($cost, 'рубль', 'рубля', 'рублей') . ', однако в процессе списания вновь произошла ошибка.<br/><br/>'; $message .= 'Срок действия аккаунта PRO завершен, а его автопродление временно отключено и возобновится при следующем приобретении услуги.<br/><br/>'; $message .= "Информацию о повторном приобретении услуг и автопродлении, а также ответы на все интересующие вопросы вы можете найти в нашем <a href='https://feedback.fl.ru/{$this->_addUrlParams('b', '?')}'>сообществе поддержки</a>."; } $this->recipient = "{$user['uname']} {$user['usurname']} [{$user['login']}] <{$user['email']}>"; $this->message = $this->getHtml($user['login'], $message, array('header' => 'default', 'footer' => 'default'), array('login' => $user['login'])); $this->send('text/html'); }