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

# Rezultāta apstrāde

Nolasiet maksājuma rezultātu, paļaujieties uz atzvana līgumu un pieslēdziet savu statusa pārbaudi.

Izmantojiet šo rokasgrāmatu, ja vēlaties precīzi zināt, ko jūsu lietotnei paziņo, kad maksājuma apstrāde beidzas, un ko tā ar to drīkst droši darīt.

Abi `startPayment` un `startCardPayment` sniedz vienu `PaymentResult`.

***

## Rezultāts

| Lauks           | Tips             | Piezīmes                                                                     |
| --------------- | ---------------- | ---------------------------------------------------------------------------- |
| `iznākums`      | `PaymentOutcome` | Viens no četriem gadījumiem zemāk.                                           |
| `paymentId`     | `String`         | Vienmēr ir klāt.                                                             |
| `paymentStatus` | `String?`        | Platformas neapstrādātais statuss, piemēram `"SETTLED"`.                     |
| `orderNumber`   | `String?`        | Platformas ieraksts par pasūtījuma numuru, ko jūsu aizmugursistēma nosūtīja. |
| `sessionId`     | `String?`        | Kartes sesijas identifikators. To nosaka tikai kartes plūsma.                |
| `error`         | `NSError?`       | `nil` kad maksājums vienkārši nenotika, nevis kad kaut kas nogāja greizi.    |

`paymentStatus` ir apzināti virkne, nevis uzskaitījums, lai platformas pusē pievienots statuss nonāktu jūsu kodā nemainīts, nevis tiktu reducēts uz kaut ko citu.

`orderNumber` ir dabiskā atslēga, lai sasaistītu rezultātu ar jūsu pasūtījumu.

***

## Četri iznākumi

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

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

case .cancelled:
    // Pircējs atteicās.
    break

case .unresolved:
    // SDK nezina. Jautājiet savai aizmugursistēmai.
    confirmWithBackend(paymentId: result.paymentId)
}
```

Platformas statuss tiek kartēts uz četriem iznākumiem šādi:

| Iznākums      | Maksājuma statuss                                                            |
| ------------- | ---------------------------------------------------------------------------- |
| `.succeeded`  | `AUTHORIZED`, `CAPTURED`, `SETTLED`, `REFUNDED`                              |
| `.failed`     | `FAILED`                                                                     |
| `.cancelled`  | `CANCELLED`, `ABANDONED`                                                     |
| `.unresolved` | `INITIALIZED`, `SENT_FOR_PROCESSING`, vai jebkurš statuss, ko SDK neatpazīst |

`.failed` attiecas arī uz gadījumiem, kad SDK vispār nevarēja palaist plūsmu, un `.cancelled` attiecas arī uz gadījumiem, kad pircējs aizvēra norēķinu lapu. Kad pats SDK kļuva neizdevies, `result.error` norāda iemeslu.

### `.unresolved` nav kļūda

Tas nozīmē vienu no trim lietām:

* Nav `apiBaseURL` ir konfigurēts un netika norādīts pielāgots atrisinātājs, tāpēc meklēšana netika mēģināta.
* Meklēšana tika mēģināta un neizdevās. `result.error` nes iemeslu.
* Maksājums patiešām vēl tiek apstrādāts: pircējs ir pabeidzis darbu ar lapu, bet platforma vēl nav sasniegusi galīgo stāvokli.

Neuzrādiet to kā sekmīgu vai neveiksmīgu. Jautājiet savai aizmugursistēmai, izmantojot `result.paymentId`, vai arī parādiet stāvokli "mēs apstiprinām jūsu maksājumu" un ļaujiet aizmugursistēmai pateikt atbildi.

{% hint style="warning" %}
⚠️ **Nekad neuzskatiet nevienu iznākumu, tostarp `.succeeded`, par atļauju izpildīt pasūtījumu.** Rezultāts jums pasaka, ko rādīt pircējam. Pasūtījuma izpilde ir jūsu aizmugursistēmas ziņā, un to vada platformas nosūtītie paziņojumi.
{% endhint %}

***

## Atpakaļsaukuma līgums

Abiem ieejas punktiem:

* **Precīzi viens** atpakaļsaukums katram izsaukumam. Nekad nulle, nekad divas reizes.
* Vienmēr uz **galvenā pavediena**.
* Vienmēr **pēc** tam, kad SDK paša saskarne jau ir aizvērta, tāpēc kvīts ekrāna rādīšana no atpakaļsaukuma iekšpuses darbojas.
* Katrs noslēdzošais ceļš iet caur to: tika sasniegta atgriešanās URL, pircējs atcēla, lapa neielādējās, statusa meklēšana neizdevās, kartes sesija neizdevās vai pieprasījumu nevarēja izmantot.

Viens `PaymentKit` instance vienlaikus apstrādā vienu maksājumu. Sākot otru, kamēr pirmais vēl ir ekrānā, otrais tiek pabeigts uzreiz ar `.failed` ar `invalidRequest` kļūdu, nevis saliekot kopā divus norēķinus.

***

## Kā tiek noteikts statuss

Kad plūsma sasniedz galapunktu, SDK izsauc:

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

un kartē `paymentStatus` to, ko tā saņem atpakaļ, uz vienu no četriem iznākumiem.

Ar `apiBaseURL` iestatītu uz `nil` un bez pielāgota atrisinātāja meklēšana netiek mēģināta, un katrs maksājums beidzas `.unresolved`. Tā ir derīga konfigurācija, ja jūsu aizmugursistēmai tāpat tiks jautāts.

***

## Paša statusa meklēšanas nodrošināšana

`apiBaseURL` darbojas tad, ja resursdators, uz kuru norādāt, apkalpo šādu ceļa struktūru. Ja jūsu risinājums to nedara vai jūs labāk vēlaties turēt vienu vietu savā sistēmā, kas zina par maksājumu vārteju, ieviesiet `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
            // Atgrieziet platformas neapstrādāto statusa virkni ("SETTLED", "FAILED", …),
            // pasūtījuma numuru vai kļūdu.
            completion(status, orderNumber, error)
        }
    }
}

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

Atgrieziet platformas neapstrādātās statusa virknes, un SDK tās salāgos jūsu vietā. Izsauciet `completion` precīzi vienu reizi, no jebkuras rindas. A `nil` statuss ar `nil` kļūdu tiek atrisināts uz `.unresolved`.

Tas aizstāj tikai hostēta norēķinu risinājuma statusa meklēšanu; kartes plūsmā tādas nav. Kartes plūsmā kartes sesijas izsaukumi joprojām notiek no ierīces uz norēķinu API, un tā šī plūsma ir izveidota.

***

## Nākamie soļi

* [Kļūdu apstrāde](/seb-docs-draft/seb-docs-public-lv/integracija/mobilais-sdk/ios-sdk/celvezi/kludu-apstrade.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/rezultata-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.
