LICOMP srl Alba Iulia

Tutorial e-Factura ANAF web API token JWT

by Vasile Borza 

Întregul tutorial se rulează în browserul client. Nu se transmite nimic spre server.

Aplicația Curl poate fi downloadă și instalată de aici: curl for Windows

Documentație privind Curl: curl - The Art Of Scripting HTTP Requests Using Curl

Pentru testarea cu acest simulator a funcționalităților web API ANAF (standardul oauth2) utilizând aplicația sigură și gratuită Curl, se va proceda în felul următor: 

  • se va crea un shortcut pe Desktop pentru cmd.exe

  • se va configura pentru shortcutul creat locația: Start in (directorul de lansare)  la adresa in C:\.....\Curl\curl-8.5.0_4-win64-mingw\bin (adresa unde  a fost dezarhivat Curl)

Aplicația înrolată la ANAF: Efactura-XYZ

client_id Client id obținut la înrolarea aplicației:   

client_secret Client secret obținut la înrolarea aplicației:  

redirect_uri Adresa de Callback a aplicației (adresa web declarată poate fi orice adresa a unui site web funcțional declarată la înregistrarea la  ANAF)

anaf_uri_auhorization Adresa pentru obținere cod intermediar care expira: apelare GET 

response_type_code Comandă pentru obținere cod tranzactie:  

token_content_type Parametru obținere cod jwt autorizare:  

Ramura('code_jwt') (click pe buton) Doar în acest moment (și pentru o scurtă durată de timp), este solicitată și necesară prezentarea certificatului digital.

Propunere pentru echipa tehnică ANAF

16.03.2024

Propun introducerea unui parametru suplimentar la obținerea codului de autorizare &family=X (un caracter) în vederea obținerii tokenului JWT.  Acest parametru să fie legat din punct de vedere informatic, de certificatul digital pe baza caruia se generează codul de autorizare destinat obținerii tokenului JWT. Toate Tokenurile virtuale  generate ulterior (pentru upload sau refresh), să conțina în interior acest parametru. Tokenurile virtuale să fie validate la utilizare și din acest punct de vedere, adică să aparțină familiei actuale specificată la obținerea ultimului cod de autorizare pe certificatul respectiv (codul optional  family). O solicitare de nou token cu o altă valoare a parametrului &family=Y făcută de titularul certificatului digital, să conducă automat la invalidarea accesului întregii familii de tokenuri virtuale existente anterior care contin în interor parametrul family=X.

code Cod tranzacție obținut în linia de comandă din browser și care expiră 

grant_type Comandă pentru obținere Nivel de autorizare:  

Anaf_uri_token Adresa ANAF pentru obținere Token sau Token refresh apelare POST 

Ramura('token_jwt_new') (click pe buton)

Răspuns primit la cerere de nou token JWT de la ANAF

token_jwt_upload Valoare token JWT obținută mai sus 

token_jwt_refresh Valoare token refresh JWT obținută mai sus 

anaf_uri_hello Adresa ANAF pentru a interoga funcționare token apelare GET

Ramura('hello_curl_jwt') (click pe buton)

grant_type_refresh Comanda pentru obținere refresh token:

Ramura('token_jwt_refresh') (click pe buton)

 

token_jwt_data_expira Informație accesibila (vezi mai jos) dupa decodificare token JWT (Json Web Token)  ca format base64. Este o valoare exprimată în secunde față de reperul absolut 01.01.1970.

{
  "alg":"RS512",
  "kid":"anaf_2023_2024"
}{
  "token_type":"Bearer",
  "scope":"clientappid issuer role serial",
  "scope_data":[
    {
        "id":"clientappid",
        "value":"08a3f.............................3ee71d0c429e65"
    },
    {
        "id":"issuer",
        "value":"DigiSign"
    },
    {
        "id":"role",
        "value":"HELLO,EFACTURA,ETRANSPORT,SRV_EFACTURA"
    },
    {
        "id":"serial",
        "value":"20:0...................................49:64:0f"
    }
  ],
  "iss":"https://logincert.anaf.ro",
  "clientappid":"08a3fb.....................................................................29e65",
  "efactura":"EFACTURA@SRV_EFACTURA",
  "etransport":"ETRANSPORT",
  "hello":"HELLO",
  "issuer":"DigiSign",
  "roles":"HELLO@EFACTURA@ETRANSPORT@SRV_EFACTURA",
  "serial":"20:0.....................................:64:0f",
  "sub":"200.........................640f",
  "jti":"5ca6..................................................e98023432d",
  "iat":1706875254,
  "exp":1714651254,
  "nbf":1706874954

Data expirare= 01.01.1970+1714651254/3600/24 (secunde convertite in nr. zile)=02.05.2024

 

Selectează aici factura in format .xml

Calea absolută pentru fișierul uploadat pentru comanda upload in Curl

anaf_uri_upload Adresa ANAF pentru a face un upload de fișier apelare POST

cif  Cif pentru care se face upload

Ramura('curl_jwt_upload') (click pe buton)

Răspuns dupa upload cu succes a fișierui .xml (a facturii)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<header xmlns="mfp:anaf:dgti:spv:respUploadFisier:v1" dateResponse="202401132008" ExecutionStatus="0" index_incarcare="5006096656"/>

mesaj_index_incarcare Indexul de încărcare al facturii din raspunsul anterior

anaf_uri_stare Adresa ANAF pentru a constata validarea unui fișier uploadat anterior apelare GET

Ramura('curl_jwt_stare_mesaj_trimis')

Raspuns dupa interogare 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><header xmlns="mfp:anaf:dgti:efactura:stareMesajFactura:v1" stare="ok" id_descarcare="3008662942"/>

anaf_uri_descarcare Adresa ANAF pentru a descarca factura incarcata anterior apelare GET

mesaj_index_descarcare Indexul de descarcare al facturii din raspunsul de mai sus 

Ramura('curl_jwt_descarca_mesaj')

anaf_uri_listare Adresa ANAF pentru a lista mesaje facturi incarcate anterior apelare GET

nr_zile Numarul de zile pentru care se solicita listarea mesajelor incarcate 

Ramura('curl_jwt_lista_mesaje')

Raspuns in fisier text dupa interogare

{"mesaje":[{"data_creare":"202401132004","cif":"17...15","id_solicitare":"5006096454","detalii":"Factura cu id_incarcare=5006096454 emisa de cif_emitent=17...15 pentru cif_beneficiar=5696206","tip":"FACTURA TRIMISA","id":"3008615564"},{"data_creare":"202401132002","cif":"17...15","id_solicitare":"5006096058","detalii":"Factura cu id_incarcare=5006096058 emisa de cif_emitent=17...15 pentru cif_beneficiar=5696206","tip":"FACTURA TRIMISA","id":"3008614996"},{"data_creare":"202401132010","cif":"17...15","id_solicitare":"5006096656","detalii":"Factura cu id_incarcare=5006096656 emisa de cif_emitent=17...15 pentru cif_beneficiar=5696206","tip":"FACTURA TRIMISA","id":"3008662942"}],"serial":"2005062450017e670dd00688a649640f","cui":"47031925,36999340,48952138,2590720011128,42904069,4562834,16436678,17...15,48253474,46334238,48702247,29556145","titlu":"Lista Mesaje disponibile din ultimele 3 zile"}

Categorii de mesaje:  (aici doar cu rol informativ)

Ramura('curl_jwt_lista_mesaje_primite)

{"mesaje":[{"data_creare":"202402212336","cif":"17...15","id_solicitare":"4180409567","detalii":"Factura cu id_incarcare=4180409567 emisa de cif_emitent=22043010 pentru cif_beneficiar=17...15","tip":"FACTURA PRIMITA","id":"3263960843"},{"data_creare":"202402231920","cif":"17...15","id_solicitare":"4177851976","detalii":"Factura cu id_incarcare=4177851976 emisa de cif_emitent=427320 pentru cif_beneficiar=17...15","tip":"FACTURA PRIMITA","id":"3259028370"}],"serial":"2005062450017e670dd00688a649640f","cui":"17...15,4562834,16436678,29556145,36999340,42904069,46334238,47031925,48253474,48702247,48952138,2590720011128","titlu":"Lista Mesaje disponibile din ultimele 5 zile"}

index_descarcare_mesaj_furnizor Indexul de descarcare al facturii furnizorului obtinut din lista de mai sus: 

Ramura('curl_jwt_descarca_factura_primita')

 

anaf_uri_xml_to_pdf Adresa ANAF pentru generarea din fisier xml in forma .pdf, apelare POST 

Ramura('curl_jwt_xml_to_pdf') (fișierul xml se va selecta mai sus și se va completa corect și câmpul care conține calea spre fișier).

 

 Dupa Creare fisier (butonul alaturat) downloadeaza fisierul si copiaza continutul in memorie iar fisierul va trebui sters din downloadari 

Dacă dorești să ne transmiți un mesaj, poți să o faci pe aici!

Adresa E-Mail
Nume
Mesaj
Anti Bot Image   
  

Prezentare servicii web pentru Sistemul national privind factura electronica RO e-Factura