/** * Проверяем header уведомлений и ответов от PayQR на соответствие значению SecretKeyIn * * @param $secretKeyIn * @return bool */ public static function checkHeader($secretKeyIn, $headers = false) { if (!payqr_config::$checkHeader) { return true; } if (!$headers) { if (!function_exists('getallheaders')) { $headers = payqr_base::getallheaders(); } else { $headers = getallheaders(); } } if (!$headers) { header("HTTP/1.0 404 Not Found"); payqr_logs::log("Не удалось выполнить проверку входящего секретного ключа SecretKeyIn, отсутствует headers", __FILE__ . " " . __METHOD__, __LINE__); return false; } // Проверяем соответствие пришедшего значения поля PQRSecretKey значению SecretKeyIn из конфигурации библиотеки if (isset($headers['PQRSecretKey']) && $headers['PQRSecretKey'] == $secretKeyIn) { return true; } foreach ($headers as $key => $header) { $headers[strtolower($key)] = $header; } if (isset($headers['pqrsecretkey']) && $headers['pqrsecretkey'] == $secretKeyIn) { return true; } header("HTTP/1.0 404 Not Found"); payqr_logs::log("Входящий секретный ключ из headers не совпадает с входящим ключом из файла конфигурации \n\r Текущее значение SecretKeyIn из вашего payqr_config.php: " . $secretKeyIn . " \n\r Содержание headers полученного уведомления от PayQR: " . print_r($headers, true), __FILE__ . " " . __METHOD__, __LINE__); return false; }
public function __construct() { payqr_base::checkConfig(); $this->objectResponse = false; $this->objectOrder = false; $this->orderId = 0; $this->errors = array(); }
/** * Отправка POST-запроса * @param $url * @param $postdata * @return bool|payqr_curl_response */ public function post($url, $postdata) { if (is_array($postdata)) { $postdata = payqr_base::http_build_query($postdata, '', '&'); } $url_obj = parse_url($url); if (!isset($url_obj['host'])) { payqr_logs::log(__FILE__ . "\n\r" . __METHOD__ . "\n\r L:" . __LINE__ . "\n\r" . " Неверный параметр url: " . $url . " не удалось определить host для запроса"); return false; } $host = $url_obj['host']; $errno = ""; $errstr = ""; $fp = fsockopen("ssl://" . $host, 443, &$errno, &$errstr, intval(payqr_config::$maxTimeOut)); if (!$fp) { payqr_logs::log(__FILE__ . "\n\r" . __METHOD__ . "\n\r L:" . __LINE__ . "\n\r" . 'Ошибка при запросе ' . $url . ' ' . $errstr($errno) . "\n"); } else { $out = "POST {$url} HTTP/1.1\r\n"; $out .= "User-Agent: PayQr Lib\r\n"; $out .= "Host: {$host}\r\n"; $out .= "Accept: */*\r\n"; if (is_array($this->headers)) { foreach ($this->headers as $key => $value) { $out .= "{$key}: {$value}\r\n"; } } $out .= "Connection: Close\r\n\r\n"; $out .= "{$postdata}\n\n"; $out .= "\r\n"; fwrite($fp, $out); $output = ""; while (!feof($fp)) { $output .= fgets($fp, 1024); } fclose($fp); $response = false; if ($output) { $response = new payqr_curl_response($output); } else { payqr_logs::log(__FILE__ . "\n\r" . __METHOD__ . "\n\r L:" . __LINE__ . "\n\r" . 'Ошибка при запросе ' . $url . ' пустой или неправильный ответ ' . print_r($output, true) . "\n"); } return $response; } }
/** * Добавление записи в лог файл * * @param $file * @param $message */ public static function log($message, $file_name = false, $line = false) { $micro_date = microtime(); $date_array = explode(" ", $micro_date); $date = date("Y-m-d H:i:s", $date_array[1]); $message = mb_convert_encoding($message, 'utf-8', mb_detect_encoding($message)); $message = html_entity_decode($message, ENT_NOQUOTES, 'UTF-8'); $message = payqr_base::encode($message); if (!payqr_config::$enabledLog) { return; } if ($file_name && $line) { @file_put_contents(payqr_config::$logFile, "\r\n==============" . $date . " " . $date_array[0] . "==============\r\n", FILE_APPEND); @file_put_contents(payqr_config::$logFile, "\r\n====" . $file_name . " Line: " . $line . "=====\r\n", FILE_APPEND); } else { @file_put_contents(payqr_config::$logFile, "\r\n==============" . $date . " " . $date_array[0] . "==============\r\n", FILE_APPEND); } @file_put_contents(payqr_config::$logFile, $message, FILE_APPEND); }