L'acquisizione della carta legge i dati della carta senza effettuare immediatamente un pagamento. Il suo uso principale è il modello a doppia transazione (in due fasi): il primo passo acquisisce la carta e pre-dichiara il pagamento; il secondo passo invia una conferma che fa riferimento all'acquisizione. Questo è il modo in cui si separa "leggere la carta" da "addebitarla" — utile quando l'importo finale non è noto al momento della presentazione della carta.
Prerequisito: una sessione attiva.
Acquisizione semplice della carta
Leggi i dati della carta da soli:
viewModelScope.launch {
clientSDK.sendCardAcquisitionRequest(
RetailerMessageArguments.CardAcquisitionMessageArguments.AcquisitionArguments(
saleTransactionId = "Sale001",
loyaltyHandlingType = LoyaltyHandlingType.FORBIDDEN
)
)
}
-
saleTransactionId— il tuo riferimento per l'operazione. -
loyaltyHandlingType— unLoyaltyHandlingTypecon esattamente due valori:FORBIDDEN(nessuna gestione della fedeltà) oALLOWED(consentire l'elaborazione della fedeltà durante l'acquisizione).
La risposta è un sottotipo di RetailerAcquisitionResponse. Una risposta di successo contiene un POITransactionID — conservalo; il passo di completamento ne ha bisogno.
Il flusso in due fasi (doppia transazione)
Passo 1 — acquisire e pre-dichiarare il pagamento
DualTransactionArguments acquisisce la carta e dichiara il pagamento che seguirà, così l'app di pagamento può catturare ciò di cui ha bisogno per il completamento successivo:
clientSDK.sendCardAcquisitionRequest(
RetailerMessageArguments.CardAcquisitionMessageArguments.DualTransactionArguments(
saleTransactionId = "Sale001",
paymentAmounts = PaymentAmounts(currency = "EUR", amount = BigDecimal("10.00")),
paymentType = RTRPaymentType.NORMAL,
loyaltyHandlingType = LoyaltyHandlingType.FORBIDDEN
)
)
Cattura il POITransactionID (e il suo timestamp) dalla SuccessRetailerAcquisitionResponse — questi collegano il passo due al passo uno.
Passo 2 — completare il pagamento, facendo riferimento all'acquisizione
Invia un pagamento con paymentType = COMPLETION che porta un CardAcquisitionReference costruito dall'ID transazione POI e dal timestamp dell'acquisizione:
clientSDK.sendPaymentRequest(
RetailerMessageArguments.PaymentRequestMessageArguments.CardAcquisitionCompletionArguments(
saleTransactionId = "Sale001",
paymentAmounts = PaymentAmounts(currency = "EUR", amount = BigDecimal("10.00")),
paymentType = PaymentType.COMPLETION,
cardAcquisitionReference = RTRCardAcquisitionReference(
transactionID = "<POITransactionID dal passo 1>",
timeStamp = "<timestamp dal passo 1>"
)
)
)
Il cardAcquisitionReference del completamento è ciò che lega l'addebito alla lettura della carta nel passo uno. Senza una risposta di acquisizione catturata, non hai nulla a cui fare riferimento — esegui prima il passo uno.
Lettura dei risultati
when (message) {
is SuccessRetailerAcquisitionResponse -> { /* cattura POITransactionID + timestamp */ }
is ErrorRetailerAcquisitionResponse -> { /* acquisizione fallita */ }
// il completamento produce un RetailerPaymentResponse, gestito come un pagamento normale
}
Correlati
- Guida: effettuare un pagamento — l'alternativa a passo singolo e la meccanica del completamento.
- Come funziona il modello di messaggio — catturare la risposta di acquisizione nell'interceptor.
-
Riferimento API (
sdk-doc.zip) — sottotipi completi diCardAcquisitionMessageArguments,LoyaltyHandlingTypeeCardAcquisitionReference.