730 precompilato + di uno snippet

Discussione in 'Snippet PHP' iniziata da marino51, 9 Gennaio 2016.

  1. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.877
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    Ieri 8 gennaio ho caricato con successo le mie (del professionista) "brave" 600 fatture, nel sito del Ministero delle Finanze
    Le spese riportate nelle fatture, contribuiranno alla formazione del modello "730 precompilato".

    con questo post vorrei indicare i passi che ho compiuto per arrivare al risultato positivo che ho ottenuto,
    mi interessa che, chi ne ha bisogno, possa arrivare al mio stesso risultato positivo

    non mi interessa parlare di php, soap o "stupidate" connesse,
    bensì chi avesse soluzioni "facili" e le possa proporre, è ben accolto

    questi i passi necessari,

    1) occorre che il "proprietario" sia registrato nell'area riservata del "sistemaTS"
    ottenendo le credenziali di accesso, necessarie anche per caricare i dati in modo automatico
    http://sistemats1.sanita.finanze.it...home/sistema ts informa/730 - spese sanitarie

    è bene orientarsi nei contenuti della pagina, soprattutto nel contenuto del "kit"

    2) è estremamente importante che i dati delle fatture di cui si dispone, siano corretti,
    occorre controllare allo "sfinimento" i codici fiscali dei "cittadini"
    (ho anche controllato i dati in mio possesso con i registri iva del commercialista ottenendone quadratura, con modifiche da entrambe le parti)

    occorre inoltre ripartire i costi delle fatture in detraibili e non detraibili
    ho speso tempo lavorando con mezzi "facili" arrivando a,

    3) creare una tabella (file) csv ovvero txt che contenga le righe che rappresentano ciascuna fattura,
    con le colonne dei valori necessari, nella mia tabella vi erano molteplici colonne
    per cui le ho selezionate,
    PHP:
    define ("_ColDocDate",        1);
    define ("_ColDocNumber",    2);
    define ("_ColFiscalCode",    8);
    define ("_ColTotalEuro",    9);
    define ("_ColNotRelevant1",    12);
    define ("_ColNotRelevant2",    13);
    define ("_ColNotRelevant3",    14);
    le colonne chiamate "ColNotRelevant" sono i valori non detraibili che devono essere scorporati dal totale della fattura

    Insisto molto sui controlli "a priori" perchè rendono la vita facile dopo

    4) con il primo script "FattureGeneraFilesCFdaTXT.php", ho controllato nuovamente i codici fiscali verificando la rispondenza con il carattere di controllo
    lo stesso script genera tanti file txt, quanti sono i codici fiscali diversi, per sottoporli alla crittografia

    devono essere generati manualmente due file (blocco note),
    inserendo rispettivamente il codice fiscale del proprietario ed il "PinCode", ottenuto al punto 1
    deve essere inserito solo il valore senza "invio" o altri caratteri

    i file sono chiamati "x_PROVAX00X00X000Y.txt" (per ciascun codife fiscale" e "x__PinCode.txt",
    ho usato "x_" per raggrupparli della directory e riconoscerli/trovarli facilmente,

    5) il kit, che si trova nella pagina del punto 1, contiene il certificato "_SanitelCF.cer" necessario alla crittografia
    va recuperato e messo nella stessa dir dei file cf (underscore, aggiunto, serve per averlo in testa alla lista dei file

    6) si può procedere alla crittografia di tutti i file con il batch "FattureOpenSSL.bat"
    questo batch legge tutti i file "x_cf.txt" e per ciascuno crea il crittografato "x_cf.enc"
    ho preferito fare "base64_encode" all'interno di php senza creare il file equivalente come si può vedere nel batch

    7) ora si ottiene il file xml con tutti i dati richiesti "FattureGeneraXMLdaTXT.php"

    ho preferito trattare separatamente 10 fatture e le rimanenti 590 al fine di non avere problemi con il caricamento "ufficiale"
    attenzione, si possono fare tutti i caricamenti che si vogliono nel sistema di test che non esegue operazioni, salvo accettare il file
    mentre è bene fare "un solo" caricamento "sicuro" nel sito "ufficiale" per non complicarsi la vita

    8) zippare il file xml, il sito accetta solo file ".zip"
    copiare dal kit i file "InvioTelematicoSpeseSanitarie730p.wsdl" e "InvioTelematicoSpeseSanitarie730p_schema1.xsd"
    verificate all'interno del file "wsdl" la voce "<soap:address location=" (in fondo),
    ho creato 2 file uno per "test" e uno per "effettivo" (ma forse non serve)

    9) dove inviare il file, lo si vede dallo script "credenziali.php" lasciando "test=true" si manda il file al sistema di test,
    convertendolo in FALSE lo si invia al sito "ufficiale"

    FARE TUTTE LE PROVE DI INVIO NEL SITO DI TEST !

    l'invio avviene con lo script "FattureInviaWsdl.php" indicando al suo interno il nome del file da inviare che resterà agli atti nella "ricevutapdf"

    10) entrando nell'area riservata del sito, alla voce "ricevutapdf" ed indicando il protocollo di "accettazione" del file, si scarica il certificato comprovante l'invio con i dati sommari del contenuto del file
    in caso di errori nei dati, si troverà anche il file "csv" con l'indicazione degli stessi

    nel caso delle mie 600 fatture, ho havuto la segnalazione di 2 fatture con "IL CF CITTADINO NON PRESENTE IN ARCHIVIO"
    quindi cf formalmente giusto ma ....

    inutile dire che recuperato il cf, ho corretto manualmente (nel sito) le 2 fatture

    poi ho stappato la solita "gazzosa" ....

    ps :
    la data di pagamento coincide con la data del documento, il professionista emette fattura solo al momento del pagamento
    gli errori di "ortografia" degli script sono riportati nel log di php,
    i messaggi e gli errori di esecuzione degli script sono riportati nel file "__TesseraSanitaria.log" che invito a consultare dopo ogni "run"
    ( win 7 - IE 11 - php 5.4.9 - openssl 1.0.2e)

    ciao Marino


    credenziali.php
    PHP:
    <?php
    ini_set
    ('error_reporting'E_ALL E_STRICT);
    ini_set('display_errors'FALSE);
    ini_set('log_errors'TRUE);
    ini_set('error_log''__TesseraSanitaria.log');

    ini_set("soap.wsdl_cache_enabled""0");

    error_log("."0);
    error_log("main ".$_SERVER['PHP_SELF'], 0);

    //---------- dati del professionista (medico)

    define ("_name",            "Dr. *****");
    define ("_cfProprietario",        "");
    define ("_cfProprietarioCifrato",    "");
    define ("_piProprietario",        "");

    define ("_user",            "");
    define ("_psw",                "");

    define ("_NetworkUser",            "");
    define ("_NetworkPsw",            "");

    define ("_pincodeInviante",        "");
    define ("_pincodeInvianteCifrato",    "");

    //---------- dati del professionista (test)

    define ("_TestUser",            "PROVAX00X00X000Y");
    define ("_TestPsw",            "Salve123");
    define ("_TestPincodeInviante",        "1234567890");
    define ("_TestPincodeInvianteCifrato",    "HmhwvMEtyHOwDm5K3YEQ9RZiNAkJ+FvRwXodiABj9HpRbdQUaLa4cyYZU8YqaBsSs4Lq6u85uDci6xowmF7ZrVgLhZ83q4nSi8bSvVDPS5pPStBlOJfvo8AisqDiKdJvEPbkIhBVnbmf28gh28G/vQLkp2RgVEYinPA0LUCz8PQ=");

    //---------- struttura delle fatture

    define ("_ColDocDate",        1);
    define ("_ColDocNumber",    2);
    define ("_ColFiscalCode",    8);
    define ("_ColTotalEuro",    9);
    define ("_ColNotRelevant1",    12);
    define ("_ColNotRelevant2",    13);
    define ("_ColNotRelevant3",    14);

    //---------- dati di riconoscimento / connessione / invio

    $TEST true;

    if(
    $TEST)
        {
        
    $login            _TestUser;
        
    $password            _TestPsw;
        
    $pincodeInvianteCifrato    _TestPincodeInvianteCifrato;
        
    $cfProprietario        _TestUser;

        
    $InvioTelematico        "https://invioSS730pTest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort"
        
    $DettaglioErrori        "https://invioSS730pTest.sanita.finanze.it/EsitoStatoInviiWEB/DettaglioErrori730Service";
        
    $EsitoInvio            "https://invioSS730pTest.sanita.finanze.it/EsitoStatoInviiWEB/EsitoInvioDatiSpesa730Service";
        
    $ricevutePdf        "https://invioSS730pTest.sanita.finanze.it/Ricevute730ServiceWeb/ricevutePdf";
        
    $DocumentoSpesa        "https://invioSS730pTest.sanita.finanze.it/DocumentoSpesa730pWeb/DocumentoSpesa730pPort";
        }
    else
        {
        
    $login            _user;
        
    $password            _psw;
        
    $pincodeInvianteCifrato    _pincodeInvianteCifrato;
        
    $cfProprietario        _cfProprietario;

        
    $InvioTelematico        "https://invioSS730p.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort"
        
    $DettaglioErrori        "https://invioSS730p.sanita.finanze.it/EsitoStatoInviiWEB/DettaglioErrori730Service";
        
    $EsitoInvio            "https://invioSS730p.sanita.finanze.it/EsitoStatoInviiWEB/EsitoInvioDatiSpesa730Service";
        
    $ricevutePdf        "https://invioSS730p.sanita.finanze.it/Ricevute730ServiceWeb/ricevutePdf";
        
    $DocumentoSpesa        "https://invioSS730p.sanita.finanze.it/DocumentoSpesa730pWeb/DocumentoSpesa730pPort";
        }

    error_log("login                  : ".$login0);
    error_log("password               : ".$password0);
    error_log("pincodeInvianteCifrato : ".$pincodeInvianteCifrato0);
    error_log("cfProprietario         : ".$cfProprietario0);

    $SoapClientParam = array
        ( 
        
    "location"        => "x"
        
    "login"        => $login
        
    "password"        => $password
        
    "authentication"    => SOAP_AUTHENTICATION_BASIC
        
    "trace"        => false
        
    "exceptions"    => false
        
    ); 
    ?>

    FattureGeneraFilesCFdaTXT.php
    PHP:
    <?php
    require_once 'Credenziali.php';

    // crea tutti i files "x_PROVAX00X00X000Y.txt" per openssl, controlla cf con check digit

    define ("_Fatture730",        "Fatture730_2015");    // nome del file da trattare ( .txt, .xml, .zip )

    $file fopen(_Fatture730.".txt""r");

    echo 
    "<table border=4 cellpadding=4>";
    while( !
    feof($file) )
        {
        
    $row fgets($file);
        
    $col explode(";"$row);
        if ( !empty(
    $col[_ColFiscalCode]) )
            {
            
    $TotalEuro $col[_ColTotalEuro] - $col[_ColNotRelevant1] - $col[_ColNotRelevant2] - $col[_ColNotRelevant3];

            
    $myfile fopen("x_".$col[_ColFiscalCode].".txt""w") or die("Unable to open file : ".$col[_ColFiscalCode]);
            
    fwrite($myfile$col[_ColFiscalCode]);
            
    fclose($myfile);

            
    $cf codicefiscale($col[_ColFiscalCode]);

            echo 
    "<tr>";
            echo 
    "<td>".$col[_ColFiscalCode]."</td>";
            echo 
    "<td>".$col[_ColDocNumber]."</td>";
            echo 
    "<td>".$col[_ColDocDate]."</td>";
            echo 
    "<td>".$TotalEuro."</td>";
            echo 
    "<td>".$cf."</td>";
            echo 
    "</tr>";
            }
        }
    echo 
    "</table>";

    fclose($file);

    error_log("done ".$_SERVER['PHP_SELF'], 0);

    function 
    codicefiscale($cf){
      if( 
    preg_match("/^[A-Z0-9]+\$/"$cf) != )
        return 
    "Il codice fiscale contiene dei caratteri non validi (sono valide lettere e cifre)";

      static 
    $CFcalc = array(
        
    '0' => 1,
        
    '1' => 0,
        
    '2' => 5,
        
    '3' => 7,
        
    '4' => 9,
        
    '5' => 13,
        
    '6' => 15,
        
    '7' => 17,
        
    '8' => 19,
        
    '9' => 21,
        
    'A' => 1,
        
    'B' => 0,
        
    'C' => 5,
        
    'D' => 7,
        
    'E' => 9,
        
    'F' => 13,
        
    'G' => 15,
        
    'H' => 17,
        
    'I' => 19,
        
    'J' => 21,
        
    'K' => 2,
        
    'L' => 4,
        
    'M' => 18,
        
    'N' => 20,
        
    'O' => 11,
        
    'P' => 3,
        
    'Q' => 6,
        
    'R' => 8,
        
    'S' => 12,
        
    'T' => 14,
        
    'U' => 16,
        
    'V' => 10,
        
    'W' => 22,
        
    'X' => 25,
        
    'Y' => 24,
        
    'Z' => 23,
        
    'end' => 'end'
      
    );

      
    $s 0;
      for( 
    $i 1$i <= 13$i += ){
        
    $c $cf[$i];
        if( 
    strcmp($c"0") >= and strcmp($c"9") <= )
          
    $s += ord($c) - ord('0');
        else
          
    $s += ord($c) - ord('A');
      }
      for( 
    $i 0$i <= 14$i += ){
        
    $c $cf[$i];
        
    $s += $CFcalc[$c];
      }
      if( 
    chr($s%26 ord('A')) != $cf[15] ) 
        return 
    "Il codice fiscale NON &egrave; riconosciuto "chr($s%26 ord('A'));
      return 
    "";
    }
    ?>

    FattureOpenSSL.bat ( "MSdos, classica programmazione ad oggetti" )
    Codice:
    @echo off
    
    c:
    cd C:\Program_Files_Ext\openssl-1.0.2d
    
    set BegDir=C:\Web_Sites\__Test\PHP\TEST\XML\FC
    
    del %BegDir%\__OpenSSL.log 2>nul
    
    
    rem set MySource=%BegDir%\x_PROVAX00X00X000Y
    rem openssl.exe rsautl -encrypt -in %MySource%.txt -out %MySource%.enc -inkey %BegDir%\_SanitelCF.cer -certin -pkcs
    
    
    FOR /R %BegDir% %%D IN (x_*.txt) DO (call :OpenSSL %%D)
    
    pause
    
    exit /b
    
    :OpenSSL
      rem echo params: "%~0" "%~1" "%~n1" "%~2" "%~3" "%~nx0" "%~dpnx0%0" >>param.log
    
      set MySource=%BegDir%\%~n1
    
      rem echo %MySource% >>%BegDir%\__OpenSSL.log
    
      echo %MySource%
    
      openssl.exe rsautl -encrypt -in %MySource%.txt -out %MySource%.enc -inkey %BegDir%\_SanitelCF.cer -certin -pkcs
    
      rem openssl enc -base64 -A -in %MySource%.enc -out %MySource%.b64
    
      exit /b
    

    FattureGeneraXMLdaTXT.php
    PHP:
    <?php
    require_once 'Credenziali.php';

    // crea il file .xml da inviare al Ministero delle Finanze

    define ("_Fatture730",        "Fatture730_2015_2");    // nome del file da trattare ( .txt, .xml, .zip )

    $encFC GetEncFC(_cfProprietario);

    $file fopen(_Fatture730.'.txt'"r");

    $xml=new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><precompilata
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="730_precompilata.xsd"></precompilata>'
    );

        
    $opzionale1 $xml->addChild('opzionale1''text');
        
    $opzionale2 $xml->addChild('opzionale2''text');
        
    $opzionale3 $xml->addChild('opzionale3''text');

        
    $proprietario $xml->addChild('proprietario');

            
    $cfProprietario $proprietario->addChild('cfProprietario'$encFC);

    //  </proprietario>

    $TotalDocs 0;
    $TotalEuro 0;
    while( !
    feof($file) )
        {
        
    $row fgets($file);
        
    $col explode(";"$row);
        if ( !empty(
    $col[_ColFiscalCode]) )
            {
            
    $InvEuro $col[_ColTotalEuro] - $col[_ColNotRelevant1] - $col[_ColNotRelevant2] - $col[_ColNotRelevant3];
            
    $InvEuro number_format($InvEuro2".""");

            
    $DocDate DateTime::createFromFormat('d/m/Y'$col[_ColDocDate]);
            
    $DocDate $DocDate->format('Y-m-d');

            
    $encFC GetEncFC($col[_ColFiscalCode]);

            
    $TotalDocs += 1;
            
    $TotalEuro += $InvEuro;

        
    $documentoSpesa $xml->addChild('documentoSpesa');

            
    $idSpesa $documentoSpesa->addChild('idSpesa');

                
    $pIva $idSpesa->addChild('pIva'_piProprietario);

                
    $dataEmissione $idSpesa->addChild('dataEmissione'$DocDate);

                
    $numDocumentoFiscale $idSpesa->addChild('numDocumentoFiscale');

                    
    $dispositivo $numDocumentoFiscale->addChild('dispositivo''1');

                    
    $numDocumento $numDocumentoFiscale->addChild('numDocumento'$col[_ColDocNumber]);

    //          </numDocumentoFiscale>

    //      </idSpesa>

            
    $dataPagamento $documentoSpesa->addChild('dataPagamento'$DocDate);

            
    $flagOperazione $documentoSpesa->addChild('flagOperazione''I');

            
    $cfCittadino $documentoSpesa->addChild('cfCittadino'$encFC);

            
    $voceSpesa $documentoSpesa->addChild('voceSpesa');

                
    $tipoSpesa $voceSpesa->addChild('tipoSpesa''SR');

                
    $importo $voceSpesa->addChild('importo'$InvEuro);

    //      </voceSpesa>

    //  </documentoSpesa>
            
    }
        }

    //</precompilata>

    fclose($file);

    Header('Content-type: text/xml');
    print (
    $xml->asXML(_Fatture730.'.xml'));

    error_log("Total Docs ".$TotalDocs0);
    error_log("Total Euro ".$TotalEuro0);
    error_log("done       ".$_SERVER['PHP_SELF'], 0);

    function 
    GetEncFC($encFile)
        {
        
    $encFC file_get_contents"C:/Web_Sites/__Test/PHP/TEST/XML/FC/x_".$encFile.".enc"FILE_USE_INCLUDE_PATH );
        
    $encFC base64_encode($encFC);

        return 
    $encFC;
        }
    ?>

    FattureInviaWsdl.php
    PHP:
    <?php
    require_once 'Credenziali.php';

    // invia il file .zip al Ministero delle Finanze

    define ("_Fatture730",        "Fatture730_2015_2");    // nome del file da trattare ( .txt, .xml, .zip )

    echo "<p><h4>TRASFERIMENTO DELLE FATTURE PER IL 730 PRECOMPILATO AL MINISTERO</h4></p>";

    error_log("carico in memoria il file "._FileDaInviare0);
    $zipfile implode(""file(_FileDaInviare)); 


    $ws 'InvioTelematicoSpeseSanitarie730p.wsdl';
    error_log("definisco il file wsdl ".$ws0);
    echo 
    $ws."<p> </p>";

    $SoapClientParam["location"] =    $InvioTelematico
    error_log("definisco the soap server location ".$SoapClientParam["location"], 0);
    echo 
    $SoapClientParam["location"]."<p> </p>";


    echo 
    "<p><h4>INIZIO LA CONNESSIONE</h4></p>";

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

    error_log("ottengo la funzione da utilizzare per l'invio"0);
    $output $client->__getFunctions();
    //var_dump($output); echo "<p> </p>";

    if(!empty($output)) echo "<p><h4>CONNESSIONE POSSIBILE</h4></p>";


    echo 
    "<p><h4>INIZIO TRASFERIMENTO DEL FILE</h4></p>";

    error_log("inizio trasferimento del file"0);
    $output $client->inviaFileMtom(Array
        (
        
    "nomeFileAllegato"        => _FileDaInviare,
        
    "pincodeInvianteCifrato"    => $pincodeInvianteCifrato,
        
    "documento"            => $zipfile,
        
    "datiProprietario"        => ( Array( "cfProprietario" => $cfProprietario ) )
        ))
    ;

    if(empty(
    $output))
        {
        
    error_log("trasferimento terminato con errori"0);
        echo 
    "<p><h4>TRASFERIMENTO TERMINATO CON ERRORI</h4></p>";
        
    var_dump($output); echo "<p> </p>";
        }
    else
        {
        
    error_log("trasferimento terminato"0);
        echo 
    "<p><h4>TRASFERIMENTO TERMINATO</h4></p>";

        
    $protocollo $output->return->protocollo;
        echo 
    $protocollo."<p> </p>";

        
    ReportOutput("protocollo");
        
    ReportOutput("dataAccoglienza");
        
    ReportOutput("nomeFileAllegato");
        
    ReportOutput("dimensioneFileAllegato");
        
    ReportOutput("codiceEsito");
        
    ReportOutput("descrizioneEsito");
        
    ReportOutput("idErrore");
        }

    error_log("done ".$_SERVER['PHP_SELF'], 0);
    echo 
    "<p><h4>FINE DEL LAVORO</h4></p>";

    function 
    ReportOutput($var)
        {
        global 
    $output;
        
    error_log($var." = ".$output->return->{$var}, 0);
        echo 
    $var." = ".$output->return->{$var}."<br />";
        }
    ?>
     
    Ultima modifica: 9 Gennaio 2016
    A Aarc14 piace questo elemento.
  2. rudycox

    rudycox Nuovo Utente

    Registrato:
    12 Gennaio 2016
    Messaggi:
    21
    Mi Piace Ricevuti:
    1
    Punteggio:
    3
    Grazie, sei un grande! È più di una settimana che cercavo di riuscire a far funzionare i webservices con php ma senza esito.
    Ora finalmente funzionano.
    Modificando il tuo codice, ho creato la pagina RicevuteWdsl.php che, partendo dal protocollo scarica e salva (se disponibile) la ricevuta pdf.
    Domani sistemo il codice e lo pubblico qui.
    Per chi fosse interessato ecco la funzione php che permette di cifrare i dati usando il certificato del kit
    Codice:
    function EncryptData($source)
    {
      $fp=fopen("d:/sanitelCF.cer","r");
      $pub_key_string=fread($fp,8192);
      fclose($fp);
      $key_resource = openssl_get_publickey($pub_key_string);
    
      openssl_public_encrypt($source,$crypttext, $key_resource );
      /*uses the already existing key resource*/
      return(base64_encode($crypttext));
     
    }
    
     
  3. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.877
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    ciao grazie per il tuo suggerimento, applicandolo si può semplificare il processo,
    ti chiedo però la cortesia di accertarti e confermare che la crittografia avviene come richiesto nella documentazione del sito "sistemaTS"
    ho preferito usare il comando dos
    Codice:
    openssl.exe rsautl -encrypt -in %MySource%.txt -out %MySource%.enc -inkey %BegDir%\_SanitelCF.cer -certin -pkcs
    proprio per riprodurre fedelmente quanto chiesto,
    ricorda che se il codice fiscale del cittadino non è interpretato,
    nel caso migliore vengono scartate tutte le fatture ... e va bene
    ma nel caso peggiore, se le fatture vengono accettate potresti ritrovartele tutte con codice fiscale vuoto .... dovendo poi rincorrere il problema
    ciao
    Marino
     
  4. Salvatore Albano

    Salvatore Albano Nuovo Utente

    Registrato:
    15 Gennaio 2016
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ciao e grazie mille per il post!!! E' stato fondamentale!

    Sto provando a generare il file per leggere gli esiti dell'invio, ma ottengo il seguente messaggio

    object(SoapFault)#2 (9) {
    ["message":protected]=>
    string(30) "java.lang.NullPointerException"
    ["string":"Exception":private]=>

    te avevi sviluppato qualcosa?

    grazie mille
     
  5. rudycox

    rudycox Nuovo Utente

    Registrato:
    12 Gennaio 2016
    Messaggi:
    21
    Mi Piace Ricevuti:
    1
    Punteggio:
    3
    Come promesso eccoil file per scaricare le ricevute in pdf

    RicevutaWdsl.php
    PHP:
    <?php // Scarica la ricevuta partendo dal protocollo
    //************
    // USO es:
    //     Ricevuta.wdsl.php?protocollo=16011411394460118
    //************

    //***********
    // INSERIRE IL PERCORSO FISICO DOVE SALVARE LE RICEVUTE
    //
    // ES. define("_percorsoRicevute", "D:/RICEVUTE//"); 
    define("_percorsoRicevute"""); 
    //****************

    require_once 'credenziali.php';
    //$protocollo = '16011411394460118';
    $protocollo=$_REQUEST['protocollo'];
    echo 
    "<p><h4>Ricevuta</h4></p>";





    $ws 'RicevutaPdf730Service.wsdl';
    error_log("definisco il file wsdl ".$ws0);
    echo 
    $ws."<p> </p>";

    $SoapClientParam["location"] =    $ricevutePdf
    error_log("definisco the soap server location ".$SoapClientParam["location"], 0);
    echo 
    $SoapClientParam["location"]."<p> </p>";

    echo 
    "<p><h4>INIZIO LA CONNESSIONE</h4></p>";

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

    error_log("ottengo la funzione da utilizzare per l'invio"0);
    $output $client->__getFunctions();
    //var_dump($output); echo "<p> </p>";
    if(!empty($output)) echo "<p><h4>CONNESSIONE POSSIBILE</h4></p>";

    $output $client->RicevutaPdf(Array
        (
        
    "DatiInputRichiesta"    => ( Array(
        
    "pinCode"        => $pincodeInvianteCifrato,
        
    //"dataInizio"    => "01/12/2015",
    //    "dataFine"    =>"12/01/2016"
        
    "protocollo"    => $protocollo,
        
    "opzionale1"    =>'0',
        
    "opzionale2"    =>'0',
        
    "opzionale3"    =>'0'
        
    ))

        ))
    ;

    if(empty(
    $output))
        {
        
    error_log("Errore"0);
        echo 
    "<p><h4>ERRORI</h4></p>";
        
    var_dump($output); echo "<p> </p>";
        }
    else
        {
        
    error_log("RICHIESTA RICEVUTA EFFETTUATA CON SUCCESSO"0);
        echo 
    "<p><h4>RICHIESTA RICEVUTA EFFETTUATA CON SUCCESSO</h4></p>";
        
    //var_dump($output); echo "<p> </p>";
        
    $esito $output->DatiOutputRichiesta->esitoChiamata;
       
    // echo "esito".$esito."<p> </p>";
            

        
    if ($esito=="0"){
            
    error_log("E' PRESENTE UNA RICEVUTA DA SCARICARE PER IL PROTOCOLLO ".$protocollo0);
            
    $nomefile=_percorsoRicevute.$protocollo.".pdf";
            echo 
    "<p><h4>E' PRESENTE UNA RICEVUTA DA SCARICARE PER IL PROTOCOLLO ".$protocollo."</h4></p>";
            
    // var_dump($output->DatiOutputRichiesta->esitiPositivi->dettagliEsito->pdf);
            
            
    $dati=$output->DatiOutputRichiesta->esitiPositivi->dettagliEsito->pdf;
              if(!empty(
    $dati)){
                  echo 
    "<p><h4>SCARICO LA RICEVUTA E LA SALVO COME ".$nomefile."</h4></p>";
              
    file_put_contents $nomefile ,$dati ); 
              
    //****************
    // rimuovere i commenti qui sotto per  aprire direttamente il file    
    //****************      
    //            header("Cache-Control: public");
    //            header("Content-Description: File Transfer");
    //            header("Content-Type: application/pdf");
    //            header("Content-Disposition: attachment; filename=".$nomefile);
    //            header("Content-Transfer-Encoding: binary");
    //            readfile($nomefile);
              
    echo "<p><h4>FATTO</h4></p>";
              }
        }
        else{
            
    error_log("ERRORE: NON E' PRESENTE UNA RICEVUTA DA SCARICARE PER IL PROTOCOLLO ".$protocollo0);
            echo 
    "<p><h4>ERRORE: NON E' PRESENTE UNA RICEVUTA DA SCARICARE PER IL PROTOCOLLO  ".$protocollo."</h4></p>";
        }
    //end esito
        
    }
    ?>
     
    Ultima modifica: 15 Gennaio 2016
  6. rudycox

    rudycox Nuovo Utente

    Registrato:
    12 Gennaio 2016
    Messaggi:
    21
    Mi Piace Ricevuti:
    1
    Punteggio:
    3
    e questo per scaricare il csv zippato contenete eventuali errori

    ErroriWdsl.php

    PHP:
    <?php // SCarica il file .zip contenente il dettaglio degli errori partendo dal protocollo

    //************
    // USO es:
    //    ErroriWsdl.php?protocollo=16011411394460118
    //************

    //***********
    // INSERIRE IL PERCORSO FISICO DOVE SALVARE IL FILE ZIPPATO
    //
    // ES. define("_percorsoFileZip", "D:/RICEVUTE//"); 
    define("_percorsoFileZip"""); 
    //****************

    require_once 'credenziali.php';
    //$protocollo = '16011510131262315';
    $protocollo=$_REQUEST['protocollo'];
    //echo $pincodeInvianteCifrato.'<br>';
    //echo $protocollo;
    echo "<p><h4>Errori</h4></p>";




    $ws 'DettaglioErrori730Service.wsdl';
    error_log("definisco il file wsdl ".$ws0);
    echo 
    $ws."<p> </p>";

    $SoapClientParam["location"] =    $DettaglioErrori
    error_log("definisco the soap server location ".$SoapClientParam["location"], 0);
    //echo $SoapClientParam["location"]."<p> </p>";

    echo "<p><h4>INIZIO LA CONNESSIONE</h4></p>";

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

    error_log("ottengo la funzione da utilizzare per la richiesta"0);
    $output $client->__getFunctions();
    //var_dump($output); echo "<p> </p>";
    if(!empty($output)) echo "<p><h4>CONNESSIONE POSSIBILE</h4></p>";

    $output $client->DettaglioErrori(Array
        (
        
    "DatiInputRichiesta"    => ( Array(
        
    "pinCode"        => $pincodeInvianteCifrato,
        
    "protocollo"    => $protocollo))


        ))
    ;

    //print_r($output);
    if(empty($output))
        {
        
    error_log("Errore"0);
        echo 
    "<p><h4>ERRORI</h4></p>";
        
    var_dump($output); echo "<p> </p>";
        }
    else
        {
        
    error_log("RICHIESTA FILE EFFETTUATA CON SUCCESSO"0);
        echo 
    "<p><h4>RICHIESTA FILE EFFETTUATA CON SUCCESSO</h4></p>";
        
    //var_dump($output); echo "<p> </p>";
        
    $esito $output->DatiOutputRichiesta->esitoChiamata;
        echo 
    "esito".$esito."<p> </p>";
        
        
        

        if (
    $esito=="0"){
            
    error_log("E' PRESENTE UN FILE ERRORI DA SCARICARE PER IL PROTOCOLLO ".$protocollo0);
            
    $nomefile=_percorsoFileZip.$protocollo.".zip";
            echo 
    "<p><h4>E' PRESENTE UN FILE ERRORI DA SCARICARE PER IL PROTOCOLLO ".$protocollo."</h4></p>";
            
    // var_dump($output->DatiOutputRichiesta->esitiPositivi->dettagliEsito->pdf);
            
            
    $dati=$output->DatiOutputRichiesta->esitiPositivi->dettagliEsito->csv;
              if(!empty(
    $dati)){
                  echo 
    "<p><h4>SCARICO IL FILE E LA SALVO COME ".$nomefile."</h4></p>";
              
    file_put_contents $nomefile ,$dati ); 
              echo 
    "<p><h4>FATTO</h4></p>";
              
              }
        }
        else{
            
    error_log("ERRORE: NON E' PRESENTE UN FILE ERRORI DA SCARICARE PER IL PROTOCOLLO ".$protocollo0);
            echo 
    "<p><h4>ERRORE: NON E' PRESENTE UN FILE ERRORI DA SCARICARE PER IL PROTOCOLLO ".$protocollo."</h4></p>";
        }
    //end esito
        
    }
    ?>
     
  7. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.877
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    Vedi l'allegato 730precompilato.zip

    dopo aver esaurito gli invii, ho rivisto gli script in modo da archiviarli in "buono stato",
    allego lo zip con la versione che andrò ad archiviare.

    sono in dovere di ringraziare RUDYCOX per il suo preziosissimo apporto, i suoi script sono parte della "collezione"

    variazioni rispetto alla prima stesura,

    ho spostato tutte le definizioni nel file "credenziali.php",
    ho mantenuto in ciascuno script la definizione del solo file "fatture" da trattare (dove necessario),
    posizionandola all'inizio

    nello stesso "credenziali.php" ho inserito i dati di prova anche nella sezione dei dati effettivi,
    in modo che non ci siano dubbi sulle informazioni da immettere

    ho messo il controllo degli errori con la verifica "if (is_soap_fault($output))"

    ho aggiunto lo script "FattureInvioEsito.php",
    che consente di riprendere alcuni dei dati contenuti nella ricevuta pdf,
    nel caso si volesse memorizzarli in qualche modo

    ho inserito le,
    List of available SOAP functions
    List of types described in the WSDL for the Web service
    utili per sapere quali funzioni e quali dati sono previsti nei file ".wsdl" e ".xsd"

    ho mantenuto la crittografia della prima versione (file batch) ma chi volesse adottare la variante
    suggerita da RUDYCOX, non troverà difficoltà a farlo

    alla prossima
    Marino
     
  8. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.877
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    PHP:
    <?php

    $TEST 
    true;

    session_start();

    ini_set('error_reporting'E_ALL E_STRICT);

    ......


    $protocollo "12345678901234567";

    if( !empty( 
    $_SESSION['protocollo'] ) ) $protocollo $_SESSION['protocollo'];

    if( !empty( 
    $_REQUEST['protocollo'] ) ) $protocollo $_REQUEST['protocollo'];
    ?>
    una banale modifica allo script "credenziali" per poter avere varietà nel passare il "protocollo"
    come suggerito da RUDYCOX
    ciao
    Marino
     
  9. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.877
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    Vedi l'allegato 730precompilatoInvioStruttura.zip

    visto che c'è qualche persona in difficoltà per il trasferimento dei file relativi ad una struttura,
    nel file allegato c'è un esempio funzionante,

    html è il risultato
    credenziali, è il solito modificato per accogliere i dati della struttura
    FattureInviaWsdl è stato modificato l'invio con i parametri aggiuntivi per la struttura

    saluti
    Marino
     
  10. rudycox

    rudycox Nuovo Utente

    Registrato:
    12 Gennaio 2016
    Messaggi:
    21
    Mi Piace Ricevuti:
    1
    Punteggio:
    3
    Innanzitutto grazie ancora Marino! soprattutto per l'ordine che hai fatto nel codice...sono un casinista

    Vorrei utilizzare questo spazio, solo per fare 2 considerazioni.
    A parte il fatto di aver saputo solo venerdì che per il momento non sono tenuto a fare queste comunicazioni in quanto la mia struttura è privata NON accreditata, e questo dall'operatore numero xyznnn del numero verde e non dal preposto funzionario dell'ufficio dell'agenzia delle entrate cui mi ero rivolto la cui risposta era stata "si forse non lo deve fare, ma è meglio che lo faccia" (a voi i commenti)........,

    ora,


    • vedendo la struttura del file xml contenente i dati, sembra che la comunicazione debba essere fatta a "riga ricevuta" e non a "totale ricevuta", o mi sbaglio? Il mio commercialista dice che quando comunica le spese sanitarie di una persona fisica per la detrazione comunica il totale e non il dettaglio delle singole prestazioni incluse nella ricevuta. Quale va usata quindi?

      Io al momento non posso loggarmi al portale e quindi non posso vedere cosa abbiano previsto se uno voglia utilizzare la modalità di trasmissione web, ovvero come è gestito l'inserimento e la trasmissione di una singola ricevuta
      es.
      ricevuta 1
      data 04/01/2016
      visita spec. cardiologica euro 100.00
      elettrocardiogramma euro 30.00
      totale ricevuta = euro 130.00

      va inserito 130.00 oppure 2 record uno da 100.00 ed uno da 30.00
      e nel caso di 130.00, va inserito 130.00 o 132.00 (importo del bollo)?

    Dal punto di vista della programmazione a me non cambia molto visto che creo l'xml al volo interrogando un database, ma, viste le sanzioni, credo sia meglio farlo correttamente ;-)

    • E le note di credito? ne vogliamo parlare? L'operatore del numero verde dice che non esiste la possibilità di trasmissione di note di credito nè a storno totale nè - figuriamoci - a storno parziale per ricevute già trasmesse. Anzi il termine nota di credito l'ha lasciato senza parole, buio totale (??!!). Ma il flag R, a cosa serve quindi?
      Non è possibile usare V in quanto la ricevuta originale non cambia, ma ne viene invece emessa una ex-novo, di accredito.


    Se qualcuno ha chiarimenti per quanto sopra, sono ben accetti.
     
  11. Salvatore Albano

    Salvatore Albano Nuovo Utente

    Registrato:
    15 Gennaio 2016
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    0

    Ciao, la commercialista della società odontoiatrica per cui lavoro dice che comunque il bollo va indicato con la sigla AA ( in quanto altre spese).

    Quindi nel tuo caso

    RS 100
    RS 30
    AA 2

    ( lei ha detto di indicare una riga sola con totale 130 e una con totale 2 per il bollo, ma io sono della tua stessa idea e preferisco esplicitare riga per riga, per evitare problemi)

    Anche io mi domandavo come fare per le Note di credito, ovviamente le direttive sono alquanto blande e un po confusionarie.

    Io avevo pensato di gestire le singole righe come rimborso (R) indicando l'identificativo del documento fiscale al quale fanno riferimento ( ovvero la fattura contenente quella riga che tu stai "restituendo" al paziente); ma a questo punto non saprei come comportarmi.

    Certo è che il paziente poi non porterà a detrazione gli importi relativi a Note di Credito, in quanto, di fatto, soldi a lui restituiti, quindi in qualche modo penso che debbano essere inviati.

    Spero che altri utenti ci chiariscano le idee, nel frattempo ringrazio di cuore te e Marino per gli script forniti
     
  12. Salvatore Albano

    Salvatore Albano Nuovo Utente

    Registrato:
    15 Gennaio 2016
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Tra l'altro, se emetto una Nota di Credito relativa ad un documento fiscale emesso nel 2014, come bisogna comportarsi?
    Mistero totale..
     
  13. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.877
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    ho l'informazione che, quest'anno non vi sono sanzioni per chi dovesse commettere errori,

    esprimendo un pensiero semplice,
    fornisco l'informazione che deve essere riportata sul 730 precompilato,
    in modo da non vanificare quanto si sta facendo per aiutare la compilazione/presentazione del modello

    quindi al momento, sono per fornire un documento di una sola riga con il totale da riportare sul 730,
    ovviamente corretto nel valore e considerando le eventuali note di variazione (accredito/addebito)

    in un certo senso stiamo compilando i vecchi "allegati" clienti/fornitori per chi li avesse incontrati

    il prossimo anno saremo tutti più preparati
    ciao
    Marino

    ps,
    "Tra l'altro, se emetto una Nota di Credito relativa ad un documento fiscale emesso nel 2014, come bisogna comportarsi?
    Mistero totale.. "
    non proprio, dipende dalla data di "pagamento",
    addebito con data di pagamento 2015 dovrebbe rientrare nelle spese sanitarie del 2015
    accredito, nessun commento

    ulteriore ps,
    nel documento "730+Schema+dati+spesa+sanitaria+(01_12_2015).pdf" presente nel kit,
    nella sezione "documentoSpesa" è abbastanza evidente come gestire le note di variazione
     
    Ultima modifica: 18 Gennaio 2016
  14. spongebob

    spongebob Nuovo Utente

    Registrato:
    18 Gennaio 2016
    Messaggi:
    6
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ciao Marino,
    Innanzitutto ti ringrazio anch'io per questo tuo post illuminante !
    Volevo poi chiederti qualche ulteriore informazione in merito alla crittografia dei CF, premettendo che è un argomento che conosco poco:
    1) che "opensll" va installato su Windows 7 ? da dove lo posso scaricare ? Io ho trovato questo : https://slproweb.com/products/Win32OpenSSL.html . Va bene ?
    2) nel tuo .bat ci sono delle righe "remmate": io le ho ignorato, giusto ?
    3) eventualmente la versione PHP proposta da rudycox va bene o no ? ... perchè prima avevi scritto di verificare se la crittografia avviene come richiesto dal sistema TS (... come si verifica ?)

    Grazie ancora e saluti !
     
  15. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.877
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    io ho scaricato da qui la versione 1.0.2e
    http://indy.fulgan.com/SSL/

    il bat contiene righe commentate che ho usato per prove o per altri motivi, non sono importanti
    se vuoi e ti serve puoi attivare la "base64" ma ho preferito farla da php

    se guardi in fondo al bat c'è una riga dove viene richiamato il certificato "MEF.cer"
    questa riga è copia/incolla del comando contenuto nel kit
    "io non so ne leggere ne scrivere" per cui ho usato esattamente quel comando (aggiungendo uno spazio omesso nell'originale)

    alla domanda come si verifica, scusa la risposta, "non so", in questo momento altri impegni
    a me interessava il risultato ed ho impostato il tutto per ottenerlo

    ciao
    Marino
     
    Ultima modifica: 19 Gennaio 2016
  16. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.877
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    per chiarire meglio (l'ora tarda del post precedente, mi ha fatto andare di fretta),

    il requisito di crittografia é definito nel documento 20090625_DT_Comma_5.pdf alla pagina 13

    per quanto concerne il controllo del codice crittografato,
    è necessario disporre di un certificato che contenga la chiave di decriptazione,
    al fine di effettuare il processo inverso per riottenere il codice in chiaro

    ho letto in un qualche documento che, sogei mette a disposizione una chiave di prova
    per effettuare il processo inverso (che permette quindi il controllo)
    ma sinceramente, ora, non trovo più il documento (non era parte dei documenti della pagina del sito)
    e quando ho cercato questo certificato "inverso" non l'ho trovato

    il processo di controllo dovrebbe prevedere questi passi,

    crittografia con openssl come stabilito nel documento citato,

    crittografia con "metodo" php

    processo inverso per entrambi con certificato apposito

    ottenendo il codice in chiaro corretto per entrambi i sistemi,
    si dovrebbe dire che il risultato php è uguale al risultato di openssl
    (ma io non mi fido, ecco il motivo della mia soluzione bella o brutta che sia)

    ciao
    Marino
     
  17. rudycox

    rudycox Nuovo Utente

    Registrato:
    12 Gennaio 2016
    Messaggi:
    21
    Mi Piace Ricevuti:
    1
    Punteggio:
    3
    In merito alla criptazione con questa funzione

    PHP:
    function EncryptData($source)
    {
      
    $fp=fopen("d:/sanitelCF.cer","r");
      
    $pub_key=fread($fp,8192);
      
    fclose($fp);
      
    openssl_public_encrypt($source,$crypttext$pub_key );
      
    /*uses the already existing key resource*/
      
    return(base64_encode($crypttext));
    }
    Ho effettuato alcune prove e funziona.

    Le prove che ho fatto sono:
    1) creare il file xml con 3 cf reali criptati dalla funzione->zipparlo -> inviarlo tramite webservice : esito 3 documenti accettati
    2) creare il file xml con 3 cf, 2 criptati dalla funzione + 1 copiato da un file di test->zipparlo -> inviarlo tramite webservice : esito 3 documenti accettati
    3) creare il file xml con 3 cf criptati dalla funzione (di cui 1 PROVAX00X00X000Y)->zipparlo -> inviarlo tramite webservice : esito 2 accettati, 1 respinto con errore "IL CF CITTADINO NON PRESENTE IN ARCHIVIO"
    4) usando un certificato in mio possesso con chiave pubblica RSA (1024bits) e di cui ho la chiave privata, ho fatto criptare dalla funzione php e scrivere il risultato in CF.enc (questo dovrebbe produrre la stessa cosa fatta da command-line ovvero dal batch)
    PHP:
    $source='PROVAX00X00X000Y';
    //$fp=fopen("d:/sanitelCF.cer","r");
     
    $fp=fopen("d:/rui.crt","r");
    $pub_key=fread($fp,8192);
    fclose($fp);
    openssl_public_encrypt($source,$crypttext,$pub_key);
    file_put_contents "d:/CF.enc" ,$crypttext );  //creo il file con i dati non codificati base64
    Ho verificato che il CF.enc fosse scritto in binario.

    da command line ho decriptato usando il seguente comando come riportato nel disciplinare:
    Codice:
    openssl.exe rsautl -decrypt -in  d:\CF.enc -out d:\CF.txt -inkey d:\rui.key -pkcs
    
    all'interno del file CF.txt viene correttamente scritto il CF decriptato, ovvero: PROVAX00X00X000Y

    quindi sembra tutto ok.

    Se qualcuno riesce a farsi mandare il certificato di prova e relativa chiave privata del MEF (Ministero dell'economia e delle finanze) indicati da Marino e specificati nel "Disciplinare tecnico", posso fare una ulteriore prova.
    I file nel disciplinare vengono indicati come MEF.cer (certificato) e MEFtest.key (la chiave privata)
     
    Ultima modifica: 19 Gennaio 2016
  18. spongebob

    spongebob Nuovo Utente

    Registrato:
    18 Gennaio 2016
    Messaggi:
    6
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ciao RudyCox,

    sto facendo dei test di trasmissione che vanno a buon fine.
    Ma quando cerco di ottenere la ricevuta PDF usando il tuo codice, ottengo sempre questa risposta:

    INVIO LA RICHIESTA

    1.6011919590572E+16
    LA RICHIESTA HA AVUTO RISPOSTA

    ERRORE: NON E' PRESENTE LA RICEVUTA PER IL PROTOCOLLO 1.6011919590572E+16

    FINE DEL LAVORO

    Quale può essere il problema ? ... cosa devo controllare ?

    Grazie !
     
  19. Ezio88

    Ezio88 Nuovo Utente

    Registrato:
    19 Gennaio 2016
    Messaggi:
    6
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Buonasera a tutti,
    grazie innanzitutto a chi ha scritto questi script e sta contribuendo a darmi delucidazioni sull'argomento.

    Ho provato un po' le varie funzioni. Il webservice di invio file funziona correttamente (anche se mi restituisce continuamente l'errore "L'ALLEGATO NON E' UN FILE DI TIPO ZIP VALIDO: IL FILE NON E' STATO ACCOLTO")

    Gli altri script che avete allegato (Invio Esito, Ricevuta Pdf,...) non mi funzionano e mi viene restituito un errore come se il wsdl del WebService non esistesse (es. Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity "EsitoInvioDatiSpesa730Service.wsdl"). A voi funziona correttamente?

    Inoltre potete darmi una mano a capire come è composto l'ambiente di test del sistema? Si tratta solo di richiamare url di webservice diversi o c'è una vera e proprio pannello nel sito del STS (come se fosse un utente reale)? Purtroppo, a parte i vostri esempi, non ho trovato molte informazioni a riguardo.

    Grazie in anticipo ;)
     
  20. rudycox

    rudycox Nuovo Utente

    Registrato:
    12 Gennaio 2016
    Messaggi:
    21
    Mi Piace Ricevuti:
    1
    Punteggio:
    3
    x spongebob: controlla che alla fine del file credenziali.php siano presenti queste 2 righe dopo $protocollo = "12345678901234567";

    PHP:
    if( !empty( $_SESSION['protocollo'] ) ) $protocollo $_SESSION['protocollo'];

    if( !empty( 
    $_REQUEST['protocollo'] ) ) $protocollo $_REQUEST['protocollo'];
    se nn ci sono, aggiungile.
    poi potrai chiamare la pagina delle ricevute con FattureInvioRicevutaPdf.php?protocollo=[numero protocollo restituito dall'invio]

    x Ezio88: devi copiare tutti i file *.wsdl e *.xsd (contenuti nel kit nelle cartelle "ServizioSincrono" e "ServiziRicevute") nella cartella dove risiedono i file php
    il file da inviare, se hai usato gli ultimi script di marino, deve chiamarsi "Fatture730_2015_2.zip", deve risiedere nella cartella dei file php e deve contenere il solo file Fatture730_2015_2.xml


    x Tutti: Gli script indicati in queste pagine funzionano tutti, ma al momento sono solo delle "basi" da cui partire. Vanno modificati in funzione delle proprie esigenze soprattutto per impostare alcune variabili. Es il nome del file zip, la cartella dove salvare le ricevute pdf, la cartella dove salvare i csv, etc
    Marino ha fatto un grande lavoro, tutte le variabili usate, se non facilmente intuibili, hanno a fianco il commento di cosa impostano o a cosa servono.
    Ogni volta che chiamate una pagina, viene scritto tutto il processo ed esito nel file "_TesseraSanitaria.log". Controllatelo per capire se e quali sono gli errori. Potete cancellarlo in quanto viene ricreato ad ogni nuova chiamata di qualsiasi pagina php.
     
    Ultima modifica: 20 Gennaio 2016
Sto caricando...

Condividi questa Pagina