La un magazin online care vinde și către firme, checkout-ul trebuie să ceară mai multe date decât numele și adresa: denumirea firmei, CUI-ul, numărul de la registrul comerțului, uneori banca și IBAN-ul. Clienții le tastează de mână, iar o cifră greșită în CUI înseamnă o factură care trebuie corectată sau stornată după ce comanda a plecat.
Există o soluție simplă: după ce clientul introduce CUI-ul, magazinul interoghează API-ul public al ANAF și completează singur datele firmei. Mai jos explicăm cum funcționează, ce date pleacă spre ANAF, cum se configurează și ce am învățat lucrând cu acest API. Am pus totul într-un plugin gratuit, MaxDev Facturare cu ANAF for WooCommerce, disponibil pe WordPress.org.
De ce contează datele firmei la checkout
Un magazin care vinde atât persoanelor fizice, cât și firmelor are nevoie de două fluxuri diferite la checkout. Persoana fizică dă, de regulă, doar datele de livrare și, în anumite situații, CNP-ul. Firma dă denumirea, CUI/CIF, numărul de înregistrare la registrul comerțului și, opțional, banca și IBAN-ul.
Problema nu e că aceste câmpuri lipsesc, ci că se completează greșit. Un CUI cu o cifră greșită, o denumire scrisă altfel decât în registru sau un IBAN cu o literă în plus ajung toate în factură. Validarea locală prinde o parte din erori, adică un CUI sau un IBAN cu format invalid. Căutarea în ANAF elimină restul: clientul nu mai tastează datele firmei, ci le confirmă.
Cum funcționează căutarea după CUI
Când clientul introduce un CUI valid, serverul magazinului trimite către ANAF CUI-ul normalizat și data căutării. Nicio căutare nu se face la vizualizarea obișnuită a paginilor, ci doar după un CUI valid. Dacă ANAF răspunde, câmpurile disponibile în răspuns se completează automat în formular.
Poți alege între două moduri de lucru:
- Completare directă: datele găsite apar direct în câmpurile formularului.
- Sugestie cu confirmare: clientul vede datele găsite și decide dacă le acceptă.
Dacă clientul editează manual un câmp în timpul căutării, modificarea lui se păstrează. Rezultatele se rețin în cache pe server, ca același CUI să nu fie interogat de mai multe ori, iar timeout-ul cererii se poate regla din setări. Căutarea funcționează atât în checkout-ul clasic, cât și în Checkout Blocks.
Ce date pleacă spre ANAF și ce nu
Către ANAF pleacă doar CUI-ul normalizat și data căutării. Nu se trimit CNP-ul, numele clientului, emailul, adresa, coșul sau detaliile comenzii. ANAF primește, ca orice server, adresa IP a serverului magazinului și antetele HTTP standard.
Endpoint-ul folosit pentru verificarea CUI/CIF este public și nu cere cont, cheie API sau autentificare.
Ce se întâmplă când ANAF nu răspunde
Checkout-ul rămâne utilizabil. Clientul își poate introduce datele manual și poate continua comanda. Căutarea în ANAF este opțională și nu blochează finalizarea comenzii.
Configurare în câțiva pași
- Instalează și activează WooCommerce.
- Instalează și activează pluginul MaxDev Facturare cu ANAF for WooCommerce.
- Deschide WooCommerce, apoi Facturare cu ANAF.
- Configurează câmpurile pentru persoană fizică și pentru firmă, plus setările ANAF: vizibilitatea și obligativitatea fiecărui câmp, modul de completare, timeout-ul și cache-ul.
- Testează checkout-ul pe un mediu de staging înainte de producție.
Din setări găsești și un instrument de testare a conexiunii cu ANAF. Cerințele sunt WordPress 6.5 sau mai nou, WooCommerce 8.9 sau mai nou și PHP 7.4 sau mai nou.
Ce nu face pluginul
Pluginul colectează și stochează datele de facturare, dar nu emite facturi, proforme sau fișiere e-Factura. Nici banca și IBAN-ul nu vin din ANAF: rămân câmpuri pe care clientul le completează, dacă le ceri.
Datele se salvează în metadatele comenzii prin WooCommerce CRUD, iar pluginul declară compatibilitate cu HPOS. Pentru clienții autentificați, datele se păstrează și în profil, ca să nu le reintroducă la următoarea comandă.
Emiterea facturii e un pas separat: o faci din programul tău de facturare sau o automatizezi printr-o integrare API care preia datele comenzii. Pentru magazinul în sine, vezi dezvoltarea WooCommerce.
Ce am învățat lucrând cu API-ul ANAF
Am folosit API-ul ANAF de verificare a plătitorilor de TVA în mai multe proiecte. Iată câteva detalii care ne-au costat timp:
- Endpoint-ul s-a schimbat față de documentația veche. Formatul din documentație,
/PlatitorTvaRest/api/v8/ws/tva, răspunde constant cu 404. Cel actual estehttps://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva, cuapiînaintea numelui serviciului și fără/ws/. - Un 404 poate însemna două lucruri. Un CUI inexistent întoarce 404 cu corp JSON, în lista
notFound, iar un URL greșit întoarce 404 cu corp HTML. Decide după corpul răspunsului, nu după statusul HTTP, altfel o schimbare de URL arată ca un CUI negăsit. - Eroarea de rețea nu înseamnă CUI negăsit. Un timeout sau o eroare ANAF trebuie tratate separat de un CUI care nu există, iar rezultatul unei erori nu se pune în cache.
- Sediul social și domiciliul fiscal pot diferi. Câmpul text
adresavine din domiciliul fiscal. Pentru adresa sediului foloseșteadresa_sediu_social. - Diacriticele vin cu sedilă. ANAF returnează Ş și Ţ, cu sedilă, nu Ș și Ț, cu virgulă. Normalizează textul dacă îl compari cu alte surse.
Pluginul acoperă ambele tipuri de checkout: cel clasic și Checkout Blocks, prin Additional Checkout Fields API din WooCommerce 8.9 sau mai nou.
Instalare și stadiu
Pluginul este gratuit și îl găsești pe WordPress.org. Este o versiune timpurie, 0.1.2, așa că testează-l întâi pe staging. Dacă întâmpini probleme sau ai sugestii, folosește forumul de suport de pe pagina pluginului.
Întrebări frecvente
Pluginul emite facturi?
Nu. Colectează și stochează datele de facturare. Emiterea facturii rămâne în sarcina magazinului sau a unei integrări separate.
Trimite CNP-ul către ANAF?
Nu. Către ANAF se trimit doar CUI-ul normalizat și data căutării.
Am nevoie de cont sau cheie API ANAF?
Nu. Endpoint-ul pentru verificarea CUI/CIF este public și nu cere autentificare.
Funcționează cu Checkout Blocks?
Da, prin Additional Checkout Fields API din WooCommerce 8.9 sau mai nou. Funcționează și în checkout-ul clasic.
Ce se întâmplă dacă ANAF nu este disponibil?
Clientul își introduce datele manual și poate continua comanda.
Este compatibil cu HPOS?
Da. Datele comenzii se salvează prin WooCommerce CRUD, iar pluginul declară compatibilitatea cu HPOS.
