Ejemplo n.º 1
0
 /**
  * /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;
 }