> For the complete documentation index, see [llms.txt](https://docs.ecommerce.seb.ee/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ecommerce.seb.ee/seb-docs-draft/seb-docs-public-lt/integracija/mobilusis-sdk/ios-sdk/naudojant-sdk/natyvioji-korteles-forma.md).

# Natyvioji kortelės forma

Rinkite kortelės duomenis savo sąsajoje, o įrenginyje vykdomą šifravimą ir 3-D Secure tvarkys SDK.

Naudokite šį vadovą, jei norite, kad kortelės duomenys būtų renkami jūsų pačių sąsajoje, pritaikytoje pagal jūsų pačių dizaino sistemą, o ne priglobtame atsiskaitymo puslapyje.

Jūs sukuriate formą. SDK paima reikšmes, užšifruoja jas įrenginyje, sukuria kortelės sesiją, vykdo EMV® 3-D Secure, jei to paprašo leidėjas, ir pateikia vieną rezultatą. Viskas, kas nurodyta [Backend integracija](/seb-docs-draft/seb-docs-public-lt/integracija/mobilusis-sdk/ios-sdk/gaires/integracija-galineje-sistemoje.md) taikoma toliau: mokėjimą jūsų backendas sukuria lygiai taip pat, kaip ir priglobtam atsiskaitymui.

***

## Konfigūruoti

Kortelės srautas naudoja tris hostus, ir `Konfigūracija` juos saugo kaip tris aiškius URL.

```swift
let configuration = Configuration(
    apiBaseURL: URL(string: "https://your-backend.example.com"),
    checkoutAPIBaseURL: URL(string: "https://sandbox-api.example.com"),
    checkoutBaseURL: URL(string: "https://sandbox-checkout.example.com"),
    environment: .sandbox
)

let paymentKit = PaymentKit(configuration: configuration)
```

| Savybė               | Kam skirta                                                                                                                               |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `apiBaseURL`         | Jūsų backendui, priglobto atsiskaitymo mokėjimo būsenai nuskaityti. Kortelės formai nenaudojama.                                         |
| `checkoutAPIBaseURL` | Klientui skirta atsiskaitymo API: kortelės sesijos kūrimas ir nuskaitymas, 3-D Secure autentifikavimas ir iššūkio rezultatas. Privaloma. |
| `checkoutBaseURL`    | Atsiskaitymo puslapio hostas, kuris pateikia kortelės šifravimo raktą ir puslapį, į kurį leidėjas grąžina iššūkio rezultatą. Privaloma.  |

Nė vienas iš trijų nėra išvedamas iš kito. Kiekvieną jų nustatykite aiškiai tai aplinkai, į kurią taikotės.

***

## Surinkite kortelės duomenis

`CardInput` yra modelis be savo peržiūrų. Užpildykite jį iš bet kurios jūsų sukurtos sąsajos:

```swift
let card = CardInput()
card.cardholderName = nameField.text ?? ""
card.cardNumber = numberField.text ?? ""
card.expiryMonth = expiryField.month
card.expiryYear = expiryField.year
card.securityCode = securityCodeField.text ?? ""
```

`expiryMonth` yra du skaitmenys (`"01"` iki `"12"`) ir `expiryYear` yra du skaitmenys (`"30"`).

### Pasirenkami teksto laukai

SDK pateikia tris `UITextField` subklases, kurios apdoroja tik įvedimo elgseną ir formatavimą. Jos nenustato spalvų, šriftų, rėmelių ar įterpčių, todėl, nieko nedarydamos, paveldi jūsų programėlės išvaizdą:

```swift
let numberField = CardNumberTextField()
let expiryField = CardExpiryTextField()
let securityCodeField = CardSecurityCodeTextField()

// Laikykite saugos kodo ilgį suderintą su aptiktu kortelės prekės ženklu.
securityCodeField.brand = numberField.brand
```

| Laukas                      | Elgsena                                                                                                                                                                                                       |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CardNumberTextField`       | Grupuoja skaitmenis pirkėjui vedant, apriboja ilgį ir nustato `textContentType = .creditCardNumber` kad veiktų „iOS“ automatinis užpildymas ir „Scan Card“. Pateikia `skaitmenis` ir aptiktą `prekės ženklą`. |
| `CardExpiryTextField`       | Formatuoja `MM/YY` ir pateikia `mėnesį` ir `metus` atskirai.                                                                                                                                                  |
| `CardSecurityCodeTextField` | Užmaskuoja įvedimą ir apriboja skaitmenų skaičių. Nustatykite jos `prekės ženklą` kad apribojimas atitiktų kortelę.                                                                                           |

Naudoti šiuos laukus neprivaloma. `CardInput` nesvarbu, iš kur gautos eilutės.

### Patikrinti

```swift
if let error = card.validationError(for: .cardNumber) {
    numberField.showError(error.localizedDescription)
}
```

Arba prieš pateikdami patikrinkite viską iš karto:

```swift
guard card.isValid else { return }
```

`validationError(for:)` apima `.cardholderName`, `.cardNumber`, `.expiry` ir `.securityCode`ir tikrina, ar yra reikšmė, Luhno patikrą, ilgį ir ar galiojimo data yra ateityje.

Ji netikrina, ar kortelės prekės ženklas sutampa su tais, kuriuos priima jūsų parduotuvė. Prekės ženklo aptikimas SDK yra skirtas rodymui ir įvesties formatavimui. Ar parduotuvė priima konkretų prekės ženklą, nusprendžiama serverio pusėje, ir tai grąžinama kaip aiški klaida, kuri veikia ir tada, kai parduotuvės konfigūracija pasikeičia neatnaujinus jūsų programėlės. Žr. [Kortelės prekės ženklas nepriimamas](/seb-docs-draft/seb-docs-public-lt/integracija/mobilusis-sdk/ios-sdk/gaires/klaidu-valdymas.md#card-brand-not-accepted).

***

## Pradėkite mokėjimą

```swift
let request = CardPaymentRequest(
    paymentId: payment.paymentId,
    verificationKey: payment.verificationKey
)

paymentKit.startCardPayment(request, card: card, from: self) { result in
    switch result.outcome {
    case .succeeded:  self.showReceipt(reference: result.paymentId)
    case .failed:     self.showFailure(message: result.error?.localizedDescription)
    case .cancelled:  break
    case .unresolved: self.confirmWithBackend(paymentId: result.paymentId)
    }
}
```

`CardPaymentRequest` nereikalauja nei checkout URL, nei grąžinimo URL. Pirkėjas niekada neišeina iš jūsų programėlės, todėl nėra iš kur grįžti.

Garantijos atitinka `startPayment`: tiksliai vienas callback'as, pagrindinėje gijoje, kai bet kuri SDK pateikta sąsaja jau būna uždaryta.

Dauguma mokėjimų kortele pateikia **visiškai jokios sąsajos**. SDK kažką ekrane parodo tik tada, kai leidėjas reikalauja 3-D Secure iššūkio, ir jis pateikiamas modališkai virš view controller, kurį perduodate kaip `iš:`.

{% hint style="warning" %}
**Niekada patys neregistruokite, neišsaugokite ir nesiųskite neapdorotų kortelės laukų.** Kortelės numeris ir saugos kodas egzistuoja tik `CardInput` ir atvirame tekste, kurį SDK sukuria iš karto prieš jį užšifruodamas. SDK nei į diską nerašo, nei jų neregistruoja. Bet koks jūsų pačių kodo veiksmas su šiomis eilutėmis nepatenka į šią garantiją.
{% endhint %}

***

## Ką daro SDK

1. Validuoja kortelės įvestį. Neteisingi duomenys per jūsų callback'ą atmetami dar prieš bet kokį tinklo kvietimą, todėl į tinklą niekas nepatenka.
2. Gauna kortelės šifravimo raktą iš `checkoutBaseURL` ir užšifruoja kortelės duomenis kaip JWE (RSA-OAEP-256 raktų šifravimas, AES-256-GCM turinio šifravimas, glaustas kodavimas).
3. Sukuria kortelės sesiją prieš `checkoutAPIBaseURL`, siųsdamas užšifruotus kortelės duomenis.
4. Sekia sesiją: jei leidėjas reikalauja 3-D Secure, SDK pateikia autentifikavimo užklausą ir, kai reikia iššūkio, jį parodo ir užfiksuoja rezultatą.
5. Pateikia vieną rezultatą iš galutinės sesijos būsenos: completed yra `.succeeded`, failed yra `.failed`. Atskiro būsenos nuskaitymo neatliekama, todėl `paymentStatus` ir `orderNumber` yra `nil` kortele atliekamiems mokėjimams.

`result.sessionId` turi kortelės sesijos identifikatorių, kuris naudingas susiejant su jūsų backendu. Jis `nil` priglobtam atsiskaitymui.

***

## Siūlant abu srautus

Vienas mokėjimas gali būti apmokėtas bet kuriuo būdu. Programėlė, kuri siūlo ir priglobtą atsiskaitymą, ir savo kortelės formą, atlieka tą patį vieną backend kvietimą ir leidžia pirkėjui pasirinkti, tada iškviečia `startPayment` arba `startCardPayment` su tuo pačiu `paymentId` ir `verificationKey`.

***

## Kiti žingsniai

* [Rezultato apdorojimas](/seb-docs-draft/seb-docs-public-lt/integracija/mobilusis-sdk/ios-sdk/naudojant-sdk/rezultato-apdorojimas.md)
* [Sauga](/seb-docs-draft/seb-docs-public-lt/integracija/mobilusis-sdk/ios-sdk/gaires/saugumas.md)
* [API nuoroda](/seb-docs-draft/seb-docs-public-lt/integracija/mobilusis-sdk/ios-sdk/nuoroda/api.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.ecommerce.seb.ee/seb-docs-draft/seb-docs-public-lt/integracija/mobilusis-sdk/ios-sdk/naudojant-sdk/natyvioji-korteles-forma.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
