# Atsiskaitymo režimai

> Kaip klientas pasirenka tarp įterptinio skydelio ir iššokančio lango, kodėl tai lemia patikimos kilmės šaltiniai ir ko tikėtis kuriant vietinėje aplinkoje.

Atsiskaitymas atidaromas vienu iš dviejų režimų.

**Skydelis** yra įterptinis skydelis, rodomas jūsų puslapio viduje. Staliniame kompiuteryje jis įslenka iš dešinės ir jo plotis ribojamas `pane.width`; mobiliajame įrenginyje jis išslenka iš apačios. Lankytojas lieka jūsų svetainėje, o skydelis užsidaro jam paspaudus „Escape“ arba spustelėjus pritemdytą sritį.

**Iššokantis langas** yra atskiras naršyklės langas, rodomas lankytojo ekrano centre. Klientas stebi, kada langas uždaromas, kad galėtų pašalinti foninį uždangalą.

## Įterptiniam atsiskaitymui reikia patikimo kilmės šaltinio

Skydelio režimu Entase atsiskaitymas rodomas iframe elemente jūsų domene, todėl jis leidžiamas tik tiems domenams, kuriuos aiškiai autorizavote. Pridėkite kiekvieną domeną, kuriame atidaromas atsiskaitymas, prie **Patikimų kilmės šaltinių** skiltyje Nustatymai → Integracijos – žr. [Integracijos ir atsiskaitymo tinkinimas](/organizers/settings/integrations-and-checkout-customization.md).

Svarbu, ar įtrauktas priešdėlis `www.`. Jei nesate tikri, kurią formą naudoja jūsų svetainė, pridėkite abi.

Jei jūsų domeno sąraše nėra, atsiskaitymas vis tiek veiks – jis tiesiog bus atidarytas iššokančiame lange.

## Kaip nustatoma `'auto'` reikšmė

Naudojant numatytąjį `checkoutMode: 'auto'`, klientas sprendžia tokia tvarka:

1. **Ne HTTPS** → iššokantis langas. Įterptinis atsiskaitymas niekada nenaudojamas nesaugiame puslapyje.
2. **`localhost` arba `127.0.0.1`** → skydelis, o konsolėje užregistruojamas įspėjimas. Tai kūrimo patogumui skirta galimybė, kad galėtumėte kurti naudodami įterptinį išdėstymą; ji nieko nesako apie tai, ar jūsų produkcinis domenas yra leidžiamas.
3. **Kitu atveju** → klientas klausia Entase, ar šis kilmės šaltinis gali naudoti įterptinį atsiskaitymą, ir siunčia `pk`, kad identifikuotų paskyrą. Jei atsakyme nurodomas skydelis, režimas tampa skydeliu.

Kol negaunamas atsakymas, režimas yra **popup**. Būtent toks veikimas greičiausiai jus nustebins: patikra yra asinchroninė, todėl `book()` iškvietus iškart įkėlus puslapį – dar prieš lankytojui turint galimybę ką nors spustelėti – gali būti atidarytas iššokantis langas net ir visiškai tinkamai sukonfigūruotame domene. Praktiškai tikras spustelėjimas visada įvyksta gerokai po to, kai patikra baigiama. Jei atsiskaitymą atidarote automatiškai, nustatykite režimą priverstinai, užuot pasikliovę aptikimu.

## Priverstinis režimo nustatymas

Nustatykite aiškią `checkoutMode` reikšmę, kad aptikimas būtų visiškai praleistas:

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

Arba pakeiskite ją vienam užsakymui:

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

Priverstinai nustačius `'pane'` domene, kuris nėra patikimas kilmės šaltinis, leidimas nesuteikiamas – skydelis atsidaro, tačiau jame esantis atsiskaitymas negali susisiekti su jūsų puslapiu. Naudokite `'popup'` sąmoningai pasirinkdami, o kai norite įterptinio atsiskaitymo visur, kur jis leidžiamas, palikite `'auto'`.

Neatpažinta reikšmė ignoruojama ir laikoma `'auto'`.

## Režimo nuskaitymas ir keitimas vykdymo metu

```js
entase.getCheckoutMode();        // 'pane' arba 'popup' – niekada 'auto'
entase.setCheckoutMode('popup'); // taikoma kiekvienam vėlesniam book() iškvietimui
```

`getCheckoutMode()` grąžina *nustatytą* režimą, todėl nurodo, kas iš tikrųjų įvyks. Nustačius režimą atgal į `'auto'`, aptikimas vykdomas iš naujo.

## Iššokančių langų blokavimas

Naršyklės leidžia `window.open()` tik naudotojo veiksmo metu. Iškvieskite `book()` tiesiogiai spustelėjimo apdorojimo funkcijoje – ne po `await`, `fetch` ar `setTimeout`, nes tuo metu veiksmas jau bus pasibaigęs ir iššokantis langas bus užblokuotas.

```js
// Užblokuota: iki book() vykdymo veiksmas jau pasibaigęs.
button.addEventListener('click', async () => {
  const event = await fetch('/api/current-event').then(r => r.json());
  entase.book(event.id);
});

// Gerai: pirmiausia gaukite id, tada atidarykite spustelėję.
button.addEventListener('click', () => entase.book(button.dataset.eventId));
```

Tai taikoma tik iššokančio lango režimui. Skydelio režimas puslapyje sukuria elementą, todėl šis apribojimas jam netaikomas.
