> 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/celvezi/kludu-apstrade.md).

# Kļūdu apstrāde

Izmantojiet šo rokasgrāmatu, ja vēlaties pārvērst SDK kļūdu par kaut ko rīcībspējīgu.

## Kā pie jums nonāk kļūdas

Kļūdas nonāk kā `NSError` pie `PaymentResult.error`, nekad kā izmestu izņēmumu un vienmēr kopā ar rezultātu. SDK nemet izņēmumus un neprasa `try`.

Rezultāts `.failed` ar `nil` kļūdu nozīmē, ka pats maksājums nav izdevies. Rezultāts, kas satur kļūdu, nozīmē, ka SDK nevarēja pabeigt plūsmu.

Visas kļūdas izmanto domēnu:

```
com.egw.egwpay
```

***

## Kļūdu kodi

| Kods | Nosaukums                  | Nozīme                                                                                     |
| ---- | -------------------------- | ------------------------------------------------------------------------------------------ |
| 1    | `invalidRequest`           | Pieprasījums nav izmantojams, vai arī šajā `PaymentKit`.                                   |
| 2    | `statusLookupFailed`       | Maksājuma statusu nevarēja sasniegt. `NSUnderlyingErrorKey` satur transporta kļūdu.        |
| 3    | `statusLookupUnavailable`  | Nav `apiBaseURL` ir konfigurēts un netika norādīts pielāgots atrisinātājs.                 |
| 4    | `httpError`                | Statusa uzmeklēšana atgrieza atbildi, kas nav 2xx. `EGWHTTPStatusCode` satur statusa kodu. |
| 5    | `malformedResponse`        | Statusa atbildi nevarēja nolasīt.                                                          |
| 6    | `webViewLoadFailed`        | Norēķinu lapu nevarēja ielādēt. `NSUnderlyingErrorKey` ietver cēloni.                      |
| 7    | `cardValidationFailed`     | Kartes lauks neizturēja validāciju pirms tika veikts jebkāds tīkla pieprasījums.           |
| 8    | `encryptionKeyUnavailable` | Nav `checkoutBaseURL` ir konfigurēts, vai arī kartes šifrēšanas atslēgu nevarēja iegūt.    |
| 9    | `encryptionFailed`         | Kartes datus nevarēja šifrēt.                                                              |
| 10   | `cardSessionFailed`        | Kartes sesiju nevarēja izveidot vai virzīt tālāk. `NSUnderlyingErrorKey` ietver cēloni.    |
| 11   | `cardActionUnsupported`    | Kartes sesija pieprasīja soli, ko lietotnē nevar pabeigt.                                  |
| 12   | `threeDSChallengeFailed`   | 3-D Secure izaicinājumu nevarēja pabeigt.                                                  |

Kodi no 1 līdz 6 var rasties jebkurā plūsmā. Kodi no 7 līdz 12 rodas tikai vietējā kartes formā.

Katra kļūda satur `NSLocalizedDescriptionKey`. Lasiet `localizedDescription` lai iegūtu ziņojumu, kurā jau nosaukts kļūstošais lauks vai HTTP statuss, un veiciet atbilstību pēc `koda` kad nepieciešams zaroties.

```swift
if let error = result.error, error.domain == PaymentError.domain {
    switch PaymentError.Code(rawValue: error.code) {
    case .httpError:
        let status = error.userInfo["EGWHTTPStatusCode"] as? Int
        // …
    case .cardValidationFailed:
        // …
    default:
        break
    }
}
```

***

## Biežākās kļūmes

### Kartes zīmols netiek pieņemts

**Iemesls** - Veikala konfigurācija nepieņem tās kartes zīmolu, ko pircējs ievadīja. Vārteja atbild ar HTTP 403.

**Risinājums** - Parādiet ziņojumu “šis kartes tips netiek pieņemts” un ļaujiet pircējam mēģināt ar citu karti. Nepievienojiet lietotnē klienta pusē zīmolu atļauju sarakstu: veikala pieņemtie maksāšanas veidi var mainīties bez jūsu lietotnes pārbūves, un lokāls saraksts ātri kļūtu novecojis.

### Maksājuma statusu nevarēja apstiprināt

**Iemesls** - Kods 2, 3, 4 vai 5. SDK nebija, kam vaicāt, vai arī tas vaicāja, bet nesaņēma izmantojamu atbildi. Pats maksājums ļoti iespējams ir izdevies.

**Risinājums** - Uzskatiet maksājumu par joprojām atvērtu. Rādiet apstiprināšanas stāvokli un vaicājiet savu backend, izmantojot `result.paymentId`. Nekad nerādiet to kā kļūmi un nekad neļaujiet pircējam, pamatojoties uz to, samaksāt divreiz.

### Norēķinu lapu nevarēja ielādēt

**Iemesls** - Kods 6. Tīmekļa skats nevarēja sasniegt norēķinu hostu. `NSUnderlyingErrorKey` nes pamatā esošo `NSURLError`.

**Risinājums** - Pārbaudiet norēķinu URL, ko nodevāt, un ierīces savienojumu, pēc tam piedāvājiet atkārtotu mēģinājumu. Maksājums paliek neskarts, tāpēc to pašu var izmantot vēlreiz. `paymentId` un  `verificationKey` var izmantot vēlreiz.

### Kartes lauks neizturēja validāciju

**Iemesls** - Kods 7. Viens no kartes laukiem neizturēja validāciju. Ziņojums to nosauc.

**Risinājums** - Validējiet, kamēr pircējs raksta, ar `card.validationError(for:)` lai kļūme parādītos jūsu formā, nevis iesniegšanas brīdī. Skatiet [Iebūvētā kartes forma](/seb-docs-draft/seb-docs-public-lv/integracija/mobilais-sdk/ios-sdk/sdk-izmantosana/nativa-kartes-forma.md).

### Maksājums jau notiek

**Iemesls** - Kods 1. `startPayment` vai `startCardPayment` tika izsaukta, kamēr tajā pašā vēl bija redzams maksājums. `PaymentKit` maksājums.

**Risinājums** - Deaktivizējiet savu maksāšanas pogu maksājuma laikā vai izveidojiet vienu katram maksājumam. Pirmais maksājums netiek ietekmēts. `PaymentKit` katram maksājumam. Pirmais maksājums netiek ietekmēts.

***

## Kļūmes izsekošana

Ieslēdziet žurnalēšanu, kad nepieciešams izsekot plūsmu:

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

SDK reģistrē plūsmas atskaites punktus, izmantojot `os_log`. Tas nekad nereģistrē pieprasījumu vai atbilžu saturu, kartes datus, akreditācijas datus vai pilnus URL.

Lai sasaistītu kļūmi no sākuma līdz galam, izmantojiet `X-Request-Id` to, ko jūsu backend nosūtīja, kad tas izveidoja maksājumu, kopā ar `paymentId` rezultātā. SDK paši izsaukumi arī satur pieprasījuma ID.

Kur vārteja sniedza detaļas, tās nonāk zem `NSUnderlyingErrorKey`, un neveiksmīgas statusa uzmeklēšanas HTTP statuss nonāk zem `EGWHTTPStatusCode`.

***

## Atkārtoti mēģinājumi

SDK neko nemēģina atkārtot. Neveiksmīga statusa uzmeklēšana tiek paziņota, nevis atkārtota.

{% hint style="warning" %}
⚠️ **Nesāciet otro maksājumu pēc neskaidras kļūmes.** Kodi 2, 4, 5 un 10 atstāj maksājuma patieso stāvokli nezināmu, un jauna maksājuma izveide riskē iekasēt no pircēja divreiz. Vispirms vaicājiet stāvokli savā aizmugursistēmā un sāciet no jauna tikai tad, ja ir skaidri pierādīts, ka maksājums nav stājies spēkā.
{% endhint %}


---

# 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/celvezi/kludu-apstrade.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.
