Discussione:
Connessione ed interazione con webserver
(troppo vecchio per rispondere)
Luigi Siciliano
2017-01-28 07:00:12 UTC
Permalink
Ho la necessità di connettermi ed interagire con i webservices del
sistema tessera sanitaria per trasmettere un solo file di dati.

Questi webservices dialogano con il protocollo soap e non si possono
importare.

Tra i componenti di delphi2010 trovo, nella palette webservices, il
componente TSoapConnection.

L'help in linea di delphi non mi è d'aiuto e non ho capito con quali
altri componenti gestisco poi la connessione ed il dialogo con il
webservice.

Online trovo parecchia roba ma, essendo proprio digiuno di queste cose,
mi perdo facilmente.

Qualcuno potrebbe darmi un spunto?

Grazie.
Alberto Salvati
2017-01-28 14:48:55 UTC
Permalink
Post by Luigi Siciliano
Questi webservices dialogano con il protocollo soap e non si possono
importare.
Cioè, non è possibile generare la classe proxy con il wsdlimporter?
Hai provato? Ti da errori o che altro?


A.
Alberto Salvati
2017-01-28 14:49:40 UTC
Permalink
Aggiungo: se hai un link magari qualcuno riesce a fare una prova veloce...

A.
alessandrob
2017-01-29 16:06:34 UTC
Permalink
Post by Luigi Siciliano
Ho la necessità di connettermi ed interagire con i webservices del
sistema tessera sanitaria per trasmettere un solo file di dati.
Credo ti riferisca alla trasmissione dei dati relativi al 730 da parte di strutture sanitarie (farmacie, laboratori di analisi, ...)

In questo caso, se hai fatto richiesta del Kit di integrazione (o se te lo ha fatto pervenire il tuo cliente finale) trovi all'interno molte informazioni su come fare la procedura per il trasferimento dei dati.

Io ho mandato una mail direttamente a gestionets @ sogei.it che mi ha fatto pervenire il kit di integrazione

Nella mail, oltre al kit (una serie di file di documentazione e di esempio), era presente anche un link alla documentazione online:
http://sistemats1.sanita.finanze.it/wps/portal/portalets/sistematsinforma/730%20-%20Spese%20sanitarie

Ho realizzato questa integrazione ancora alla fine del 2015 e credo di aver utilizzato la versione XE7 di Delphi, nella quale ho effettuato l'import del wsdl come suggerito anche da Alberto Salvati
Luigi Siciliano
2017-01-30 10:00:02 UTC
Permalink
Post by alessandrob
http://sistemats1.sanita.finanze.it/wps/portal/portalets/sistematsinforma/730%20-%20Spese%20sanitarie
ho importato il wsdl presente nel kit tessera sanitaria.

Delphi mi ha creato due classi: TRicevutaInvio e TProprietario

una interfaccia definita come segue:

InvioTelematicoSS730pMtom = interface(IInvokable)
['{1F58756D-A2E0-C47D-0817-8E685DCE51B1}']
function inviaFileMtom(const nomeFileAllegato:
tipoNomeFileAllegato;
const pincodeInvianteCifrato: string;
const datiProprietario: TProprietario;
const opzionale1: string;
const opzionale2: string;
const opzionale3: string;
const documento: TByteDynArray):
TRicevutaInvio; stdcall;
end;

e la function che segue:

function GetInvioTelematicoSS730pMtom(UseWSDL: Boolean=System.False;
Addr: string=''; HTTPRIO: THTTPRIO = nil): InvioTelematicoSS730pMtom;


Come faccio a passare i parametri alla function dell'interfaccia?

il seguente codice sembra funzionare ma non capisco come prelevo i dati
della ricevuta:

procedure TfrmGestioneSistemaTesseraSanitaria.btnInvioClick(Sender:
TObject);
const
fnfile = 'Veterinario.zip';
sPinCode = 'e4XbRBmI';
var
Proprietario: TProprietario;
Documento: TByteDynArray;
Ricevuta: TRicevutaInvio;
Invio: InvioTelematicoSS730pMtom;
begin
Proprietario := TProprietario.Create;
Proprietario.cfProprietario := sPinCode;
Documento := FileToByteArray(fnFile);
invio := GetInvioTelematicoSS730pMtom();

// Fin qui ci arriva ma come leggo la ricevuta restituita?

CodiceEsito := Ricevuta.CodiceEsito ??????
end;

Grazie.
Alberto Salvati
2017-01-30 10:06:21 UTC
Permalink
Devi avere una classe che implementa InvioTelematicoSS730pMtom.
Ne crei una istanza e poi:

var
x: TQualcosaCheImplementaInvioTelematicoSS730pMtom;
ricevuta: TRicevuta;

begin
ricevuta := x.inviaFileMtom(...);
Giacomo Degli Esposti
2017-01-30 10:21:01 UTC
Permalink
On Monday, January 30, 2017 at 10:59:36 AM UTC+1, Luigi Siciliano wrote:
[...]
Post by Luigi Siciliano
InvioTelematicoSS730pMtom = interface(IInvokable)
['{1F58756D-A2E0-C47D-0817-8E685DCE51B1}']
tipoNomeFileAllegato;
const pincodeInvianteCifrato: string;
const datiProprietario: TProprietario;
const opzionale1: string;
const opzionale2: string;
const opzionale3: string;
TRicevutaInvio; stdcall;
end;
[...]
Post by Luigi Siciliano
function GetInvioTelematicoSS730pMtom(UseWSDL: Boolean=System.False;
Addr: string=''; HTTPRIO: THTTPRIO = nil): InvioTelematicoSS730pMtom;
[...]
Post by Luigi Siciliano
TObject);
const
fnfile = 'Veterinario.zip';
sPinCode = 'e4XbRBmI';
var
Proprietario: TProprietario;
Documento: TByteDynArray;
Ricevuta: TRicevutaInvio;
Invio: InvioTelematicoSS730pMtom;
begin
Proprietario := TProprietario.Create;
Proprietario.cfProprietario := sPinCode;
Documento := FileToByteArray(fnFile);
invio := GetInvioTelematicoSS730pMtom();
// Fin qui ci arriva ma come leggo la ricevuta restituita?
prova con ...

Ricevuta := invio.inviaFileMtom( ... );
Post by Luigi Siciliano
CodiceEsito := Ricevuta.CodiceEsito ??????
end;
ciao
Giacomo
Luigi Siciliano
2017-01-30 11:32:09 UTC
Permalink
Post by Giacomo Degli Esposti
prova con ...
Ricevuta := invio.inviaFileMtom( ... );
Grazie, così sembra funzionare ma, il webservice (credo sia lui che va
in eccezione) mi restituisce un errore come se il file xml fosse guasto:
"Per il documento XML è necessario specificare un elemento di primo
livello." Line: 0

Il file, formalmente è corretto.

Suggerimenti?

Grazie.
Alberto Salvati
2017-01-30 11:37:57 UTC
Permalink
Post by Luigi Siciliano
Il file, formalmente è corretto.
..cioè...? Con cosa lo hai aperto?


A.
Luigi Siciliano
2017-01-30 11:55:07 UTC
Permalink
Post by Alberto Salvati
Post by Luigi Siciliano
Il file, formalmente è corretto.
..cioè...? Con cosa lo hai aperto?
Sia con il blocco note per guardarlo al lumicino :) che con IE
(applicazione di default).

Ciao
Alberto Salvati
2017-01-30 12:04:45 UTC
Permalink
Post by Luigi Siciliano
Sia con il blocco note per guardarlo al lumicino :) che con IE
(applicazione di default).
Buttali via.
Prova ad aprirlo da un browser diverso o da un programma delphi

Ancora, prendi un xml formattato in modo diverso, mandalo su e vedi che errori ti da.

Essendo un software della PA è stato sciuramente scritto da persone che hanno 25 lauree, 48 master e molto altro, ma poi scrivono programmi cinofallici che in caso di errori sputano fuori messaggi "penali", il tutto basato su direttive di burocrati che spesso sono staccati dalla realtà.


A.
Alberto Salvati
2017-01-30 13:24:33 UTC
Permalink
Mi autoquoto:

ricordo come fosse ieri un sito della PA sul quale, durante la registrazione, se scrivevi una password non adatta ti rispondeva con un messaggio "la pw non è conforme al decreto/legge etc etc".
Io feci la parte dell'indiano e scrissi al supporto chiedendo cosa volesse dire.
Devo dirlo: mi risposero entro la mattina dopo.
E mi spiegarono le solite cose: deve essere lunga almeno tot, deve contenere almeno un carattere maiuscolo etc.

Sempre facendo l'indiano, chiesi come mai, invece del messaggo scritto in burocratichese. non avessero riportato le 2 righe dell mail.
A questa richiesta non hanno mai risposto.

Per non parlare del SIETA...

A.
Luigi Siciliano
2017-01-30 14:23:44 UTC
Permalink
In effetti, in uno dei files che compongono il kit c'è un documento con
i dati da utilizzare per le prove.

In questo file c'è lo username e la password da utilizzare, per i quali,
però, *non* ho trovato i corrispondenti campi.

Ci sono anche altri due dati: "PinCode" e "PinCode cifrato",
utilizzandoli, durante l'elaborazione dell'istruzione:
Ricevuta := invio.inviaFileMtom(fnfile, sPinCode, Proprietario, '', '',
'', Documento);
Mi viene presentata una dialog (titolo: "Sicurezza di windows") per
scegliere il certificato da selezionare (I certificati che mi vengono
presentati, però, corrispondono a due persone che sono passate nel mio
PC solo perché hanno firmato digitalmente dei documenti con la card per
la firma digitale con l'applicazione "dike") e, non sapendo se questi
certificati vengono trasmessi al webservice e, non volendo coinvolgere
questi certificati, ho premuto il pulsante "Annulla" ricevendo un nuovo
errore:
"cvc-particle 3.1: in element inviaFileMtom of type inviaFileMtom, found
<nomeFileAllegato>, but next item should be nomeFileAllegato."

Se cambio l'url da "https://..." a "http://..." ricevo nuovamente
l'errore precedente che segnalava il file xml guasto!

Come posso utilizzare un altro certificato (il mio)?

Grazie
Alberto Salvati
2017-01-30 14:40:01 UTC
Permalink
Post by Luigi Siciliano
In questo file c'è lo username e la password da utilizzare, per i quali,
però, *non* ho trovato i corrispondenti campi.
Credo che l'autenticazione con quei dati debba essere fatta ogni volta.
Avere in cache da qualche parte questi dati potrebbe creare delle paurose falle nella sicurezza.
Post by Luigi Siciliano
Come posso utilizzare un altro certificato (il mio)?
Google?


A.
Luigi Siciliano
2017-01-30 15:07:49 UTC
Permalink
Post by Alberto Salvati
Post by Luigi Siciliano
Come posso utilizzare un altro certificato (il mio)?
Google?
Anche utilizzando il mio certificato viene fuori lo stesso errore :(
Alberto Salvati
2017-01-30 15:59:52 UTC
Permalink
Post by Luigi Siciliano
Anche utilizzando il mio certificato viene fuori lo stesso errore :(
cioe', xml non valido?
Hai provato ad aprirlo da Firefox/Chrome?
Hai provato a inviare un xml con struttura diversa rispetto a quella che il web service si aspetta di ricevere?
Aggiungo: non è che oltre XML è previsto l'invio anche in qualche formato testo?

A.
Luigi Siciliano
2017-01-30 17:59:39 UTC
Permalink
Post by Alberto Salvati
Post by Luigi Siciliano
Anche utilizzando il mio certificato viene fuori lo stesso errore :(
cioe', xml non valido?
Si, provato con editor di testo, ed ho provato Online con XML validator
presente su xmlGrid.net qui <http://xmlgrid.net/validator.html> e dice
che va bene.
Il file xml è un file standard presente nel kit rilasciato dal sistema
tessera sanitaria per le prove di trasmissione.
Post by Alberto Salvati
Hai provato ad aprirlo da Firefox/Chrome?
Firefox stranamente legge una serie incomprensibile di caratteri!?!

Chome non lo uso.
Post by Alberto Salvati
Hai provato a inviare un xml con struttura diversa rispetto a quella che il web service si aspetta di ricevere?
Si e mi restituisce lo stesso errore!?!
Post by Alberto Salvati
Aggiungo: non è che oltre XML è previsto l'invio anche in qualche formato testo?
Le specifiche sono di passare:

- NomeFileAllegato = nome dos del file;
- PincodeCifrato = un codice cifrato;
- Documento = il file NomeFileAllegato zippato;
- CFProprietario = codice fiscale;

Grazie.

Ciao.
Luigi Siciliano
2017-01-31 07:32:53 UTC
Permalink
Post by Alberto Salvati
Hai provato a inviare un xml con struttura diversa rispetto a quella che il web service si aspetta di ricevere?
Provato con il file .dpr del progetto di delphi ed è lo stesso errore.
E' chiaro, quindi, che il file *non* arriva!
Nel prototipo della funzione il file da allegare è definito come segue:
const documento: TByteDynArray.

Poiché in Delphi non c'è una apposita funzione ho utilizzato questa
reperita in rete (per inciso non ho capito bene perché senza assegnare
Result la funzione restituisce comunque un risultato):

function FIleToByteArray( const FileName : string ) : TByteDynArray;
const
BLOCK_SIZE=1024;
var
BytesRead, BytesToWrite, Count : integer;
F : FIle of Byte;
pTemp : Pointer;
begin
AssignFile( F, FileName );
Reset(F);
try
Count := FileSize( F );
SetLength(Result, Count );
pTemp := @Result[0];
BytesRead := BLOCK_SIZE;
while (BytesRead = BLOCK_SIZE ) do
begin
BytesToWrite := Min(Count, BLOCK_SIZE);
BlockRead(F, pTemp^, BytesToWrite , BytesRead );
pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE);
Count := Count-BytesRead;
end;
finally
CloseFile( F );
end;
end;

ma anche con quest'altra è lo stesso:

function ByteStreamToByteArray(const FileName: TFileName): TByteDynArray;
var
bs: TBytesStream;
begin
bs := TBytesStream.Create;
bs.LoadFromFile(FileName);
Result := TByteDyNArray(bs.bytes);
bs.Free;
end;

Che dipenda da unicode?

Grazie.

Ciao.
theFiller
2017-01-31 10:30:05 UTC
Permalink
Post by Luigi Siciliano
In effetti, in uno dei files che compongono il kit c'è un documento con
i dati da utilizzare per le prove.
In questo file c'è lo username e la password da utilizzare, per i quali,
però, *non* ho trovato i corrispondenti campi.
sono l'username e la password per l'autenticazione
cerca delphi Basic Authentication
eventualmente specifiche per THTTPRIO

ciao
Daniele
2017-01-31 09:17:48 UTC
Permalink
Ciao Luigi,
non ho esperienza per quanto riguarda l'invio dei dati al server della PA,
pero' ho avuto esperienza nei dati da inviare al sistema di tracciamento nel
comparto del ministero della sanita'.
Ricordo (ormai sono passati 3 anni) che il file xml (studiato da chi ha
almeno 25 lauree, 48 master, 3 titoli masterchef e ha vinto 4 ristoranti)
veniva SEMPRE rifiutao con errori strambi e poco interpretabili.
In questo caso l'assistenza (che ad onore del vero ha sempre risposto
subito) a sua volta brancolava nel buio e mi aveva mandato diversi pdf con
le versioni aggiornate della documentazione.
Per farla breve, se la filosofia e' la stessa, il fil xml DEVE ESSERE COSI'
COM'E' RIPORTATO NEGLI ESEMPI, se varia di un qualcosa non lo accetta.
Nel mio caso il motivo del rifiuto era la data.
Nel file xml era specificato che si poteva usare il formato yyyy-mm-dd o
dd-mm-yyyy o yyyy/mm/dd.
Io mandavo dd/mm/yyyy ERRATO PERCHE' NON SUPPORTATO, ho cambiato in
yyyy-mm-dd e, magicamente, tutto ha funzionato.
Per creare il file xml ho usato TXMLDocument (Delhi XE 2).

Sempre per tua informazione, quando questa ira si e' abbattuta sulla filiera
sanitaria (farmacie, dentisti, medici ecc....) le software house deputate
alla modifica dei gestionali (appunto per inviare i dati alla PA per la
compilazione automatica del 730) hanno impiegato la bellezza di qualche mese
PRIMA di imbroccare il formato giusto.

Ricorda il file deve essere paro paro come quello degli esempi.
Post by Luigi Siciliano
Il file, formalmente è corretto.
Se non lo accetta no
Post by Luigi Siciliano
Suggerimenti?
Se c'e' un link di prova sfruttalo.
A mio tempo non c'era, ma oggi dovrebbe esserci.
Se c'e', manda li il tuo file e analizza gli errori restituiti e, nel caso
del file xml, controlla bene gli inio-fine di ogni blocco e la gerarchia.

Non e' cosi' facile (almeno, per me non lo e' stato!!)

Ciao

Daniele
Luigi Siciliano
2017-01-31 10:51:47 UTC
Permalink
Post by Daniele
In questo caso l'assistenza (che ad onore del vero ha sempre risposto
subito)
Non sembra esserci un link/email per avere assistenza software o meglio,
io non sono riuscito a trovarlo. ;(
Post by Daniele
Ricorda il file deve essere paro paro come quello degli esempi.
In questo caso, io, invio un file contenuto nel kit stesso rilasciato da
loro ma, se invio il file.dpr generato da delphi mi viene restituito lo
stesso errore per cui ritengo che anche se io passo il file giusto,
questo non arriva nel formato richiesto.

Nel documento di accompagnamento c'è scritto: "file compresso contenente
i documenti fiscali, secondo lo schema dati"
Nello schema dati: "<xs:element minOccurs="1" maxOccurs="1"
name="documento" nillable="false" type="xs:base64Binary" />"

Delphi, importando il wsdl l'ha definito nel prototipo della funzione
così: const documento: TByteDynArray
Post by Daniele
Post by Luigi Siciliano
Il file, formalmente è corretto.
Se non lo accetta no
Io dico che è corretto perché è lo stesso file contenuto nel loro kit e
perché ho verificato le corrispondenze.
Post by Daniele
Post by Luigi Siciliano
Suggerimenti?
Se c'e' un link di prova sfruttalo.
E' proprio quello che sto cercando di fare :)


Grazie.

Ciao
alessandrob
2017-01-31 12:01:58 UTC
Permalink
Post by Daniele
In questo caso l'assistenza (che ad onore del vero ha sempre risposto
subito)
Ho visto una serie di problemi segnalati, prova a vedere se per alcuni di questi le informazioni qui sotto ti possono aiutare:

a) per il certificato da utilizzare, il kit contiene il file SanitelCF.rar nel quale è presente il certificato da utilizzare SaniterCF.cer

b) per l'autenticazione da passare, ho trovato un metodo da ridefinire in HTTPRIO che consente di gestire l'autenticazione (ti riporto anche i riferimenti di dove ho trovato gli spunti); FUserName e FPassword sono due variabili del form dove ho gestito la procedura

....
{ --- Supporto per Collegamento --- }
HTTPRIO := THTTPRIO.Create(Self);

{ --- Consente anche utilizzo di Certificati non verificati --- }
HTTPRIO.HTTPWebNode.InvokeOptions := [soPickFirstClientCertificate,soIgnoreInvalidCerts];

{ --- Metodo per passare le credenziali di accesso --- }
HTTPRIO.HTTPWebNode.OnBeforePost := DoHTTPRIOHTTPWebNodeBeforePost;

...


{}
{ --- Gestione Autenticazione --- }
// See more at: http://codeverge.com/embarcadero.delphi.webservices/how-do-i-use-basic-authenticat/1078800#sthash.Umf0FsWD.dpuf
{}
procedure TFrmStgHubSysTs.DoHTTPRIOHTTPWebNodeBeforePost( const HTTPReqResp: THTTPReqResp; Data: Pointer);
var S: string;
begin
{ --- Compone testo per Credenziali --- }
S := 'Authorization: Basic ' + EncodeString( FUserName + ':' + FPassword );

{ --- Inserisce Credenziali --- }
HttpAddRequestHeaders( Data, PChar(S), Length(S), HTTP_ADDREQ_FLAG_ADD );
end;


c) per quanto riguarda i dati da criptare erano il PinCode dell'inviante, il Codice Fiscale del proprietario e quello del cittadino; io ho utilizzato vari metodi ha poi alla fine ho optato per una chiamata indiretta a openssl tramite file di appoggio; per l'utilizzo diretto (che inizialmente mi funzionava) ho avuto una serie di problemi legati alle varie versioni di Delphi e delle librerie Libeay32 e ssleay32


d) per il file da inviare è necessario il caricamento del file zip in un array di byte/caratteri per consentire l'invio; io ho utilizzato la lettura tramite stream:

function TFrmStgHubSysTs.ReadFileToSend( FileZip: String ): string;
var StringStream: TStringStream;
FileStream : TFileStream;
Bytes: TBytes;
FileData: string;
begin
{ --- Apertura Stream su File --- }
FileStream:= TFileStream.Create( FileZip,fmOpenRead );

{ --- Stream Stringa di Destinazione --- }
StringStream := TStringStream.Create( '' );

try
{ --- Copia Stream --- }
StringStream.CopyFrom( FileStream,FileStream.Size );

{ --- Lettura file su Stringa --- }
FileData := StringStream.DataString;
finally
StringStream.Free;
FileStream.Free;
end;

{ --- Risultato --- }
Result := FileData;
end;
Daniele
2017-01-31 15:07:49 UTC
Permalink
Ciao Luigi,
Post by Luigi Siciliano
Non sembra esserci un link/email per avere assistenza software o meglio,
io non sono riuscito a trovarlo. ;(
Partendo dal link che ha lasciato alessandrob ho trovato quest'altro link

http://sistemats1.sanita.finanze.it/wps/wcm/connect/0f7a758c-9638-4e74-95b7-bde0bfab29a5/kit730P_ver_20161223.zip?MOD=AJPERES&CACHEID=0f7a758c-9638-4e74-95b7-bde0bfab29a5

che praticamente contiene tutto quello che hai bisogno.
Ci sono anche i link per fare i test ovvero, per i veterinari

AMBIENTE DI TEST:
--------------------------------------------------------------------------------------------------------------------
https://invioSS730pTest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort
https://invioSS730pTest.sanita.finanze.it/Ricevute730ServiceWeb/ricevutePdf
https://invioSS730pTest.sanita.finanze.it/EsitoStatoInviiWEB/DettaglioErrori730Service
https://invioSS730pTest.sanita.finanze.it/EsitoStatoInviiWEB/EsitoInvioDatiSpesa730Service
https://invioSS730pTest.sanita.finanze.it/DocumentoSpesa730pWeb/DocumentoSpesa730pPort
https://invioSS730pTest.sanita.finanze.it/ReportMensile730Web/ReportMensilePort
https://invioSS730pTest.sanita.finanze.it/InterrogazionePuntuale730Web/InterrogazionePuntuale730Port

poi ci sono i vari esempi dei file xml che qui non posso allegare perche'
l'editor non li gradisce.

Come ti dicevo nell'altro messaggio il file xml dev'essere uguale a quello
che trovi dentro il file zippato.
Ci sono davvero tanti esempi, tra cui l'autenticazione.
Non posso aiutarti per tutto cio' che riguarda i certificati perche' non li
ho mai utilizzati.

Il primo test che DEVI superare e' il test del login.
Quando il sistema della sogei ti da ok come risultato, allora ti dedichi al
file da inviare che, vista la struttura, se hai una griglia e' davvero una
stupidaggine crearlo.
Ovviamente il login lo devi fare con le credenziali corrette, ovvero con
l'utente accreditato per l'invio, nel sito di test.

Il login lo fai con gli oggetti creati da delphi nella conversione del file
wsdl.
Nell'oggetto di delphi c'e' gia' tutto, al massimo devi preoccuparti di
cryptare username e password secondo le direttive del sito a cui ti
colleghi.
Anche il THTTPRIO lo devi usare con le pinze, io mi ricordo che

WSDLLocation e' il drive + path + nomefile.wsdl
Port e Service dovrebbe metterli gia' delphi.

Inoltre devi anche saper gestire i vari wsdl convertiti.
Di solito trovi un wsdl per il login, uno per le richieste, ecc....

Ho anche visto che esistono versioni di wsdl con piu' servizi incorporati,
ma non so come si fa a gestirli.

Non e' facile, anzi tutt'altro.
Io (non programmatore ma solo utodidatta che si arrangia per le proprie
necessita') ho impiegato 1 mese per capire e far funzionare i servizi web di
cui avevo bisono (login, invio, richieste, letture, listini ecc.. dei
documenti )
tu dovresti impiegare meno di me !!!, metti in conto tatnte, tante cozzate
contro il muro.

Buon divertimento !!!!

Ciao

Daniele
Luigi Siciliano
2017-01-31 18:53:01 UTC
Permalink
Post by Daniele
che praticamente contiene tutto quello che hai bisogno.
Ci sono anche i link per fare i test ovvero, per i veterinari
Li ho trovati ma, non mi aiutano a capire dove sbaglio.
Post by Daniele
Come ti dicevo nell'altro messaggio il file xml dev'essere uguale a
quello che trovi dentro il file zippato.
Il file che invio è quello.
Post by Daniele
Ci sono davvero tanti esempi, tra cui l'autenticazione.
??? non mi sembra. Ci sono i dati da inserire relativamente alla
username, password, pin in chiaro e codificato.
Post by Daniele
Il primo test che DEVI superare e' il test del login.
A questo punto credo di non riuscire in questo :(
Post by Daniele
Ovviamente il login lo devi fare con le credenziali corrette, ovvero con
l'utente accreditato per l'invio, nel sito di test.
Veramente se provo a loggarmi nell'area riservata utilizzando la
username e la relativa password non si riesce a farlo.
Post by Daniele
WSDLLocation e' il drive + path + nomefile.wsdl
Port e Service dovrebbe metterli gia' delphi.
giusto, almeno credo :)
Post by Daniele
Non e' facile, anzi tutt'altro.
Buon divertimento !!!!
Adesso l'errore restituito è: "Interface not supported".
Post by Daniele
Ciao
Daniele
Grazie.

Ciao.
alessandrob
2017-01-31 20:48:12 UTC
Permalink
Il giorno martedì 31 gennaio 2017 19:52:33 UTC+1, Luigi Siciliano ha scritto:

Ti posto un po' di codice che utilizzo per eseguire l'invio sperando che ti possa aiutare.

Io utilizzo la tecnica di predisporre il file da inviare, zipparlo e predisporre un file di appoggio con i parametri per l'invio.
Successivamente richiamo la procedura che esegue l'invio vero e proprio

Il file di appoggio da cui leggere i dati per l'invio, viene letto con una mia estensione di TIniFile per non memorizzare le password in chiaro nel file di appoggio

Anche la risposta (che nel primo invio è sostanzialmente il protocollo) la ri-memorizzo nel file di appoggio, così poi ritorna al processo principale

Tra i parametri di passaggio ricevo l'informazione se utilizzare l'area di test o quella di produzione


procedure TFrmStgHubSysTs.SendToSistemaTs( FileIni: string; TargetTest: boolean );

var Ini: TTecnoSysIniFile;
FileToSend, DataToSend: string;

// Strumenti di Connessione
HTTPRIO: THTTPRIO;
F730: InvioTelematicoSS730pMtom;

// dati specifici
datiProprietario: proprietario;
nomefileallegato: tipoNomeFileAllegato;
pincodeInvianteCifrato: string;
opzionale1: string;
opzionale2: string;
opzionale3: string;
documento: TByteDynArray;
ricevuta: ricevutaInvio;
begin
{ --- Dati Proprietario --- }
datiProprietario := proprietario.Create;

{ --- Lettura File di Collegamento --- }
Ini := TTecnoSysIniFile.Create( FileIni );

{ --- File da Inviare --- }
FileToSend := Ini.ReadString( _SysTs_Sec_I,'Zip','' );

{ --- Dati Proprietario --- }
datiProprietario.codiceRegione := Ini.ReadString( _SysTs_Sec_I,'Reg','' );
datiProprietario.codiceAsl := Ini.ReadString( _SysTs_Sec_I,'Asl','' );
datiProprietario.codiceSSA := Ini.ReadString( _SysTs_Sec_I,'Pre','' );
datiProprietario.cfProprietario := Ini.ReadString( _SysTs_Sec_I,'Cfp','' );

{ --- PinCode Cifrato --- }
pincodeInvianteCifrato := Ini.ReadString( _SysTs_Sec_I,'Pin','' );

{ --- Credenziali --- }
FUserName := Ini.ReadPassword( _SysTs_Sec_I,'Usr','' );
FPassword := Ini.ReadPassword( _SysTs_Sec_I,'Pwd','' );

{ --- Libera --- }
Ini.Free;



{ --- Caricamento file nel buffer di trasmissione --- }
DataToSend := ReadFileToSend(FileToSend);

{ --- Trasferimento nel Buffer --- }
documento := StrToByteDynArray( DataToSend );

{ --- Nome Allegato --- }
nomefileallegato := ExtractFileName( FileToSend );

{ --- Dati Opzionali --- }
opzionale1 := '';
opzionale2 := '';
opzionale3 := '';




{ --- Supporto per Collegamento --- }
HTTPRIO := THTTPRIO.Create(Self);

{ --- Consente anche utilizzo di Certificati non verificati --- }
HTTPRIO.HTTPWebNode.InvokeOptions := [soPickFirstClientCertificate,soIgnoreInvalidCerts];

{ --- Metodo per passare le credenziali di accesso --- }
HTTPRIO.HTTPWebNode.OnBeforePost := DoHTTPRIOHTTPWebNodeBeforePost;

{ --- Collegamento Area Test / Produzione --- }
if TargetTest
then F730 := GetInvioTelematicoSS730pMtom( False,_Deb_SistemaTs_Send,HTTPRIO )
else F730 := GetInvioTelematicoSS730pMtom( False,_Prd_SistemaTs_Send,HTTPRIO );

{ --- Esegue Invio --- }
ricevuta := F730.inviaFileMtom( nomefileallegato,pincodeInvianteCifrato,datiproprietario,
opzionale1,opzionale2,opzionale3,documento );



{ --- Scrittura File di Collegamento --- }
Ini := TTecnoSysIniFile.Create( FileIni );

{ --- Dump Risposta --- }
Ini.WriteString( _SysTs_Sec_O,'Protocollo',Ricevuta.protocollo );
Ini.WriteString( _SysTs_Sec_O,'dataAccoglienza',Ricevuta.dataAccoglienza );
Ini.WriteString( _SysTs_Sec_O,'nomeFileAllegato',Ricevuta.nomeFileAllegato );
Ini.WriteString( _SysTs_Sec_O,'dimensioneFileAllegato',Ricevuta.dimensioneFileAllegato );
Ini.WriteString( _SysTs_Sec_O,'codiceEsito',Ricevuta.codiceEsito );
Ini.WriteString( _SysTs_Sec_O,'descrizioneEsito',Ricevuta.descrizioneEsito );
Ini.WriteString( _SysTs_Sec_O,'idErrore',Ricevuta.idErrore );

{ --- Libera --- }
Ini.Free;

end;
Luigi Siciliano
2017-02-01 08:14:24 UTC
Permalink
Posso chiederti quale versione di delphi utilizzi?

Io utilizzo Delphi2010 ed anche con il tuo codice non riesco ugualmente
a connettermi :( ottengo lo stesso errore.

Grazie.

Ciao.
alessandrob
2017-02-01 11:15:50 UTC
Permalink
Post by Luigi Siciliano
Posso chiederti quale versione di delphi utilizzi?
Io utilizzo Delphi2010 ed anche con il tuo codice non riesco ugualmente
a connettermi :( ottengo lo stesso errore.
Grazie.
Ciao.
Io ho un sistema un po' ibrido...
La procedura che genera il file (quindi la parte gestionale) è scritta ancora con il vecchio Delphi5

La procedura che ho utilizzato per la connessione con il webservice è stata scritta verso la fine del 2015 e a suo tempo avevo utilizzato Delphi XE7

Ora sto lavorando con Delphi RX1 (10.1 Berlin, non ho ancora installato la versione 10.2), ma non ho provato a ricompilare la procedura di connessione al webservice

Sto anche provando la beta della nuova versione Godzilla

Ecco anche spiegato il motivo dei file di appoggio...

Ciao
Luigi Siciliano
2017-02-01 12:05:36 UTC
Permalink
Post by alessandrob
La procedura che ho utilizzato per la connessione con il webservice è stata scritta verso la fine del 2015 e a suo tempo avevo utilizzato Delphi XE7
Allora potrebbe essere la versione di Delphi che utilizzo (Delphi2010)
che potrebbe essere troppo vecchia.

Grazie.

Ciao.
Daniele
2017-02-02 09:44:40 UTC
Permalink
Ciao alessandro,
in passato ho dovuto usare dei webservice, pero' in quei casi c'era
sempre un wsdl per accettare il login.
Se andava male, restituiva gli errori del caso.

Invece, in questo caso, il login come viene fatto ?
Ho visionato i vari file xml (anche i wsdl) ma non riesco a capire (o meglio
non trovo la parte dedicata al login).

Puoi dare qualche delucidazione?

Grazie

Ciao

Daniele
Luigi Siciliano
2017-02-05 16:24:20 UTC
Permalink
Post by alessandrob
il webservice è stata scritta verso la fine del 2015 e a suo tempo avevo utilizzato Delphi XE7
Ok, ho scaricato la versione di prova di Delphi 10.1 Berlin ed ha
funzionato al primo colpo :) evidentemente delphi2010 ha qualche
problema con i webservice :(

Adesso, però, mi rifiuta il file allegato con il codice 102 "L'ALLEGATO
NON E' UN FILE DI TIPO ZIP VALIDO: IL FILE NON E' STATO ACCOLTO"

???

Ho provato a creare il file .zip con 7zip e non va bene.
Ho provato a creare il file .zip con TotalCommander e non va bene.

Suggerimenti?

Grazie.

Ciao
Alberto Salvati
2017-02-06 07:48:10 UTC
Permalink
Post by Luigi Siciliano
Ok, ho scaricato la versione di prova di Delphi 10.1 Berlin ed ha
funzionato al primo colpo :) evidentemente delphi2010 ha qualche
problema con i webservice :(
Ho avuto un problema simile con indy (smtp) per gestire account gmail.
10 righe in d7: manco p'o kaz.
Le stesse 10 righe, copia,incolla, F9 in xe7: funzionato al primo colpo.
Post by Luigi Siciliano
Ho provato a creare il file .zip con 7zip e non va bene.
Ho provato a creare il file .zip con TotalCommander e non va bene.
..ehm..winzip?
Ancora, verifica bene QUALE ALGORITMO HAI USATO.

A.
Luigi Siciliano
2017-02-06 08:15:13 UTC
Permalink
Post by Alberto Salvati
..ehm..winzip?
Ancora, verifica bene QUALE ALGORITMO HAI USATO.
Inviato, era colpa dell'algoritmo (cioè mia) :(

Adesso passo alla verifica della ricevuta.

Grazie.

Ciao
Alberto Salvati
2017-02-06 08:21:39 UTC
Permalink
Post by Luigi Siciliano
Inviato, era colpa dell'algoritmo (cioè mia) :(
Adesso passo alla verifica della ricevuta.
Su, che ce la fai!

A.
alessandrob
2017-02-06 08:51:32 UTC
Permalink
Post by Luigi Siciliano
Post by Alberto Salvati
..ehm..winzip?
Ancora, verifica bene QUALE ALGORITMO HAI USATO.
Inviato, era colpa dell'algoritmo (cioè mia) :(
Adesso passo alla verifica della ricevuta.
Grazie.
Ciao
Bene!
Ormai ci sei!
Luigi Siciliano
2017-02-06 16:30:34 UTC
Permalink
Post by alessandrob
Bene!
Ormai ci sei!
Ok, ho verificato sia l'invio che la ricevuta di prova e funziona o
meglio mi risponde sempre che il file è stato scartato perché è già
stato inviato. Penso sia corretto, almeno spero. :)

Adesso, però non riesco a cifrare il pincode, mi spiego:
Ho provato questa procedura pubblicata qui
<http://www.disi.unige.it/person/FerranteM/delphiopenssl/decreto24062004.html>
ma mi da errore nella lettura del file SanitelCF.cer e non va avanti.

Ho provato a cifrare il pincode da riga di comando:
openssl rsautl -encrypt -in cf.txt -out cf.enc -inkey SanitelCF.cer
-certin -pkcs
ma mi viene fuori una cosa con caratteri che sembrano ideogrammi cinesi!?!

Naturalmente il pincode cifrato da me non coincide con il pincode
cifrato di esempio presente nel kit730.

Dove sto sbagliando?

Grazie.

Ciao.
alessandrob
2017-02-06 17:10:17 UTC
Permalink
Post by Luigi Siciliano
Ok, ho verificato sia l'invio che la ricevuta di prova e funziona o
meglio mi risponde sempre che il file è stato scartato perché è già
stato inviato. Penso sia corretto, almeno spero. :)
Se viene scartato dovresti poter leggere il motivo e quindi capire il motivo
Post by Luigi Siciliano
Ho provato questa procedura pubblicata qui
<http://www.disi.unige.it/person/FerranteM/delphiopenssl/decreto24062004.html>
ma mi da errore nella lettura del file SanitelCF.cer e non va avanti.
openssl rsautl -encrypt -in cf.txt -out cf.enc -inkey SanitelCF.cer
-certin -pkcs
ma mi viene fuori una cosa con caratteri che sembrano ideogrammi cinesi!?!
Naturalmente il pincode cifrato da me non coincide con il pincode
cifrato di esempio presente nel kit730.
La cifratura la faccio esattamente nello stesso modo.
Il risultato sono ideogrammi "cinesi": sono in realtà la codifica del pin o del codice fiscale in byte, ognuno poi visualizzato in base al suo codice ascii

Tieni presente che se la fai più volte ottieni sempre un risultato diverso...
L'unico modo per verificare se è corretto sarebbe quello di avere la chiave privata ed eseguire la decodifica, cosa che ovviamente non puoi fare.

Esistono riferimenti su internet su come crearsi una propria coppia di chiavi pubbliche e private e con queste eseguire sia la codifica e la decodifica; in questo caso non puoi sicuramente utilizzare il certificato fornito

Di sicuro il pincode cifrato disponibile nell'esempio non potrà essere uguale al tuo
Luigi Siciliano
2017-02-06 17:49:56 UTC
Permalink
Post by alessandrob
Post by Luigi Siciliano
Ok, ho verificato sia l'invio che la ricevuta di prova e funziona o
meglio mi risponde sempre che il file è stato scartato perché è già
stato inviato. Penso sia corretto, almeno spero. :)
Se viene scartato dovresti poter leggere il motivo e quindi capire il motivo
"E015" "il file risulta già inviato precedentemente ed elaborato"
Mah.
Post by alessandrob
Il risultato sono ideogrammi "cinesi": sono in realtà la codifica del pin o del codice fiscale in byte, ognuno poi visualizzato in base al suo codice ascii
Tieni presente che se la fai più volte ottieni sempre un risultato diverso...
Se provo a fare un invio di prova, durante la chiamata InviaFileMtom
viene fuori un errore "Carattere non valido nel contenuto di testo".

Ciao.
Luigi Siciliano
2017-02-06 18:18:37 UTC
Permalink
Post by alessandrob
La cifratura la faccio esattamente nello stesso modo.
Il risultato sono ideogrammi "cinesi": sono in realtà la codifica del pin o del codice fiscale in byte, ognuno poi visualizzato in base al suo codice ascii
Ho notato che nei files di prova ed anche nel file che dovrei
trasmettere i codici fiscali cifrati finiscono sempre con il carattere
"=" mentre nel pincifrato che ottengo questo non si verifica mai e c'è
sempre un qualche carattere non valido nel testo.

Credo che sto codificando con un set di caratteri differente ma, come
faccio a verificarlo e/o impostarlo da riga di comando?

Grazie.

Ciao.
oibaf
2021-01-19 11:13:18 UTC
Permalink
Salve a tutto il gruppo,
avrei la necessità di realizzare con Delphi XE l'invio telematico dei 730 per un gestionale di un amico Odontoiatra.
Fino ad ora lo faceva il Commercialista ma essendo cambiatala normativa da Gennaio 2021 ed essendo gli invii con cadenza mensile e non più annuale, il commercialista non glielo fa più, per cui mi ha chiesto di includerlo nel gestionale.
Ho ricevuto dalla Sogei il kit "kit730P_ver_20201218" con tutti i tracciati e gli endpoint, ma chiedevo se c'è qualcuno che ha già risolto e se è disposto a condividere il codice.
Grazie 1000 a tutti
Paolo di Biase
2021-01-20 13:47:40 UTC
Permalink
sono qui, se vuoi parliamone
oibaf
2021-01-20 16:03:41 UTC
Permalink
Post by Paolo di Biase
sono qui, se vuoi parliamone
oibaf
2021-01-20 16:05:24 UTC
Permalink
Post by Paolo di Biase
sono qui, se vuoi parliamone
Hai realizzato l'invio del file XML ? Hai del codice da condividere o spiegarmi come l'hai fatto?
Te ne sarei grato.

Ciao
Paolo di Biase
2021-01-20 16:18:13 UTC
Permalink
Post by oibaf
Post by Paolo di Biase
sono qui, se vuoi parliamone
Hai realizzato l'invio del file XML ? Hai del codice da condividere o spiegarmi come l'hai fatto?
Te ne sarei grato.
Ciao
contattami su ***@microtec.it
Gianvito Zonno
2021-02-01 21:46:58 UTC
Permalink
Post by Paolo di Biase
sono qui, se vuoi parliamone
Ciao,

@Paolo di Biase

avrei la stessa necessità di @oibaf.
Potresti darmi una grossa mano condividendo il tuo codice?

Grazie Mille
Leo Rizzi
2021-02-01 22:17:36 UTC
Permalink
@oibaf.

Hai risolto?
Sono bloccato e sto cercando qualcuno che possa darmi una mano anche con del codice funzionante.
Disponibile anche a collaborazioni retribuite

Grazie a chi volesse darmi una mano
Luigis
2021-02-02 09:07:19 UTC
Permalink
Post by Leo Rizzi
Hai risolto?
Sono bloccato e sto cercando qualcuno che possa darmi una mano anche con del codice funzionante.
Hai importato i webservices in Delphi?

Quali problemi riscontri?

Ciao.
Leo Rizzi
2021-02-02 12:02:32 UTC
Permalink
Post by Luigis
Post by Leo Rizzi
Hai risolto?
Sono bloccato e sto cercando qualcuno che possa darmi una mano anche con del codice funzionante.
Hai importato i webservices in Delphi?
Quali problemi riscontri?
Ciao.
Non mi sono mai intefacciato con i webservices e poichè ho urgenza di rivolvere
cercavo qualcosa di funzionante da utilizzare.

Non avendo molta dimestichezza con l'argomento ho paura di metterci una vita
a risolvere; anche perchè è da qualche anno che non tocco il delphi.

Credo di aver risolto la creazione del file XLM da inviare, ma mi manca
proprio il codice per la comunicazione col sistema TS.

Disposto anche a pagare.
Luigis
2021-02-02 14:27:02 UTC
Permalink
Post by Leo Rizzi
Non mi sono mai intefacciato con i webservices e poichè ho urgenza di rivolvere
cercavo qualcosa di funzionante da utilizzare.
Dal menu Component => ImportWSDL => Deplhi scegli il file contenuto nel
Kit730 e Delphi ti creerà una unit con dentro le procedure da utilizzare.
Post by Leo Rizzi
Non avendo molta dimestichezza con l'argomento ho paura di metterci una vita
a risolvere; anche perchè è da qualche anno che non tocco il delphi.
Ve varie versioni di Delphi sono un po diverse le une dalle altre.
Post by Leo Rizzi
Credo di aver risolto la creazione del file XLM da inviare, ma mi manca
proprio il codice per la comunicazione col sistema TS.
Io invio un file per un veterinario che una volta l'anno mi passa il
file che gli genera la sua procedura ed io glielo invio.

Che versione di Delphi usi?

Ciao.
Leo Rizzi
2021-02-02 15:49:08 UTC
Permalink
Post by Luigis
Post by Leo Rizzi
Non mi sono mai intefacciato con i webservices e poichè ho urgenza di rivolvere
cercavo qualcosa di funzionante da utilizzare.
Dal menu Component => ImportWSDL => Deplhi scegli il file contenuto nel
Kit730 e Delphi ti creerà una unit con dentro le procedure da utilizzare.
Post by Leo Rizzi
Non avendo molta dimestichezza con l'argomento ho paura di metterci una vita
a risolvere; anche perchè è da qualche anno che non tocco il delphi.
Ve varie versioni di Delphi sono un po diverse le une dalle altre.
Post by Leo Rizzi
Credo di aver risolto la creazione del file XLM da inviare, ma mi manca
proprio il codice per la comunicazione col sistema TS.
Io invio un file per un veterinario che una volta l'anno mi passa il
file che gli genera la sua procedura ed io glielo invio.
Che versione di Delphi usi?
Ciao.
XE7 e qualche volta il buon vecchio Delphi 7
Leo Rizzi
2021-03-24 20:37:35 UTC
Permalink
Post by Paolo di Biase
sono qui, se vuoi parliamone
Ciao,

posso contattarti in privato?
Alessandro B.
2021-03-25 06:27:03 UTC
Permalink
Post by Leo Rizzi
Post by Paolo di Biase
sono qui, se vuoi parliamone
Ciao,
posso contattarti in privato?
Ciao,
mi dispiace ma in questi tempi ho una serie di progetti che stanno partendo e non riesco a trovare il tempo neppure di leggere i messaggi e la posta.
alessandrob
2017-02-06 08:09:31 UTC
Permalink
Post by Luigi Siciliano
Ok, ho scaricato la versione di prova di Delphi 10.1 Berlin ed ha
funzionato al primo colpo :) evidentemente delphi2010 ha qualche
problema con i webservice :(
Bene!
Post by Luigi Siciliano
Adesso, però, mi rifiuta il file allegato con il codice 102 "L'ALLEGATO
NON E' UN FILE DI TIPO ZIP VALIDO: IL FILE NON E' STATO ACCOLTO"
Ho provato a creare il file .zip con 7zip e non va bene.
Ho provato a creare il file .zip con TotalCommander e non va bene.
Suggerimenti?
Posso confermarti che anche io utilizzo 7zip per la compressione (con parametri compressione ultra e formato zip)

Credo che il problema sia invece nel caricamento del file zip nella struttura dati per l'invio.

Per evitare problemi con unicode, io utilizzo una ansistring per il caricamento del file che successivamente va convertito in TByteDynArray che altro non è che un array di byte.

Ciao
Luigi Siciliano
2017-02-06 08:41:08 UTC
Permalink
Post by alessandrob
Per evitare problemi con unicode, io utilizzo una ansistring per il caricamento del file che successivamente va convertito in TByteDynArray che altro non è che un array di byte.
Infatti, il problema era proprio questa conversione.

Grazie.

Ciao.
Daniele
2017-02-02 09:34:48 UTC
Permalink
Ciao Luigi,
grazie a te mi sto appassionando a questo argomento .....
Naturalmente grazie anche ad alessandrob
Io utilizzo Delphi2010 ed anche con il tuo codice non riesco ugualmente a
connettermi :( ottengo lo stesso errore.
Scusami, non puoi utilizzare paro paro il codice di alessandrob per fare i
tuoi test perche'
- il codice non e' completo
- e' riferito alle sue esigenze.

Quello fornito e' un punto di partenza.
La parte interessante di quel codice, e che sono curioso come pochi di
sapere com'e', e' la

DoHTTPRIOHTTPWebNodeBeforePost

che pero' credo sia molto close (eheheheh).

Per il resto e' tutto ben spiegato.

Per riassumere, tieni presente da una scala da 0-10 il mio livello
e' -qualcosa, devi trovare da qualche parte in delphi2010 l'importatore
wsdl.
Il file da importare e' InvioTelematicoSpeseSanitarie730p.wsdl.
Una volta importato (fa tutto delphi) hai esposto (in ordine di
presentazione del file .pas)
- RicevutaInvio
- Proprietario
e
InvioTelematicoSS730pMtom = interface(IInvokable)
['{1F58756D-A2E0-C47D-0817-8E685DCE51B1}']
function inviaFileMtom(const nomeFileAllegato: tipoNomeFileAllegato;
const pincodeInvianteCifrato: string; const datiProprietario: proprietario;
const opzionale1: string; const opzionale2: string; const opzionale3:
string;
const documento: TByteDynArray): ricevutaInvio;
stdcall;
end;
function GetInvioTelematicoSS730pMtom(UseWSDL: Boolean=System.False; Addr:
string=''; HTTPRIO: THTTPRIO = nil): InvioTelematicoSS730pMtom;

Nel codice di alessandrob hai

if TargetTest
then F730 := GetInvioTelematicoSS730pMtom(
False,_Deb_SistemaTs_Send,HTTPRIO )
else F730 := GetInvioTelematicoSS730pMtom(
False,_Prd_SistemaTs_Send,HTTPRIO );

Come vedi se e' un test usa il link test altrimenti quello vero della sogei.

Infine, hai a disposizione il file

InvioTelematicoSpeseSanitarie730p_schema1.xsd

che ti permette di capire come dev'eesere fatto il file da inviare.

Scusami per la lungaggine.

Ciao

Daniele
alessandrob
2017-02-02 10:16:31 UTC
Permalink
Post by Daniele
Quello fornito e' un punto di partenza.
La parte interessante di quel codice, e che sono curioso come pochi di
sapere com'e', e' la
DoHTTPRIOHTTPWebNodeBeforePost
che pero' credo sia molto close (eheheheh).
Nulla di nascosto, non avevo incluso il pezzo di codice perché già fatto in un precedente post. Comunque te lo riporto qui sotto, anche con il riferimento di dove e come ho trovato la soluzione:

{}
{ --- Gestione Autenticazione --- }
// See more at: http://codeverge.com/embarcadero.delphi.webservices/how-do-i-use-basic-authenticat/1078800#sthash.Umf0FsWD.dpuf
{}
procedure TFrmStgHubSysTs.DoHTTPRIOHTTPWebNodeBeforePost( const HTTPReqResp: THTTPReqResp; Data: Pointer);
var S: string;
begin
{ --- Compone testo per Credenziali --- }
S := 'Authorization: Basic ' + EncodeString( FUserName + ':' + FPassword );

{ --- Inserisce Credenziali --- }
HttpAddRequestHeaders( Data, PChar(S), Length(S), HTTP_ADDREQ_FLAG_ADD );
end;
Daniele
2017-02-02 13:59:13 UTC
Permalink
Ciao,
Post by alessandrob
Nulla di nascosto, non avevo incluso il pezzo di codice perché già fatto
in un precedente post. Comunque te lo riporto qui sotto, anche con il
URKA, mi era scappato .....
Terza eta' incombe .....

Grazie e alla prossima ...

Ciao

Daniele
Luigi Siciliano
2017-02-03 10:59:19 UTC
Permalink
Post by Daniele
che ti permette di capire come dev'eesere fatto il file da inviare.
Il problema credo sia circoscritto al login che, secondo me, non supero.
Post by Daniele
Scusami per la lungaggine.
Non sei tu a doverti scusare (mi stai solo aiutando) ma io perché
continuo a non comprendere dove sto sbagliando.

Grazie.

Ciao.
Luigi Siciliano
2017-02-03 09:57:39 UTC
Permalink
Post by alessandrob
ricevuta := F730.inviaFileMtom( nomefileallegato,pincodeInvianteCifrato,datiproprietario,
opzionale1,opzionale2,opzionale3,documento );
Durante l'esecuzione di questa riga mi viene richiesto di inserire nel
lettore una card CNS. Credo perché non ho indicato alcun certificato di
autenticazione.

E' corretto?

Il certificato SanitelCF.cer presente nel kit dovrebbe servire soltanto
per cifrare il codice fiscale del proprietario e del paziente. o no?

Dopo ad aver installato il certificato e lo certo con certmgr.msc lo
ritrovo nel nodo "Altri utenti".

Grazie.

Ciao.
alessandrob
2017-02-03 13:09:12 UTC
Permalink
Post by Luigi Siciliano
Post by alessandrob
ricevuta := F730.inviaFileMtom( nomefileallegato,pincodeInvianteCifrato,datiproprietario,
opzionale1,opzionale2,opzionale3,documento );
Durante l'esecuzione di questa riga mi viene richiesto di inserire nel
lettore una card CNS. Credo perché non ho indicato alcun certificato di
autenticazione.
Il certificato SanitelCF.cer presente nel kit dovrebbe servire soltanto
per cifrare il codice fiscale del proprietario e del paziente. o no?
Ciao,
il certificato ti serve solo per cifrare il codice fiscale del mittente e dell'intestatario della fattura/scontrino e del pin code.

In non l'ho neppure installato sul mio sistema.

Per il login servono nome utente e password da passare al momento della chiamata nell'oggetto HTTPRIO (vedi la richiesta fatta da Daniele)
Luigi Siciliano
2017-02-03 13:56:48 UTC
Permalink
Post by alessandrob
il certificato ti serve solo per cifrare il codice fiscale del mittente e dell'intestatario della fattura/scontrino e del pin code.
Infatti, non capisco però perché mi viene presentata una dialog con
titolo "Sicurezza di Windows" "Smart card" "Selezionare un dispositivo
smart card" ed anche utilizzandola, alla fine mi viene sollevata
l'eccezione EDOMParseError con il messaggio "Per il documento XML è
necessario specificare un elemento di primo livello. Line: 0"
Post by alessandrob
Per il login servono nome utente e password da passare al momento della chiamata nell'oggetto HTTPRIO
Si, ho provato ad interrogarne l'esito modificando il codice come segue:
if not HttpAddRequestHeaders(Data, PChar(S), Length(S),
HTTP_ADDREQ_FLAG_ADD) then
ShowMessage('HttpAddRequestHeaders' + SysErrorMessage(GetLastError()));

e non mi viene segnalato nulla :(

Grazie.

Ciao.
Leo Rizzi
2021-02-27 09:39:46 UTC
Permalink
Post by alessandrob
Ti posto un po' di codice che utilizzo per eseguire l'invio sperando che ti possa aiutare.
Io utilizzo la tecnica di predisporre il file da inviare, zipparlo e predisporre un file di appoggio con i parametri per l'invio.
Successivamente richiamo la procedura che esegue l'invio vero e proprio
Il file di appoggio da cui leggere i dati per l'invio, viene letto con una mia estensione di TIniFile per non memorizzare le password in chiaro nel file di appoggio
Anche la risposta (che nel primo invio è sostanzialmente il protocollo) la ri-memorizzo nel file di appoggio, così poi ritorna al processo principale
Tra i parametri di passaggio ricevo l'informazione se utilizzare l'area di test o quella di produzione
procedure TFrmStgHubSysTs.SendToSistemaTs( FileIni: string; TargetTest: boolean );
var Ini: TTecnoSysIniFile;
FileToSend, DataToSend: string;
// Strumenti di Connessione
HTTPRIO: THTTPRIO;
F730: InvioTelematicoSS730pMtom;
// dati specifici
datiProprietario: proprietario;
nomefileallegato: tipoNomeFileAllegato;
pincodeInvianteCifrato: string;
opzionale1: string;
opzionale2: string;
opzionale3: string;
documento: TByteDynArray;
ricevuta: ricevutaInvio;
begin
{ --- Dati Proprietario --- }
datiProprietario := proprietario.Create;
{ --- Lettura File di Collegamento --- }
Ini := TTecnoSysIniFile.Create( FileIni );
{ --- File da Inviare --- }
FileToSend := Ini.ReadString( _SysTs_Sec_I,'Zip','' );
{ --- Dati Proprietario --- }
datiProprietario.codiceRegione := Ini.ReadString( _SysTs_Sec_I,'Reg','' );
datiProprietario.codiceAsl := Ini.ReadString( _SysTs_Sec_I,'Asl','' );
datiProprietario.codiceSSA := Ini.ReadString( _SysTs_Sec_I,'Pre','' );
datiProprietario.cfProprietario := Ini.ReadString( _SysTs_Sec_I,'Cfp','' );
{ --- PinCode Cifrato --- }
pincodeInvianteCifrato := Ini.ReadString( _SysTs_Sec_I,'Pin','' );
{ --- Credenziali --- }
FUserName := Ini.ReadPassword( _SysTs_Sec_I,'Usr','' );
FPassword := Ini.ReadPassword( _SysTs_Sec_I,'Pwd','' );
{ --- Libera --- }
Ini.Free;
{ --- Caricamento file nel buffer di trasmissione --- }
DataToSend := ReadFileToSend(FileToSend);
{ --- Trasferimento nel Buffer --- }
documento := StrToByteDynArray( DataToSend );
{ --- Nome Allegato --- }
nomefileallegato := ExtractFileName( FileToSend );
{ --- Dati Opzionali --- }
opzionale1 := '';
opzionale2 := '';
opzionale3 := '';
{ --- Supporto per Collegamento --- }
HTTPRIO := THTTPRIO.Create(Self);
{ --- Consente anche utilizzo di Certificati non verificati --- }
HTTPRIO.HTTPWebNode.InvokeOptions := [soPickFirstClientCertificate,soIgnoreInvalidCerts];
{ --- Metodo per passare le credenziali di accesso --- }
HTTPRIO.HTTPWebNode.OnBeforePost := DoHTTPRIOHTTPWebNodeBeforePost;
{ --- Collegamento Area Test / Produzione --- }
if TargetTest
then F730 := GetInvioTelematicoSS730pMtom( False,_Deb_SistemaTs_Send,HTTPRIO )
else F730 := GetInvioTelematicoSS730pMtom( False,_Prd_SistemaTs_Send,HTTPRIO );
{ --- Esegue Invio --- }
ricevuta := F730.inviaFileMtom( nomefileallegato,pincodeInvianteCifrato,datiproprietario,
opzionale1,opzionale2,opzionale3,documento );
{ --- Scrittura File di Collegamento --- }
Ini := TTecnoSysIniFile.Create( FileIni );
{ --- Dump Risposta --- }
Ini.WriteString( _SysTs_Sec_O,'Protocollo',Ricevuta.protocollo );
Ini.WriteString( _SysTs_Sec_O,'dataAccoglienza',Ricevuta.dataAccoglienza );
Ini.WriteString( _SysTs_Sec_O,'nomeFileAllegato',Ricevuta.nomeFileAllegato );
Ini.WriteString( _SysTs_Sec_O,'dimensioneFileAllegato',Ricevuta.dimensioneFileAllegato );
Ini.WriteString( _SysTs_Sec_O,'codiceEsito',Ricevuta.codiceEsito );
Ini.WriteString( _SysTs_Sec_O,'descrizioneEsito',Ricevuta.descrizioneEsito );
Ini.WriteString( _SysTs_Sec_O,'idErrore',Ricevuta.idErrore );
{ --- Libera --- }
Ini.Free;
end;
Ciao Alessandro,

leggo con interesse il tuo codice.
potresti indicarmi dove vengono definiti i seguenti tipi?

// dati specifici
datiProprietario: proprietario;
nomefileallegato: tipoNomeFileAllegato;
ricevuta: ricevutaInvio;


Grazie Mille
Leo Rizzi
2021-02-27 10:36:15 UTC
Permalink
Post by alessandrob
Ti posto un po' di codice che utilizzo per eseguire l'invio sperando che ti possa aiutare.
Io utilizzo la tecnica di predisporre il file da inviare, zipparlo e predisporre un file di appoggio con i parametri per l'invio.
Successivamente richiamo la procedura che esegue l'invio vero e proprio
Il file di appoggio da cui leggere i dati per l'invio, viene letto con una mia estensione di TIniFile per non memorizzare le password in chiaro nel file di appoggio
Anche la risposta (che nel primo invio è sostanzialmente il protocollo) la ri-memorizzo nel file di appoggio, così poi ritorna al processo principale
Tra i parametri di passaggio ricevo l'informazione se utilizzare l'area di test o quella di produzione
procedure TFrmStgHubSysTs.SendToSistemaTs( FileIni: string; TargetTest: boolean );
var Ini: TTecnoSysIniFile;
FileToSend, DataToSend: string;
// Strumenti di Connessione
HTTPRIO: THTTPRIO;
F730: InvioTelematicoSS730pMtom;
// dati specifici
datiProprietario: proprietario;
nomefileallegato: tipoNomeFileAllegato;
pincodeInvianteCifrato: string;
opzionale1: string;
opzionale2: string;
opzionale3: string;
documento: TByteDynArray;
ricevuta: ricevutaInvio;
begin
{ --- Dati Proprietario --- }
datiProprietario := proprietario.Create;
{ --- Lettura File di Collegamento --- }
Ini := TTecnoSysIniFile.Create( FileIni );
{ --- File da Inviare --- }
FileToSend := Ini.ReadString( _SysTs_Sec_I,'Zip','' );
{ --- Dati Proprietario --- }
datiProprietario.codiceRegione := Ini.ReadString( _SysTs_Sec_I,'Reg','' );
datiProprietario.codiceAsl := Ini.ReadString( _SysTs_Sec_I,'Asl','' );
datiProprietario.codiceSSA := Ini.ReadString( _SysTs_Sec_I,'Pre','' );
datiProprietario.cfProprietario := Ini.ReadString( _SysTs_Sec_I,'Cfp','' );
{ --- PinCode Cifrato --- }
pincodeInvianteCifrato := Ini.ReadString( _SysTs_Sec_I,'Pin','' );
{ --- Credenziali --- }
FUserName := Ini.ReadPassword( _SysTs_Sec_I,'Usr','' );
FPassword := Ini.ReadPassword( _SysTs_Sec_I,'Pwd','' );
{ --- Libera --- }
Ini.Free;
{ --- Caricamento file nel buffer di trasmissione --- }
DataToSend := ReadFileToSend(FileToSend);
{ --- Trasferimento nel Buffer --- }
documento := StrToByteDynArray( DataToSend );
{ --- Nome Allegato --- }
nomefileallegato := ExtractFileName( FileToSend );
{ --- Dati Opzionali --- }
opzionale1 := '';
opzionale2 := '';
opzionale3 := '';
{ --- Supporto per Collegamento --- }
HTTPRIO := THTTPRIO.Create(Self);
{ --- Consente anche utilizzo di Certificati non verificati --- }
HTTPRIO.HTTPWebNode.InvokeOptions := [soPickFirstClientCertificate,soIgnoreInvalidCerts];
{ --- Metodo per passare le credenziali di accesso --- }
HTTPRIO.HTTPWebNode.OnBeforePost := DoHTTPRIOHTTPWebNodeBeforePost;
{ --- Collegamento Area Test / Produzione --- }
if TargetTest
then F730 := GetInvioTelematicoSS730pMtom( False,_Deb_SistemaTs_Send,HTTPRIO )
else F730 := GetInvioTelematicoSS730pMtom( False,_Prd_SistemaTs_Send,HTTPRIO );
{ --- Esegue Invio --- }
ricevuta := F730.inviaFileMtom( nomefileallegato,pincodeInvianteCifrato,datiproprietario,
opzionale1,opzionale2,opzionale3,documento );
{ --- Scrittura File di Collegamento --- }
Ini := TTecnoSysIniFile.Create( FileIni );
{ --- Dump Risposta --- }
Ini.WriteString( _SysTs_Sec_O,'Protocollo',Ricevuta.protocollo );
Ini.WriteString( _SysTs_Sec_O,'dataAccoglienza',Ricevuta.dataAccoglienza );
Ini.WriteString( _SysTs_Sec_O,'nomeFileAllegato',Ricevuta.nomeFileAllegato );
Ini.WriteString( _SysTs_Sec_O,'dimensioneFileAllegato',Ricevuta.dimensioneFileAllegato );
Ini.WriteString( _SysTs_Sec_O,'codiceEsito',Ricevuta.codiceEsito );
Ini.WriteString( _SysTs_Sec_O,'descrizioneEsito',Ricevuta.descrizioneEsito );
Ini.WriteString( _SysTs_Sec_O,'idErrore',Ricevuta.idErrore );
{ --- Libera --- }
Ini.Free;
end;
Ciao Alessandro,

perdona la mia insistenza.
Ho dovuto reimportare tutti i file wsdl e sembra andare meglio se non fosse
per il tipo

// dati specifici
documento: TByteDynArray;

Non riesco proprio a definire il tipo TByteDynArray;

potresti illuminarmi?

Grazie Mille
Leo
Luigis
2021-02-27 15:32:13 UTC
Permalink
Post by Leo Rizzi
Non riesco proprio a definire il tipo TByteDynArray;
Con Delphi 10.3 Rio prova a mettere nelle uses il file "Types".

Ciao.
Leo Rizzi
2021-02-28 12:45:01 UTC
Permalink
Post by Luigis
Post by Leo Rizzi
Non riesco proprio a definire il tipo TByteDynArray;
Con Delphi 10.3 Rio prova a mettere nelle uses il file "Types".
Ciao.
Perfetto, mancava proprio quella specifica nelle uses

Grazie Mille
Leo Rizzi
2021-02-28 13:00:46 UTC
Permalink
Post by alessandrob
Ti posto un po' di codice che utilizzo per eseguire l'invio sperando che ti possa aiutare.
Io utilizzo la tecnica di predisporre il file da inviare, zipparlo e predisporre un file di appoggio con i parametri per l'invio.
Successivamente richiamo la procedura che esegue l'invio vero e proprio
Il file di appoggio da cui leggere i dati per l'invio, viene letto con una mia estensione di TIniFile per non memorizzare le password in chiaro nel file di appoggio
Anche la risposta (che nel primo invio è sostanzialmente il protocollo) la ri-memorizzo nel file di appoggio, così poi ritorna al processo principale
Tra i parametri di passaggio ricevo l'informazione se utilizzare l'area di test o quella di produzione
procedure TFrmStgHubSysTs.SendToSistemaTs( FileIni: string; TargetTest: boolean );
var Ini: TTecnoSysIniFile;
FileToSend, DataToSend: string;
// Strumenti di Connessione
HTTPRIO: THTTPRIO;
F730: InvioTelematicoSS730pMtom;
// dati specifici
datiProprietario: proprietario;
nomefileallegato: tipoNomeFileAllegato;
pincodeInvianteCifrato: string;
opzionale1: string;
opzionale2: string;
opzionale3: string;
documento: TByteDynArray;
ricevuta: ricevutaInvio;
begin
{ --- Dati Proprietario --- }
datiProprietario := proprietario.Create;
{ --- Lettura File di Collegamento --- }
Ini := TTecnoSysIniFile.Create( FileIni );
{ --- File da Inviare --- }
FileToSend := Ini.ReadString( _SysTs_Sec_I,'Zip','' );
{ --- Dati Proprietario --- }
datiProprietario.codiceRegione := Ini.ReadString( _SysTs_Sec_I,'Reg','' );
datiProprietario.codiceAsl := Ini.ReadString( _SysTs_Sec_I,'Asl','' );
datiProprietario.codiceSSA := Ini.ReadString( _SysTs_Sec_I,'Pre','' );
datiProprietario.cfProprietario := Ini.ReadString( _SysTs_Sec_I,'Cfp','' );
{ --- PinCode Cifrato --- }
pincodeInvianteCifrato := Ini.ReadString( _SysTs_Sec_I,'Pin','' );
{ --- Credenziali --- }
FUserName := Ini.ReadPassword( _SysTs_Sec_I,'Usr','' );
FPassword := Ini.ReadPassword( _SysTs_Sec_I,'Pwd','' );
{ --- Libera --- }
Ini.Free;
{ --- Caricamento file nel buffer di trasmissione --- }
DataToSend := ReadFileToSend(FileToSend);
{ --- Trasferimento nel Buffer --- }
documento := StrToByteDynArray( DataToSend );
{ --- Nome Allegato --- }
nomefileallegato := ExtractFileName( FileToSend );
{ --- Dati Opzionali --- }
opzionale1 := '';
opzionale2 := '';
opzionale3 := '';
{ --- Supporto per Collegamento --- }
HTTPRIO := THTTPRIO.Create(Self);
{ --- Consente anche utilizzo di Certificati non verificati --- }
HTTPRIO.HTTPWebNode.InvokeOptions := [soPickFirstClientCertificate,soIgnoreInvalidCerts];
{ --- Metodo per passare le credenziali di accesso --- }
HTTPRIO.HTTPWebNode.OnBeforePost := DoHTTPRIOHTTPWebNodeBeforePost;
{ --- Collegamento Area Test / Produzione --- }
if TargetTest
then F730 := GetInvioTelematicoSS730pMtom( False,_Deb_SistemaTs_Send,HTTPRIO )
else F730 := GetInvioTelematicoSS730pMtom( False,_Prd_SistemaTs_Send,HTTPRIO );
{ --- Esegue Invio --- }
ricevuta := F730.inviaFileMtom( nomefileallegato,pincodeInvianteCifrato,datiproprietario,
opzionale1,opzionale2,opzionale3,documento );
{ --- Scrittura File di Collegamento --- }
Ini := TTecnoSysIniFile.Create( FileIni );
{ --- Dump Risposta --- }
Ini.WriteString( _SysTs_Sec_O,'Protocollo',Ricevuta.protocollo );
Ini.WriteString( _SysTs_Sec_O,'dataAccoglienza',Ricevuta.dataAccoglienza );
Ini.WriteString( _SysTs_Sec_O,'nomeFileAllegato',Ricevuta.nomeFileAllegato );
Ini.WriteString( _SysTs_Sec_O,'dimensioneFileAllegato',Ricevuta.dimensioneFileAllegato );
Ini.WriteString( _SysTs_Sec_O,'codiceEsito',Ricevuta.codiceEsito );
Ini.WriteString( _SysTs_Sec_O,'descrizioneEsito',Ricevuta.descrizioneEsito );
Ini.WriteString( _SysTs_Sec_O,'idErrore',Ricevuta.idErrore );
{ --- Libera --- }
Ini.Free;
end;
Ciao, sto prendendo spunto dal tuo codice,
ma non riesco a capire dov'è definita la procedura

"ReadFileToSend(FileToSend)"

quando scrivi:
{ --- Caricamento file nel buffer di trasmissione --- }
DataToSend := ReadFileToSend(FileToSend);

inoltre in quale unit trovo la procedura "StrToByteDynArray"

{ --- Trasferimento nel Buffer --- }
documento := StrToByteDynArray( DataToSend );

Grazie Mille per il tuo aiuto

Ciao
Alessandro B.
2021-02-28 15:46:16 UTC
Permalink
Post by Leo Rizzi
Ciao, sto prendendo spunto dal tuo codice,
ma non riesco a capire dov'è definita la procedura
"ReadFileToSend(FileToSend)"
E' una procedura che ho scritto io... serve a leggere un file e a memorizzarlo in una stringa
(io utilizzo in questo caso uno stream)
La definizione di TTecnoString è
TTecnoString = AnsiString;

{}
{ --- }
{}
function ReadFileToSend( FileZip: TTecnoString ): TTecnoString;
var StringStream: TStringStream;
FileStream : TFileStream;
Bytes: TBytes;
FileData: TTecnoString;
begin
{ --- Apertura Stream su File --- }
FileStream:= TFileStream.Create( FileZip,fmOpenRead );

{ --- Stream Stringa di Destinazione --- }
StringStream := TStringStream.Create( '' );

try
{ --- Copia Stream --- }
StringStream.CopyFrom( FileStream,FileStream.Size );

{ --- Lettura file su Stringa --- }
FileData := StringStream.DataString;
finally
StringStream.Free;
FileStream.Free;
end;

{ --- Risultato --- }
Result := FileData;
end;
Post by Leo Rizzi
{ --- Caricamento file nel buffer di trasmissione --- }
DataToSend := ReadFileToSend(FileToSend);
inoltre in quale unit trovo la procedura "StrToByteDynArray"
{ --- Trasferimento nel Buffer --- }
documento := StrToByteDynArray( DataToSend );
Grazie Mille per il tuo aiuto
Ciao
Alessandro B.
2021-02-28 15:48:33 UTC
Permalink
Post by alessandrob
{ --- Caricamento file nel buffer di trasmissione --- }
DataToSend := ReadFileToSend(FileToSend);
inoltre in quale unit trovo la procedura "StrToByteDynArray"
{ --- Trasferimento nel Buffer --- }
documento := StrToByteDynArray( DataToSend );
Anche questa una mia procedura di conversione:
N.B. TTecnoString è una AnsiString

{}
{ --- Conversione a Array di Byte (dinamico) --- }
{}
function StrToByteDynArray( S: TTecnoString ): TByteDynArray;
var A: TByteDynArray;
i: integer;
begin
{ --- Assegna Dimensione --- }
SetLength( A,StrLength(S) );

{ --- Ricopia singolo carattere / byte --- }
for i := 1 to Length(S) do
A[I-1] := Ord( StrSubChr( S,i ) );

{ --- Risultato --- }
Result := A;
end;
Leo Rizzi
2021-02-28 17:10:53 UTC
Permalink
Post by Alessandro B.
Post by alessandrob
{ --- Caricamento file nel buffer di trasmissione --- }
DataToSend := ReadFileToSend(FileToSend);
inoltre in quale unit trovo la procedura "StrToByteDynArray"
{ --- Trasferimento nel Buffer --- }
documento := StrToByteDynArray( DataToSend );
N.B. TTecnoString è una AnsiString
{}
{ --- Conversione a Array di Byte (dinamico) --- }
{}
function StrToByteDynArray( S: TTecnoString ): TByteDynArray;
var A: TByteDynArray;
i: integer;
begin
{ --- Assegna Dimensione --- }
SetLength( A,StrLength(S) );
{ --- Ricopia singolo carattere / byte --- }
for i := 1 to Length(S) do
A[I-1] := Ord( StrSubChr( S,i ) );
{ --- Risultato --- }
Result := A;
end;
Grazie Infinite,
sei davvero gentilissimo

approfitto per chiederti nelle due procedure

GetInvioTelematicoSS730pMtom( False,_Deb_SistemaTs_Send,HTTPRIO )
GetInvioTelematicoSS730pMtom( False,_Prd_SistemaTs_Send,HTTPRIO );

le due stringhe
_Deb_SistemaTs_Send e
_Prd_SistemaTs_Send

Cosa devono contenere?

Grazie ancora
Alessandro B.
2021-02-28 18:00:37 UTC
Permalink
Post by Leo Rizzi
approfitto per chiederti nelle due procedure
GetInvioTelematicoSS730pMtom( False,_Deb_SistemaTs_Send,HTTPRIO )
GetInvioTelematicoSS730pMtom( False,_Prd_SistemaTs_Send,HTTPRIO );
le due stringhe
_Deb_SistemaTs_Send e
_Prd_SistemaTs_Send
Cosa devono contenere?
Le utilizzo per indirizzare l'area test e l'area produzione

resourcestring
_Deb_SistemaTs_Send = 'https://invioss730ptest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort';
_Prd_SistemaTs_Send = 'https://invioss730p.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort';
Leo Rizzi
2021-02-28 18:08:24 UTC
Permalink
Post by Alessandro B.
Post by Leo Rizzi
approfitto per chiederti nelle due procedure
GetInvioTelematicoSS730pMtom( False,_Deb_SistemaTs_Send,HTTPRIO )
GetInvioTelematicoSS730pMtom( False,_Prd_SistemaTs_Send,HTTPRIO );
le due stringhe
_Deb_SistemaTs_Send e
_Prd_SistemaTs_Send
Cosa devono contenere?
Le utilizzo per indirizzare l'area test e l'area produzione
resourcestring
_Deb_SistemaTs_Send = 'https://invioss730ptest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort';
_Prd_SistemaTs_Send = 'https://invioss730p.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort';
Grazie Infinite
Leo Rizzi
2021-03-21 16:01:55 UTC
Permalink
Post by Alessandro B.
Post by Leo Rizzi
approfitto per chiederti nelle due procedure
GetInvioTelematicoSS730pMtom( False,_Deb_SistemaTs_Send,HTTPRIO )
GetInvioTelematicoSS730pMtom( False,_Prd_SistemaTs_Send,HTTPRIO );
le due stringhe
_Deb_SistemaTs_Send e
_Prd_SistemaTs_Send
Cosa devono contenere?
Le utilizzo per indirizzare l'area test e l'area produzione
resourcestring
_Deb_SistemaTs_Send = 'https://invioss730ptest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort';
_Prd_SistemaTs_Send = 'https://invioss730p.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort';
Ciao Alessandro,
ho messo su una piccola form per l'invio al sistema TS secondo i tuoi suggerimenti.
Quando provo a mandare il file.zip con la tua procedura "SendToSistemaTs (FileIni: string; TargetTest: boolean )" mi compare il seguente errore:

Exception class ESOAPHTTPException with message 'Richiesto certificato per completare l'autenticazione del client - URL:https://invioss730ptest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort - SOAPAction:""'

Nonostante io abbia installato il file "SanitelCF.cer"

Dove sbaglio?
Se non fosse così di disturbo potrei inviarti il progetto magari gli dai un'occhiata?

Grazie Mille
Leo
Alessandro B.
2021-03-25 06:34:11 UTC
Permalink
Post by Leo Rizzi
Post by Alessandro B.
Post by Leo Rizzi
approfitto per chiederti nelle due procedure
GetInvioTelematicoSS730pMtom( False,_Deb_SistemaTs_Send,HTTPRIO )
GetInvioTelematicoSS730pMtom( False,_Prd_SistemaTs_Send,HTTPRIO );
le due stringhe
_Deb_SistemaTs_Send e
_Prd_SistemaTs_Send
Cosa devono contenere?
Le utilizzo per indirizzare l'area test e l'area produzione
resourcestring
_Deb_SistemaTs_Send = 'https://invioss730ptest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort';
_Prd_SistemaTs_Send = 'https://invioss730p.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort';
Ciao Alessandro,
ho messo su una piccola form per l'invio al sistema TS secondo i tuoi suggerimenti.
Exception class ESOAPHTTPException with message 'Richiesto certificato per completare l'autenticazione del client - URL:https://invioss730ptest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort - SOAPAction:""'
Nonostante io abbia installato il file "SanitelCF.cer"
Dove sbaglio?
Se non fosse così di disturbo potrei inviarti il progetto magari gli dai un'occhiata?
Grazie Mille
Leo
Ho avuto anch'io una serie di problemi con i certificati all'inizio, risolti poi utilizzando una versione aggiornata delle librerie libeay32 e libssl32
Leo Rizzi
2021-03-21 18:03:58 UTC
Permalink
Post by Alessandro B.
Post by Leo Rizzi
approfitto per chiederti nelle due procedure
GetInvioTelematicoSS730pMtom( False,_Deb_SistemaTs_Send,HTTPRIO )
GetInvioTelematicoSS730pMtom( False,_Prd_SistemaTs_Send,HTTPRIO );
le due stringhe
_Deb_SistemaTs_Send e
_Prd_SistemaTs_Send
Cosa devono contenere?
Le utilizzo per indirizzare l'area test e l'area produzione
resourcestring
_Deb_SistemaTs_Send = 'https://invioss730ptest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort';
_Prd_SistemaTs_Send = 'https://invioss730p.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort';
Ciao @Alessandro B.

nella tua porzione di codice

{ --- Dati Proprietario --- }
datiProprietario.codiceRegione := Ini.ReadString( _SysTs_Sec_I,'Reg','' );
datiProprietario.codiceAsl := Ini.ReadString( _SysTs_Sec_I,'Asl','' );
datiProprietario.codiceSSA := Ini.ReadString( _SysTs_Sec_I,'Pre','' );
datiProprietario.cfProprietario := Ini.ReadString( _SysTs_Sec_I,'Cfp','' );

sto riscontrando alcuni problemi.
"datiProprietario.codiceRegione"
"datiProprietario.codiceAsl "

sono di tipo "varChar3Type" quindi risco a passarli semplicemente scrivendo

datiProprietario.codiceRegione := varChar3Type (Ini.ReadString( _SysTs_Sec_I,'Reg','' ));
datiProprietario.codiceAsl := varChar3Type (Ini.ReadString( _SysTs_Sec_I,'Asl','' ));

"datiProprietario.codiceSSA" è di tipo codSsaType
e la conversione codSsaType (Ini.ReadString( _SysTs_Sec_I,'Pre','' ));
non va

datiProprietario.cfProprietario è di tipo cfType
e la conversione cfType (Ini.ReadString( _SysTs_Sec_I,'Cfp','' ));
non va

L'eseguibile riesco a compilarlo tranquillamente ma se provo ad effettuare l'invio
mi copaiono i seguenti errori

cvc-simple-type 1: element codiceSSA value '456' in snot a valid instance of type
analogamente per cfProprietario

Potresti darmi delle dritte per bypassare il problema?

Grazie Mille
Leo Rizzi
2021-02-02 16:06:24 UTC
Permalink
Post by Giacomo Degli Esposti
[...]
Post by Luigi Siciliano
InvioTelematicoSS730pMtom = interface(IInvokable)
['{1F58756D-A2E0-C47D-0817-8E685DCE51B1}']
tipoNomeFileAllegato;
const pincodeInvianteCifrato: string;
const datiProprietario: TProprietario;
const opzionale1: string;
const opzionale2: string;
const opzionale3: string;
TRicevutaInvio; stdcall;
end;
[...]
Post by Luigi Siciliano
function GetInvioTelematicoSS730pMtom(UseWSDL: Boolean=System.False;
Addr: string=''; HTTPRIO: THTTPRIO = nil): InvioTelematicoSS730pMtom;
[...]
Post by Luigi Siciliano
TObject);
const
fnfile = 'Veterinario.zip';
sPinCode = 'e4XbRBmI';
var
Proprietario: TProprietario;
Documento: TByteDynArray;
Ricevuta: TRicevutaInvio;
Invio: InvioTelematicoSS730pMtom;
begin
Proprietario := TProprietario.Create;
Proprietario.cfProprietario := sPinCode;
Documento := FileToByteArray(fnFile);
invio := GetInvioTelematicoSS730pMtom();
// Fin qui ci arriva ma come leggo la ricevuta restituita?
prova con ...
Ricevuta := invio.inviaFileMtom( ... );
Post by Luigi Siciliano
CodiceEsito := Ricevuta.CodiceEsito ??????
end;
ciao
Giacomo
Ciao Giacomo,

nella funzione

function inviaFileMtom(const nomeFileAllegato:tipoNomeFileAllegato;
const pincodeInvianteCifrato: string;
const datiProprietario: TProprietario;
const opzionale1: string;
const opzionale2: string;
const opzionale3: string;
const documento: TByteDynArray):
TRicevutaInvio; stdcall;
end;

come definisco i seguenti Tipi?

tipoNomeFileAllegato
TProprietario
TRicevutaInvio

Potresti postarmi un codice più completo di esempio?

Grazie Mille
Luigis
2021-02-02 16:27:59 UTC
Permalink
Post by Leo Rizzi
come definisco i seguenti Tipi?
tipoNomeFileAllegato
TProprietario
TRicevutaInvio
Potresti postarmi un codice più completo di esempio?
Questi tipi sono definiti nel file
"InvioTelematicoSpeseSanitarie730p.pas" che ti genera Delphi stesso con
l'importazione del WDSL.
Ogni versione di Delphi te ne genererà uno diverso. Anche perché legato
ai percorsi di installazione e di posizione del file WDSL scaricato da
Tessera Sanitaria.

Io ho Delphi2010 Professional che genera un file che poi non funziona :(

Con Delphi 10.1 Trial il WDSl importato funzionava ma lo stesso codice
con Delphi 10.3 Rio Community non funziona :(

Con Delphi 10.3 Rio Community, reimportando il WDSL, e cambiando la
parte di codice con cui si passa la username e la password, rifunziona.

E' necessario che sia tu ad importare il WDSL con la tua installazione
di Delphi.

Ciao.
Gianvito Zonno
2021-02-02 16:42:26 UTC
Permalink
Post by Luigis
Post by Leo Rizzi
come definisco i seguenti Tipi?
tipoNomeFileAllegato
TProprietario
TRicevutaInvio
Potresti postarmi un codice più completo di esempio?
Questi tipi sono definiti nel file
"InvioTelematicoSpeseSanitarie730p.pas" che ti genera Delphi stesso con
l'importazione del WDSL.
Ogni versione di Delphi te ne genererà uno diverso. Anche perché legato
ai percorsi di installazione e di posizione del file WDSL scaricato da
Tessera Sanitaria.
Io ho Delphi2010 Professional che genera un file che poi non funziona :(
Con Delphi 10.1 Trial il WDSl importato funzionava ma lo stesso codice
con Delphi 10.3 Rio Community non funziona :(
Con Delphi 10.3 Rio Community, reimportando il WDSL, e cambiando la
parte di codice con cui si passa la username e la password, rifunziona.
E' necessario che sia tu ad importare il WDSL con la tua installazione
di Delphi.
Ciao.
Mi stai dicendo che devo cercare un file "InvioTelematicoSpeseSanitarie730p.wsdl"
compatibile con la mia versione di Delphi?

Mi confermi che con Delphi 10.1 Berlin i tre tipi

- tipoNomeFileAllegato
- TProprietario
- TRicevutaInvio

vengono definiti?
Luigis
2021-02-02 17:24:50 UTC
Permalink
Post by Gianvito Zonno
Mi stai dicendo che devo cercare un file "InvioTelematicoSpeseSanitarie730p.wsdl"
compatibile con la mia versione di Delphi?
No, non ti dico di cercarne uno compatibile con la tua versione ma di
*importarlo* con la tua versione.

In pratica, ti sto dicendo che dall'interno dell'ambiente di lavoro di
Delphi in tuo possesso vai al menu "Component", quindi selezioni la voce
"Import WDSL" e dopo inserisci il percorso dove si trova il file
"InvioTelematicoSpeseSanitarie730p.wsdl".

Poi ripeti l'operazione anche per i file
"InterrogazionePuntuale730Service.wsdl", per il file
"EsitoInvioDatiSpesa730Service.wsdl", per il file
"RicevutaPdf730Service.wsdl" e per il file "DettaglioErrori730Service.wsdl".

Ci sino anche altri files di tipo WDSL ma, non puoi fare a meno di
questi file per Inviare, per conoscere l'esito dell'invio, per ottenere
la ricevuta dell'invio effettuato e per conoscere, eventualmente, quali
errori contiene il tuo invio.
Post by Gianvito Zonno
Mi confermi che con Delphi 10.1 Berlin i tre tipi
- tipoNomeFileAllegato
- TProprietario
- TRicevutaInvio
vengono definiti?
Si, vengono definiti *durante* l'importazione dei file .WDSL che ti ho
detto sopra e che metterai tra le uses del tuo progetto.

Ciao.
Leo Rizzi
2021-02-02 22:01:21 UTC
Permalink
Post by Luigis
Post by Gianvito Zonno
Mi stai dicendo che devo cercare un file "InvioTelematicoSpeseSanitarie730p.wsdl"
compatibile con la mia versione di Delphi?
No, non ti dico di cercarne uno compatibile con la tua versione ma di
*importarlo* con la tua versione.
In pratica, ti sto dicendo che dall'interno dell'ambiente di lavoro di
Delphi in tuo possesso vai al menu "Component", quindi selezioni la voce
"Import WDSL" e dopo inserisci il percorso dove si trova il file
"InvioTelematicoSpeseSanitarie730p.wsdl".
Poi ripeti l'operazione anche per i file
"InterrogazionePuntuale730Service.wsdl", per il file
"EsitoInvioDatiSpesa730Service.wsdl", per il file
"RicevutaPdf730Service.wsdl" e per il file "DettaglioErrori730Service.wsdl".
Ci sino anche altri files di tipo WDSL ma, non puoi fare a meno di
questi file per Inviare, per conoscere l'esito dell'invio, per ottenere
la ricevuta dell'invio effettuato e per conoscere, eventualmente, quali
errori contiene il tuo invio.
Post by Gianvito Zonno
Mi confermi che con Delphi 10.1 Berlin i tre tipi
- tipoNomeFileAllegato
- TProprietario
- TRicevutaInvio
vengono definiti?
Si, vengono definiti *durante* l'importazione dei file .WDSL che ti ho
detto sopra e che metterai tra le uses del tuo progetto.
Ciao.
Eccomi ancora a disturbare,

Ho provato ad importare tutti i file WSDL

- EsitoInvioDatiSpesa730Service.wsdl
- DettaglioErrori730Service.wsdl
- DettaglioSegnalazione730Service.wsdl
- EsitoInvioDatiSpesa730Service.wsdl
- InterrogazionePuntuale730Service.wsdl
- ReportMensile730Service.wsdl
- ReportSegnalazioni730Service.wsdl
- RicevutaPdf730Service.wsdl

Ma nei file .pas che vengono creati i vari tipi
- tipoNomeFileAllegato
- TProprietario
- TRicevutaInvio

Non vengono definiti.
Dove sbaglio ?

Grazie Mille
Luigis
2021-02-03 17:39:07 UTC
Permalink
Post by Leo Rizzi
Ma nei file .pas che vengono creati i vari tipi
- tipoNomeFileAllegato
- TProprietario
- TRicevutaInvio
Non vengono definiti.
Dove sbaglio ?
a leggere/scrivere ;)

I tipi sono:

1) tipoNomeFileAllegato
2) proprietario (nel file WDSL manca la T iniziale)
3) ricevutaInvio (nel file WDSL manca la T iniziale)

sono definiti nel file "InvioTelematicoSpeseSanitarie730p.pas" che ti ha
generato
Post by Leo Rizzi
Grazie Mille
Mi accorgo adesso che stai seguendo un vecchio thread del 2017, in
questo thread troverai del codice funzionante che stai cercando e che
postò "Alessandro B." e che è stato di formidabile aiuto per definire le
nostre trasmissioni :)

Ciao.
Leo Rizzi
2021-02-03 18:13:10 UTC
Permalink
Post by Luigis
Post by Leo Rizzi
Ma nei file .pas che vengono creati i vari tipi
- tipoNomeFileAllegato
- TProprietario
- TRicevutaInvio
Non vengono definiti.
Dove sbaglio ?
a leggere/scrivere ;)
1) tipoNomeFileAllegato
2) proprietario (nel file WDSL manca la T iniziale)
3) ricevutaInvio (nel file WDSL manca la T iniziale)
sono definiti nel file "InvioTelematicoSpeseSanitarie730p.pas" che ti ha
generato
Post by Leo Rizzi
Grazie Mille
Mi accorgo adesso che stai seguendo un vecchio thread del 2017, in
questo thread troverai del codice funzionante che stai cercando e che
postò "Alessandro B." e che è stato di formidabile aiuto per definire le
nostre trasmissioni :)
Ciao.
1) tipoNomeFileAllegato
2) proprietario (nel file WDSL manca la T iniziale)
3) ricevutaInvio (nel file WDSL manca la T iniziale)
sono definiti nel file "InvioTelematicoSpeseSanitarie730p.pas" che ti ha
generato
Purtroppo in nessuno dei file importati vengono definiti.
Leggerò con crupolosità quanto scritto da "Alessandro B."
sperando di trovare spunti per sbloccare la situazione.

Una domanda ancora:
E' possibile che ci siano versioni più aggiornate del file InvioTelematicoSpeseSanitarie730p.wsdl da importare?

Grazie ancora per la tua disponibilità

Ciao
Luigis
2021-02-03 18:37:44 UTC
Permalink
Post by Leo Rizzi
Purtroppo in nessuno dei file importati vengono definiti.
Parli dei file .WDSL oppure dei file .pas?

Su Delphi 10.3 Rio Community, nel file
"InvioTelematicoSpeseSanitarie730p.pas" trovi, alla:

Riga 44 = ricevutaInvio = class(TRemotable)
Riga 69 = tipoNomeFileAllegato = type string;
Riga 76 = proprietario = class(TRemotable)
Post by Leo Rizzi
Leggerò con crupolosità quanto scritto da "Alessandro B."
sperando di trovare spunti per sbloccare la situazione.
In primo luogo *devi* importare i WDSL correttamente e *trovare* dove
Delphi ha messo i file .pas che ha generato per te e metterli nelle uses
del tuo file .pas.
Post by Leo Rizzi
E' possibile che ci siano versioni più aggiornate del file InvioTelematicoSpeseSanitarie730p.wsdl da importare?
La versione più recente che mi risulta è nel file:
kit730P_ver_20201218.zip ma anche nelle versioni precedenti i tipi che
tu non trovi erano già tutti presenti.

Ciao.
Leo Rizzi
2021-02-03 22:01:48 UTC
Permalink
Post by Luigis
Post by Leo Rizzi
Purtroppo in nessuno dei file importati vengono definiti.
Parli dei file .WDSL oppure dei file .pas?
Su Delphi 10.3 Rio Community, nel file
Riga 44 = ricevutaInvio = class(TRemotable)
Riga 69 = tipoNomeFileAllegato = type string;
Riga 76 = proprietario = class(TRemotable)
Post by Leo Rizzi
Leggerò con crupolosità quanto scritto da "Alessandro B."
sperando di trovare spunti per sbloccare la situazione.
In primo luogo *devi* importare i WDSL correttamente e *trovare* dove
Delphi ha messo i file .pas che ha generato per te e metterli nelle uses
del tuo file .pas.
Post by Leo Rizzi
E' possibile che ci siano versioni più aggiornate del file InvioTelematicoSpeseSanitarie730p.wsdl da importare?
kit730P_ver_20201218.zip ma anche nelle versioni precedenti i tipi che
tu non trovi erano già tutti presenti.
Ciao.
Ciao Luigis,

con la versione kit730P_ver_20201218.zip tutte le classi e i tipi sono definiti perfettamente :)
con la versione kit730P_ver_20180918.zip che stavo utilizzando mancava praticamente tutto il codice delle classi e tipi
o per lo meno durante l'importazione in delphi non veniva creato il relativo codice.

Ora non mi resta che smanettare un pò con le varie porzioni di codice su questo thread

Grazie Mille
oibaf
2021-02-04 10:15:00 UTC
Permalink
Post by Leo Rizzi
Post by Luigis
Post by Leo Rizzi
Purtroppo in nessuno dei file importati vengono definiti.
Parli dei file .WDSL oppure dei file .pas?
Su Delphi 10.3 Rio Community, nel file
Riga 44 = ricevutaInvio = class(TRemotable)
Riga 69 = tipoNomeFileAllegato = type string;
Riga 76 = proprietario = class(TRemotable)
Post by Leo Rizzi
Leggerò con crupolosità quanto scritto da "Alessandro B."
sperando di trovare spunti per sbloccare la situazione.
In primo luogo *devi* importare i WDSL correttamente e *trovare* dove
Delphi ha messo i file .pas che ha generato per te e metterli nelle uses
del tuo file .pas.
Post by Leo Rizzi
E' possibile che ci siano versioni più aggiornate del file InvioTelematicoSpeseSanitarie730p.wsdl da importare?
kit730P_ver_20201218.zip ma anche nelle versioni precedenti i tipi che
tu non trovi erano già tutti presenti.
Ciao.
Ciao Luigis,
con la versione kit730P_ver_20201218.zip tutte le classi e i tipi sono definiti perfettamente :)
con la versione kit730P_ver_20180918.zip che stavo utilizzando mancava praticamente tutto il codice delle classi e tipi
o per lo meno durante l'importazione in delphi non veniva creato il relativo codice.
Ora non mi resta che smanettare un pò con le varie porzioni di codice su questo thread
Grazie Mille
Ciao,
io uso Delphi XE7 e sono arrivato a buon punto con la soluzione, grazie alla collaborazione con @Paolo di Biase. Se hai bisogno di qualcosa chiedi pure.
Saluti
Alessandro B.
2021-02-04 12:52:40 UTC
Permalink
Ciao,
ci sono anche io se avete qualche domanda

Alessandro
oibaf
2021-02-04 13:09:57 UTC
Permalink
Post by Alessandro B.
Ciao,
ci sono anche io se avete qualche domanda
Alessandro
Eccola subito pronta,
con Delphi XE7 ho realizzato l'invio delle fatture e la lettura del file PDF di risposta e tutto funziona. Ho il problema di leggere il file CSV di risposta usando la unit "DettaglioErrori730Service", in particolare la funzione "DettaglioErrori(_ParametriRichiesta).esitiPositivi.dettagliEsito.csv" che ritorna un tipo TByteDynArray ma con XE7 non riesco a gestirlo, la funzione "TEncoding.ANSI.GetString", per convertire il file ricevuto in String, accetta come parametro un tipo Bytes.
Te come l'hai risolto.
Grazie
Fabio
oibaf
2021-02-04 13:31:37 UTC
Permalink
Post by oibaf
Post by Alessandro B.
Ciao,
ci sono anche io se avete qualche domanda
Alessandro
Eccola subito pronta,
con Delphi XE7 ho realizzato l'invio delle fatture e la lettura del file PDF di risposta e tutto funziona. Ho il problema di leggere il file CSV di risposta usando la unit "DettaglioErrori730Service", in particolare la funzione "DettaglioErrori(_ParametriRichiesta).esitiPositivi.dettagliEsito.csv" che ritorna un tipo TByteDynArray ma con XE7 non riesco a gestirlo, la funzione "TEncoding.ANSI.GetString", per convertire il file ricevuto in String, accetta come parametro un tipo Bytes.
Te come l'hai risolto.
Grazie
Fabio
Trovata la soluzione,
modificata la property "csv" della classe "dettaglioEsitoPositivo" da TByteDynArray a TArray<System.Byte>
Gianvito Zonno
2021-04-10 15:32:22 UTC
Permalink
Post by oibaf
Post by oibaf
Post by Alessandro B.
Ciao,
ci sono anche io se avete qualche domanda
Alessandro
Eccola subito pronta,
con Delphi XE7 ho realizzato l'invio delle fatture e la lettura del file PDF di risposta e tutto funziona. Ho il problema di leggere il file CSV di risposta usando la unit "DettaglioErrori730Service", in particolare la funzione "DettaglioErrori(_ParametriRichiesta).esitiPositivi.dettagliEsito.csv" che ritorna un tipo TByteDynArray ma con XE7 non riesco a gestirlo, la funzione "TEncoding.ANSI.GetString", per convertire il file ricevuto in String, accetta come parametro un tipo Bytes.
Te come l'hai risolto.
Grazie
Fabio
Trovata la soluzione,
modificata la property "csv" della classe "dettaglioEsitoPositivo" da TByteDynArray a TArray<System.Byte>
Ciao,

Saresti così gentile da postarmi le porzione di codice con cui ottieni il file csv?
Non ci sto riuscendo nonostante io abbia cambiato la property "csv" della classe "dettaglioEsitoPositivo" da TByteDynArray a TArray<System.Byte>

te ne sarei molto grato
Grazie Mille
Sebastiano Gugliandolo
2022-02-03 11:39:30 UTC
Permalink
Post by Gianvito Zonno
Post by oibaf
Post by oibaf
Post by Alessandro B.
Ciao,
ci sono anche io se avete qualche domanda
Alessandro
Eccola subito pronta,
con Delphi XE7 ho realizzato l'invio delle fatture e la lettura del file PDF di risposta e tutto funziona. Ho il problema di leggere il file CSV di risposta usando la unit "DettaglioErrori730Service", in particolare la funzione "DettaglioErrori(_ParametriRichiesta).esitiPositivi.dettagliEsito.csv" che ritorna un tipo TByteDynArray ma con XE7 non riesco a gestirlo, la funzione "TEncoding.ANSI.GetString", per convertire il file ricevuto in String, accetta come parametro un tipo Bytes.
Te come l'hai risolto.
Grazie
Fabio
Trovata la soluzione,
modificata la property "csv" della classe "dettaglioEsitoPositivo" da TByteDynArray a TArray<System.Byte>
Ciao,
Saresti così gentile da postarmi le porzione di codice con cui ottieni il file csv?
Non ci sto riuscendo nonostante io abbia cambiato la property "csv" della classe "dettaglioEsitoPositivo" da TByteDynArray a TArray<System.Byte>
te ne sarei molto grato
Grazie Mille
Ciao , hai notato che il servizio https://invioSS730p.sanita.finanze.it/ReportMensile730Web/ReportMensilePort risponde
con un messaggio di errore: WS95 SERVIZIO RICHIESTO NON EROGABILE NELLA FASCIA ORARIA DELLA RICHIESTA.
Hai avuto modo di utilizzare questo servizio ?

Grazie
Leo Rizzi
2022-08-25 21:14:31 UTC
Permalink
Post by Sebastiano Gugliandolo
Post by Gianvito Zonno
Post by oibaf
Post by oibaf
Post by Alessandro B.
Ciao,
ci sono anche io se avete qualche domanda
Alessandro
Eccola subito pronta,
con Delphi XE7 ho realizzato l'invio delle fatture e la lettura del file PDF di risposta e tutto funziona. Ho il problema di leggere il file CSV di risposta usando la unit "DettaglioErrori730Service", in particolare la funzione "DettaglioErrori(_ParametriRichiesta).esitiPositivi.dettagliEsito.csv" che ritorna un tipo TByteDynArray ma con XE7 non riesco a gestirlo, la funzione "TEncoding.ANSI.GetString", per convertire il file ricevuto in String, accetta come parametro un tipo Bytes.
Te come l'hai risolto.
Grazie
Fabio
Trovata la soluzione,
modificata la property "csv" della classe "dettaglioEsitoPositivo" da TByteDynArray a TArray<System.Byte>
Ciao,
Saresti così gentile da postarmi le porzione di codice con cui ottieni il file csv?
Non ci sto riuscendo nonostante io abbia cambiato la property "csv" della classe "dettaglioEsitoPositivo" da TByteDynArray a TArray<System.Byte>
te ne sarei molto grato
Grazie Mille
Ciao , hai notato che il servizio https://invioSS730p.sanita.finanze.it/ReportMensile730Web/ReportMensilePort risponde
con un messaggio di errore: WS95 SERVIZIO RICHIESTO NON EROGABILE NELLA FASCIA ORARIA DELLA RICHIESTA.
Hai avuto modo di utilizzare questo servizio ?
Grazie
Ciao,

C'è qualcono nel gruppo disposto a darmi una mano sulla procedura di cifratura del CF Proprietario e del PINCode?
In ambiente Test funziona tutto correttamente, ma se provo in ambiente di produzione il sistema mi ritorna il seguente un errore:

"dati proprietario formalmente errati"

Voglio precisare che il codice fiscale in chiaro è corretto poichè è lo stesso che utilizzo per accedere al portale TS
E' probabilmente è la chiamata OpenSSL a dare problemi?

uso come suggerito da altri amici nel gruppo un file .bat
che contiene le seguenti istruzioni

"openssl rsautl -encrypt -in CF.txt -out CF.enc -inkey SanitelCF.cer -certin -pkcs
openssl enc -base64 -A -in CF.enc -out CF64.enc"

il file CF.txt viene cryptato nel file CF.enc quindi poi lo codifico in base64 e lo inserisco nel file xml da inviare.
al momento dell'invio, però, mi compare il messaggio di cui sopra, ossia

"dati proprietario formalmente errati"

Potreste darmi una mano a capire dove sbaglio? :-(

Grazie a tutti
Leo

Leo Rizzi
2021-03-23 12:38:22 UTC
Permalink
Post by Alessandro B.
Ciao,
ci sono anche io se avete qualche domanda
Alessandro
Ciao Alessandro,

nel tuo codice:

datiProprietario.codiceSSA := Ini.ReadString( _SysTs_Sec_I,'Pre','' );
datiProprietario.cfProprietario := Ini.ReadString( _SysTs_Sec_I,'Cfp','' );

ricevo un errore poichè "codiceSSA" è di tipo "codSsaType" mentre Ini.ReadString( _SysTs_Sec_I,'Pre','' ) restituisce una stringa
mi compare il seguente errore:

Exception class ERemotableException with message
'cvc-simple-type 1: element codiceSSA value '456' is not a valid instance of type {http://ejb.invioTelematicoSS730p.sanita.finanze.it/}codSsaType'

Come posso risolvere?
Grazie Mille
Leo
Alessandro B.
2021-03-25 06:29:27 UTC
Permalink
Post by Leo Rizzi
Post by Alessandro B.
Ciao,
ci sono anche io se avete qualche domanda
Alessandro
Ciao Alessandro,
datiProprietario.codiceSSA := Ini.ReadString( _SysTs_Sec_I,'Pre','' );
datiProprietario.cfProprietario := Ini.ReadString( _SysTs_Sec_I,'Cfp','' );
ricevo un errore poichè "codiceSSA" è di tipo "codSsaType" mentre Ini.ReadString( _SysTs_Sec_I,'Pre','' ) restituisce una stringa
Exception class ERemotableException with message
'cvc-simple-type 1: element codiceSSA value '456' is not a valid instance of type {http://ejb.invioTelematicoSS730p.sanita.finanze.it/}codSsaType'
Come posso risolvere?
Grazie Mille
Leo
Questa la sezione di codice delle dichiarazioni nel file InvioTelematicoSpeseSanitarie730p.pas

varChar3Type = type string; { "http://ejb.invioTelematicoSS730p.sanita.finanze.it/"[GblSmpl] }
cfType = type string; { "http://ejb.invioTelematicoSS730p.sanita.finanze.it/"[GblSmpl] }
codSsaType = type string; { "http://ejb.invioTelematicoSS730p.sanita.finanze.it/"[GblSmpl] }
Alessandro B.
2021-03-25 06:31:57 UTC
Permalink
Post by Alessandro B.
Post by Leo Rizzi
Post by Alessandro B.
Ciao,
ci sono anche io se avete qualche domanda
Alessandro
Ciao Alessandro,
datiProprietario.codiceSSA := Ini.ReadString( _SysTs_Sec_I,'Pre','' );
datiProprietario.cfProprietario := Ini.ReadString( _SysTs_Sec_I,'Cfp','' );
ricevo un errore poichè "codiceSSA" è di tipo "codSsaType" mentre Ini.ReadString( _SysTs_Sec_I,'Pre','' ) restituisce una stringa
Exception class ERemotableException with message
'cvc-simple-type 1: element codiceSSA value '456' is not a valid instance of type {http://ejb.invioTelematicoSS730p.sanita.finanze.it/}codSsaType'
Come posso risolvere?
Grazie Mille
Leo
Questa la sezione di codice delle dichiarazioni nel file InvioTelematicoSpeseSanitarie730p.pas
varChar3Type = type string; { "http://ejb.invioTelematicoSS730p.sanita.finanze.it/"[GblSmpl] }
cfType = type string; { "http://ejb.invioTelematicoSS730p.sanita.finanze.it/"[GblSmpl] }
codSsaType = type string; { "http://ejb.invioTelematicoSS730p.sanita.finanze.it/"[GblSmpl] }
N.B. il file che utilizzo io è stato generato per importazione del wsdl nel dicembre 2015.
Al momento il codice compilato continua a funzionare correttamente presso i ns. clienti.

Ammetto di non aver provato a ricompilare, non avendone la necessità
Leo Rizzi
2021-02-04 14:07:13 UTC
Permalink
Post by oibaf
Post by Leo Rizzi
Post by Luigis
Post by Leo Rizzi
Purtroppo in nessuno dei file importati vengono definiti.
Parli dei file .WDSL oppure dei file .pas?
Su Delphi 10.3 Rio Community, nel file
Riga 44 = ricevutaInvio = class(TRemotable)
Riga 69 = tipoNomeFileAllegato = type string;
Riga 76 = proprietario = class(TRemotable)
Post by Leo Rizzi
Leggerò con crupolosità quanto scritto da "Alessandro B."
sperando di trovare spunti per sbloccare la situazione.
In primo luogo *devi* importare i WDSL correttamente e *trovare* dove
Delphi ha messo i file .pas che ha generato per te e metterli nelle uses
del tuo file .pas.
Post by Leo Rizzi
E' possibile che ci siano versioni più aggiornate del file InvioTelematicoSpeseSanitarie730p.wsdl da importare?
kit730P_ver_20201218.zip ma anche nelle versioni precedenti i tipi che
tu non trovi erano già tutti presenti.
Ciao.
Ciao Luigis,
con la versione kit730P_ver_20201218.zip tutte le classi e i tipi sono definiti perfettamente :)
con la versione kit730P_ver_20180918.zip che stavo utilizzando mancava praticamente tutto il codice delle classi e tipi
o per lo meno durante l'importazione in delphi non veniva creato il relativo codice.
Ora non mi resta che smanettare un pò con le varie porzioni di codice su questo thread
Grazie Mille
Ciao,
Saluti
Ottimo,

appena avrò un pò di tempo mi cimenterò e sicuramente dovrò disturbarvi tutti :-P
Siete fantastici e gentilissimi.

Grazie per la vostra disponibilità
A Presto / Prestissimo
theFiller
2017-01-31 10:33:44 UTC
Permalink
Post by Luigi Siciliano
Ho la necessità di connettermi ed interagire con i webservices del
sistema tessera sanitaria per trasmettere un solo file di dati.
Questi webservices dialogano con il protocollo soap e non si possono
importare.
Tra i componenti di delphi2010 trovo, nella palette webservices, il
componente TSoapConnection.
L'help in linea di delphi non mi è d'aiuto e non ho capito con quali
altri componenti gestisco poi la connessione ed il dialogo con il
webservice.
Online trovo parecchia roba ma, essendo proprio digiuno di queste cose,
mi perdo facilmente.
Qualcuno potrebbe darmi un spunto?
Grazie.
se conosci dotnet qui c'è un esempio funzionante
www.visual-basic.it/Forum/tabid/151/aft/42746/Default.aspx#.WJBeIPnhBhF

ciao
Continua a leggere su narkive:
Loading...