prosessi tilaukset-laskutus valmis metodi v2 päivitetty 2026-08-12 git 944016d
Lähteet (koodi)
  • backend/lambdas/stripe_webhook/handler.py
  • backend/lambdas/generate/saas_onboarding.py
  • deployment/template.yaml

Stripe-tapahtuman käsittely

Yhteenveto

Tämä on ainoa moduulin sisääntulopiste, joka ei tule VeraFramen omasta käyttöliittymästä. Käsittelijä on tarkoituksella ohut: se tunnistaa tenantin ja delegoi säännöt saas_onboarding.py:lle, jotta sama logiikka toimii myös skripteistä ja kirjautumisesta.

Sekvenssi

sequenceDiagram
    participant Stripe
    participant WH as stripe_webhook.handler
    participant Lock as StripeWebhookEventTable
    participant Onb as saas_onboarding
    participant Store as CONFIG_BUCKET
    participant DLQ as SQS DLQ

    Stripe->>WH: POST /api/v1/billing/stripe/webhook
    WH->>WH: verify_stripe_signature (HMAC, v1)
    WH->>Lock: _try_claim_event (ehdollinen put_item)
    Lock-->>WH: claimed | processed
    alt jo käsitelty
        WH-->>Stripe: 200 { duplicate: true }
    else
        WH->>WH: tapahtumatyypin haarautus
        WH->>Onb: provision_saas_tenant / update_saas_subscription
        Onb->>Store: config.json (koko dokumentti)
        WH->>Lock: _mark_event_processed
        WH-->>Stripe: 200 { received: true }
    end
    Note over WH,DLQ: poikkeus → _release_event_claim + _send_to_dlq → 500

Vaiheet

Vaihe 1 — Allekirjoituksen tarkistus

Vaihe 2 — Idempotenssivaraus

Vaihe 3 — Tenantin tunnistus

Vaihe 4 — Tapahtumatyypin haarautus

Tapahtuma Toimenpide Tila johon kirjoitetaan Metadatan lähde
checkout.session.completed Tenantin provisiointi (ei näytteessä) active session metadata
customer.subscription.updated Tilauksen tilan päivitys (ei näytteessä) Stripen tila sellaisenaan, oletus active tilauksen metadata
customer.subscription.deleted Tilan päivitys canceled → armonaika käynnistyy tilauksen metadata
invoice.payment_failed Tilan päivitys past_duekaikki tuotteet kiinni subscription_details.metadata tai metadata
invoice.paid Tilan päivitys active subscription_details.metadata tai metadata

Kaksi yksityiskohtaa, jotka kannattaa tietää:

Vaihe 5 — Valmistuminen tai DLQ

Virhetilanteet

Tilanne Käytös Kutsujalle Koodi
STRIPE_WEBHOOK_SECRET puuttuu ei käsittelyä 503 Stripe webhook ei ole konfiguroitu stripe_webhook/handler.py:42
Allekirjoitus ei täsmää tai puuttuu ei käsittelyä 400 Virheellinen Stripe signature stripe_webhook/handler.py:45
Kuorma ei ole JSONia ei käsittelyä 400 Virheellinen JSON stripe_webhook/handler.py:48
Tapahtuma jo käsitelty ei käsittelyä 200 {duplicate: true} stripe_webhook/handler.py:59
Tunnistamaton tapahtumatyyppi ei käsittelyä, merkitään käsitellyksi 200 stripe_webhook/handler.py:125
Tenanttia ei löydy metadatasta eikä Stripe-tunnuksella ei käsittelyä, merkitään käsitellyksi 200 stripe_webhook/handler.py:79, stripe_webhook/handler.py:93, stripe_webhook/handler.py:106, stripe_webhook/handler.py:117
Käsittely heittää varaus vapautetaan, kuorma DLQ:hun 500 Sisainen palveluvirhe stripe_webhook/handler.py:127stripe_webhook/handler.py:132
DLQ-kirjoitus heittää vain loki (ei muuta vastausta) stripe_webhook/handler.py:265

Hiljainen kuittaus on tässä tarkoituksellinen valinta: tuntematon tyyppi ja löytymätön tenantti saavat 200:n, jotta Stripe ei uusi niitä ikuisesti. Se tarkoittaa myös, ettei tenantin tunnistuksen epäonnistumisesta jää jälkeä mihinkään — ei DLQ:hun eikä hälytykseen.

Liittyvät