/** * Тест метода checkSuccessAndFailSignature */ public function testCheckSuccessAndFailSignature() { $config = $this->_getConfig(); $this->_setConfig(); $invId = 1; $outSum = 2; $term = 3; $hash = md5($outSum . ':' . $invId . ':' . $config['pass1'] . ':' . 'shpa=' . $term); $testResult = Robokassa::checkSuccessAndFailSignature($invId, $outSum, $term, $hash); $this->assertEquals($testResult, true); $testResult = Robokassa::checkSuccessAndFailSignature($invId, $outSum, $term, 'wrong hash'); $this->assertEquals($testResult, false); }
/** * Проверка для success и fail одинаковая, так что, выносим в отдельный метод * * @param sfWebRequest $request * @return BillingTransaction */ private function checkSuccessAndFailParams(sfWebRequest $request) { $userId = $this->getUser()->getUserRecord()->getId(); // Получаем POST параметры $transactionId = (int) $request->getPostParameter("InvId", 0); $price = $request->getPostParameter("OutSum", 0); $signature = $request->getPostParameter("SignatureValue", ""); $term = (int) $request->getPostParameter("shpa", 0); // Получаем транзакцию $transaction = Doctrine::getTable('BillingTransaction')->find($transactionId); $this->forward404Unless($transaction); // Проверяем ID пользователя $this->forward404Unless((int) $transaction->getUserId() == $userId); // Проверяем совпадение суммы $this->forward404Unless(floatval($transaction->getTotal()) == floatval($price)); // Проверяем подпись $this->forward404Unless(Robokassa::checkSuccessAndFailSignature($transactionId, $price, $term, $signature)); return $transaction; }