Stripe integracija v Račun123 (vodič korak za korakom)
Ta vodič te bo v nekaj minutah pripeljal do tega, da se po Stripe plačilu
račun samodejno ustvari, davčno potrdi in pošlje stranki.
Po koncu vodiča bo Stripe samodejno pošiljal podatke v Račun123, Račun123 pa bo ustvaril račun brez ročnega dela.
Če uporabljaš enkratna Stripe plačila, sledi osnovni nastavitvi spodaj. Če uporabljaš naročnine, obnovitve ali nadgradnje, obvezno preberi tudi poseben del za naročnine.
1. Odpri Stripe integracijo v Račun123
Pojdi na Nastavitve → Več nastavitev → Integracije → Stripe.
Tukaj vidiš:
- Webhook URL
- Webhook skrivnost (prazno polje)
- ID podjetja (companyId)
Produkcijski Webhook URL je:
https://moj.racun123.si/api/integrations/stripe-invoicing
👉 To stran pusti odprto, ker boš podatke potreboval v naslednjih korakih.
2. Dodaj webhook v Stripe
Odpri Stripe Dashboard:
Nato klikni Add endpoint.
Korak 1 (Stripe ekran, ki zmede)
Ko klikneš Add endpoint, Stripe najprej vpraša, za kateri račun želiš prejemati dogodke.
- izberi Your account (levo)
- klikni Continue
Polje za URL se prikaže šele po kliku Continue. Zato ga na prvem ekranu še ne vidiš.
Alternativa: najdi Webhooks preko iskanja
Če v meniju ne najdeš “Developers”, lahko uporabiš iskanje v Stripe:
- v zgornje iskalno polje vpiši: webhooks
- klikni na Webhooks ali Create a webhook

V polje Endpoint URL prilepi:
https://moj.racun123.si/api/integrations/stripe-invoicing
Obvezna eventa za izdajanje računov
Nato klikni Select events in izberi:
checkout.session.completed invoice.paid
Brez teh dveh eventov Račun123 ne more pravilno zaznati uspešnega plačila pri enkratnih plačilih in pri naročninah.
Po želji lahko dodaš še:
customer.subscription.updated
Ta event je uporaben za spremljanje sprememb naročnin (paket, status, dostop), ni pa potreben za samo izdajanje računov.
Če uporabljaš naročnine, je invoice.paid obvezen. Brez njega se računi za obnovitve ali določene nadgradnje ne bodo ustvarjali.
3. Poveži webhook skrivnost
Odpri webhook, ki si ga pravkar ustvaril.
Pri “Signing secret” klikni Reveal.
Kopiraj vrednost, ki se začne z whsec_, in jo prilepi v Račun123 v polje:
Webhook skrivnost
Kako veš, da je webhook pravilno nastavljen?
Ko je webhook pravilno dodan, moraš v Stripe videti:
- status Active
- pravilen Endpoint URL
- izbrana eventa checkout.session.completed in invoice.paid
- viden Signing secret (whsec_…)
Če si dodatno vključil tudi customer.subscription.updated, je to samo plus.
👉 Če vidiš to, je webhook pravilno nastavljen.
Pogosta napaka: napačen način (Test / Live)
Stripe ima ločen Test in Live način.
- Webhook mora biti dodan v istem načinu, kot delaš test ali produkcijo
👉 Če testiraš v Test mode, webhook v Live mode ne bo deloval.
4. Dodaj companyId v Stripe plačilni flow
V vsak Stripe flow moraš poslati:
metadata: {
companyId: "tvoj-id"
}In email kupca:
customer_email: user.emailČe companyId manjka, Račun123 ne ve, v katero podjetje mora ustvariti račun.
Če imaš enkratne nakupe
Običajno zadostuje:
- Stripe Checkout
- checkout.session.completed
- metadata.companyId
- email kupca
V tem primeru je nastavitev praviloma enostavnejša.
Če imaš naročnine, obnovitve ali nadgradnje
Poleg osnovne nastavitve moraš paziti še na to:
- da uporabljaš tudi invoice.paid
- da uporabljaš isti Stripe customer za istega kupca
- da je logika povezave med Stripe stranko in podjetjem v Račun123 dosledna
- da so nadgradnje in proracije pravilno vezane na isti subscription/customer flow
Če uporabljaš naročnine:
mode: 'subscription'
Pri enkratnem nakupu običajno zadostuje, da metadata pošlješ v Checkout Session. Pri naročninah, obnovitvah in nadgradnjah pa mora biti logika zastavljena tako, da lahko Račun123 tudi kasneje pravilno poveže plačilo z istim podjetjem in istim uporabnikom.
Hitri povzetek: končna konfiguracija
A) Končna konfiguracija za enkratna plačila
Ta primer je namenjen uporabnikom, ki imajo one-time purchase, torej enkratna Stripe plačila brez naročnin.
V Stripe nastavi:
- Webhook endpoint URL:
https://moj.racun123.si/api/integrations/stripe-invoicing - Webhook event:
checkout.session.completed
V Račun123 nastavi:
- Webhook skrivnost (whsec_…)
- po potrebi vklopi:
- Samodejno davčno potrjevanje
- Samodejno pošiljanje računa po e-pošti
V kodi pošlji:
customer_email: user.email,
metadata: {
companyId: "VAŠ_COMPANY_ID"
}Povzetek
Če imaš enkratna plačila, je to glavni trigger za račun:
checkout.session.completed.
B) Končna konfiguracija za naročnine
Ta primer je namenjen uporabnikom, ki imajo subscriptions, torej mesečne ali letne naročnine, obnovitve in nadgradnje paketov.
V Stripe nastavi:
- Webhook endpoint URL:
https://moj.racun123.si/api/integrations/stripe-invoicing - Obvezna webhook eventa:
- checkout.session.completed
- invoice.paid
- Po želji dodatno:
- customer.subscription.updated
V Račun123 nastavi:
- Webhook skrivnost (whsec_…)
- po potrebi vklopi:
- Samodejno davčno potrjevanje
- Samodejno pošiljanje računa po e-pošti
V kodi pošlji:
mode: 'subscription',
customer_email: user.email,
metadata: {
companyId: "VAŠ_COMPANY_ID"
}Dodatno priporočilo za naročnine
- uporabljaj isti Stripe customer za istega uporabnika
- nadgradnje in obnovitve naj tečejo prek iste subscription logike
- račun za obnovitve in nadgradnje se pogosto ustvari na invoice.paid, ne na checkout eventu
Povzetek
Če imaš naročnine, obnovitve ali nadgradnje, je za računovodsko logiko ključen predvsem
invoice.paid.
Enkratna plačila → nastavi vsaj checkout.session.completed
Naročnine → nastavi obvezno invoice.paid + priporočeno tudi checkout.session.completed
5. Testiraj povezavo
V Stripe vklopi Test mode.
Če imaš enkratne nakupe
Testiraj vsaj:
- enkratno plačilo
Preveri:
- ali se pojavi checkout.session.completed
- ali se v Račun123 zabeleži dogodek
- ali se ustvari pravilen račun
Če imaš naročnine
Testiraj vsaj:
- novo naročnino
- obnovo naročnine
- nadgradnjo obstoječe naročnine
Preveri:
- ali se pojavi invoice.paid
- ali se zapis pojavi v dnevniku webhookov v Račun123
- ali se ustvari pravilen račun
Če uporabljaš Sandbox način v Račun123:
- dogodek se zabeleži v dnevnik
- račun se še ne ustvari zares
6. Vklopi avtomatiko
Ko test deluje, vklopi:
- ✅ Samodejno davčno potrjevanje
- ✅ Samodejno pošiljanje računa po e-pošti
Po potrebi nastavi še:
- oznako poslovnega prostora
- oznako naprave
- operaterja
7. Izklopi Sandbox
Ko vse dela:
Izklopi Sandbox način
👉 Od tega trenutka naprej se računi dejansko ustvarjajo.
Kako Stripe integracija deluje v praksi?
Ključno pravilo je naslednje:
To pomeni, da se račun ne ustvari ob vsakem Stripe eventu, ampak ob pravem plačilnem eventu za posamezen scenarij.
A) Enkratno plačilo preko Stripe Checkout
- uporabnik opravi enkratni nakup
- Stripe pošlje checkout.session.completed
- Račun123 ustvari račun
B) Prva sklenitev naročnine
- uporabnik začne naročnino
- običajno dobiš checkout.session.completed, pogosto pa tudi invoice.paid
- pri naročninah je za zanesljivo računovodsko logiko pomemben tudi invoice.paid
C) Obnova naročnine
- Stripe praviloma ne naredi novega checkouta
- ustvari invoice in po uspešnem plačilu pošlje invoice.paid
- račun se zato ustvari na invoice.paid
D) Nadgradnja paketa med obračunskim obdobjem
- Stripe lahko izračuna razliko oziroma proracijo
- v takem primeru lahko pride samo invoice.paid, brez novega checkout.session.completed
- zato mora integracija za nadgradnje poslušati tudi invoice.paid
E) Sprememba statusa naročnine
- sprememba paketa
- premor naročnine
- preklic
- sprememba obdobja
V teh primerih je customer.subscription.updated uporaben za sinhronizacijo stanja ali dostopa, ne pa kot glavni trigger za račun.
Hitra tabela: scenarij → kateri event ustvari račun?
| Scenarij | Glavni event za račun | Račun izdan? | Opomba |
|---|---|---|---|
| Enkratni nakup | checkout.session.completed | DA | Klasičen Stripe Checkout z uspešnim plačilom |
| Prva naročnina | checkout.session.completed in/ali invoice.paid | DA | Račun se izda ob uspešno plačanem začetku naročnine |
| Obnova naročnine | invoice.paid | DA | Ni novega checkouta, Stripe ustvari invoice |
| Nadgradnja paketa z doplačilom | invoice.paid | DA | Pogosto gre za proracijo ali razliko, ki jo Stripe zaračuna |
| Sprememba statusa naročnine brez plačila | customer.subscription.updated | NE | Sam update statusa še ne pomeni, da je bilo karkoli plačano |
| Preklic naročnine brez novega plačila | customer.subscription.updated ali drug subscription event | NE | Preklic ali sprememba obdobja sama po sebi ne izda računa |
| Neuspešno plačilo naročnine | Ni uspešnega invoice.paid | NE | Če plačilo ni uspešno, se račun ne izda |
Če imaš enkratna plačila, je ključen checkout.session.completed. Če imaš naročnine, obnovitve ali nadgradnje, je ključen invoice.paid.
Kako deluje na kratko?
- Stripe pošlje ustrezen webhook
- Račun123 prebere dogodek
- ustvari račun v pravem podjetju
- po potrebi ga davčno potrdi
- pošlje PDF na email
Ni več ročnega izdajanja računov. Tudi pri naročninah in nadgradnjah lahko vse teče avtomatsko.
Če nekaj ne dela (hitri checklist)
Ni webhooka?
- Preveri URL
- Preveri ali si v pravem načinu (Test / Live)
Ni računa pri enkratnem plačilu?
- Preveri checkout.session.completed
- Preveri companyId
Ni računa pri naročnini, obnovitvi ali nadgradnji?
- Preveri invoice.paid
- Preveri ali Stripe za ta scenarij sploh ustvari invoice
- Preveri metadata oziroma companyId logiko
Se je naročnina spremenila, račun pa ne?
- customer.subscription.updated sam po sebi še ne pomeni, da je bil invoice plačan
- račun se mora vezati na dejansko uspešno plačilo oziroma invoice flow
Ni emaila?
- Email ni poslan v Stripe flow
- Pošiljanje emaila ni vklopljeno
Pogosta vprašanja
Ali zadošča samo checkout.session.completed?
Ne, če uporabljaš naročnine. Za naročnine, obnovitve in nadgradnje potrebuješ tudi invoice.paid.
Ali moram vključiti customer.subscription.updated?
Priporočljivo da. Uporaben je za spremembe paketa, statusa in dostopa. Ni pa najboljši glavni trigger za izdajanje računa.
Ali se račun ustvari ob vsakem Stripe eventu?
Ne. Račun se ustvari ob eventu, ki pomeni dejansko uspešno plačilo za konkreten scenarij.
Ali se račun ustvari vsakič, ko podjetnik prejme denar prek Stripe?
Načeloma da. Pri enkratnih nakupih običajno ob checkout.session.completed, pri naročninah, obnovitvah in mnogih nadgradnjah pa ob invoice.paid.
Ali lahko imam več podjetij?
Da, vsako podjetje ima svoj companyId.
Ali moram imeti davčno potrjevanje?
Če posluješ z gotovino, karticami ali spletnimi plačili, je to pogosto potrebno. Več si lahko prebereš v članku
Kdaj je davčno potrjevanje potrebno?.
Potrebuješ pomoč pri Stripe integraciji?
Če imaš težave pri povezavi Stripe ali se računi ne ustvarjajo pravilno, smo ti z veseljem na voljo.
Piši nam na podpora@racun123.si ali nam pošlji sporočilo prek
kontaktnega obrazca.
Skupaj bomo hitro preverili nastavitve in poskrbeli, da integracija deluje brezhibno.
