/**
  * Проверяем ответ от PayQR на отправленный запрос в PayQR
  */
 public function check_response($rawResponse, $method, $url, $vars)
 {
     $message = "Method: {$method}\nUrl: {$url}\nParams: " . var_export($vars, true) . "\nResponse: {$rawResponse}";
     PayqrLog::log($message);
     if ($rawResponse) {
         $this->trim_headers($rawResponse);
     } else {
         $error = curl_errno($this->request) . ' - ' . curl_error($this->request);
         throw new PayqrExeption("Ошибка при запросе {$method}, {$url}, " . var_export($vars, true) . ", {$error}", 0, $rawResponse);
     }
     // Проверяем что ответ не пустой
     if (empty($this)) {
         throw new PayqrExeption("Получен пустой ответ", 0);
     }
     // Проверяем код ответа
     if (!isset($this->headers['Status-Code'])) {
         throw new PayqrExeption("Отсутствует заголовок с кодом ответа " . var_export($this, true), 0, $this);
     }
     // Проверяем код ответа
     if ($this->headers['Status-Code'] != '200') {
         throw new PayqrExeption("Получен ответ с кодом ошибки " . $this->headers['Status-Code'] . " " . var_export($this, true), 0, $this);
     }
     // Проверяем заголовок ответа
     if (!PayqrAuth::checkHeader(PayqrConfig::$secretKeyIn, $this->headers)) {
         throw new PayqrExeption("Неверный параметр ['PQRSecretKey'] в headers ответа" . var_export($this, true), 0, $this);
     }
     return $this;
 }
Exemple #2
0
 /**
  * Получаем уведомление
  */
 public function receive()
 {
     // Получаем данные из тела запроса
     $json = file_get_contents('php://input');
     // логируем тело запроса
     PayqrLog::log("REQUEST\n" . $json);
     // Проверяем валидность JSON данных
     PayqrJsonValidator::validate($json);
     // Получаем объект события из уведомления
     $this->objectEvent = json_decode($json);
     // Проверяем что уведомление действительно от PayQR (по секретному ключу SecretKeyIn)
     if (!PayqrAuth::checkHeader(PayqrConfig::$secretKeyIn)) {
         // если уведомление пришло не от PayQR, вызываем исключение
         throw new PayqrExeption("Неверный параметр ['PQRSecretKey'] в header уведомления", 1);
     }
     // Проверяем наличие свойства типа объекта
     if (!isset($this->objectEvent->object) || !isset($this->objectEvent->id) || !isset($this->objectEvent->type)) {
         throw new PayqrExeption("В уведомлении отстутствуют обязательные параметры object, id, type", 1, $json);
     }
     $this->event = $this->objectEvent->type;
     $this->type = $this->objectEvent->data->object;
     PayqrLog::log("Тип события: " . $this->event . "\nИдентификатор события: " . $this->objectEvent->data->id);
     // В зависимости от того какого типа уведомление, создаем объект
     switch ($this->type) {
         case self::INVOICE:
             $this->objectHandler = new PayqrInvoice($this->objectEvent);
             break;
         case self::REVERT:
             $this->objectHandler = new PayqrRevert($this->objectEvent);
             break;
         case self::OFFER:
             $this->objectHandler = new PayqrOffer($this->objectEvent);
             break;
         case self::RECEIPT:
             $this->objectHandler = new PayqrReceipt($this->objectEvent);
             break;
         default:
             throw new PayqrExeption("В уведомлении отстутствуют обязательные параметры object id type", 1, $json);
             return;
     }
     // если все прошло успешно, возвращаем объект
     return $this->objectHandler;
 }