/** * Получаем уведомление */ 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; }
private function getObject() { PayqrJsonValidator::validate($this->request->body); return json_decode($this->request->body); }