Internal Documentation internal
TalkIDE internal documentation

Interní provozní zápis — postup přechodu Stripe integrace z test mode na live mode. Žádné kroky nezasahují do kódu ani Helm šablon.


Architektura tajemství

  • Stripe klíče nejsou v gitu. BE čte STRIPE_SECRET_KEY + STRIPE_WEBHOOK_SECRET z K8s Secretu stripe-creds (ns talkide, klíče secretKey / webhookSecret) přes secretKeyRef v talkide-infra Helm be-deployment.yaml.
  • FE publishable key VITE_STRIPE_PUBLISHABLE_KEY se zapéká při Docker buildu přes --build-arg z GitLab CI/CD variable (projekt talkide-fe). FE nikdy nedrží secret key.
  • Webhook endpoint POST /api/v1/stripe/webhook je permitAll v SecurityConfig, ingress bez path filtru — autentizace dělá Stripe-Signature HMAC v BE.

Aktuální stav (test/sandbox mode)

  • K8s Secret stripe-creds naplněn sandbox hodnotami: sk_test_... + persistentní test-mode whsec_... z webhook endpointu vytvořeného přes Stripe API (url=https://api.talkide.app/api/v1/stripe/webhook).
  • GitLab CI variable VITE_STRIPE_PUBLISHABLE_KEY = sandbox pk_test_....
  • Reálné peníze netečou.

Live flip procedura

Provede se až po aktivaci live Stripe účtu (ruční akce člověka v Stripe Dashboardu — neautomatizovatelné).

  1. Ve Stripe Dashboardu v LIVE mode vytvořit webhook endpoint na stejnou URL https://api.talkide.app/api/v1/stripe/webhook → dostaneš LIVE whsec_live_... (odlišný od test-mode whsec).
  2. Aktualizovat K8s Secret stripe-creds:
    kubectl -n talkide create secret generic stripe-creds \
      --from-literal=secretKey=sk_live_... \
      --from-literal=webhookSecret=whsec_live_... \
      --dry-run=client -o yaml | kubectl apply -f -
    
  3. GitLab CI variable VITE_STRIPE_PUBLISHABLE_KEY změnit na pk_live_... (Settings → CI/CD → Variables v projektu talkide-fe).
  4. Rebuild FE image (CI manual trigger, ~5–10 min CI minut) + rolling restart BE deploymentu (aby načetl nový secret):
    kubectl -n talkide rollout restart deployment/talkide-be
    
  5. Pořadí je závazné: secret + CI variable první, pak rebuild/restart. Žádná změna kódu ani Helm šablon.

Gapy před live flipem (nutno vědomě uzavřít)

Viz také specification/limitations.md sekce Stripe.

  • Zaseklý PENDING top-up — pokud webhook payment_intent.succeeded nedorazí, peníze jsou stržené ale kredit nepřipsaný. Chybí reconciliation job / admin UI.
  • Účtenky/faktury za top-up — Stripe generuje PaymentIntent recepty, ale TalkIDE nemá vlastní faktury/PDF pro B2B (daňový doklad). Mockup stav.
  • Tax/VAT — žádná daňová kalkulace, EU VAT neimplementováno.
  • Refund policy — chybí refund flow (admin ani user-initiated).
  • 3DS/SCA (EU live) — v live mode mohou banky vyžadovat 3D Secure pro evropské karty. Před flipem otestovat průchod 3DS kartou (4000 0000 0000 3220) v live test session. Stripe Elements to řeší FE-side, ale BE musí správně zpracovat requires_action stav PaymentIntentu.

Migrace

  • Migration 0027 (credit_topup tabulka) má <rollback> sekci — forward-apply na prod DO Managed PG při deployi (immutable režim, DB se nedropuje, Liquibase aplikuje jen pending changesety).

CI cost gate připomenutí

  • FE/BE build: ~5–10 min/run. GitLab Free: 400 min/měs. .gitlab-ci.ymlwhen: manual — rebuild FE po live flipu = explicit opt-in, ne automatika.

Was this page helpful?

Thanks for the feedback.