per i caffe e granite sono pronto, per sniffare i dati che un registratore rt invia all'ade, attualmente invia solo i corrispettivi, e le transazioni con il codice lotteriaAl momento credo che serva questo:
per il momento mi sembra tutto
- Informazioni sull'esistenza del protocollo (se c'è) e eventualmente una descrizione di tale protocollo
- Capire se è possibile porre domande all'AE (visto che qui pare abbia risposto a un interrogazione su realizzare un SH qui)
- Qualcuno che conosca C# per esanimare questo sorgente (qui). Io un pò ne mastico ma non cosi tanto
- Fare un analisi del SW. Io ho scelto un modo per creare il JSON con delle classi (ammesso che dovremmo continuare per questa strada). E' giusta c'è un idea migliore?
- Qualcuno che usa i corrispettivi (registratori di cassa) e che abbia le credenziali per fare delle prove sulla WebApp (tanto ho visto si possono annullare le operazioni e comunque verrebbero sommate a quelle dell RT). Magari sniffare la connessione SSL e permetterci di capire cosa succede
- Uno che porta i caffè e granite la mattina (io voglio la brioche con lo jummo)
Si certo, perchè non facendo memorizzazione, lìoperazione in WebApp dev'essere fatta sul momento con connessione altrimenti niente.la normativa sembra chiara:
I dati di un RT ce li ho, ho tutto il protocollo. C'è una documentazione dettagliata. Anzi se ti interessa potrei fare un App che finge di essere un RTper i caffe e granite sono pronto, per sniffare i dati che un registratore rt invia all'ade, attualmente invia solo i corrispettivi, e le transazioni con il codice lotteria
Ho visto che sei iscritto su 1000 forum di sviluppatori e hai fatto diversi interventi in merito, possibile che non hai tirato fuori nulla?
Al momento credo che serva questo:
per il momento mi sembra tutto
- Informazioni sull'esistenza del protocollo (se c'è) e eventualmente una descrizione di tale protocollo
- Capire se è possibile porre domande all'AE (visto che qui pare abbia risposto a un interrogazione su realizzare un SH qui)
- Qualcuno che conosca C# per esanimare questo sorgente (qui). Io un pò ne mastico ma non cosi tanto
- Fare un analisi del SW. Io ho scelto un modo per creare il JSON con delle classi (ammesso che dovremmo continuare per questa strada). E' giusta c'è un idea migliore?
- Qualcuno che usa i corrispettivi (registratori di cassa) e che abbia le credenziali per fare delle prove sulla WebApp (tanto ho visto si possono annullare le operazioni e comunque verrebbero sommate a quelle dell RT). Magari sniffare la connessione SSL e permetterci di capire cosa succede
- Uno che porta i caffè e granite la mattina (io voglio la brioche con lo jummo)
Allora ti hanno rubato nick e immagineEhmm, se ho chiesto molte volte, e probbabbole che non sapessi come fare
Oppure se gli interventi sono stati propositivi, potrebbe essere stato un mio anonimo
Inzomma, qualcunque roba abbia fatto, non sono stato io
Allora ti hanno rubato nick e immagine
Si quello serviva. Io ho studiato il video ufficiale molte volte, mi sembra abbastanza semplice. Solo la donna che hanno scelto fa venire la depressione, ma è un altro discorso.ho le credenziali per l'accesso ad ADE nella sezione fatture e corrispettivi https://ivaservizi.agenziaentrate.gov.it/portale/
Conosci C#? Riesci ad aprire quel sorgente' Mi pare si di VisualStudio.Porkkkkk....
Anche il logo, noooooo.... mi hanno rubato anche il logo
using Newtonsoft.Json;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Net;
namespace DocumentoCommerciale
{
public class Send
{
public List<Esiti.Esito> SendDC(List<DC.RootObject> dc, string usr, string pwd, string pin, string piva, string tipoincarico)
{
List<Esiti.Esito> esiti = new List<Esiti.Esito> { };
Esiti.Esito emptyesito = new Esiti.Esito { esito = false, idtrx = null, progressivo = null, errori = null };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.Expect100Continue = false;
CookieContainer cookieJar = new CookieContainer();
RestClient client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/portale/web/guest")
{
CookieContainer = cookieJar
};
RestRequest req = new RestRequest(Method.GET);
IRestResponse res = client.Execute(req);
int StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 1" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
foreach (DC.RootObject dctemp in dc) {
esiti.Add(emptyesito);
}
return esiti;
}
client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/portale/home?p_p_id=58&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=3&p_p_col_count=4&_58_struts_action=%2Flogin%2Flogin")
{
CookieContainer = cookieJar
};
req = new RestRequest(Method.POST);
req.AddParameter("_58_login", usr);
req.AddParameter("_58_pin", pin);
req.AddParameter("_58_password", pwd);
res = client.Execute(req);
StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 2" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
foreach (DC.RootObject dctemp in dc)
{
esiti.Add(emptyesito);
}
return esiti;
}
string p_auth = getBetween(res.Content, "Liferay.authToken = '", "';");
client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/dp/api?v=" + unixTime())
{
CookieContainer = cookieJar
};
req = new RestRequest(Method.GET);
res = client.Execute(req);
StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 3" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
foreach (DC.RootObject dctemp in dc)
{
esiti.Add(emptyesito);
}
return esiti;
}
client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/portale/scelta-utenza-lavoro?p_auth=" + p_auth + "&p_p_id=SceltaUtenzaLavoro_WAR_SceltaUtenzaLavoroportlet&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_SceltaUtenzaLavoro_WAR_SceltaUtenzaLavoroportlet_javax.portlet.action=incarichiAction")
{
CookieContainer = cookieJar
};
req = new RestRequest(Method.POST);
req.AddParameter("sceltaincarico", piva);
req.AddParameter("tipoincaricante", tipoincarico);
res = client.Execute(req);
StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 4" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
foreach (DC.RootObject dctemp in dc)
{
esiti.Add(emptyesito);
}
return esiti;
}
client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/ser/api/fatture/v1/ul/me/adesione/stato/")
{
CookieContainer = cookieJar
};
req = new RestRequest(Method.GET);
res = client.Execute(req);
StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 5" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
foreach (DC.RootObject dctemp in dc)
{
esiti.Add(emptyesito);
}
return esiti;
}
foreach (DC.RootObject item in dc) {
client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/ser/api/documenti/v1/doc/documenti/?v=" + unixTime())
{
CookieContainer = cookieJar
};
var settings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented };
var json = JsonConvert.SerializeObject(item, settings);
//Console.WriteLine(json);
req = new RestRequest(Method.POST);
req.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36");
req.AddHeader("x-xss-protection", "1; mode = block");
req.AddHeader("strict-transport-security", "max-age=16070400; includeSubDomains");
req.AddHeader("x-content-type-options", "nosniff");
req.AddHeader("x-frame-options", "deny");
req.AddHeader("content-type", "application/json");
req.AddParameter("application/octet-stream", json, ParameterType.RequestBody);
//req.AddJsonBody(item);
res = client.Execute(req);
StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 6 POST JSON" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
esiti.Add(emptyesito);
} else
{
esiti.Add(JsonConvert.DeserializeObject<Esiti.Esito>(res.Content));
}
}
return esiti;
}
static string unixTime()
{
DateTime foo = DateTime.UtcNow;
long unixTime = ((DateTimeOffset)foo).ToUnixTimeMilliseconds();
return unixTime.ToString();
}
static string getBetween(string strSource, string strStart, string strEnd)
{
int Start, End;
if (strSource.Contains(strStart) && strSource.Contains(strEnd))
{
Start = strSource.IndexOf(strStart, 0) + strStart.Length;
End = strSource.IndexOf(strEnd, Start);
return strSource.Substring(Start, End - Start);
}
else
{
return "";
}
}
}
}
Conosci C#? Riesci ad aprire quel sorgente' Mi pare si di VisualStudio.
Questa è la procedura per accedere con le credenziali di Fisco....Servirebeb sniffare per capire come si accredita con lo SPID
C#:using Newtonsoft.Json; using RestSharp; using System; using System.Collections.Generic; using System.Net; namespace DocumentoCommerciale { public class Send { public List<Esiti.Esito> SendDC(List<DC.RootObject> dc, string usr, string pwd, string pin, string piva, string tipoincarico) { List<Esiti.Esito> esiti = new List<Esiti.Esito> { }; Esiti.Esito emptyesito = new Esiti.Esito { esito = false, idtrx = null, progressivo = null, errori = null }; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; ServicePointManager.Expect100Continue = false; CookieContainer cookieJar = new CookieContainer(); RestClient client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/portale/web/guest") { CookieContainer = cookieJar }; RestRequest req = new RestRequest(Method.GET); IRestResponse res = client.Execute(req); int StatusCode = (int)res.StatusCode; if (StatusCode != 200) { Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 1" }; emptyesito.errori = new List<Esiti.Errore>(); emptyesito.errori.Add(errore); foreach (DC.RootObject dctemp in dc) { esiti.Add(emptyesito); } return esiti; } client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/portale/home?p_p_id=58&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=3&p_p_col_count=4&_58_struts_action=%2Flogin%2Flogin") { CookieContainer = cookieJar }; req = new RestRequest(Method.POST); req.AddParameter("_58_login", usr); req.AddParameter("_58_pin", pin); req.AddParameter("_58_password", pwd); res = client.Execute(req); StatusCode = (int)res.StatusCode; if (StatusCode != 200) { Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 2" }; emptyesito.errori = new List<Esiti.Errore>(); emptyesito.errori.Add(errore); foreach (DC.RootObject dctemp in dc) { esiti.Add(emptyesito); } return esiti; } string p_auth = getBetween(res.Content, "Liferay.authToken = '", "';"); client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/dp/api?v=" + unixTime()) { CookieContainer = cookieJar }; req = new RestRequest(Method.GET); res = client.Execute(req); StatusCode = (int)res.StatusCode; if (StatusCode != 200) { Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 3" }; emptyesito.errori = new List<Esiti.Errore>(); emptyesito.errori.Add(errore); foreach (DC.RootObject dctemp in dc) { esiti.Add(emptyesito); } return esiti; } client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/portale/scelta-utenza-lavoro?p_auth=" + p_auth + "&p_p_id=SceltaUtenzaLavoro_WAR_SceltaUtenzaLavoroportlet&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_SceltaUtenzaLavoro_WAR_SceltaUtenzaLavoroportlet_javax.portlet.action=incarichiAction") { CookieContainer = cookieJar }; req = new RestRequest(Method.POST); req.AddParameter("sceltaincarico", piva); req.AddParameter("tipoincaricante", tipoincarico); res = client.Execute(req); StatusCode = (int)res.StatusCode; if (StatusCode != 200) { Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 4" }; emptyesito.errori = new List<Esiti.Errore>(); emptyesito.errori.Add(errore); foreach (DC.RootObject dctemp in dc) { esiti.Add(emptyesito); } return esiti; } client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/ser/api/fatture/v1/ul/me/adesione/stato/") { CookieContainer = cookieJar }; req = new RestRequest(Method.GET); res = client.Execute(req); StatusCode = (int)res.StatusCode; if (StatusCode != 200) { Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 5" }; emptyesito.errori = new List<Esiti.Errore>(); emptyesito.errori.Add(errore); foreach (DC.RootObject dctemp in dc) { esiti.Add(emptyesito); } return esiti; } foreach (DC.RootObject item in dc) { client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/ser/api/documenti/v1/doc/documenti/?v=" + unixTime()) { CookieContainer = cookieJar }; var settings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented }; var json = JsonConvert.SerializeObject(item, settings); //Console.WriteLine(json); req = new RestRequest(Method.POST); req.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"); req.AddHeader("x-xss-protection", "1; mode = block"); req.AddHeader("strict-transport-security", "max-age=16070400; includeSubDomains"); req.AddHeader("x-content-type-options", "nosniff"); req.AddHeader("x-frame-options", "deny"); req.AddHeader("content-type", "application/json"); req.AddParameter("application/octet-stream", json, ParameterType.RequestBody); //req.AddJsonBody(item); res = client.Execute(req); StatusCode = (int)res.StatusCode; if (StatusCode != 200) { Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 6 POST JSON" }; emptyesito.errori = new List<Esiti.Errore>(); emptyesito.errori.Add(errore); esiti.Add(emptyesito); } else { esiti.Add(JsonConvert.DeserializeObject<Esiti.Esito>(res.Content)); } } return esiti; } static string unixTime() { DateTime foo = DateTime.UtcNow; long unixTime = ((DateTimeOffset)foo).ToUnixTimeMilliseconds(); return unixTime.ToString(); } static string getBetween(string strSource, string strStart, string strEnd) { int Start, End; if (strSource.Contains(strStart) && strSource.Contains(strEnd)) { Start = strSource.IndexOf(strStart, 0) + strStart.Length; End = strSource.IndexOf(strEnd, Start); return strSource.Substring(Start, End - Start); } else { return ""; } } } }
Gravità Codice Descrizione Progetto File Riga Stato eliminazione Stato eliminazione
Errore CS0234 Il tipo o il nome dello spazio dei nomi 'Extensions' non esiste nello spazio dei nomi 'Microsoft'. Probabilmente manca un riferimento all'assembly. DocumentoCommerciale D:\SORGENTI\CS\DOCUMENTO_COMMERCIALE_NET\DocumentoCommerciale.NET-master\obj\Release\netstandard2.0\DocumentoCommerciale.AssemblyInfo.cs 14 Attivo
Riesci a identificare cosa manca?Aprire lo apre
Non mi compila perche' non trova dei pezzi
B4X:Gravità Codice Descrizione Progetto File Riga Stato eliminazione Stato eliminazione Errore CS0234 Il tipo o il nome dello spazio dei nomi 'Extensions' non esiste nello spazio dei nomi 'Microsoft'. Probabilmente manca un riferimento all'assembly. DocumentoCommerciale D:\SORGENTI\CS\DOCUMENTO_COMMERCIALE_NET\DocumentoCommerciale.NET-master\obj\Release\netstandard2.0\DocumentoCommerciale.AssemblyInfo.cs 14 Attivo
Riesci a identificare cosa manca?
Comunque riusciresti a tradurre in B4X? Perchè gia molto si capisce, poi quello che manca lo possiamo costruire... ma ci interessa capire il protocollo
Anche se non compila non è importante. Io ho aperto con Visual Code e si capisce meglio... è di facile traduzione, si può passare quasi quasi a Java con poche modifiche. Ma lascio la gioia a teEsso vedo
Intanto bisognerebbe compilare questa, e vedere funziona come ci serve, anzi come ci server
Poi vediamo se riusciamo a tradurre
Quella esistono istruzioni sul sito. Lui cercava per la fattura elettronica.qualche anno fa Angelo Messina da Catania era alle prese con i corrispettivi?
DigestValue e SignaturValue XML corrispettivi
Salve a tutti, ho problemi a reperire notizie in merito alla uso di digestValue e SignaturValue nella compilazione di file XML per la trasmissione dei "corrispettivi" alla agenzia delle entrate. Qualcuno ha avuto una esperienza simile disposto ad aiutarmi a capire come fare. Grazie a tuttiwww.b4x.com
Gia ho iniziato a tradurmela, comunque serve a trasformare il JSON prodotto in XML adatto per l'AE. C'è tutto il protocollo di connessione.Esso vedo
Intanto bisognerebbe compilare questa, e vedere funziona come ci serve, anzi come ci server
Poi vediamo se riusciamo a tradurre
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?