---
title: "Изисквания за качество при преглед на приложение | Tajo"
description: "Стандарти за качество, сигурност, UX и правно съответствие, на които Вашето Stripe App трябва да отговаря, за да премине прегледа"
url: https://tajo.io/bg/docs/stripe-apps/review-requirements/
markdown: https://tajo.io/bg/docs/stripe-apps/review-requirements.md
lang: bg-BG
author: "Set Noa"
author_url: https://tajo.io/bg/set-noa/
robots: noindex
---

Заявете ранен достъп

Въведете собственото си име и служебен имейл адрес. Ще ви изпратим връзка за потвърждение на заявката за достъп до Tajo.

# Изисквания за качество при преглед на приложение

[Set Noa](https://tajo.io/bg/set-noa/)

Stripe преглежда всяко приложение, подадено в marketplace, спрямо изчерпателен набор от изисквания за качество. Ако разбирате тези стандарти още преди разработката, ще спестите време и ще намалите броя на итерациите при прегледа.

Caution

**Статус: планирано, не е изградено.** Tajo няма приложение за Stripe, така че нищо в този раздел не може да бъде инсталирано днес. Идентификаторите на приложения, адресите и идентификационните данни на тази страница са илюстративни примери, а не действащи крайни точки.

## Общ преглед

Прегледът на Stripe App оценява приложението Ви в шест ключови области:

1. **Прозрачно ценообразуване**, ясна комуникация на разходите
2. **Функционалност на приложението**, надеждност и пълнота
3. **Стандарти за разработчици**, качество на кода и използване на API
4. **Качество на UX**, стандарти за потребителския интерфейс и преживяването
5. **Сигурност**, защита на данните и сигурни практики
6. **Правно съответствие**, изисквания за поверителност и регулаторни изисквания

## Прозрачно ценообразуване

Приложението Ви трябва да съобщава ясно всички разходи на потребителите:

- **Оповестяване на цените**: всички цени трябва да са посочени предварително в обявата в marketplace
- **Без скрити такси**: потребителите не трябва да срещат неочаквани такси след инсталирането
- **Условия на пробния период**: ако предлагате пробен период, посочете ясно продължителността му и какво се случва след края му
- **Процеси на надграждане**: всички подкани за допълнителна продажба или надграждане трябва да са ненатрапчиви и явно незадължителни
- **Валута**: показвайте цените в местната валута на потребителя, когато това е възможно

Caution

Приложения, които прикриват цените или таксуват потребителите без ясно съгласие, се отхвърлят незабавно.

## Форматиране на дата и час

Всички дати и часове, показвани в приложението Ви, трябва да следват конвенциите на Stripe Dashboard:

- Използвайте локала на потребителя за форматиране на датите, когато е наличен
- Показвайте часовете в местната часова зона на потребителя
- Използвайте относителни времеви означения за скорошни събития (например „преди 2 часа”)
- Използвайте абсолютни времеви означения с пълна дата и час за по-стари събития
- Следвайте ISO 8601 за всички полета за дати, които се изпращат към API

```typescript
// 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"
```

## Настройки на приложението

Ако приложението Ви изисква конфигуриране:

- Осигурете отделен **изглед за настройки**, достъпен от viewport-а на приложението
- Попълвайте предварително разумни стойности по подразбиране, където това е възможно
- Валидирайте всички въведени от потребителя данни с ясни съобщения за грешка
- Позволявайте на потребителите да променят настройките, без да преинсталират приложението
- Запазвайте настройките между сесиите чрез Stripe Secret Store API

## Поддръжка на sandbox

Приложението Ви трябва да работи правилно в режима sandbox (тестов режим) на Stripe:

- **Съвместимост с тестовия режим**: всички функции трябва да работят в тестов режим
- **Тестови данни**: използвайте реалистични тестови данни, които демонстрират функционалността на приложението
- **Без реални данни в sandbox**: никога не разкривайте продукционни данни в тестов режим
- **Коректно поведение**: ако дадена функция не е достъпна в sandbox, покажете ясно съобщение с обяснение защо
- Задайте `sandbox_install_compatible: true` във Вашия манифест

```json
{
  "sandbox_install_compatible": true
}
```

## Функционалност на приложението

### Надеждност

- Приложението не трябва да се срива или блокира при нормална употреба
- Всички рекламирани функции трябва да работят както е описано
- Мрежовите грешки трябва да се обработват коректно, с възможност за повторен опит
- Приложението трябва да остава отзивчиво по време на фонови операции

### Пълнота

- Без заместващо съдържание, функции „очаквайте скоро” или счупени връзки
- Всички елементи на интерфейса трябва да са функционални, без неработещи бутони или неактивни контроли
- Помощните текстове и връзките към документацията трябва да водят до валидни страници
- Деинсталирането трябва да премахне изцяло всички данни на приложението и webhooks

### Производителност

- Интерфейсът трябва да се визуализира до 3 секунди при стандартна връзка
- Фоновите операции по синхронизация не трябва да блокират интерфейса
- Големите набори от данни трябва да използват странициране или отложено зареждане
- Свеждайте API извикванията до минимум, за да избегнете ограничаване на честотата

## Стандарти за разработчици

### Използване на API

- Използвайте най-новата стабилна версия на Stripe API
- Следвайте добрите практики на Stripe API за странициране, обработка на грешки и идемпотентност
- Не превишавайте лимитите на заявките, реализирайте експоненциално изчакване при повторни опити
- Използвайте webhooks за обновявания, задвижвани от събития, вместо периодични проверки

### Качество на кода

- Без грешки или предупреждения в конзолата при продукционните компилации
- Премахнете цялото дебъг логване преди подаването
- Обработвайте всички гранични случаи (празни състояния, липсващи данни, мрежови откази)
- Следвайте моделите от библиотеката с компоненти на Stripe за последователен интерфейс

### Версиониране

- Използвайте семантично версиониране (MAJOR.MINOR.PATCH)
- Документирайте несъвместимите промени в актуализациите на версиите
- Поддържайте обратна съвместимост, където това е възможно

## Качество на UX

### Реклама

- **Без реклами**: приложението Ви не трябва да показва реклами от какъвто и да е вид
- **Без кръстосана промоция**: не рекламирайте други продукти или услуги в интерфейса на приложението
- **Брандирано съдържание**: показвайте само собствената си бранд идентичност, а не марки на трети страни (с изключение на партньори по интеграцията като Brevo)

### Език и съдържание

- **Последователен език**: използвайте последователна терминология в цялото приложение
- **Професионален тон**: придържайте се към професионалния и стегнат стил на комуникация на Stripe Dashboard
- **Без жаргон**: избягвайте технически жаргон, който търговците може да не разбират
- **Проверка на правописа**: уверете се, че целият текст е без правописни и граматически грешки
- **Само на английски**: целият текст към потребителя в приложенията за marketplace трябва да е на английски

### Диалози за потвърждение

Изисквайте потвърждение от потребителя при деструктивни или значими действия:

```typescript
// 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();
  }
};
```

Действия, които изискват потвърждение:

- Прекъсване на връзката с интеграции
- Изтриване на синхронизирани данни
- Промяна на настройки, които влияят върху потока от данни
- Връщане на конфигурацията към стойностите по подразбиране

### Състояния при зареждане

Винаги показвайте индикатори за зареждане при асинхронни операции:

```typescript
// 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} />;
};
```

Изисквания:

- Показвайте spinner или skeleton екрани по време на зареждането на данни
- Деактивирайте бутоните по време на изпращане на формуляр
- Показвайте индикатори за напредък при продължителни операции
- Никога не показвайте празен екран по време на зареждане

### Съобщения за грешки

Предоставяйте ясни съобщения за грешки, по които потребителят може да действа:

```typescript
// 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."
```

Насоки за съобщенията за грешки:

- Обяснете какво се е случило на разбираем език
- Предложете конкретно действие, с което потребителят може да разреши проблема
- Осигурете начин за повторен опит на неуспешната операция
- Записвайте подробна информация за грешката за отстраняване на проблеми (без да я показвате на потребителите)
- Включвайте кодове на грешките за справка от поддръжката, когато това е приложимо

## Сигурност

### Secret Store API

Използвайте Secret Store API на Stripe за съхранението на всички чувствителни данни:

```typescript
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;
};
```

**Никога** не съхранявайте чувствителни данни в:

- Локално или сесийно хранилище
- Бисквитки
- URL параметри
- Твърдо зададени стойности в изходния код
- Конфигурационни файлове в чист текст

### Криптография

- **Без собствена криптография**: не реализирайте собствени алгоритми за шифроване
- Използвайте вградените примитиви за сигурност на Stripe (Secret Store, подписващи секрети)
- Използвайте HTTPS за всички външни API извиквания
- Проверявайте всички подписи на webhooks преди обработка

### Работа с данните

- Заявявайте само разрешенията, от които приложението Ви действително се нуждае
- Не съхранявайте данни от Stripe извън необходимото за функционалността
- Въведете политики за съхранение на данните, съгласувани с политиката Ви за поверителност
- Осигурете механизъм, чрез който потребителите да заявят изтриване на данните си

## Правно съответствие

### Политика за поверителност

Приложението Ви трябва да има публично достъпна политика за поверителност, която обхваща:

- Какви данни събира приложението Ви от Stripe
- Как се съхраняват, обработват и споделят данните
- Политиките за съхранение и изтриване на данните
- Правата на потребителите по отношение на техните данни
- Информация за контакт при запитвания относно поверителността
- Съответствието с приложимите регулации (GDPR, CCPA и други)

### Общи условия

- Осигурете ясни общи условия за приложението си
- Не включвайте условия, които противоречат на Общите условия на Stripe
- Посочете ясно всички ограничения при използването

### Регулаторно съответствие

- Спазвайте всички приложими регулации за защита на данните
- Сключете подходящи споразумения за обработка на данни
- Поддържайте заявките за преносимост и изтриване на данни
- Поддържайте одитни логове за достъпа до данните и тяхната обработка

## Срокове на процеса по преглед

| Етап | Продължителност |
| --- | --- |
| Първоначално подаване | 5-10 работни дни |
| Преглед на корекциите | 3-7 работни дни |
| Финално одобрение | 1-2 работни дни |
| Публикуване | Веднага след одобрението |

Tip

Отстранете всички забележки от прегледа в една корекция, за да избегнете няколко цикъла на преглед. Екипът на Stripe предоставя конкретна и приложима обратна връзка за всеки открит проблем.

## Чести причини за отхвърляне

1. **Липсваща обработка на грешки**, приложението се срива при мрежови грешки или неочаквани данни
2. **Недостатъчни състояния при зареждане**, празни екрани при извличането на данни
3. **Неясно ценообразуване**, цените не са напълно оповестени в обявата
4. **Прекомерни разрешения**, заявяване на разрешения, които приложението не използва
5. **Неработещ режим sandbox**, приложението не работи в тестов режим
6. **Проблеми със сигурността**, съхраняване на секрети извън Secret Store API
7. **Липсваща политика за поверителност**, няма достъпен URL на политиката за поверителност
8. **Непълна функционалност**, функции „очаквайте скоро” или заместващо съдържание
