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

# Tulemuse käsitlemine

Lugege makse tulemust, toetuge callback-lepingule ja lisage oma staatuseotsing.

Kasutage seda juhendit, kui soovite täpselt teada, mida teie rakendusele makseprotsessi lõppedes öeldakse ja mida see võib sellega turvaliselt teha.

Mõlemad `startPayment` ja `startCardPayment` väljastavad ühe `PaymentResult`.

***

## Tulemus

| Omadus          | Tüüp             | Märkused                                                                     |
| --------------- | ---------------- | ---------------------------------------------------------------------------- |
| `tulemus`       | `PaymentOutcome` | Üks neljast allpool toodud juhtumist.                                        |
| `paymentId`     | `String`         | Alati olemas.                                                                |
| `paymentStatus` | `String?`        | Platvormi töötlemata olek, näiteks `"SETTLED"`.                              |
| `orderNumber`   | `String?`        | Platvormi kirje teie taustsüsteemi esitatud tellimuse numbri kohta.          |
| `sessionId`     | `String?`        | Kaardiseansi identifikaator. Määratakse ainult kaardivoos.                   |
| `error`         | `NSError?`       | `nil` kui makse lihtsalt ei õnnestunud, mitte siis, kui midagi läks valesti. |

`paymentStatus` on tahtlikult string, mitte loendus, nii et platvormi poolel lisatud olek jõuab teie koodini muutmata kujul, selle asemel et see lihtsustataks millekski muuks.

`orderNumber` on loomulik võti tulemuse seostamiseks teie enda tellimusega.

***

## Neli võimalikku tulemust

```swift
switch result.outcome {
case .succeeded:
    showReceipt(reference: result.orderNumber ?? result.paymentId)

case .failed:
    showFailure(message: result.error?.localizedDescription)

case .cancelled:
    // Ostja loobus.
    break

case .unresolved:
    // SDK ei tea. Küsige oma taustsüsteemilt.
    confirmWithBackend(paymentId: result.paymentId)
}
```

Platvormi olek kaardistatakse nelja tulemusega järgmiselt:

| Tulemus       | Makse olek                                                                  |
| ------------- | --------------------------------------------------------------------------- |
| `.succeeded`  | `AUTHORIZED`, `CAPTURED`, `SETTLED`, `REFUNDED`                             |
| `.failed`     | `FAILED`                                                                    |
| `.cancelled`  | `CANCELLED`, `ABANDONED`                                                    |
| `.unresolved` | `INITIALIZED`, `SENT_FOR_PROCESSING`, või mis tahes olek, mida SDK ei tunne |

`.failed` hõlmab ka juhtumeid, kus SDK ei saanud voogu üldse käivitada, ning `.cancelled` hõlmab ka seda, kui ostja sulges kassalehe. Kui SDK ise ebaõnnestus, `result.error` ütleb miks.

### `.unresolved` ei ole viga

See tähendab ühte kolmest asjast:

* Ei `apiBaseURL` on seadistatud ja kohandatud lahendajat ei edastatud, seega otsingut ei proovitud.
* Otsingut prooviti ja see ebaõnnestus. `result.error` sisaldab põhjust.
* Makse on tõepoolest endiselt töötlemisel: ostja on lehega lõpetanud, kuid platvorm ei ole veel lõppolekuni jõudnud.

Ärge esitage seda edukana ega nurjununa. Küsige oma taustsüsteemilt, kasutades `result.paymentId`või kuvage olek "me kinnitame teie makset" ning laske taustsüsteemil teile vastus anda.

{% hint style="warning" %}
⚠️ **Ärge kunagi käsitlege ühtegi tulemust, sealhulgas `.succeeded`, kui luba tellimuse täitmiseks.** Tulemus ütleb teile, mida ostjale kuvada. Tellimuse täitmine kuulub teie taustsüsteemile ning seda juhivad platvormi saadetavad teavitused.
{% endhint %}

***

## Tagasikutse leping

Mõlema sisendpunkti puhul:

* **Täpselt üks** tagasikutse iga väljakutse kohta. Mitte kunagi null, mitte kunagi kaks korda.
* Alati **pealõimel**.
* Alati **pärast** kui SDK enda liides on suletud, nii et kviitungikuva esitlemine tagasikutse seest töötab.
* Kõik lõppteed läbivad selle: jõuti tagastus-URL-ini, ostja tühistas, leht ei laadinud, olekuotsing ebaõnnestus, kaardiseanss ebaõnnestus või päring oli kasutuskõlbmatu.

Üks `PaymentKit` eksemplar käitab korraga üht makset. Teise alustamine ajal, mil esimene on endiselt ekraanil, lõpetab teise kohe kui `.failed` koos `invalidRequest` veaga, selle asemel et laduda üksteise peale kaks kassavaadet.

***

## Kuidas olek lahendatakse

Kui voog jõuab lõpp-punkti, kutsub SDK välja:

```
GET {apiBaseURL}/checkout/api/egw/v1/payments/{paymentId}
Obp-Verification-Key: {verificationKey}
X-Request-Id: {uuid}
```

ning kaardistab `paymentStatus` tagastatu ühte neljast tulemusest.

Kui `apiBaseURL` on määratud väärtuseks `nil` ning kohandatud lahendajat ei ole, ei proovita ühtegi otsingut ja iga makse lõpeb `.unresolved`. See on sobiv seadistus, kui taustsüsteemilt küsitakse niikuinii.

***

## Oma olekuotsingu pakkumine

`apiBaseURL` töötab siis, kui host, millele te selle suunate, pakub seda teekonna struktuuri. Kui teie oma seda ei tee või kui eelistate hoida oma süsteemis üht kohta, mis teab makseväravast, rakendage `PaymentStatusResolving`:

```swift
final class BackendStatusResolver: NSObject, PaymentStatusResolving {
    func resolveStatus(
        paymentId: String,
        verificationKey: String,
        completion: @escaping (String?, String?, NSError?) -> Void
    ) {
        myAPI.paymentStatus(paymentId) { status, orderNumber, error in
            // Tagastage platvormi töötlemata olekustring ("SETTLED", "FAILED", …),
            // tellimuse number või viga.
            completion(status, orderNumber, error)
        }
    }
}

let paymentKit = PaymentKit(
    configuration: Configuration(apiBaseURL: nil, environment: .live),
    statusResolver: BackendStatusResolver()
)
```

Tagastage platvormi töötlemata olekustringid ja SDK kaardistab need teie eest. Kutsuge `completion` täpselt üks kord, suvalisest järjekorrast. A `nil` olek koos `nil` veaga lahendatakse kui `.unresolved`.

See asendab ainult majutatud kassavaate olekuotsingu; kaardivoog ei tee neid üldse. Kaardivoos lähevad kaardiseansi päringud endiselt seadmest checkout API-sse, nii see voog ongi üles ehitatud.

***

## Järgmised sammud

* [Vigade käsitlemine](/seb-docs-draft/seb-docs-public-et/integratsioon/mobiilne-sdk/ios-sdk/juhendid/vigade-kasitlemine.md)
* [API viiteinfo](/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/tulemuse-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.
