730 precompilato + di uno snippet

  • Creatore Discussione Creatore Discussione marino51
  • Data di inizio Data di inizio
Questa fuzioncina fa la stessa cosa e formatta a video l'XML.

dump_xml("Ultima request", $client->__getLastRequest())

function dump_xml($title, $body)
{
$nl = preg_replace("/\>\</", ">\n<", $body);
$clean = htmlspecialchars($nl);
print "\n<b>$title</b>\n<PRE>$clean</PRE>\n";
}

Ottengo
Codice:
Ultima request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://documentospesap730.sanita.finanze.it">
<SOAP-ENV:Body>
<ns1:inserimentoDocumentoSpesaRequest>
<ns1:eek:pzionale1>
</ns1:eek:pzionale1>
<ns1:eek:pzionale2>
</ns1:eek:pzionale2>
<ns1:eek:pzionale3>
</ns1:eek:pzionale3>
<ns1:pincode>Iz3Pt1wsT06X9w9S4tRi54owcdSO/O0wSEy3t7U11OGD2uF3ftE6cEXFqFrTvhs2KFs+5j3gkj1CYZApRH3Lc/9PSOfmB+pSV88I4H9fB3f5HWwZldfNxIgxbTmtEI5aeP97x4rxA0bkq95eREIrV4jnO0rgweaPjzP7L1jlwRc=</ns1:pincode>
<ns1:proprietario>
<ns1:codiceRegione>130</ns1:codiceRegione>
<ns1:codiceAsl>202</ns1:codiceAsl>
<ns1:cfProprietario>PROVAX00X00X000Y</ns1:cfProprietario>
</ns1:proprietario>
<ns1:idInserimentoDocumentoFiscale>
<ns1:idSpesa>
<ns1:pIva>11954290599</ns1:pIva>
<ns1:dataEmissione>2017-08-31</ns1:dataEmissione>
<ns1:numDocumentoFiscale>
<ns1:dispositivo>1</ns1:dispositivo>
<ns1:numDocumento>25</ns1:numDocumento>
</ns1:numDocumentoFiscale>
</ns1:idSpesa>
<ns1:dataPagamento>2017-08-31</ns1:dataPagamento>
<ns1:cfCittadino>htZQPC0C0Hg1ryFlWcqbrX7AJKPIhxJkrpY72jBgOnbFzsV1duYUlevVVbjqX6ViZnlqTZg1lHq0PGxJ4o8dCCmCAn60l5CwAhon7y6JB3WXetHIdo2NXGWZHfo5WzuTvzI6y/8DnvVxlVbDPhV5FaL5p2CIEcoj37wUc+aapH4=</ns1:cfCittadino>
<ns1:voceSpesa>
<ns1:tipoSpesa>SR</ns1:tipoSpesa>
<ns1:flagTipoSpesa>2</ns1:flagTipoSpesa>
<ns1:importo>80</ns1:importo>
</ns1:voceSpesa>
</ns1:idInserimentoDocumentoFiscale>
</ns1:inserimentoDocumentoSpesaRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope
 
posto lo script Report Mensile dei Documenti perchè può avere una importante valenza,
il report permette di scaricare un file csv con l'elenco degli elementi presenti negli archivi del 730 precompilato
ovviamente riferiti al soggetto che li ha caricati e nel mese sceto per l'estrazione.
con questo csv è possibile verificare con i propri archivi, che tutti i documenti sono stati "gestiti" e caricati.
in pratica il controllo a rovescio, permette di individuare tutti i documenti che per una qualche ragione sono stati esclusi dal processo ( esperienza personale, dal mio 730 mancavano 4 scontrini x circa 100 € ! )
quindi sottolineo, non un malfunzionamento del web service ma un malfunzionamento della propria gestione
PHP:
<?php
require 'Credenziali.php';

echo "<h4>REPORT MENSILE DEI DOCUMENTI INVIATI</h4>";

/* -------------------------------------------------------------------------------- Soap Client */
$ws                          = _ReportMensile_WSDL;
$SoapClientParam["location"] = $ReportMensile;

require 'SoapClientInit.php';

/* -------------------------------------------------------------------------------- Soap Request */
echo "<h4>INVIO L' INTERROGAZIONE</h4>";
error_log("INVIO L' INTERROGAZIONE", 0);

$SoapRequest = array
(
    "pincode"                 => $pincodeInvianteCifrato,
    "Proprietario"            => array
    (
        "cfProprietario"      => $cfProprietarioCifrato,
        "codiceRegione"       => $codiceRegione,
        "codiceAsl"           => $codiceAsl,
        "codiceSSA"           => $codiceSSA,
    ),
    "opzionale1"              => $opzionale1,
    "opzionale2"              => $opzionale2,
    "opzionale3"              => $opzionale3,
    "tipoEstrazione"          => $ric_tipoEstrazione,
    "annoMese"                => $ric_annoMese,
);
echo show_var($SoapRequest); echo "<br /><br />";
log_var($SoapRequest);

try { $output = $client->ReportMensile($SoapRequest); }
catch ( SoapFault $e )
{
    require 'SoapFault.php';
}
/* -------------------------------------------------------------------------------- Soap Receipt */
echo "<h4>L'INTERROGAZIONE HA AVUTO RISPOSTA</h4>";
error_log("L'INTERROGAZIONE HA AVUTO RISPOSTA", 0);

print_r($output);       echo "<br /><br />";
echo show_var($output); echo "<br /><br />";

/* -------------------------------------------------------------------------------- Esito */
if ( $output->esitoChiamata == 0 )
{
    $estrazione = $ric_tipoEstrazione."-".$ric_annoMese;
    $titolo = "E' PRESENTE IL REPORT MENSILE DEI DOCUMENTI INVIATI ".$estrazione;

    echo "<h4>".$titolo."</h4>";
    error_log($titolo, 0);

    $dati = $output->fileCSV;
    if( empty($dati) )
    {
        echo "<h4>IL FILE E' VUOTO</h4>";
        error_log("IL FILE E' VUOTO", 0);
    }
    else
    {
        $nomefile = $PercorsoDocRicevuti.$estrazione.".zip";

        echo "<h4>SALVO IL REPORT COME ".$nomefile."</h4>";
        error_log("SALVO IL REPORT COME ".$nomefile, 0);
        file_put_contents ( $nomefile, $dati );

        $zip = new ZipArchive;
        $res = $zip->open($nomefile);
        if ($res === TRUE)
        {
            $fileCSV = $zip->getNameIndex(0);
            $zip->extractTo($PercorsoDocRicevuti);
            $zip->close();

            $nomeZIP  = $PercorsoDocRicevuti.$fileCSV;
            $nomeCSV  = $PercorsoDocRicevuti.$estrazione.".csv";

            rename($nomeZIP, $nomeCSV);

            echo "File csv estratto ".$nomeCSV;
            error_log("File csv estratto ".$nomeCSV, 0);
        }
        else
        {
            echo "Il file ".$nomefile." non è disponibile";
            error_log("Il file ".$nomefile." non è disponibile", 0);
        }
        echo "<h4>INTERROGAZIONE TERMINATA CON SUCCESSO</h4>";
        error_log("INTERROGAZIONE TERMINATA CON SUCCESSO", 0);
    }
}
else
{
    $response = $output->listaMessaggi->messaggio;

    ReportOutput("codice");
    ReportOutput("descrizione");
    ReportOutput("tipo");
    echo "<br /><br />";

    echo "<h4>INTERROGAZIONE TERMINATA CON ERRORE</h4>";
    error_log("INTERROGAZIONE TERMINATA CON ERRORE", 0);
}
echo "<h4>FINE DEL LAVORO</h4>";
error_log("done ".$_SERVER['PHP_SELF'], 0);
?>
non differisce troppo dai precedenti script postati e chi li ha utilizzati saprà utilizzare anche questo con profitto
saluti
 
Bravo Marino. Anche io avevo implementato questa interrogazione e mi resi conto che, in caso di
Codice:
$output->esitoChiamata == 1
l'errore di ritorno dal webservice poteva essere non una singola stringa ma un array,
quindi un messaggio multiplo. Me ne sono accorto quando ho sbagliato il "tipoEstrazione" ed ho ricevuto il messaggio che vedete nell'immagine (quelli sono due messaggi).
Non sapendo se quello è l'unico caso di messaggio multiplo ho deciso di verificare sempre come stanno le cose. Ecco
il codice da inserire

Codice:
if ( $output->esitoChiamata == 1 )
{
   $listamessaggi = $output->listaMessaggi->messaggio;
   if(is_array($listamessaggi))
   {
      foreach( $listamessaggi as $messaggio)
      {
         $testo = $testo.$messaggio->descrizione."<br>";
      }
   }
   else
   {
   $testo = "$listamessaggi->descrizione<br><br>Codice: $listamessaggi->codice<br><br>Tipo: $listamessaggi->tipo";
   }
   echo  $testo;
}

Spero possa essere di aiuto
 

Allegati

  • Schermata 2017-10-27 alle 13.54.39.png
    Schermata 2017-10-27 alle 13.54.39.png
    30,2 KB · Visite: 532
Ultima modifica:
Ho implementato anche InterrogazionePuntuale. Eccolo. Io l'ho reso dinamico facendo un ciclo compreso tra due date di emissione fattura in modo da avere un report un po' più completo. Qui di seguito ho messo l'estrazione singola. Essendo interessato all'invio per un medico la voce Propietario ha solo il CF. Aggiungere i codici ASL e Regione se servono.
Codice:
<?php
// DEFINIZIONE PER WSDL SCRIPT INTERROGAZIONE PUNTUALE
require_once 'Credenziali.php';

//Acquisisco i dati dal form di input
$DataFattura   = $_POST['dataFattura']);
$NumFattura  = $_POST['numFattura']);
$dispositivo     = $_POST['dispositivo']);
$ws = _InterrogazionePuntale_WSDL;
$SoapClientParam["location"] = $InterrogazionePuntuale;

$client = new SoapClient($ws, $SoapClientParam);

$SoapRequest = array( "pincode" => $pincodeInvianteCifrato,
                                          "Proprietario" => array("cfProprietario" => $cfProprietarioCifrato),
                                          "opzionale1"    => $opzionale1,
                                          "opzionale2"    => $opzionale2,
                                          "opzionale3"    => $opzionale3,
                                          "idDocumentoFiscale" => array( "pIva" => $piProprietario,"dataEmissione" => $DataFattura,
"numDocumentoFiscale" => array(  "dispositivo" => $dispositivo,"numDocumento" => $NumFattura,)));

$output = $client->InterrogazionePuntuale($SoapRequest);
$numDocumento  = $output->documentoFiscale->idDocumentoFiscale->numDocumentoFiscale->numDocumento;
$dataEmissione = $output->documentoFiscale->idDocumentoFiscale->dataEmissione;
$dataInvio = $output->documentoFiscale->dataInvio;
$tipoInvio = $output->documentoFiscale->tipoInvio;
$protocollo = $output->documentoFiscale->protocollo;
$importo = $output->documentoFiscale->totaliVociSpesa;

/////////////////////////////////////////////////////////////////////
// Se totaliVociSpesa è un array devo fare un ciclo foreach per avere il totale
/////////////////////////////////////////////////////////////////////
$totale = 0;
if(!is_array($importo))
    {
    $totale = $importo->importo;
    }
else
    {
    foreach($importo as $aliasImporto)
        {
        $totale = $totale + $aliasImporto->importo;
        }
    }
?>
 
Ultima modifica:
In ambiente di produzione del report mensile ricevevo spesso il messaggio "SERVIZIO RICHIESTO NON EROGABILE NELLA FASCIA ORARIA DELLA RICHIESTA". Ho scritto a SOGEI e mi hanno risposto quanto segue:
I servizi di interrogazione sono disponibili in produzione dalle 22:00 alle 08:00 e dalle 13:00 alle 16:00

Spero sia utile.
 
Salve,
sto provando a fare un nuovo invio relativo alle fatture del 2017.
La ricevuta pdf mi riporta sempre Errore E011 "FILE NON CONFORME ALLO SCHEMA DI VALIDAZIONE".
Ho controllato il file xml e mi sembra perfetto. Ho fatto anche una validazione esterna con un tool online rispetto al file XSD di riferimento e sembra tutto ok.
Vi è mai successo?

Grazie
 
Ciao Manuel, a me capitò che il file XML fosse corretto dal punto di vista dei tag, aperti e chiusi tutti regolarmente e validato correttamente, ma non era corretto dal punto di vista 'logico' poiché all'interno di un tag mancava il dato richiesto. Controlla anche questo aspetto.
 
Buon 2018! Eccoci con l'invio per il 2017 e riprendo gli script per fare 2 prove e poi l'invio e gazzosa... se mi ricordo il tutto.

Caro Marino51, ringraziandoti ancora per tutto, ho visto che anche te alla fine ai visto l'utilità di avere un 'controllo a rovescio' e mi spiace che ti mancavano 4 scontrini :(
Visto che in fase di test se non erro avevi notato che i dati vengono periodicamente cancellati il reportmensile e puntuale (grazie msccmra51 !) funzioneranno in fase di test?

2 domandine sui nuovi script:
1) SoapClientInit.php non lo trovo: me lo sono perso?
2) ric_tipoEstrazione: non ho capito cosa mettere per la data della fattura. Esempio quelle di gennaio 2017 (201701)

Grazie! :)
 
SoapClientInit.php
PHP:
<?php

/* -------------------------------------------------------------------------------- Soap Client */
error_log("wsdl file               : ".$ws, 0);
echo $ws."<br /><br />";

error_log("soap server location    : ".$SoapClientParam["location"], 0);
echo $SoapClientParam["location"]."<br /><br />";

echo show_var($SoapClientParam); echo "<br />";


$client = new SoapClient($ws, $SoapClientParam);


echo "<h4>List of available SOAP functions</h4>";
$output = $client->__getFunctions();
while (list ($key, $val) = each ($output) ) echo $val."<br />"; echo "<br />";

//echo "<h4>List of available items in the WSDL for the Web service</h4>";
//$output = $client->ItemSearch();
//while (list ($key, $val) = each ($output) ) echo $val."<br />"; echo "<br />";

echo "<h4>List of SOAP types described in the WSDL for the Web service</h4>";
$output = $client->__getTypes();
while (list ($key, $val) = each ($output) ) echo $val."<br />"; echo "<br />";

?>
2) ric_tipoEstrazione: non ho capito cosa mettere per la data della fattura.
PHP:
/* -------------------------------------------------------------------------------- parametri per REPORT MENSILE DEI DOCUMENTI INVIATI */

$ric_tipoEstrazione = "I";
$ric_annoMese       = "201711";
 
Grazie Marino51 sempre gentile. Dove è il link allo script SoapFault.php (require nello script Report Mensile) ? Mi sa che mi sono perso anche quello, scusa... :(
Grazie a chiunque lo sappia :)

p.s. certo che in fase di test questi 'W003;IL CF CITTADINO NON PRESENTE IN ARCHIVIO' che controllando sul sito dell'AdE dice CODICE FISCALE VALIDO .... tutti quelli warning!!! o_O
 
Ultima modifica:
se è quello riportato in https://forum.mrw.it/threads/730-precompilato-di-uno-snippet.44833/page-15#post-195066 mi da errore (oltre PHP Notice: Undefined variable: opzionale1, opzionale2 e opzionale3 che forse non importano essendo opzionali):
Codice:
...
SOAP Fault: (faultcode: HTTP, faultstring: Error Fetching http headers)
...
RESPONSE HEADERS ===========
NULL

RESPONSE ===================
NULL

-------- log:
[29-Jan-2018 19:32:25 Europe/Berlin] PHP Fatal error:  SOAP Fault: (faultcode: HTTP, faultstring: Error Fetching http headers) in SoapFault.php on line 25

la riga 25 è
PHP:
trigger_error($err, E_USER_ERROR);

... dove ho sbagliato? grazie
 
Ultima modifica:
SoapFault.php
PHP:
<?php
    $err = "SOAP Fault: (faultcode: {$e->faultcode}, faultstring: {$e->faultstring})";

    LogTitles("RICHIESTA TERMINATA CON ERRORE", $err);

    echo "output<br />".show_var($output); echo "<br /><br />";
    error_log(PHP_EOL."output =>".log_var($output), 0);

    print_r($e);       echo "<br /><br />";
    echo show_var($e); echo "<br /><br />";
    error_log(PHP_EOL."e =>".log_var($e), 0);


    echo "REQUEST HEADERS ============" . "<br /><xmp>";
    var_dump($client->__getLastRequestHeaders()); echo "</xmp><br /><br />";

    echo "REQUEST ====================" . "<br /><xmp>";
    var_dump($client->__getLastRequest()); echo "</xmp><br /><br />";

    echo "RESPONSE HEADERS ===========" . "<br /><xmp>";
    var_dump($client->__getLastResponseHeaders()); echo "</xmp><br /><br />";

    echo "RESPONSE ===================" . "<br /><xmp>";
    var_dump($client->__getLastResponse()); echo "</xmp><br /><br />";


    trigger_error($err, E_USER_ERROR);
    die;
?>

aggiungo anche,
https://forum.mrw.it/threads/show_var-e-log_var.50370/
richiamato all'interno
 
PHP:
function ReportOutput($var)
{
    global $response;
    if ( !empty($response->{$var}) )
    {
        error_log($var." = ".$response->{$var}, 0);
        echo $var." = ".$response->{$var}."<br />";
    }
}

function LogTitles($string=null, $addtext=null)
{
    echo "<h4>".$string."</h4>".$addtext;
    error_log($string, 0);
}
 
sempre gentilissimo marino51 e grazie della pazienza :)

Ora non da più nessun errore di funzioni mancanti ma mi da errore faultcode: HTTP, faultstring: Error Fetching http headers ...

TesseraSanitaria.log:
Codice:
[30-Jan-2018 14:27:46 Europe/Berlin] main _6_Mensile.php
[30-Jan-2018 14:27:46 Europe/Berlin] TEST RUN ***************
[30-Jan-2018 14:27:46 Europe/Berlin] name                   : Ottico PROVA
...
[30-Jan-2018 14:27:46 Europe/Berlin] wsdl file               : ReportMensile730Service.wsdl
[30-Jan-2018 14:27:46 Europe/Berlin] soap server location    : https://invioSS730pTest.sanita.finanze.it/ReportMensile730Web/ReportMensilePort
[30-Jan-2018 14:27:46 Europe/Berlin] INVIO L' INTERROGAZIONE
[30-Jan-2018 14:27:46 Europe/Berlin] PHP Notice:  Undefined variable: opzionale1 in _6_Mensile.php on line 33
[30-Jan-2018 14:27:46 Europe/Berlin] PHP Notice:  Undefined variable: opzionale2 in _6_Mensile.php on line 34
[30-Jan-2018 14:27:46 Europe/Berlin] PHP Notice:  Undefined variable: opzionale3 in _6_Mensile.php on line 35
[30-Jan-2018 14:28:47 Europe/Berlin] RICHIESTA TERMINATA CON ERRORE
[30-Jan-2018 14:28:47 Europe/Berlin]
output =>array
(
    [0] => struct reportMensileRequest {
 string opzionale1;
 string opzionale2;
 string opzionale3;
 string pincode;
 ProprietarioType Proprietario;
 AnnoMeseType annoMese;
 String1Type tipoEstrazione;
},
    [1] => struct reportMensileResponse {
 string esitoChiamata;
 FileType fileCSV;
 listaMessaggi listaMessaggi;
},
    [2] => struct listaMessaggi {
 messaggio messaggio;
},
    [3] => struct messaggio {
 string codice;
 string descrizione;
 string tipo;
},
    [4] => struct ProprietarioType {
 String3Type codiceRegione;
 String3Type codiceAsl;
 String6Type codiceSSA;
 CfType cfProprietario;
},
    [5] => string CfType,
    [6] => string String3Type,
    [7] => string String6Type,
    [8] => string String1Type,
    [9] => integer AnnoMeseType,
    [10] => base64Binary FileType,
)
[30-Jan-2018 14:28:47 Europe/Berlin]
e =>object
(
    faultstring => Error Fetching http headers,
    faultcode => HTTP,
)
[30-Jan-2018 14:28:47 Europe/Berlin] PHP Fatal error:  SOAP Fault: (faultcode: HTTP, faultstring: Error Fetching http headers) in SoapFault.php on line 27

questa volta ho tutto il codice nuovo: colpa loro (timeout?)? idee?

ufffff... spero funzioni in produzione che tra poco mando tutto
 
Ultima modifica:

Discussioni simili