/**
  * Получить URL на скрипт формы оплаты
  *
  * @param BillingTransaction $transaction транзакция
  * @return string URL скрипта для отображения формы выбора типа оплаты
  */
 public static function getScriptURL(BillingTransaction $transaction)
 {
     $URL = self::getSettings('scriptUrl');
     $URL .= "?";
     $params = array("MrchLogin" => self::getSettings('login'), "OutSum" => $transaction->getTotal(), "InvId" => $transaction->getId(), "IncCurrLabel" => "PCR", "Desc" => $transaction->getService()->getName(), "SignatureValue" => md5(self::getSettings('login') . ':' . $transaction->getTotal() . ':' . $transaction->getId() . ':' . self::getSettings('pass1') . ':' . 'shpa=' . $transaction->getTerm()), "Culture" => "ru", "Encoding" => "utf-8", "shpa" => $transaction->getTerm());
     foreach ($params as $key => $value) {
         if ($URL[strlen($URL) - 1] != '?') {
             $URL .= '&';
         }
         $URL .= $key . "=" . rawurlencode($value);
     }
     return $URL;
 }
 /**
  * Тест каскадных удалений
  *
  */
 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);
 }
 /**
  * Отправляет запрос на success url
  * @param BillingTransaction $transaction
  * @param array $billingSettings
  */
 private function sendSuccessRequest($transaction, $billingSettings)
 {
     $url = $this->generateUrl('robokassa', array('action' => 'success'));
     $params = array('InvId' => $transaction->getId(), 'OutSum' => $transaction->getPrice() * $transaction->getTerm(), 'SignatureValue' => md5(implode(':', array($transaction->getTotal(), $transaction->getId(), $billingSettings['pass1'], 'shpa=' . $transaction->getTerm()))), 'shpa' => $transaction->getTerm());
     $this->browser->post($url, $params)->with('response')->begin()->isStatusCode(200)->matches('/(Оплата произведена успешно)/')->end();
 }