/**
  * Создать пользователя и подписать его на услугу
  * Вернуть новый счет с этим пользователем
  *
  * @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);
 }
Ejemplo n.º 2
0
 /**
  * Авторизоваться
  * Проверяем 2 ситуации:
  *  - У пользователя есть подписка на услугу iphone, и она просрочена
  *  - У пользователя есть действующая подписка
  */
 public function testAuthentificatedAndSubscribed()
 {
     $plan = array(array('subscribed_till' => date('Y-m-d', strtotime('- 2 days')), 'status_code' => 402, 'element' => array('selector' => 'response error', 'contents' => 'Payment required'), 'is_authenticated' => false), array('subscribed_till' => date('Y-m-d', strtotime('+ 2 days')), 'status_code' => 200, 'element' => array('selector' => 'response message', 'contents' => 'Authentificated'), 'is_authenticated' => true));
     $expected = array('user_name' => "Name", 'user_login' => "Login", 'password' => "ValidPassword");
     $user = $this->helper->makeUser($expected);
     $service = new Service();
     $service->keyword = Service::SERVICE_IPHONE;
     $service->price = 100;
     $service->name = "Уникальное имя услуги " . uniqid();
     $service->save();
     foreach ($plan as $case) {
         if (!isset($subscription)) {
             $subscription = new ServiceSubscription();
             $subscription->service_id = $service->id;
             $subscription->user_id = $user->getId();
         }
         $subscription->subscribed_till = $case['subscribed_till'];
         $subscription->save();
         $requestParams = array('login' => $expected['user_login'], 'password' => $expected['password']);
         $this->browser->post($this->generateUrl("auth"), $requestParams)->with("request")->begin()->isParameter("module", "myAuth")->isParameter("action", "login")->end()->with("response")->begin()->isStatusCode($case['status_code'])->checkElement($case['element']['selector'], $case['element']['contents'])->end()->with("user")->isAuthenticated($case['is_authenticated']);
     }
 }
Ejemplo n.º 3
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;
 }