/** * Создать пользователя и подписать его на услугу * Вернуть новый счет с этим пользователем * * @return Account */ private function _makeAccountWithSubscribedUser($daysShift = 1) { $user = $this->helper->makeUser(); $date = new DateTime("{$daysShift}days"); $service = Doctrine::getTable('Service')->findOneByKeyword(Service::SERVICE_SMS); // Подписка $subscription = new ServiceSubscription(); $subscription->setUser($user); $subscription->setService($service); $subscription->setSubscribedTill($date->format('Y-m-d 00:00:00')); $subscription->save(); return $this->helper->makeAccount($user); }
/** * /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; }