Lo genera il JS dopo il post a ../telematico
proprio per questo motivo ho dovuto usare playwright, con node non riuscivo a replicare, magari ero solo stanco ma avevo bisogno di una soluzione tampone
Sì, ho verificato: per la precisione x-appl viene restituito come header dalla response della chiamata a https://ivaservizi.agenziaentrate.gov.it/instr/instradamento-fatture-rest/rs/initLight
riuscite a superare https://ivaservizi.agenziaentrate.gov.it/instr/instradamento-fatture-rest/rs/setUserChoice ??
No, nemmeno io riesco. Passo tutti i cookie e anche l’header x-appl (recuperato dalla request come nel mio post precedente), ma ricevo come errore 406 Not Acceptable.
Le sto provando tutte ma niente. Qualche altra idea?
Non riesco a reperire il Cookie JSESSIONID. Qualcuno mi può dare una mano?
io “409 Conflict” e non mi genera il cookie B2BCookie ![]()
Io il 409 Conflict l’ho risolto passando l’header x-appl (ovviamente dev’essere corretto, quello fornito dal server). Per quale endpoint ti dà errore 409 Conflict?
Il 409 è su SetUserChoice
x-appl lo passo, oltretutto controllo e eventuali cambiamenti di valore (che non ci sono) tra una richiesta e l’altra
Riusciamo a fare un elenco completo ed ordinato di URL, metodi, headers, cookies, Origin e Referer ?
Buongiorno a tutti, sono riuscito a creare correttamente il documento commerciale, vi lascio i passaggi di seguito**
STEP 1 — Pagina di login**
GET https://iampe.agenziaentrate.gov.it/sam/UI/Login?realm=/agenziaentrate&goto=https%3A%2F%2Fportale.agenziaentrate.gov.it%3A443%2FPortaleWeb%2Fhome%3Fto%3DFATBTB
- Carica la pagina di login e inizializza i cookie SIAMPE
STEP 2 — Login telematico
POST https://iampe.agenziaentrate.gov.it/api/login/telematico
-
Headers:
Content-Type: application/json;charset=utf-8,Referer: .../sam/UI/Login,Origin: https://iampe.agenziaentrate.gov.it -
Body JSON:
{"username": "<CF>", "pin": "<PIN>", "password": "<PASSWORD>"} -
Risposta:
{"success": true}— imposta i cookieLtpaToken2,cookieutentee0194,portaleCookie
STEP 3 — Accesso al portale
GET https://portale.agenziaentrate.gov.it/PortaleWeb/home?to=FATBTB
STEP 4 — Init portale
GET https://portale.agenziaentrate.gov.it/portale-rest/rs/initPortale?v=<timestamp>&to=FATBTB
- Può tornare 501, non è bloccante
STEP 5 — Instradamento home
GET https://ivaservizi.agenziaentrate.gov.it/instr/InstradamentofcWeb/home
STEP 6 — initLight (cattura x-appl)
GET https://ivaservizi.agenziaentrate.gov.it/instr/instradamento-fatture-rest/rs/initLight?v=<timestamp>&to=FATBTB
-
Headers:
Accept: application/json, text/plain, */*,Referer: .../InstradamentofcWeb/home -
Importante: dalla response header si cattura
x-appl(token di sessione instradamento)
STEP 7 — Wizard
GET https://ivaservizi.agenziaentrate.gov.it/instr/InstradamentofcWeb/wizard
STEP 7b — wizardTemplate
GET https://ivaservizi.agenziaentrate.gov.it/instr/instradamento-fatture-rest/rs/wizardTemplate?v=<timestamp>
-
Headers:
x-appl: <valore catturato> -
Risposta JSON con
soloPerMe(boolean) ePIva(array di P.IVA)
STEP 8 — setUserChoice
Se soloPerMe=true e c’è una sola P.IVA, si salta procediWizard e si va direttamente a:
POST https://ivaservizi.agenziaentrate.gov.it/instr/instradamento-fatture-rest/rs/setUserChoice?v=<timestamp>
-
Headers: Content-Type: application/json,
x-appl: <valore> -
Imposta il cookie
B2BCookie
Altrimenti prima POST procediWizard con {"tipoutenza": "meStesso", "cf": "<CF>"}, poi setUserChoice.
STEP 9b — Ritorno alla home instradamento
GET https://ivaservizi.agenziaentrate.gov.it/instr/InstradamentofcWeb/home
STEP 9c — fullTemplate
GET https://ivaservizi.agenziaentrate.gov.it/instr/instradamento-fatture-rest/rs/fullTemplate?v=<timestamp>
- Headers:
x-appl: <valore>,Referer: .../InstradamentofcWeb/home
STEP 9d — /dp/PI2FC (FONDAMENTALE)
GET https://ivaservizi.agenziaentrate.gov.it/dp/PI2FC
-
Headers:
Referer: https://ivaservizi.agenziaentrate.gov.it/instr/InstradamentofcWeb/home -
Questo è il passaggio chiave: la response imposta il cookie
FATSC(domain.agenziaentrate.gov.it), che è il token di autenticazione per tutte le chiamate/ser/api/. Senza questo cookie, tutte le API tornano 401.
STEP 10 — Pagina documenti commerciali
GET https://ivaservizi.agenziaentrate.gov.it/ser/documenticommercialionline/
STEP 10c/10d/10e — Bootstrap API (init sessione)
Da qui in poi NON si usa più x-appl. Gli headers sono quelli del AjaxService AngularJS:
-
GET
.../common/testata/v1/info/me -
GET
.../ser/api/documenti/v1/doc/documenti/dati/fiscali -
GET
.../ser/api/documenti/v1/doc/documenti/ultimo/
Queste inizializzano la sessione servlet (JSESSIONID).
STEP 11 — Invio documento
POST https://ivaservizi.agenziaentrate.gov.it/ser/api/documenti/v1/doc/documenti/
-
Stessi headers API di sopra
-
Body JSON: il payload del documento commerciale (stesso formato di prima)
Saluti
Ottimo grazie. Provero subito
Mitico! Faccio le dovute modifiche nel mio programma
Ho problemi nella selezione come incaricato.
Anche io ho il flow da incaricato. Sto provando la soluzione proposta da @publidok nel post precedente e sembra funzionare perfettamente, ma per l’incaricato bisogna fare due modifiche e aggiungere dei passaggi.
Modifiche per il flusso “Incaricato”
Step 7b – wizardTemplate
GET https://ivaservizi.agenziaentrate.gov.it/instr/instradamento-fatture-rest/rs/wizardTemplate?v=<timestamp>
- Headers:
x-appl: <valore catturato>
La richiesta è uguale, ma la response JSON è diversa ed è strutturata così:
{
"cfUidUltimo": "<codice fiscale personale>",
"enabledEsercizioOpzioni": false,
"enabledQrCode": false,
"enabledVerificaPivaCf": false,
"hasDelega": false,
"intermediario": false,
"richiestaIncarichi": {
"incarichi": [
{
"deleghe": false,
"incaricante": {
"cf": "<codice fiscale azienda>",
"sede": "FOL",
"tipo": "INCARICO"
},
"intermediario": false,
"tutore": false
}
]
},
"serpico": false,
"soloPerMe": false,
"tutore": false,
"tutore_AT": false
}
Step 7c – procediWizard (passaggio aggiuntivo)
POST https://ivaservizi.agenziaentrate.gov.it/instr/instradamento-fatture-rest/rs/procediWizard?v=<timestamp>
- Headers:
x-appl: <valore catturato> - Body JSON:
{"tipoutenza": "incaricato"}
Step 7d – procediWizard (passaggio aggiuntivo)
POST https://ivaservizi.agenziaentrate.gov.it/instr/instradamento-fatture-rest/rs/procediWizard?v=<timestamp>
- Headers:
x-appl: <valore catturato> - Body JSON (attenzione al JSON embeddato dentro al JSON):
{
"tipoutenza": "incaricato",
"incaricante": "{\"deleghe\":false,\"incaricante\":{\"cf\":\"<codice fiscale azienda>\",\"sede\":\"FOL\",\"tipo\":\"INCARICO\"},\"intermediario\":false,\"tutore\":false}",
"tipoincaricante": "incaricoDiretto",
"pIva": null
}
Step 8 – setUserChoice
POST https://ivaservizi.agenziaentrate.gov.it/instr/instradamento-fatture-rest/rs/setUserChoice?v=<timestamp>
- Headers: Content-Type: application/json,
x-appl: <valore>
Anche qui bisogna modificare il payload JSON (anche qui attenzione al JSON embeddato nel JSON):
{
"tipoutenza": "incaricato",
"incaricante": "{\"deleghe\":false,\"incaricante\":{\"cf\":\"<codice fiscale azienda>\",\"sede\":\"FOL\",\"tipo\":\"INCARICO\"},\"intermediario\":false,\"tutore\":false}",
"tipoincaricante": "incaricoDiretto",
"cf": "<codice fiscale azienda>"
}
@pubpub grazie mille, in poco tempo ho tolto playwright e ricosturito tutto in node
se a qualcuno serve il codice per node mi scriva lo giro volentieri
Ho seguito i passaggi di Guido ma sono bloccato qui:
=== URL: ivaservizi.agenziaentrate.gov.it/instr/instradamento-fatture-rest/rs/setUserChoice?v=1774364157245 ===
Codice restituito: HTTP/1.1 409 Conflict (409)
11 cookies:
SIAMPELB=02
SIAMPE_TAI=[…]
SIAMPE=[…]
SIAMPLB=[…]
d1826a18ffe5ae8cb10ab7a343423ffb=[…]
COOKIE_SUPPORT=true
GUEST_LANGUAGE_ID=it_IT
LtpaToken2=[…]
cookieutentee0194=[…]
AE=ALREADYSET
portaleCookie=[…]
=== ===
A voi risultano altri cookies ?
Aggiornamento: ho riscritto gli headers e ora funziona e finalmente restituisce il cookie B2BCookie ![]()
I miei cookie dopo il login sono i seguenti, non corrispondono esattamente:
0 => "SIAMPELB"
1 => "SIAMPE_TAI"
2 => "SIAMPE"
3 => "SIAMPLB"
4 => "d1826a18ffe5ae8cb10ab7a343423ffb"
5 => "LtpaToken2"
6 => "cookieutentee0194"
7 => "AE"
8 => "portaleCookie"
9 => "B2BCookie"
10 => "FATSC"
Risolto grazie, ho riscritto gli headers
Signori buonasera.
Stiamo cercando di implementare queste modifiche ma si sbatte il naso sull’errore 409 del setUserChoice.
I cookie ci sono, il x-appl pure.
Due cose non mi sono chiare. Il timestamp usate lo stesso per tutte le chiamate? In setUserChoice si lasciano proprio vuoti cf e pIva nel json?
Saltando questa fase si arriva anche ad avere il cookie FATSC ma senza B2BCookie poi sono tutti errori 400.
Chi ha scritto di aver risoldo quali headers inserisce?
Puff alla fine abbiamo risolto!
Da babbei andavamo a cancellare alcuni header dopo averli inseriti.
cf e pIva ci vogliono in setUserChoice.
Grazie ancora per la lista degli step perchè non ci saremmo mai arrivati.