> 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-lt/integracija/mobilusis-sdk/ios-sdk/naudojant-sdk/rezultato-apdorojimas.md).

# Rezultato apdorojimas

Perskaitykite mokėjimo rezultatą, remkitės grįžtamojo iškvietimo sutartimi ir prijunkite savo būsenos užklausą.

Naudokite šį vadovą, jei norite tiksliai žinoti, ką jūsų programa gauna pranešus apie mokėjimo srauto pabaigą ir ką su tuo gali saugiai daryti.

Abu `startPayment` ir `startCardPayment` pateikia vieną `PaymentResult`.

***

## Rezultatas

| Savybė          | Tipas            | Pastabos                                                                |
| --------------- | ---------------- | ----------------------------------------------------------------------- |
| `rezultatas`    | `PaymentOutcome` | Viena iš keturių toliau pateiktų atvejų.                                |
| `paymentId`     | `String`         | Visada pateikiamas.                                                     |
| `paymentStatus` | `String?`        | Neapdorota platformos būsena, pavyzdžiui `"SETTLED"`.                   |
| `orderNumber`   | `String?`        | Platformos įrašas apie užsakymo numerį, kurį pateikė jūsų backend'as.   |
| `sessionId`     | `String?`        | Kortelės sesijos identifikatorius. Nustatomas tik kortelės srauto metu. |
| `error`         | `NSError?`       | `nil` kai mokėjimas tiesiog nepavyko, o ne įvyko kokia nors klaida.     |

`paymentStatus` yra sąmoningai eilutė, o ne enumeracija, kad platformos pusėje pridėta būsena pasiektų jūsų kodą nepakitusi, o ne būtų paversta kažkuo kitu.

`orderNumber` yra natūralus raktas rezultatui susieti su jūsų užsakymu.

***

## Keturi rezultatai

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

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

case .cancelled:
    // Pirkėjas persigalvojo.
    break

case .unresolved:
    // SDK to nežino. Paklauskite savo backend'o.
    confirmWithBackend(paymentId: result.paymentId)
}
```

Platformos būsena į šiuos keturis rezultatus susiejama taip:

| Rezultatas    | Mokėjimo būsena                                                                    |
| ------------- | ---------------------------------------------------------------------------------- |
| `.succeeded`  | `AUTHORIZED`, `CAPTURED`, `SETTLED`, `REFUNDED`                                    |
| `.failed`     | `FAILED`                                                                           |
| `.cancelled`  | `CANCELLED`, `ABANDONED`                                                           |
| `.unresolved` | `INITIALIZED`, `SENT_FOR_PROCESSING`, arba bet kuri būsena, kurios SDK neatpažįsta |

`.failed` taip pat apima atvejus, kai SDK apskritai negalėjo paleisti srauto, ir `.cancelled` taip pat apima atvejį, kai pirkėjas uždarė atsiskaitymo puslapį. Kai pats SDK nesuveikė, `result.error` nurodo priežastį.

### `.unresolved` nėra klaida

Tai reiškia vieną iš trijų dalykų:

* Nėra `apiBaseURL` yra sukonfigūruotas ir nepateiktas pasirinktinis sprendiklis, todėl paieška nebuvo vykdyta.
* Paieška buvo vykdyta ir nepavyko. `result.error` pateikia priežastį.
* Mokėjimas vis dar vykdomas: pirkėjas baigė darbą su puslapiu, bet platforma dar nepasiekė galutinės būsenos.

Neskelbkite jo nei sėkme, nei nesėkme. Paklauskite savo backend'o naudodami `result.paymentId`, arba parodykite būseną „tikriname jūsų mokėjimą“ ir leiskite backend'ui pateikti atsakymą.

{% hint style="warning" %}
⚠️ **Niekada nelaikykite jokio rezultato, įskaitant `.succeeded`, kaip leidimo vykdyti užsakymą.** Rezultatas nurodo, ką rodyti pirkėjui. Užsakymo įvykdymas priklauso jūsų backend'ui ir yra valdomas pranešimų, kuriuos jam siunčia platforma.
{% endhint %}

***

## Atgalinio iškvietimo sutartis

Abiems įėjimo taškams:

* **Tiksliai vienas** atgalinis iškvietimas vienam kvietimui. Niekada nulis, niekada du kartus.
* Visada **pagrindinėje gijoje**.
* Visada **po** kai paties SDK sąsaja jau uždaryta, todėl parodyti kvito ekraną iš atgalinio iškvietimo veikia.
* Per jį praeina kiekvienas užbaigimo kelias: pasiektas grįžimo URL, pirkėjas atšaukė, puslapis nepavyko įkelti, būsenos paieška nepavyko, kortelės sesija nepavyko arba užklausa buvo netinkama.

Vienas `PaymentKit` egzempliorius vienu metu vykdo tik vieną mokėjimą. Pradėjus antrą, kol pirmasis vis dar rodomas ekrane, antrasis iš karto užbaigiamas kaip `.failed` su `invalidRequest` klaida, o ne sukraunant du atsiskaitymo langus.

***

## Kaip nustatoma būsena

Kai srautas pasiekia galutinį tašką, SDK iškviečia:

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

ir susieja `paymentStatus` gautą atsakymą su vienu iš keturių rezultatų.

Kai `apiBaseURL` nustatytas į `nil` ir nėra pasirinktinio sprendiklio, paieška nevykdoma ir kiekvienas mokėjimas baigiasi `.unresolved`. Tai yra tinkama konfigūracija, jei jūsų backend'o vis tiek bus klausiama.

***

## Pateikiant savo būsenos paiešką

`apiBaseURL` veikia, kai pagrindinis kompiuteris, į kurį nukreipiate, pateikia tokios struktūros kelią. Jei jūsų neteikia, arba jei norėtumėte sistemoje turėti vieną vietą, kuri žino apie mokėjimų vartus, įgyvendinkite `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
            // Grąžinkite neapdorotą platformos būsenos eilutę ("SETTLED", "FAILED", …),
            // užsakymo numerį arba klaidą.
            completion(status, orderNumber, error)
        }
    }
}

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

Grąžinkite neapdorotas platformos būsenų eilutes, o SDK jas susies už jus. Iškvieskite `completion` tik vieną kartą, iš bet kurios eilės. Būsena su `nil` būsena su `nil` klaida susiejama į `.unresolved`.

Tai pakeičia tik talpinamo atsiskaitymo būsenos paiešką; kortelės srautas jos nenaudoja. Kortelės sraute kortelės sesijos iškvietimai vis tiek keliauja iš įrenginio į atsiskaitymo API — taip šis srautas ir sukurtas.

***

## Kiti žingsniai

* [Klaidų valdymas](/seb-docs-draft/seb-docs-public-lt/integracija/mobilusis-sdk/ios-sdk/gaires/klaidu-valdymas.md)
* [API nuoroda](/seb-docs-draft/seb-docs-public-lt/integracija/mobilusis-sdk/ios-sdk/nuoroda/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-lt/integracija/mobilusis-sdk/ios-sdk/naudojant-sdk/rezultato-apdorojimas.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.
