fatturaelettronicaphp / FatturaElettronica

Pacchetto PHP per la lettura, la generazione e la validazione della fattura elettronica, sia per la Pubblica Amministrazione che tra privati (B2B)
https://fatturaelettronicaphp.github.io/FatturaElettronica
MIT License
40 stars 14 forks source link

errore in $eDocument->isValid() #47

Closed itajackass closed 2 years ago

itajackass commented 2 years ago

Ciao ho provato a validare un xml, con:

 var_dump($eDocument->isValid());

ma ricevo warning:

  Warning: DOMDocument::schemaValidateSource(): Invalid Schema in C:\wamp64\www\fatturaelettronicaphp\vendor\fatturaelettronicaphp\fattura-elettronica\src\Validator\DigitalDocumentValidator.php on line 43

con validazione "false"

se faccio un var_dump di:

 $errors = $eDocument->validate()->errors();

visualizzo:

  '{http' => string '/www.w3.org/2001/XMLSchema}element', attribute 'ref': The QName value '{http://www.w3.org/2000/09/xmldsig#}Signature' does not resolve to a(n) element declaration.
Skullbock commented 2 years ago

Vedo che stai usando windows. Quell'errore da come problema di caricamento il file core.xsd che carichiamo localmente, forse il tuo env php ha problema nel caricare quel file?

Prova la branch fix/xsd per vedere se lo risolve, altrimenti ho bisogno di più info sul perchè la tua installazione di php su windows non carica correttamente il file

itajackass commented 2 years ago

ho provato l'altra branch senza successo.

Se provo a modificare il metodo (vedi linea commentata):

 protected function getSchema(): string
{
    //$schemaFile = $this->document->isSimplified() ? 'semplificata_1.0.xsd' : 'pa_1.2.1.xsd';
    $schemaFile = $this->document->isSimplified() ? 'semplificata_1.0.xsd' : 'core.xsd';
    $xsd = file_get_contents(__DIR__ . '/xsd/' . $schemaFile);

    $xmldsigFilename = __DIR__ . '/xsd/xmldsig-core-schema.xsd';
    $xsd = preg_replace('/(\bschemaLocation=")[^"]+"/', sprintf('\1%s"', $xmldsigFilename), $xsd);

    return $xsd;
}

il warning se ne va, ma ho come risultato di $errors = $eDocument->validate()->errors();:

  {http' => string '/ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2}FatturaElettronica': No matching global declaration available for the validation root.
Skullbock commented 2 years ago

La tua modifica non carica il file della fattura PA, quindi è normale che fallisca.

Strano, è successo con le ultime pubblicazioni o è così anche con le versioni meno recenti che segnali l'errore dell'xsd?

itajackass commented 2 years ago

a dir il vero non avevo ancora usato la validazione prima d'ora perchè stavo ancora lavorando sulla creazione dell' xml. c'è modo di recuperare vecchie releases così provo?

Skullbock commented 2 years ago

Sono tutte taggate su git e le puoi recuperare sia da GIT che da composer

itajackass commented 2 years ago

si le sto provando con composer... sono andato a ritroso fino alla 2.0 ma nulla da fare... mi sembra di aver letto sul git dell'autore del codice che si occupa della validazione, che su win proprio non c'è verso di farlo andare sembra

Skullbock commented 2 years ago

Sembra che ci sia riuscito usando il file path invece della stringa source. https://github.com/fatturaelettronicaphp/FatturaElettronica/actions/runs/1683442542

Prova di nuovo la branch fix/xsd

itajackass commented 2 years ago

Magnifico! Funziona!

Skullbock commented 2 years ago

Rilasciato nella 2.5.3