## Crapanzano Salvatore (Corrispettivi Fattura) ## Per effettuare l'invio delle richieste corrispettivi sul portale ivaservizi.agenziaentrate.gov.it, inserire il nome del file nella relativa parte del codice ## Vers. 1.0a del 12-03-2021 - non usare il file ## Cartella di lavoro è ./inviocorrispettivi sotto la dir di lancio dello script di invio import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) import re import sys import pytz import json import os import base64 import time from datetime import timedelta, datetime, tzinfo, timezone def unixTime(): dt = datetime.now(tz=pytz.utc) return str(int(dt.timestamp() * 1000)) print('ATTENZIONE: Verranno inviate le richieste corrispettivi con estenzione xml contenute nella sotto-cartella ./invioCORRISPETTIVI') print('per il cliente impostato nel percorso di lancio del programma!') time.sleep(5) now = datetime.now() # current date and time profilo = 1 CF = sys.argv[1] PIN = sys.argv[2] Password = sys.argv[3] cfstudio = sys.argv[4] cfcliente = sys.argv[5] pivadiretta = sys.argv[6] for root, dirs, files in os.walk("./inviocorrispettivi"): for file in files: print("Elenco file Corrispettivi da inviare: ", files) ext = [".xml", "XML"] wait = input("Premi Enter per continuare.") s = requests.Session() s.headers.update({'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'}) s.headers.update({'Connection': 'keep-alive'}) cookie_obj1 = requests.cookies.create_cookie(domain='ivaservizi.agenziaentrate.gov.it',name='LFR_SESSION_STATE_20159',value='expired') s.cookies.set_cookie(cookie_obj1) cookie_obj2 = requests.cookies.create_cookie(domain='ivaservizi.agenziaentrate.gov.it',name='LFR_SESSION_STATE_10811916',value=unixTime()) s.cookies.set_cookie(cookie_obj2) r = s.get('https://ivaservizi.agenziaentrate.gov.it/portale/web/guest', verify=False) print('Collegamento alla homepage') cookieJar = s.cookies print('Effettuo il login') payload = {'_58_saveLastPath': 'false', '_58_redirect' : '', '_58_doActionAfterLogin': 'false', '_58_login': CF , '_58_pin': PIN, '_58_password': Password} r = s.post('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', data=payload) cookieJar = s.cookies liferay = re.findall(r"Liferay.authToken = '.*';", r.text)[0] p_auth = liferay.replace("Liferay.authToken = '","") p_auth = p_auth.replace("';", "") r = s.get('https://ivaservizi.agenziaentrate.gov.it/dp/api?v=' + unixTime()) cookieJar = s.cookies print('Seleziono il tipo di incarico') # payload = {'sceltaincarico': cfstudio + '-000', 'tipoincaricante' : 'incDiretto'} # r = s.post('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', data=payload) if profilo == 1: # Delega Diretta payload = {'cf_inserito': cfcliente}; r = s.post('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=delegaDirettaAction', data=payload); payload = {'cf_inserito': cfcliente, 'sceltapiva' : pivadiretta}; r = s.post('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=delegaDirettaAction', data=payload); # Me stesso elif profilo == 2: payload = {'sceltaincarico': cfstudio + '-000', 'tipoincaricante' : 'incDiretto'}; r = s.post('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=meStessoAction', data=payload) payload = {'sceltaincarico': cfstudio + '-000', 'tipoincaricante' : 'incDiretto', 'sceltapiva' : pivadiretta}; r = s.post('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=meStessoAction', data=payload); # Login per STUDIO ASSOCIATO else: payload = {'sceltaincarico': cfstudio + '-000', 'tipoincaricante' : 'incDelega', 'cf_inserito': cfcliente}; r = s.post('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', data=payload); payload = {'sceltaincarico': cfstudio + '-000', 'tipoincaricante' : 'incDelega', 'cf_inserito': cfcliente, 'sceltapiva' : pivadiretta}; r = s.post('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', data=payload); print('Aderisco al servizio') r = s.get('https://ivaservizi.agenziaentrate.gov.it/ser/api/fatture/v1/ul/me/adesione/stato/') cookieJar = s.cookies headers_token = {'x-xss-protection': '1; mode=block', 'strict-transport-security': 'max-age=16070400; includeSubDomains', 'x-content-type-options': 'nosniff', 'x-frame-options': 'deny'} r = s.get('https://ivaservizi.agenziaentrate.gov.it/cons/cons-services/sc/tokenB2BCookie/get?v='+unixTime() , headers = headers_token ) cookieJar = s.cookies tokens = r.headers xb2bcookie = r.headers.get('x-b2bcookie') xtoken = r.headers.get('x-token') s.headers.update({'Host': 'ivaservizi.agenziaentrate.gov.it'}) s.headers.update({'Referer': 'https://ivaservizi.agenziaentrate.gov.it/cons/cons-web/?v=' + unixTime()}) s.headers.update({'Accept': 'application/json, text/plain, */*'}) s.headers.update({'Accept-Encoding': 'gzip, deflate, br'}) s.headers.update({'Accept-Language': 'it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6'}) s.headers.update({'DNT': '1'}) s.headers.update({'X-XSS-Protection': '1; mode=block'}) s.headers.update({'Strict-Transport-Security': 'max-age=16070400; includeSubDomains'}) s.headers.update({'X-Content-Type-Options': 'nosniff'}) s.headers.update({'X-Frame-Options': 'deny'}) s.headers.update({'x-b2bcookie': xb2bcookie}) s.headers.update({'x-token': xtoken}) headers = {'Host': 'ivaservizi.agenziaentrate.gov.it', 'referer': 'https://ivaservizi.agenziaentrate.gov.it/cons/cons-web/?v=' + unixTime(), 'accept': 'application/json, text/plain, */*', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6', 'DNT': '1', 'x-xss-protection': '1; mode=block', 'strict-transport-security': 'max-age=16070400; includeSubDomains', 'x-content-type-options': 'nosniff', 'x-frame-options': 'deny', 'x-b2bcookie': xb2bcookie, 'x-token': xtoken, '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'} print('Accetto le condizioni') r = s.get('https://ivaservizi.agenziaentrate.gov.it/cons/cons-services/rs/disclaimer/accetta?v='+unixTime() , headers = headers_token ) cookieJar = s.cookies #print('controllo file') #r = s.get('https://ivaservizi.agenziaentrate.gov.it/ser/fatturewizard/html/partials/supporto/controllo.html?v='+now.strftime("%Y-%m-%d"), headers = headers) #seleziona file ## nome_file='IT02081640845_00001.xml' nr_file = 0 for root, dirs, files in os.walk("./inviocorrispettivi"): for file in files: print("Elenco file Corrispettivi da inviare: ", files) ext = [".xml", "XML"] if file.endswith(tuple(ext)): nome_file = file # print("Percorso", os.path.join(dirs)) print("Il nome file da inviare è", nome_file) with open('./inviocorrispettivi/' + nome_file, "rb") as f: headers_file= { 'Host': 'ivaservizi.agenziaentrate.gov.it', 'Cache-Control': 'max-age=0', 'sec-ch-ua': '"Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"', 'sec-ch-ua-mobile': '?0', 'Sec-Fetch-Site': 'same-origin', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'empty', 'Upgrade-Insecure-Requests': '1', 'accept': 'application/json, text/plain, */*', 'accept-encoding': 'gzip, deflate', 'accept-language': 'it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6', 'Origin': 'https://ivaservizi.agenziaentrate.gov.it', 'x-frame-options': 'deny', 'x-b2bcookie': xb2bcookie, 'x-token': xtoken, 'X-XSS-Protection': '1; mode=block', 'Strict-Transport-Security': 'max-age=16070400; includeSubDomains', 'Content-Type': 'application/xml;charset=utf-8', 'connection': 'keep-alive', 'X-Frame-Options': 'deny', 'x-nome-file': nome_file, 'X-Content-Type-Options': 'nosniff', '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'} print("Contenuto", f) r = s.post('https://ivaservizi.agenziaentrate.gov.it/cons/mass-services/rs/file/upload?tipoRichiesta=CORR',headers=headers_file, data=f) cookieJar = s.cookies print(r.status_code) if r.status_code == 500: print('Servizio dell''Agenzia delle Entrate non disponibile') print('Invio non andanto a buon fine, riprovare più tardi') print('Disconnessione in corso') r = s.get('https://ivaservizi.agenziaentrate.gov.it/portale/c/portal/logout') sys.exit() if r.status_code == 200: print('Invio file/files Corrispettivi inviato/i con successo!', nome_file) print("Codice invio Corrispettivi:", r.text) conservate = open(cfcliente+ "_corrispettivi.csv", 'a') conservate.write(nome_file) conservate.write(",") conservate.write(r.text) conservate.write(",") conservate.write(str(now) + "\n") conservate.close() nr_file = nr_file + 1 print("nr. files inviato/i --> ", nr_file) continue;