Skrypt w PHP:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['invoice']) && $_FILES['invoice']['error'] == UPLOAD_ERR_OK) {
// Adres API KSeF (testowy)
$ksefApiUrl = 'https://ksef-test.mf.gov.pl/api/v1/invoices';
// Token KSeF (przykładowy, w rzeczywistości użyj swojego tokenu)
$token = 'xxx';
// Ścieżka do pliku tymczasowego
$invoiceXmlPath = $_FILES['invoice']['tmp_name'];
// Wczytanie zawartości pliku XML
$invoiceData = file_get_contents($invoiceXmlPath);
// Sprawdzenie, czy XML jest poprawny według schematu XSD
libxml_use_internal_errors(true);
$xml = new DOMDocument();
$xml->loadXML($invoiceData);
$xsdPath = 'https://magazyn.xxx.pl/schemas/Faktura_v2-0.xsd';
if (!$xml->schemaValidate($xsdPath)) {
echo "Plik XML jest niepoprawny według schematu XSD.<br>";
foreach (libxml_get_errors() as $error) {
echo htmlspecialchars($error->message) . "<br>";
}
exit;
} else {
echo "Plik XML jest poprawny według schematu XSD.<br>";
}
// Logowanie zawartości XML
file_put_contents('invoice_log.xml', $invoiceData);
// Inicjalizacja cURL
$ch = curl_init();
// Ustawienie opcji cURL
curl_setopt($ch, CURLOPT_URL, $ksefApiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $invoiceData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/xml',
'Accept: application/json',
'Authorization: Bearer ' . $token,
'Cache-Control: no-cache',
'Pragma: no-cache'
]);
// Wykonanie żądania
$response = curl_exec($ch);
// Sprawdzenie błędów cURL
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
} else {
// Odczytanie kodu odpowiedzi HTTP
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode == 200) {
echo "Faktura została pomyślnie wysłana do KSeF.<br>";
echo "Odpowiedź z serwera: " . htmlspecialchars($response) . "<br>";
} else {
echo "Wystąpił błąd podczas wysyłania faktury do KSeF.<br>";
echo "Status code: " . $httpCode . "<br>";
echo "Odpowiedź z serwera: " . htmlspecialchars($response) . "<br>";
// Logowanie odpowiedzi serwera dla celów diagnostycznych
file_put_contents('error_log.txt', "Status code: $httpCode\nResponse: $response\n", FILE_APPEND);
}
}
// Zamknięcie cURL
curl_close($ch);
}
?>
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Upload Invoice for Validation</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h2 class="mt-4">Upload Invoice for Validation</h2>
<form action="" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="invoice">Choose Invoice XML file:</label>
<input type="file" class="form-control-file" id="invoice" name="invoice" required>
</div>
<button type="submit" class="btn btn-primary">Upload</button>
</form>
</div>
</body>
</html>
Dostaje:
Plik XML jest poprawny według schematu XSD.
Wystąpił błąd podczas wysyłania faktury do KSeF.
Status code: 400
Odpowiedź z serwera: {"exception":{"serviceCtx":"srvTEMFF","serviceCode":"0711A016-9DEB-41B0-9538-FB4A7E5DC52B","serviceName":"exception.handler","timestamp":"2024-06-07T12:23:10.759Z","exceptionDetailList":[{"exceptionCode":21180,"exceptionDescription":"Nieprawidłowe żądanie."}]}}