> 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-lv/integracija/mobilais-sdk/ios-sdk/sdk-izmantosana/nativa-kartes-forma.md).

# Natīvā kartes forma

Apkopojiet kartes datus savā lietotāja saskarnē, un ierīcē notiekošo šifrēšanu un 3-D Secure apstrādā SDK.

Izmantojiet šo rokasgrāmatu, ja vēlaties, lai kartes dati tiktu ievākti jūsu paša saskarnē, noformētā pēc jūsu dizaina sistēmas, nevis mitinātajā checkout lapā.

Jūs izveidojat formu. SDK paņem vērtības, šifrē tās ierīcē, izveido kartes sesiju, aktivizē EMV® 3-D Secure, ja to pieprasa izdevējs, un piegādā vienu rezultātu. Viss tajā [Integrācija ar aizmugursistēmu](/seb-docs-draft/seb-docs-public-lv/integracija/mobilais-sdk/ios-sdk/celvezi/backend-integracija.md) joprojām ir spēkā: maksājumu jūsu aizmugursistēma izveido tieši tāpat kā mitinātajam checkout.

***

## Konfigurēt

Kartes plūsma sazinās ar trim hostiem, un `Konfigurācija` tā saglabā tos kā trīs skaidri norādītus 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)
```

| Īpašība              | Kam tā paredzēta                                                                                                                                |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `apiBaseURL`         | Jūsu aizmugursistēmai, mitinātā checkout maksājuma statusa uzmeklēšanai. Kartes forma to neizmanto.                                             |
| `checkoutAPIBaseURL` | Klientam paredzētais checkout API: kartes sesijas izveide un nolasīšana, 3-D Secure autentifikācija un izaicinājuma rezultāts. Obligāts.        |
| `checkoutBaseURL`    | Checkout lapas resursdators, kas nodrošina kartes šifrēšanas atslēgu un lapu, uz kuru izdevējs nosūta izaicinājuma rezultātu atpakaļ. Obligāts. |

Neviens no trim netiek atvasināts no cita. Katram videi, uz kuru mērķējat, iestatiet to skaidri.

***

## Savāciet kartes datus

`CardInput` ir bezgalvas modelis bez saviem skatiem. Aizpildiet to no jebkuras saskarnes, ko izveidojāt:

```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` ir divi cipari (`"01"` līdz `"12"`) un `expiryYear` ir divi cipari (`"30"`).

### Izvēles teksta lauki

SDK komplektā ir trīs `UITextField` apakšklases, kas apstrādā tikai ievades darbību un formatēšanu. Tās nenosaka krāsas, fontus, apmales vai atkāpes, tāpēc, neko nedarot, tās pārmanto jūsu lietotnes izskatu:

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

// Saglabājiet drošības koda garumu saskaņā ar noteikto kartes zīmolu.
securityCodeField.brand = numberField.brand
```

| Lauks                       | Darbība                                                                                                                                                                                                  |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CardNumberTextField`       | Grupē ciparus, kamēr pircējs raksta, ierobežo garumu un iestata `textContentType = .creditCardNumber` lai iOS automātiskā aizpilde un kartes skenēšana darbotos. Piedāvā `ciparus` un noteikto `zīmolu`. |
| `CardExpiryTextField`       | Formatē `MM/YY` un piedāvā `mēnesi` un `gadu` atsevišķi.                                                                                                                                                 |
| `CardSecurityCodeTextField` | Maskē ievadi un ierobežo ciparu skaitu. Iestatiet tā `zīmolu` lai ierobežojums atbilstu kartei.                                                                                                          |

To lietošana nav obligāta. `CardInput` SDK nav svarīgi, no kurienes nākušas virknes.

### Pārbaudiet

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

Vai arī pārbaudiet visu vienlaikus pirms iesniegšanas:

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

`validationError(for:)` aptver `.cardholderName`, `.cardNumber`, `.expiry` un `.securityCode`, un pārbauda klātbūtni, Luhna algoritmu, garumu un to, vai derīguma termiņš ir nākotnē.

Tas nepārbauda kartes zīmolu pret metodēm, ko pieņem jūsu veikals. SDK zīmola noteikšana ir paredzēta attēlošanai un ievades formatēšanai. Tas, vai veikals pieņem zīmolu, tiek noteikts servera pusē un tiek atgriezts kā skaidra kļūda, kas turpina darboties arī tad, ja veikala konfigurācija mainās un jūsu lietotne netiek pārbūvēta. Skatiet [Kartes zīmols nav pieņemts](/seb-docs-draft/seb-docs-public-lv/integracija/mobilais-sdk/ios-sdk/celvezi/kludu-apstrade.md#card-brand-not-accepted).

***

## Sāciet maksājumu

```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` nepieprasa ne checkout URL, ne atgriešanas URL. Pircējs nekad neatstāj jūsu lietotni, tāpēc nav no kā atgriezties.

Garantijas sakrīt `startPayment`: tieši viens atpakaļizsaukums galvenajā pavedienā pēc tam, kad jebkura SDK rādītā saskarne ir aizvērta.

Lielākā daļa kartes maksājumu parāda **vispār nekādas saskarnes**. SDK kaut ko parāda ekrānā tikai tad, ja kartes izsniedzējs pieprasa 3-D Secure izaicinājumu, un tas tiek parādīts kā modāls logs virs skata kontroliera, ko norādāt kā `from:`.

{% hint style="warning" %}
**Nekad paši nelogojiet, neglabājiet un nenosūtiet neapstrādātos kartes laukus.** Kartes numurs un drošības kods pastāv tikai `CardInput` un tajā parastā teksta versijā, ko SDK izveido tieši pirms šifrēšanas. SDK tos neieraksta ne diskā, ne žurnālā. Viss, ko jūsu kods dara ar šīm virknēm, neietilpst šajā garantijā.
{% endhint %}

***

## Ko dara SDK

1. Validē kartes ievadi. Nederīgi dati neiztur pārbaudi jūsu atpakaļizsaukumā pirms jebkura tīkla pieprasījuma, tāpēc līdz tīklam nekas nenonāk.
2. Iegūst kartes šifrēšanas atslēgu no `checkoutBaseURL` un šifrē kartes datus kā JWE (RSA-OAEP-256 atslēgas šifrēšana, AES-256-GCM satura šifrēšana, kompakta serializācija).
3. Izveido kartes sesiju pret `checkoutAPIBaseURL`, nosūtot šifrētos kartes datus.
4. Sekmē sesiju: ja izdevējs pieprasa 3-D Secure, SDK iesniedz autentifikācijas pieprasījumu un, kad nepieciešams izaicinājums, to parāda un iegūst rezultātu.
5. Atgriež vienu rezultātu no galīgā sesijas statusa: pabeigts ir `.succeeded`, neizdevies ir `.failed`. Tiek veikta atsevišķa statusa uzmeklēšana, tāpēc `paymentStatus` un `orderNumber` ir `nil` kartes maksājumiem.

`result.sessionId` satur kartes sesijas identifikatoru, kas ir noderīgs sasaistīšanai ar jūsu aizmugursistēmu. Tas ir `nil` paredzēts mitinātajam checkout.

***

## Piedāvājot abas plūsmas

Vienu maksājumu var veikt jebkurā no veidiem. Lietotne, kas piedāvā mitināto checkout un savu kartes formu, veic to pašu vienu aizmugursistēmas izsaukumu un ļauj pircējam izvēlēties, pēc tam izsauc `startPayment` vai `startCardPayment` ar to pašu `paymentId` un `verificationKey`.

***

## Tālākie soļi

* [Rezultāta apstrāde](/seb-docs-draft/seb-docs-public-lv/integracija/mobilais-sdk/ios-sdk/sdk-izmantosana/rezultata-apstrade.md)
* [Drošība](/seb-docs-draft/seb-docs-public-lv/integracija/mobilais-sdk/ios-sdk/celvezi/drosiba.md)
* [API atsauce](/seb-docs-draft/seb-docs-public-lv/integracija/mobilais-sdk/ios-sdk/atsauce/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-lv/integracija/mobilais-sdk/ios-sdk/sdk-izmantosana/nativa-kartes-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.
