# Режими на плащане

> Как клиентът избира между вградения панел и изскачащ прозорец, защо доверените източници са решаващи и какво да очаквате при локална разработка.

Плащането се отваря в един от два режима.

**Pane** е вграден панел, визуализиран във вашата страница. На настолен компютър той се плъзга отдясно, с максимална ширина `pane.width`; на мобилно устройство се плъзга нагоре отдолу. Посетителят остава на вашия сайт, а панелът се затваря, когато натисне Escape или щракне върху затъмнената област.

**Popup** е отделен прозорец на браузъра, центриран на екрана на посетителя. Клиентът следи дали прозорецът е затворен, за да може да премахне фона.

## Вграденото плащане изисква доверен източник

Режимът Pane визуализира плащането на Entase в iframe във вашия домейн, затова е разрешен само за домейни, които изрично сте упълномощили. Добавете всеки домейн, който отваря плащането, в **Trusted origins** в Settings → Integrations – вижте [Интеграции и персонализиране на плащането](/organizers/settings/integrations-and-checkout-customization.md).

От значение е дали е включен префиксът `www.`. Ако не сте сигурни коя форма използва сайтът ви, добавете и двете.

Ако домейнът ви не е в списъка, плащането пак работи – просто се отваря като изскачащ прозорец.

## Как се определя `'auto'`

При настройката по подразбиране `checkoutMode: 'auto'` клиентът решава в следния ред:

1. **Без HTTPS** → изскачащ прозорец. Вградено плащане никога не се използва на незащитена страница.
2. **`localhost` или `127.0.0.1`** → панел, с предупреждение, записано в конзолата. Това е удобство при разработка, за да можете да разработвате спрямо вграденото оформление; не казва нищо за това дали производственият ви домейн е разрешен.
3. **В противен случай** → клиентът пита Entase дали този източник може да използва вградено плащане, като изпраща `pk`, за да идентифицира акаунта. Ако отговорът включва pane, режимът става pane.

Докато този отговор не пристигне, режимът е **popup**. Това поведение най-вероятно ще ви изненада: проверката е асинхронна, така че извикване на `book()`, задействано веднага при зареждане на страницата – преди посетителят да е имал възможност да щракне върху каквото и да е – все още може да отвори изскачащ прозорец при напълно правилно конфигуриран домейн. На практика истинско щракване винаги се случва дълго след като проверката е завършила. Ако отваряте плащането автоматично, задайте режима принудително, вместо да разчитате на разпознаване.

## Принудително задаване на режим

Задайте изрично `checkoutMode`, за да пропуснете изцяло разпознаването:

```js
const entase = new Entase({ pk: 'YOUR_PUBLISHABLE_KEY', checkoutMode: 'popup' });
```

Или го заменете за една резервация:

```js
entase.book('EVENT_ID', { checkoutMode: 'popup' });
```

Принудителното задаване на `'pane'` за домейн, който не е доверен източник, не предоставя разрешение – панелът се отваря, но плащането в него не може да комуникира с вашата страница. Използвайте `'popup'` като съзнателен избор и оставете `'auto'`, когато искате вградено плащане навсякъде, където е разрешено.

Неразпозната стойност се игнорира и се третира като `'auto'`.

## Преглед и промяна на режима по време на изпълнение

```js
entase.getCheckoutMode();        // 'pane' or 'popup' — never 'auto'
entase.setCheckoutMode('popup'); // applies to every later book() call
```

`getCheckoutMode()` връща *определения* режим, така че показва какво действително ще се случи. Задаването на режима обратно на `'auto'` изпълнява разпознаването отново.

## Блокиране на изскачащи прозорци

Браузърите разрешават `window.open()` само по време на потребителско действие. Извикайте `book()` директно в обработчик на щракване – не след `await`, `fetch` или `setTimeout`, когато действието вече е изтекло и изскачащият прозорец се блокира.

```js
// Blocked: the gesture is gone by the time book() runs.
button.addEventListener('click', async () => {
  const event = await fetch('/api/current-event').then(r => r.json());
  entase.book(event.id);
});

// Fine: resolve the id first, open on the click.
button.addEventListener('click', () => entase.book(button.dataset.eventId));
```

Това засяга само режима на изскачащ прозорец. Режимът Pane създава елемент в страницата и не подлежи на това.
