Een betaling is de kernoperatie: een verkoop, een terugbetaling, een pre-autorisatie of een afronding. Ze verlopen allemaal via één methode — sendPaymentRequest — 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:
-
saleTransactionId— jouw 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— eenPaymentAmounts. Minimaalcurrency(moet overeenkomen met de geconfigureerde valuta van de terminal) enamount(eenBigDecimal). Het kan ooktipAmount,cashbackAmountenpaidAmountbevatten — zie de API-referentie voor de volledige lijst met velden. -
paymentType— eenPaymentType.NORMALvoor 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
POITransactionIDis later belangrijk. Een succesvolle betalingsrespons bevat eenPOITransactionIDin 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 uitvoeren | PaymentType.NORMAL |
| Een klant terugbetalen | PaymentType.REFUND |
| Pre-autoriseren (een bedrag reserveren) | PaymentType.FIRSTRESERVATION |
| Een eerdere pre-autorisatie afronden | PaymentType.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) — volledigePaymentAmounts-velden en de completePaymentType-enum.