> 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/juhendid/vigade-kasitlemine.md).

# Vigade käsitlemine

Kasuta seda juhendit, kui soovid muuta SDK vea praktiliseks tegevusjuhiseks.

## Kuidas vead sinuni jõuavad

Vead jõuavad kohale kujul `NSError` väljal `PaymentResult.error`, mitte kunagi visatud erindina, ning alati koos tulemusega. SDK ei viska erindeid ega vaja `try`.

Tulemus kujul `.failed` koos `nil` tõrge tähendab, et makse ise ei õnnestunud. Tulemuses sisalduv tõrge tähendab, et SDK ei suutnud protsessi lõpule viia.

Kõik vead kasutavad domeeni:

```
com.egw.egwpay
```

***

## Veakoodid

| Kood | Nimi                       | Tähendus                                                                                     |
| ---- | -------------------------- | -------------------------------------------------------------------------------------------- |
| 1    | `invalidRequest`           | Päring ei ole kasutatav või sellel juba käib makse. `PaymentKit`.                            |
| 2    | `statusLookupFailed`       | Makse olekut ei õnnestunud kätte saada. `NSUnderlyingErrorKey` sisaldab transporditõrget.    |
| 3    | `statusLookupUnavailable`  | Ei ole `apiBaseURL` on seadistatud ja kohandatud lahendajat ei esitatud.                     |
| 4    | `httpError`                | Oleku päring tagastas vastuse, mis ei olnud 2xx. `EGWHTTPStatusCode` sisaldab staatusekoodi. |
| 5    | `malformedResponse`        | Oleku vastust ei saanud lugeda.                                                              |
| 6    | `webViewLoadFailed`        | Kassaleht ei õnnestunud laadida. `NSUnderlyingErrorKey` sisaldab põhjust.                    |
| 7    | `cardValidationFailed`     | Üks kaardiväli ei läbinud valideerimist enne ühegi võrgukutse tegemist.                      |
| 8    | `encryptionKeyUnavailable` | Ei ole `checkoutBaseURL` on seadistatud või kaardi krüpteerimisvõtit ei õnnestunud tuua.     |
| 9    | `encryptionFailed`         | Kaardi andmeid ei õnnestunud krüpteerida.                                                    |
| 10   | `cardSessionFailed`        | Kaardi seanssi ei õnnestunud luua ega edasi viia. `NSUnderlyingErrorKey` sisaldab põhjust.   |
| 11   | `cardActionUnsupported`    | Kaardi seanss palus sammu, mida ei saa rakenduses lõpule viia.                               |
| 12   | `threeDSChallengeFailed`   | 3-D Secure'i kontrolli ei õnnestunud lõpule viia.                                            |

Koodid 1 kuni 6 võivad esineda mõlemas voos. Koodid 7 kuni 12 esinevad ainult natiivses kaardivormis.

Iga viga sisaldab `NSLocalizedDescriptionKey`. Loe `localizedDescription` sõnumit, mis nimetab juba ebaõnnestunud välja või HTTP staatuse, ning tee vastavus `koodi` järgi, kui pead hargnema.

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

***

## Levinud tõrked

### Kaardibrändi ei aktsepteerita

**Põhjus** - Poe konfiguratsioon ei aktsepteeri kliendi sisestatud kaardi brändi. Värav vastab HTTP 403-ga.

**Lahendus** - Näita teadet „seda kaarditüüpi ei aktsepteerita“ ja lase kliendil proovida teist kaarti. Ära lisa oma rakendusse kliendipoolset lubatud kaardibrändide nimekirja: poe aktsepteeritavad maksemeetodid võivad muutuda ilma, et rakendus peaks uuesti ehitatama, ja kohalik nimekiri läheks aegunuks.

### Makse staatust ei õnnestunud kinnitada

**Põhjus** - Kood 2, 3, 4 või 5. SDK-l ei olnud kas kuskilt küsida või küsis ta, kuid ei saanud kasutuskõlblikku vastust. Makse ise võis siiski õnnestuda.

**Lahendus** - Käsitle makset endiselt avatud olekuna. Kuva kinnitamise seisund ja küsi oma taustsüsteemilt kasutades `result.paymentId`. Ära kuva seda kunagi veana ega lase kliendil selle põhjal kaks korda maksta.

### Kassalehte ei õnnestunud laadida

**Põhjus** - Kood 6. Veebivaade ei jõudnud kassahostini. `NSUnderlyingErrorKey` sisaldab aluseks olevat `NSURLError`.

**Lahendus** - Kontrolli edastatud kassalehe URL-i ja seadme ühendust ning paku seejärel uuesti proovimist. Makse on endiselt puutumata, seega sama `paymentId` ja `verificationKey` saab uuesti kasutada.

### Kaardiväli ei läbinud valideerimist

**Põhjus** - Kood 7. Üks kaardiväljadest ei läbinud valideerimist. Sõnum nimetab selle.

**Lahendus** - Valideeri ostja sisestamise ajal kasutades `card.validationError(for:)` nii ilmneb tõrge sinu vormis, mitte esitamise hetkel. Vt [Natiivne kaardivorm](/seb-docs-draft/seb-docs-public-et/integratsioon/mobiilne-sdk/ios-sdk/sdk-kasutamine/natiivne-kaardivorm.md).

### Makse juba käib

**Põhjus** - Kood 1. `startPayment` või `startCardPayment` kutsuti välja ajal, mil samal `PaymentKit` oli endiselt makse ekraanil.

**Lahendus** - Keela maksenupp makse kestel või loo `PaymentKit` iga makse jaoks eraldi. Esimest makset see ei mõjuta.

***

## Tõrke jälgimine

Lülita logimine sisse, kui pead voogu jälgima:

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

SDK logib voo vaheetappe kaudu `os_log`. See ei logi kunagi päringute ega vastuste sisu, kaardiandmeid, volitusi ega täispikki URL-e.

Tõrke lõpp-lõpuni seostamiseks kasuta `X-Request-Id` mille sinu taustsüsteem saatis makse loomisel, koos `paymentId` tulemuses oleva väärtusega. SDK enda kutsetel on samuti päringu ID.

Kui värav esitas üksikasju, jõuavad need `NSUnderlyingErrorKey`, ning ebaõnnestunud olekupäringu HTTP staatus jõuab `EGWHTTPStatusCode`.

***

## Uuesti proovimised

SDK ei proovi midagi uuesti. Ebaõnnestunud olekupäringust antakse teada, seda ei korrata.

{% hint style="warning" %}
⚠️ **Ära alusta pärast ebaselget tõrget teist makset.** Koodid 2, 4, 5 ja 10 jätavad makse tegeliku oleku teadmata ning uue makse loomine võib kliendilt kaks korda raha võtta. Küsi esmalt olekut oma taustsüsteemist ja alusta uuesti ainult siis, kui on selgelt näha, et makse ei läinud läbi.
{% 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-et/integratsioon/mobiilne-sdk/ios-sdk/juhendid/vigade-kasitlemine.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.
