Lettura fatture p7m in ricezione in PHP

Hai risolto per il tuo business, e la soluzione è la sola applicabile. Ma il problema è che nel cassetto fiscale del cliente la fattura è sbagliata, se fa download è il base64. Cosa mandi in conservazione? Quella oggetto di tua fix o quella originale?

Dipende da quante fatture riceve la tua piattaforma e quanti utenti serve. L’incidenza è molto bassa, per fortuna, e nel molto bassa, laddove la quantità è piccola, può diventare zero.
Se può interessarti o spaventarti, ho anche un caso isolato di fattura con attachment che viene riencodata base64 e pure tagliata verso il finale.

1 Mi Piace

ti rispondo con una frase da far rabbrividire.
Al momento c’è la conservazione dell’ADE poi manderemo in conservazione ulteriore i documenti con un conservatore ufficiale ma per quello c’è tempo dato che la data ultima è entro il 60 o 90 giorni dal termine dell’anno solare.

per quanto riguarda cosa mandare, io manderei quello che ho ricevuto per garantire che non è stato modificato nulla.

Figo! Non c’è mai limite al peggio! :joy:

MI chiedo come sia possibile che SDI passi un file del genere tagliato visto che lo deve decodificare…
Di sicuro non è possibile su SDIFTP dove un trasferimento a metà non può succedere (altrimenti SDI non rinomina il file).
Mi chiedo una cosa. Non è che qualche SOAP in giro in caso di pacchetto incompleto fa lo zelante ed interpreta ciò che fino a quel punto ha ricevuto ignorando il controllo fra la content lenght dichiarata e quella reale ?

il file non è obbligatorio che sia in formato smime… il flag PKCS7_BINARY dovrebbe risolvere il problema…

edit: il formato SMIME è obbligatorio il flag binary fa solo aprire i file su windows in binary mode…
(guardato il codice)

non è un p7m ma è comunque un caso particolare.
questa notte il nostro sistema non è riuscito a ricevere una fattura.
ecco un pezzo della fattura che dai log non siamo riusciti a leggere per poterla indirizzare al cliente

se interpretato tramite browser gli spazi non ci sono e sembra corretto…
invece gli spazi ci sono e la funzione simplexml_load_string non riesce ad interpretare l’XML

Sei sicuro che siano spazi e non byte con valore 0? Il file potrebbe essere in UTF-16.

Ho provato a fare alcuni test con la verifica online delle fatture, e mi scarta le fatture in UTF-16 se non è presente la dichiarazione xml <?xml version="1.0" encoding="utf-16"?>, quindi se fosse effettivamente UTF-16, non so come abbia fatto a passare attraverso il SdI.

svista mia.
è in utf-16

Ma è arrivata da SDI ???

si è una fattura in utf-16 anziché utf-8
simplexml_load_string non è in grado di leggerne il contenuto e ritorna FALSE.
quindi ho dovuto applicare una condizione che in caso di FALSE, prova ad interpretare la stringa con
SimpleXMLElement

anche se probabilmente potrei usare direttamente SimpleXMLElement

Per la lettura potete provare anche questo : Decodifica Firma CADES - BES / php

Ciao,
scusa se intervengo in questo thread ma interessa molto la tua risposta.
Ho problemi proprio con l’istruzione di openSSL che hai postato tu (ho creato un thread apposito sul forum, se ti va puoi rispondermi li). Io sviluppo in .net ma non ho trovato librerie che gestiscano direttamente i file p7m (bouncy castle non lo fa, ed è la piu’ completa e diffusa) ed è per questo che uso le chiamate ad openSSL.
Nel caso puoi suggerirmi qualche libreria adatta? Hai qualche hint o esempio?
Grazie mille!

Guarda chilkat ne parlo anche qui.

guardo subito. Grazie!

Scusate se mi intrometto, ma avrei bisogno di capire come utilizzare il comando PHP per estrarre la fattura XML dal file P7M. Utilizzando il comando:
openssl smime -verify -inform DER -in fattura.xml.p7m -noverify -out fattura.xml
sono riuscito ad ottenere il file XML. Come lo traduco in PHP (ho un server con PHP 5.3)

Grazie per il vostro preziosissimo aiuto!

Se il tuo server te lo permette puoi usare exec o system o popen per eseguire quel comando da dentro php, altrimenti puoi seguire le indicazioni di questo thread per implementarlo nativamente in php usando le funzioni openssl.

Scusate, se il mio server non permette i comandi exec o system come faccio ad estrarre l’xml in php? Ho anche fatto varie prove con il comando openssl_pkcs7_verify ma non sono arrivato a nulla.
Grazie

Hai guardato questo altro thread ?

é abbastanza ben spiegato da italjack come ha fatto ad arrivarci in fondo…

  1. Il p7m deve essere trasformato in formato smime
  2. devi aver una lista di CA (anche se poi di fatto puoi ignorare la verifica

Salve a tutti,
io ho utilizzato uno script python che utilizzo poi da php.

Qui il link: https://github.com/Laischon/P7M-Extract

Che ne pensate? Non effettuo verifica della firma e null’altro.