/** * Получаем уведомление */ public function receiving() { // Проверяем что уведомление действительно от PayQR (по секретному ключу SecretKeyIn) payqr_logs::log('payqr_receiver::receiving()'); if (!payqr_authentication::checkHeader(payqr_config::$secretKeyIn)) { // если уведомление пришло не от PayQR, вызываем исключение throw new payqr_exeption("Неверный параметр ['PQRSecretKey'] в header уведомления", 1); } // Получаем данные из тела запроса $json = file_get_contents('php://input'); // Проверяем валидность JSON данных payqr_json_validator::validate($json); // Получаем объект события из уведомления $this->objectEvent = json_decode($json); // Проверяем наличие свойства типа объекта if (!isset($this->objectEvent->object) || !isset($this->objectEvent->id) || !isset($this->objectEvent->type)) { throw new payqr_exeption("В уведомлении отстутствуют обязательные параметры object id type", 1, $json); } // Сохраняем тип уведомления $this->type = $this->objectEvent->type; payqr_logs::log("invoice.type: " . $this->type); // В зависимости от того какого типа уведомление, создаем объект switch ($this->objectEvent->data->object) { case 'invoice': $this->objectOrder = new payqr_invoice($this->objectEvent->data, $this->objectEvent->livemode); break; case 'revert': $this->objectOrder = new payqr_revert($this->objectEvent->data, $this->objectEvent->livemode); break; default: throw new payqr_exeption("В уведомлении отстутствуют обязательные параметры object id type", 1, $json); return false; } payqr_logs::log("Идентификатор счета на оплату: " . $this->objectEvent->id); // если все прошло успешно, возвращаем идентификатор счета на оплату return $this->objectEvent->id; }
/** * Проверяем ответ от PayQR на отправленный запрос в PayQR */ private function check_response(payqr_curl_response $response) { // Проверяем что ответ не пустой if (empty($response)) { throw new payqr_exeption("Получен пустой ответ", 0); } // Проверяем код ответа if (!isset($response->headers['Status-Code'])) { throw new payqr_exeption("Отсутствует заголовок с кодом ответа " . print_r($response, true), 0, $response); } // Проверяем код ответа if ($response->headers['Status-Code'] != '200' && $response->headers['Status-Code'] != '100') { $r = json_decode($response->body); // получаем сообщение ошибки от PayQr if (isset($r->message)) { $this->error_message[] = $r->message; } throw new payqr_exeption("Получен ответ с кодом ошибки " . $response->headers['Status-Code'] . " " . print_r($response, true), 0, $response); } // Проверяем заголовок ответа if (!payqr_authentication::checkHeader(payqr_config::$secretKeyIn, $response->headers)) { throw new payqr_exeption("Неверный параметр ['PQRSecretKey'] в headers ответа" . print_r($response, true), 0, $response); } }