Bed om tidlig adgang til Tajo

Indtast dit fornavn og en e-mailadresse eller et telefonnummer. Vi kontakter dig med oplysninger om adgang til Tajo.

Kvalitetskrav ved app-gennemgang

Stripe gennemgår hver app, der indsendes til marketplace, ud fra et bredt sæt kvalitetskrav. Kender du standarderne, før du går i gang med at udvikle, sparer du tid og slipper for flere runder i gennemgangen.

Overblik

Stripes app-gennemgang vurderer din app på seks nøgleområder:

  1. Gennemsigtige priser, klar kommunikation af omkostninger
  2. App-funktionalitet, pålidelighed og fuldstændighed
  3. Udviklerstandarder, kodekvalitet og brug af API’et
  4. UX-kvalitet, standarder for brugerflade og oplevelse
  5. Sikkerhed, databeskyttelse og sikker praksis
  6. Juridisk compliance, krav til privatliv og regler

Gennemsigtige priser

Din app skal kommunikere alle omkostninger tydeligt til brugerne:

  • Prisoplysning: Alle priser skal fremgå på forhånd i marketplace-visningen
  • Ingen skjulte gebyrer: Brugerne må ikke møde uventede gebyrer efter installationen
  • Vilkår for prøveperiode: Tilbyder du en prøveperiode, så angiv tydeligt, hvor længe den varer, og hvad der sker, når den slutter
  • Opgraderingsforløb: Mersalg og opfordringer til opgradering skal være diskrete og tydeligt frivillige
  • Valuta: Vis priser i brugerens lokale valuta, når det er muligt

Caution

Apps, der slører priserne eller opkræver brugerne uden klart samtykke, bliver afvist med det samme.

Formatering af dato og klokkeslæt

Alle datoer og klokkeslæt, din app viser, skal følge konventionerne i Stripe Dashboard:

  • Brug brugerens lokalitet til datoformatering, når den er tilgængelig
  • Vis klokkeslæt i brugerens lokale tidszone
  • Brug relative tidsangivelser for nye hændelser (f.eks. “2 hours ago”)
  • Brug absolutte tidsangivelser for ældre hændelser med fuld dato og klokkeslæt
  • Følg ISO 8601 for alle datofelter, der vender mod API’et
// Good: Use Stripe's date formatting utilities
import { formatDate, formatRelativeTime } from '@stripe/ui-extension-sdk/utils';
const formattedDate = formatDate(timestamp); // Locale-aware
const relativeTime = formatRelativeTime(timestamp); // "2 hours ago"

App-indstillinger

Hvis din app kræver konfiguration:

  • Lav en dedikeret indstillingsvisning, der kan nås fra appens viewport
  • Udfyld fornuftige standardværdier på forhånd, hvor det er muligt
  • Valider alle brugerinput med tydelige fejlbeskeder
  • Lad brugerne opdatere indstillinger uden at geninstallere appen
  • Gem indstillinger på tværs af sessioner med Stripes Secret Store API

Understøttelse af sandbox

Din app skal fungere korrekt i Stripes sandbox (testtilstand):

  • Kompatibilitet med testtilstand: Alle funktioner skal virke i testtilstand
  • Testdata: Brug realistiske testdata, der viser, hvad appen kan
  • Ingen livedata i sandbox: Vis aldrig produktionsdata i testtilstand
  • Pæn håndtering: Er en funktion ikke tilgængelig i sandbox, så vis en tydelig besked om hvorfor
  • Sæt sandbox_install_compatible: true i dit manifest
{
"sandbox_install_compatible": true
}

App-funktionalitet

Pålidelighed

  • Appen må ikke gå ned eller fryse under normal brug
  • Alle annoncerede funktioner skal virke som beskrevet
  • Netværksfejl skal håndteres pænt med mulighed for at prøve igen
  • Appen skal blive ved med at reagere, mens den arbejder i baggrunden

Fuldstændighed

  • Intet pladsholderindhold, ingen “coming soon”-funktioner og ingen døde links
  • Alle elementer i brugerfladen skal virke, ingen døde knapper eller inaktive kontroller
  • Hjælpetekster og dokumentationslinks skal føre til gyldige sider
  • Afinstallation skal fjerne alle appens data og webhooks helt

Ydeevne

  • Brugerfladen skal vises inden for 3 sekunder på en almindelig forbindelse
  • Synkronisering i baggrunden må ikke blokere brugerfladen
  • Store datasæt skal bruge paginering eller lazy loading
  • Hold antallet af API-kald nede, så du undgår rate limiting

Udviklerstandarder

Brug af API’et

  • Brug den nyeste stabile version af Stripe API
  • Følg bedste praksis for Stripe API omkring paginering, fejlhåndtering og idempotens
  • Overskrid ikke rate limits, brug eksponentiel backoff, når du prøver igen
  • Brug webhooks til hændelsesdrevne opdateringer i stedet for polling

Kodekvalitet

  • Ingen fejl eller advarsler i konsollen i produktionsbuilds
  • Fjern al debug-logning, før du indsender
  • Håndter alle særtilfælde (tomme tilstande, manglende data, netværksfejl)
  • Følg mønstrene i Stripes komponentbibliotek, så brugerfladen er konsistent

Versionering

  • Brug semantisk versionering (MAJOR.MINOR.PATCH)
  • Dokumentér brydende ændringer i versionsopdateringer
  • Bevar bagudkompatibilitet, hvor det er muligt

UX-kvalitet

Reklame

  • Ingen annoncer: Din app må ikke vise reklamer af nogen art
  • Ingen krydspromovering: Reklamer ikke for andre produkter eller ydelser i appens brugerflade
  • Brandet indhold: Vis kun dit eget brand, ikke tredjeparters brands (bortset fra integrationspartnere som Brevo)

Sprog og indhold

  • Konsistent sprog: Brug den samme terminologi i hele appen
  • Professionel tone: Match den professionelle og præcise tone i Stripe Dashboard
  • Ingen jargon: Undgå teknisk jargon, som forhandlerne måske ikke forstår
  • Stavekontrol: Sørg for, at al tekst er fri for stave- og grammatikfejl
  • Kun engelsk: Al tekst, brugeren ser, skal være på engelsk i marketplace-apps

Bekræftelsesdialoger

Kræv, at brugeren bekræfter destruktive eller betydningsfulde handlinger:

// Good: Confirm before destructive actions
const handleDisconnect = async () => {
const confirmed = await showConfirmation({
title: 'Disconnect Brevo Integration',
message: 'This will stop syncing customer data to Brevo. You can reconnect at any time.',
confirmLabel: 'Disconnect',
cancelLabel: 'Cancel',
destructive: true,
});
if (confirmed) {
await disconnectIntegration();
}
};

Handlinger, der kræver bekræftelse:

  • Afkobling af integrationer
  • Sletning af synkroniserede data
  • Ændring af indstillinger, der påvirker datastrømmen
  • Nulstilling af konfigurationen til standardværdier

Indlæsningstilstande

Vis altid en indlæsningsindikator ved asynkrone handlinger:

// Good: Show loading state during data fetch
const CustomerSyncStatus = () => {
const { data, isLoading, error } = useSyncStatus();
if (isLoading) {
return <Spinner label="Loading sync status..." />;
}
if (error) {
return <Banner type="critical" title="Failed to load sync status">
{error.message}
</Banner>;
}
return <SyncStatusDisplay data={data} />;
};

Krav:

  • Vis spinnere eller skeletskærme, mens data hentes
  • Deaktiver knapper, mens en formular sendes
  • Vis fremdriftsindikatorer ved langvarige handlinger
  • Vis aldrig en tom skærm under indlæsning

Fejlbeskeder

Giv klare fejlbeskeder, brugeren kan handle på:

// Bad: Generic error
"Something went wrong"
// Good: Specific and actionable
"Unable to sync customer data to Brevo. Please verify your Brevo API key
in Settings and try again."

Retningslinjer for fejlbeskeder:

  • Forklar i almindeligt sprog, hvad der skete
  • Foreslå en konkret handling, brugeren kan tage for at løse problemet
  • Giv mulighed for at prøve den mislykkede handling igen
  • Log detaljerede fejloplysninger til fejlsøgning (som ikke vises for brugerne)
  • Angiv fejlkoder til brug for supporten, hvor det er relevant

Sikkerhed

Secret Store API

Brug Stripes Secret Store API til al opbevaring af følsomme data:

import { createHttpClient, STRIPE_API_KEY } from '@stripe/ui-extension-sdk/http_client';
// Good: Store secrets using the Secret Store API
const storeBrevoApiKey = async (apiKey: string) => {
const stripe = createHttpClient(STRIPE_API_KEY);
await stripe.apps.secrets.create({
name: 'brevo_api_key',
payload: apiKey,
scope: { type: 'account' },
});
};
// Good: Retrieve secrets from the Secret Store
const getBrevoApiKey = async () => {
const stripe = createHttpClient(STRIPE_API_KEY);
const secret = await stripe.apps.secrets.find({
name: 'brevo_api_key',
scope: { type: 'account' },
});
return secret.payload;
};

Gem aldrig følsomme data i:

  • Local storage eller session storage
  • Cookies
  • URL-parametre
  • Hardkodede værdier i kildekoden
  • Konfigurationsfiler i klartekst

Kryptografi

  • Ingen egen kryptografi: Lav ikke dine egne krypteringsalgoritmer
  • Brug Stripes indbyggede sikkerhedsprimitiver (Secret Store, signeringsnøgler)
  • Brug HTTPS til alle eksterne API-kald
  • Valider alle webhook-signaturer, før du behandler dem

Håndtering af data

  • Bed kun om de tilladelser, din app faktisk har brug for
  • Gem ikke Stripe-data ud over det, funktionaliteten kræver
  • Indfør politikker for dataopbevaring, der stemmer med din privatlivspolitik
  • Giv brugerne en måde at bede om sletning af data på

Juridisk compliance

Privatlivspolitik

Din app skal have en offentligt tilgængelig privatlivspolitik, der dækker:

  • Hvilke data din app indsamler fra Stripe
  • Hvordan data gemmes, behandles og deles
  • Politikker for opbevaring og sletning af data
  • Brugernes rettigheder til deres data
  • Kontaktoplysninger ved spørgsmål om privatliv
  • Overholdelse af gældende regler (GDPR, CCPA osv.)

Servicevilkår

  • Lav klare servicevilkår for din app
  • Medtag ikke vilkår, der strider mod Stripes servicevilkår
  • Angiv tydeligt eventuelle begrænsninger i brugen

Regeloverholdelse

  • Overhold alle gældende databeskyttelsesregler
  • Indgå de nødvendige databehandleraftaler
  • Understøt anmodninger om dataportabilitet og sletning
  • Før revisionslog over adgang til og behandling af data

Tidsforløb for gennemgangen

FaseVarighed
Første indsendelse5-10 hverdage
Gennemgang af rettelser3-7 hverdage
Endelig godkendelse1-2 hverdage
UdgivelseStraks efter godkendelse

Tip

Ret alt feedback fra gennemgangen i én omgang, så du undgår flere gennemgangsrunder. Stripe-teamet giver konkret og handlingsrettet feedback på hvert problem, de finder.

Hyppige årsager til afvisning

  1. Manglende fejlhåndtering, appen går ned ved netværksfejl eller uventede data
  2. Utilstrækkelige indlæsningstilstande, tomme skærme, mens data hentes
  3. Uklare priser, priserne fremgår ikke fuldt ud af visningen
  4. For mange tilladelser, appen beder om tilladelser, den ikke har brug for
  5. Sandbox virker ikke, appen fungerer ikke i testtilstand
  6. Sikkerhedsproblemer, hemmeligheder gemmes uden for Secret Store API
  7. Manglende privatlivspolitik, ingen tilgængelig URL til privatlivspolitikken
  8. Ufuldstændig funktionalitet, “coming soon”-funktioner eller pladsholderindhold

Bed om tidlig adgang til Tajo

Indtast dit fornavn og en e-mailadresse eller et telefonnummer. Vi kontakter dig med oplysninger om adgang til Tajo.

automatisk genkendelse
AI-assistent

Hej! Spørg mig om dokumentationen.