> 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-et/integratsioon/mobiilne-sdk/ios-sdk/sdk-kasutamine/natiivne-kaardivorm.md).

# Natiivne kaardivorm

Koguge kaardiandmeid oma kasutajaliideses, kus seadmesisene krüptimine ja 3-D Secure on SDK hallata.

Kasutage seda juhendit, kui soovite, et kaardiandmed kogutaks teie enda liideses, kujundatuna teie enda disainisüsteemi järgi, mitte hostitud kassalehel.

Teie loote vormi. SDK võtab väärtused, krüpteerib need seadmes, loob kaardisessiooni, käivitab EMV® 3-D Secure'i, kui väljastaja seda nõuab, ja edastab ühe tulemuse. Kõik selles [Taustsüsteemi integreerimine](/seb-docs-draft/seb-docs-public-et/integratsioon/mobiilne-sdk/ios-sdk/juhendid/tagasusteemi-integratsioon.md) kehtib endiselt: makse luuakse teie taustsüsteemi poolt täpselt samamoodi nagu hostitud kassas.

***

## Seadistamine

Kaardi voog suhtleb kolme hostiga ning `Konfiguratsioon` hoiab need kolme selgesõnalise URL-ina.

```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)
```

| Omadus               | Milleks seda kasutatakse                                                                                                             |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `apiBaseURL`         | Teie taustsüsteem, hostitud kassas makse oleku päringuks. Kaardivorm seda ei kasuta.                                                 |
| `checkoutAPIBaseURL` | Kliendile suunatud kassaliidese API: kaardisessiooni loomine ja lugemine, 3-D Secure'i autentimine ning väljakutse tulemus. Vajalik. |
| `checkoutBaseURL`    | Kassalehe host, mis pakub kaardi krüpteerimisvõtit ja lehte, kuhu väljastaja saadab väljakutse tulemuse tagasi. Vajalik.             |

Ükski neist kolmest ei tulene teisest. Määrake igaüks eraldi sihitud keskkonna jaoks.

***

## Koguge kaardiandmed

`CardInput` on peata mudel, millel puuduvad oma vaated. Täitke see mis tahes liidesest, mille olete loonud:

```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` on kahe numbriga (`"01"` kuni `"12"`) ja `expiryYear` on kahe numbriga (`"30"`).

### Valikulised tekstiväljad

SDK-ga kaasas on kolm `UITextField` alamklassi, mis käsitlevad ainult sisestuskäitumist ja vormindust. Need ei määra värve, fonte, ääriseid ega sisejooni, seega pärivad nad teie rakenduse välimuse lihtsalt vaikimisi:

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

// Hoidke turvakoodi pikkus kooskõlas tuvastatud kaubamärgiga.
securityCodeField.brand = numberField.brand
```

| Väli                        | Käitumine                                                                                                                                                                                                 |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CardNumberTextField`       | Rühmitab numbreid, kui ostja kirjutab, piirab pikkust ning määrab `textContentType = .creditCardNumber` et iOS-i automaattäitmine ja Scan Card töötaksid. Avaldab `numbrid` ning tuvastatud `kaubamärgi`. |
| `CardExpiryTextField`       | Vormindab `MM/YY` ning kuvab `kuu` ja `aasta` eraldi.                                                                                                                                                     |
| `CardSecurityCodeTextField` | Maskeerib sisendi ja piirab numbrite arvu. Määrake selle `kaubamärgi` nii, et piirang järgiks kaarti.                                                                                                     |

Nende kasutamine on valikuline. `CardInput` ei hooli sellest, kust stringid pärinevad.

### Kinnitage

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

Või kontrollige enne edastamist kõike korraga:

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

`validationError(for:)` hõlmab `.cardholderName`, `.cardNumber`, `.expiry` ja `.securityCode`ning kontrollib olemasolu, Luhni kontrolli, pikkust ja seda, et kehtivusaeg oleks tulevikus.

See ei kontrolli kaardi kaubamärki nende makseviiside suhtes, mida teie pood aktsepteerib. SDK kaubamärgi tuvastus on mõeldud kuvamiseks ja sisendi vormindamiseks. Selle, kas pood kaubamärki aktsepteerib, otsustab serveripool ning see naaseb selge veateatena, mis toimib ka siis, kui poe konfiguratsioon muutub ilma, et teie rakendust oleks vaja uuesti ehitada. Vt [Kaardi kaubamärki ei aktsepteerita](/seb-docs-draft/seb-docs-public-et/integratsioon/mobiilne-sdk/ios-sdk/juhendid/vigade-kasitlemine.md#card-brand-not-accepted).

***

## Alustage makset

```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` ei vaja kassalehe URL-i ega tagasisuunamise URL-i. Ostja ei lahku kunagi teie rakendusest, seega pole kusagilt tagasi tulla.

Tagatised vastavad `startPayment`: täpselt üks tagasihelistamine, pealõimes, pärast seda, kui kõik SDK esitatud liidesed on suletud.

Enamik kaardimakseid kuvab **üldse mitte mingit liidest**. SDK kuvab midagi ekraanil ainult siis, kui väljastaja nõuab 3-D Secure'i väljakutset, ning see esitatakse modaalselt selle vaatekontrolleri kohal, mille edastate kui `from:`.

{% hint style="warning" %}
**Ärge kunagi ise logige, säilitage ega saatke töötlemata kaardivälju.** Kaardinumber ja turvakood eksisteerivad ainult `CardInput` ning selles tavatekstis, mille SDK loob vahetult enne nende krüpteerimist. SDK ei kirjuta neid ei kettale ega logi. Kõik, mida teie enda kood nende stringidega teeb, jääb sellest tagatisest väljapoole.
{% endhint %}

***

## Mida SDK teeb

1. Kontrollib kaardi sisendit. Vigased andmed nurjuvad teie tagasihelistamises enne ühtegi võrgupäringut, seega midagi ei jõua võrku.
2. Hangib kaardi krüpteerimisvõtme aadressilt `checkoutBaseURL` ning krüpteerib kaardiandmed JWE-na (RSA-OAEP-256 võtme krüpteerimine, AES-256-GCM sisu krüpteerimine, kompaktne serialiseerimine).
3. Loob kaardisessiooni aadressil `checkoutAPIBaseURL`, saates krüpteeritud kaardiandmed.
4. Jälgib sessiooni: kui väljastaja nõuab 3-D Secure'i, esitab SDK autentimispäringu ning vajaduse korral kuvab väljakutse ja salvestab tulemuse.
5. Edastab ühe tulemuse lõplikust sessioonistaatusest: lõpetatud on `.succeeded`, ebaõnnestunud on `.failed`. Eraldi staatuse kontrolli ei tehta, seega `paymentStatus` ja `orderNumber` on `nil` kaardimaksete puhul.

`result.sessionId` sisaldab kaardisessiooni identifikaatorit, mis on kasulik teie taustsüsteemiga seostamiseks. See on `nil` hostitud kassalehe puhul.

***

## Mõlema voolu pakkumine

Ühte makset saab tasuda kummalgi viisil. Rakendus, mis pakub nii hostitud kassat kui ka oma kaardivormi, teeb sama ühe taustsüsteemi päringu ja laseb ostjal valida, seejärel kutsub esile `startPayment` või `startCardPayment` sama `paymentId` ja `verificationKey`.

***

## Järgmised sammud

* [Tulemuse käsitlemine](/seb-docs-draft/seb-docs-public-et/integratsioon/mobiilne-sdk/ios-sdk/sdk-kasutamine/tulemuse-kasitlemine.md)
* [Turvalisus](/seb-docs-draft/seb-docs-public-et/integratsioon/mobiilne-sdk/ios-sdk/juhendid/turvalisus.md)
* [API viide](/seb-docs-draft/seb-docs-public-et/integratsioon/mobiilne-sdk/ios-sdk/viide/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-et/integratsioon/mobiilne-sdk/ios-sdk/sdk-kasutamine/natiivne-kaardivorm.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.
