Een betaling uitvoeren

  • Bijgewerkt

Een betaling is de kernoperatie: een verkoop, een terugbetaling, een pre-autorisatie of een afronding. Ze verlopen allemaal via één methodesendPaymentRequest — en je selecteert het soort betaling met het veld paymentType. Deze handleiding behandelt de reguliere betaling; de varianten verschillen alleen in paymentType en worden aan het einde vermeld.

Vereiste: een live sessie. Zie Sessie- en loginlevenscyclus — zonder een succesvolle login wordt een betalingsverzoek genegeerd.


De aanroep

viewModelScope.launch {
    clientSDK.sendPaymentRequest(
        RetailerMessageArguments.PaymentRequestMessageArguments
            .RegularPaymentRequestMessageArguments(
                saleTransactionId = "Sale001",
                paymentAmounts = PaymentAmounts(
                    currency = "EUR",
                    amount = BigDecimal("10.00")
                ),
                paymentType = PaymentType.NORMAL
            )
    )
}

De drie velden die je nodig hebt:

  • saleTransactionIdjouw referentie voor de verkoop. Moet alfanumeriek en maximaal 35 tekens lang zijn. Als je het afleidt van een UUID, verwijder dan de streepjes — een ruwe UUID is 36 tekens en wordt geweigerd.
  • paymentAmounts — een PaymentAmounts. Minimaal currency (moet overeenkomen met de geconfigureerde valuta van de terminal) en amount (een BigDecimal). Het kan ook tipAmount, cashbackAmount en paidAmount bevatten — zie de API-referentie voor de volledige lijst met velden.
  • paymentType — een PaymentType. NORMAL voor een standaard verkoop.

Het resultaat lezen

De uitkomst komt aan in je interceptor als een subtype van RetailerPaymentResponse:

when (message) {
    is SuccessRetailerPaymentResponse -> { /* goedgekeurd — lees POI-gegevens, bedragen */ }
    is ErrorRetailerPaymentResponse   -> { /* afgewezen of mislukt */ }
    is PartialRetailerPaymentResponse -> { /* gedeeltelijke uitkomst — expliciet afhandelen */ }
    is RetailerDisplayRequest         -> { /* voortgangsupdate tijdens verwerking */ }
}

Verwerk de uitkomsten van het supertype, niet alleen succes — zie Hoe het berichtmodel werkt voor de reden. RetailerDisplayRequest-berichten komen tijdens de verwerking binnen om te melden wat de terminal aan het doen is; ze zijn niet het definitieve resultaat.

De POITransactionID is later belangrijk. Een succesvolle betalingsrespons bevat een POITransactionID in zijn POI-gegevens. Als je deze betaling mogelijk wilt terugdraaien, leg die ID dan nu vast — de terugdraaing heeft die nodig. Zie Handleiding: een transactie terugdraaien.


De betalingsvarianten

Je roept geen andere methode aan voor terugbetalingen of pre-autorisaties — je wijzigt paymentType. Dezelfde verzoek- en responstypen gelden; er zijn geen aparte subtypes voor terugbetaling/pre-autorisatie. Een RetailerDisplayRequest tijdens verwerking geeft aan welke operatie wordt uitgevoerd.

Je wilt… Stel paymentType in op
Een standaard verkoop uitvoerenPaymentType.NORMAL
Een klant terugbetalenPaymentType.REFUND
Pre-autoriseren (een bedrag reserveren)PaymentType.FIRSTRESERVATION
Een eerdere pre-autorisatie afrondenPaymentType.COMPLETION

PaymentType definieert in totaal 13 waarden (inclusief afbetaling, terugkerend, cash advance en anderen). De vier hierboven zijn de meest voorkomende; de volledige enum staat in de API-referentie. Gebruik de exacte enum-constante — de waarden zijn hoofdletters (NORMAL, niet Normal).


Een lopende betaling afbreken

Een betaling die is gestart maar nog niet is geautoriseerd door de host, kan worden geannuleerd met sendAbortRequest(). Na autorisatie is het te laat om af te breken — gebruik dan een terugdraaing. Zie Handleiding: een transactie terugdraaien en Probleemoplossing: annuleren heeft geen effect na autorisatie.


Gerelateerd

  • Quickstart — de eerste betalingsstap.
  • Hoe het berichtmodel werkt — het correct afhandelen van de respons.
  • Handleiding: een transactie terugdraaien — een voltooide betaling ongedaan maken.
  • Handleiding: kaartacquisitie en tweestapsbetalingen — de kaart vooraf lezen en daarna afronden.
  • API-referentie (sdk-doc.zip) — volledige PaymentAmounts-velden en de complete PaymentType-enum.

Was dit artikel nuttig?

Aantal gebruikers dat dit nuttig vond: 0 van 0