De ce ai nevoie de pluginul ăsta
Dacă vinzi prin WooCommerce cursuri online, abonamente, servicii recurente, produse high-ticket sau orice altceva ce implică termeni juridici (politică refund, GDPR, acord didactic, contract de prestări servicii) — atunci după plată ai nevoie ca clientul să semneze un contract înainte să livrezi. Până acum, asta însemna PDF-uri trimise pe email și speranță. Cu pluginul Zapis pentru WooCommerce, totul devine automat:
- Clientul plătește în magazinul tău (Stripe, PayPal, Cash on Delivery — orice gateway).
- Pe pagina de mulțumire vede un box vizibil cu buton „Semnează contractul acum".
- Ajunge pe Zapis cu datele lui pre-completate (nume, email, telefon, preț).
- Semnează cu mouse-ul sau degetul.
- Comanda din WooCommerce trece automat pe
Completed, iar PDF-ul semnat e accesibil din admin.
Tu nu mai urmărești PDF-uri pierdute pe Gmail. Clientul nu mai trebuie să printeze, scaneze și trimită înapoi.
Cum funcționează în 60 de secunde
Pluginul stă în WordPress și ascultă două hook-uri:
- La plata confirmată (
woocommerce_payment_completesau intrarea comenzii peprocessing) — face un POST la Zapis API cu datele comenzii și primește înapoi un signing link. Linkul e salvat ca meta pe comandă și afișat pe pagina de mulțumire + în email-ul către client. - Când clientul semnează — Zapis trimite webhook
contract.signedcătre WordPress; pluginul verifică semnătura HMAC, marchează comandaCompletedși salvează URL-ul PDF-ului semnat.
Toată legătura între cele două sisteme se face prin API key (autentificare WordPress → Zapis) și webhook secret (verificare Zapis → WordPress). Le generezi pe ambele din interfața Zapis.
Înainte să începi
Trebuie să ai:
- Un cont Zapis activ, cu o ofertă publicată (status: Publicată) care va servi drept șablon pentru contractul cumpărătorului.
- Un magazin WordPress + WooCommerce 8.0+ (PHP 7.4 minim, recomandat 8.1+).
- Drepturi de administrator pe ambele.
Pasul 1 — Activează integrarea de magazin în Zapis
În contul tău Zapis, mergi la Settings → Magazin (există un item dedicat în meniul de Setări).
- Bifează toggle-ul „Am un magazin online și vreau să integrez semnarea de contract".
- La Platformă alege WooCommerce (WordPress).
- La URL magazin pune URL-ul tău (ex:
https://shop-ul-meu.ro). - Salvează.
Importanță: până nu activezi această pagină, restul opțiunilor de magazin sunt ascunse în UI și API-ul de comenzi va respinge cererile cu un mesaj clar.
Pasul 2 — Generează un API key
În Settings → Integrări → API keys → Generate new key:
- Numele: „WooCommerce production" (sau orice altceva care să-l recunoști — un key per magazin).
- Apasă Generează.
- Copiază imediat valoarea (începe cu
zapis_). E afișată o singură dată; după ce închizi modalul, nu mai e recuperabilă — trebuie să generezi alta.
Securitate: tratează API key-ul ca pe o parolă. Dacă bănuiești că s-a compromis, revocă-l din Zapis (butonul Revoke) și generează unul nou — pluginul refuză imediat orice cerere cu key vechi.
Pasul 3 — Copiază UUID-ul ofertei „șablon"
Ai nevoie să spui pluginului care ofertă să folosească drept contract pentru fiecare comandă. Poți avea o singură ofertă șablon pentru tot magazinul, sau una per categorie de produs.
- Mergi la Oferte în Zapis.
- Alege oferta pe care vrei să o folosești (status: Publicată).
- Apasă Partajare pe oferta respectivă.
- În modal, găsește secțiunea „UUID ofertă (pentru integrări API)".
- Apasă butonul de copiere. UUID-ul arată ca:
9568f502-1634-4c33-adb3-9dd94ebd001d.
Pasul 4 — Adaugă endpoint webhook
În Settings → Integrări → Webhook endpoints → Add endpoint:
- URL:
https://shop-ul-tau.ro/?zapis_webhook=1(înlocuiește cu domeniul tău). Pentru testare locală cu wp-env, foloseștengrokca să expui WordPress-ul tău public. - Eveniment:
contract.signed. - Apasă Save.
- Zapis afișează o singură dată un secret (folosit pentru semnătura HMAC). Copiază-l.
Pasul 5 — Descarcă și instalează pluginul
Pluginul nu e (încă) pe WordPress.org. Îl iei de pe GitHub:
- Mergi la github.com/EkanMagnia/zapis-woocommerce/releases.
- Descarcă cea mai recentă versiune (fișier
zapis-woocommerce-x.y.z.zip). - În WordPress: Plugins → Add New → Upload Plugin. Selectează zip-ul și Install Now.
- După instalare, apasă Activate.
După activare, în sidebar-ul admin apare un meniu nou: Zapis Contracts (icon clipboard, sub WooCommerce).
Pasul 6 — Configurează pluginul
Mergi la Zapis Contracts (meniul din sidebar) și completează:
- API Key — valoarea de la pasul 2 (începe cu
zapis_). Pluginul validează formatul la salvare. - Default Offer UUID — UUID-ul de la pasul 3. Va fi folosit pentru orice produs care nu are un UUID propriu setat.
- Webhook Secret — secret-ul de la pasul 4. Fără el, pluginul respinge orice webhook (cod 503).
- Zapis Base URL (opțional) — lasă gol pentru producție (
https://zapis.io). Setează doar dacă rulezi Zapis pe staging propriu.
Apasă Save Changes. Dacă vreun câmp e invalid (ex: API key fără prefix zapis_, UUID malformat), e respins și câmpul rămâne gol — verifică valorile.
Pasul 7 — Personalizează box-ul de semnătură
Pe aceeași pagină, mai jos, găsești secțiunea „Box semnătură pe pagina de mulțumire". Aici controlezi cum arată invitația de semnare pe care o vede clientul după plată.
Toate câmpurile sunt opționale — lasă-le goale și pluginul folosește textele default („Un ultim pas — semnează contractul", etc.).
- Titlu — apare în partea de sus a box-ului (ex: „Mai e un singur pas").
- Text body — editor WYSIWYG cu suport pentru bold, italic, link-uri, liste. Aici poți spune clientului exact ce semnează și de ce.
- Text buton — CTA-ul de pe buton (ex: „Semnează acum →").
- Culoare gradient — start și final — color picker WP pentru fundalul în gradient al box-ului. Default: indigo → violet. Schimbă-le ca să se asorteze cu paleta magazinului tău.
Salvarea actualizează imediat box-ul pe toate paginile de comandă cu contract pending.
Override Offer UUID per produs
Dacă vinzi mai multe categorii de produse care au nevoie de contracte diferite (ex: cursurile au un acord didactic, abonamentele au alți termeni), poți seta un UUID specific pe fiecare produs:
- Mergi la Products → [produsul tău] → Edit.
- În tab-ul General din metadata produsului găsești câmpul Zapis Offer UUID.
- Pune UUID-ul specific (preluat din Share modal-ul ofertei).
- Salvează produsul.
La comenzi cu produse mixte, pluginul folosește UUID-ul primului produs cu UUID setat; dacă niciun produs nu are, cade pe Default Offer UUID.
Cum arată fluxul pentru cumpărător
- Cumpărătorul adaugă produs în coș, merge la checkout, completează datele, plătește.
- Pe pagina de Order received, deasupra detaliilor comenzii, apare box-ul cu gradient: titlu, descriere, buton CTA, footer „🔒 Securizat de Zapis".
- Primește și un email de confirmare cu același link de semnare.
- Apasă pe buton → ajunge pe Zapis cu nume, email, telefon și valoarea comenzii deja completate.
- Citește contractul, semnează cu mouse-ul sau degetul, finalizează.
- E redirecționat înapoi pe magazinul tău (pagina de mulțumire updatată) sau primește confirmare pe email că PDF-ul e gata.
În admin: meta box-ul Zapis Contract pe comanda respectivă afișează status-ul (Pending → Signed), submission UUID, link semnare, link PDF semnat (după finalizare), și un buton „Resend signing email" pentru cazurile când clientul a uitat să semneze.
Troubleshooting
Box-ul nu apare pe pagina de mulțumire
Cauze posibile:
- Comanda nu a primit submission UUID — pluginul n-a apucat să facă POST la Zapis. Verifică WP debug.log și că plata declanșează hook-ul
woocommerce_payment_complete. Cash on Delivery nu îl declanșează — vezi mai jos. - Default Offer UUID nu e setat sau produsul are UUID invalid. În admin → meta box-ul comenzii afișează „No contract has been sent" — re-verifică settings-urile.
Cash on Delivery: comanda trece la „processing", nu la „payment_complete"
La COD, WooCommerce nu declanșează woocommerce_payment_complete. Pluginul ascultă și pe woocommerce_order_status_processing, deci ar trebui să meargă din v0.2+. Dacă nu, schimbă manual status-ul comenzii la Completed sau folosește un gateway online (Stripe, PayPal).
Webhook nu ajunge la WordPress
În Zapis: Settings → Integrări → Webhook deliveries arată statusul fiecărui webhook trimis. Dacă vezi:
- Connection refused / timeout — URL-ul webhook nu e accesibil public. Pe localhost folosește
ngrok(ngrok http 80) și pune URL-ul ngrok ca webhook URL. - 401 Invalid signature — secret-ul diferă între Zapis și WordPress. Re-copiază secret-ul din Zapis și salvează-l în Zapis Contracts.
- 503 Webhook secret missing — câmpul Webhook Secret e gol în WordPress.
API key respins
Câmpul rămâne gol după salvare → valoarea nu începe cu zapis_. Re-generează din Zapis și copiază integral.
Offer UUID respins
Formatul corect e UUID v4: 8-4-4-4-12 caractere hex (ex: 9568f502-1634-4c33-adb3-9dd94ebd001d). Dacă lipsește o cratimă sau ai copiat doar o parte, e respins.
Ce e în roadmap
- Plugin oficial WordPress.org — pentru instalare 1-click direct din admin (în curs).
- Aplicație Shopify — același flow, dar pentru Shopify (Q3 2026).
- Domeniu personalizat pe Zapis — clientul vede
contracte.magazinul-tau.roîn loc dezapis.io. Vezi articolele din această categorie pentru update-uri. - Conector Make.com / Zapier — pentru cei care nu vor să atingă WordPress.
Probleme sau întrebări?
Deschide ticket de suport din Settings → Suport sau scrie pe support@zapis.io. Pentru bug-uri tehnice și PR-uri pe plugin: github.com/EkanMagnia/zapis-woocommerce/issues.