/** * /robokassa/success * Экшн для редиректа в случае успешного прохождения платежа * * @param sfWebRequest $request */ public function executeSuccess(sfWebRequest $request) { $transaction = $this->checkSuccessAndFailParams($request); // Транзакция уже завершена, повторая попытка if ($transaction->getStatus()) { $this->forward('services', 'index'); } // Все верно, ставим флаг "оплачено" $transaction->setStatus(1); $transaction->setSuccess(1); $transaction->save(); // Создаем либо обновляем сабскрипшн $subscription = Doctrine::getTable('ServiceSubscription')->findOneByUserIdAndServiceId($transaction->getUserId(), $transaction->getServiceId()); // Если еще нет сабскрипшна на эту услугу - создаем if (!$subscription) { $subscription = new ServiceSubscription(); $subscription->setUserId($transaction->getUserId()); $subscription->setServiceId($transaction->getServiceId()); $subscription->setSubscribedTill(date('Y-m-d H:i:s', time())); } // Количество месяцев $term = (int) $request->getPostParameter("shpa", 1); // Накидываем 30 дней к услуге и умножаем на количество месяцев $subscribedTill = strtotime($subscription->getSubscribedTill()) + 3600 * 24 * 30 * $term; $subscription->setSubscribedTill(date('Y-m-d H:i:s', $subscribedTill)); $subscription->save(); $transaction->setSubscriptionId($subscription->getId()); $transaction->save(); $this->getUser()->setFlash('robokassa_status', 1); $this->forward('services', 'index'); return sfView::NONE; }