/** * /robokassa/init * Инициализация транзакции и возврат json-обекта * * @param sfWebRequest $request */ public function executeInit(sfWebRequest $request) { $userId = $this->getUser()->getUserRecord()->getId(); // В качестве параметра ожидаем ID услуги (POST параметр service) $serviceId = (int) $request->getParameter("service", 0); $term = (int) $request->getParameter("term", 1); // Получаем стоимость услуги $service = Doctrine::getTable('Service')->find($serviceId); $this->forward404Unless($service); $price = $service->getPrice(); // Инициализация транзакции $transaction = new BillingTransaction(); $transaction->setUserId($userId); $transaction->setPaysystem('robokassa'); $transaction->setServiceId($serviceId); $transaction->setPrice($price); $transaction->setTerm($term); $total = round($term * $price, 2); $transaction->setTotal($total); $transaction->save(); $url = Robokassa::getScriptURL($transaction); $b = new sfWebBrowser(); $b->get($url); $text = $b->getResponseText(); $matches = array(); preg_match_all("/^(.*)document.write\\(\\'(.*)\\'\\)/isu", $text, $matches); $return = array("result" => array("script" => html_entity_decode(trim($matches[1][0])), "html" => html_entity_decode(trim($matches[2][0])))); $this->getResponse()->setHttpHeader('Content-Type', 'application/json'); return $this->renderText(json_encode($return)); }
/** * Тест каскадных удалений * */ public function testCascade() { $bt = new BillingTransaction(); // Создаем пользователя, услугу и транзакцию $user = $this->helper->makeUser(); $user->save(); $service = new Service(); $service->save(); $bt->setUserId($user->getId()); $bt->setServiceId($service->getId()); $bt->save(); // При удалении службы транзакция остается $service->delete(); $findBt = Doctrine::getTable('BillingTransaction')->find($bt->getId()); $this->assertType('BillingTransaction', $findBt); $this->assertEquals($findBt->getId(), $bt->getId()); // При удалении пользователя удаляется запись о транзакции $user->delete(); $findBt = Doctrine::getTable('BillingTransaction')->find($bt->getId()); $this->assertEquals($findBt, null); }