L'acquisition de carte lit les données de la carte sans effectuer immédiatement un paiement. Son utilisation principale est le modèle à double transaction (en deux étapes) : la première étape acquiert la carte et pré-déclare le paiement ; la deuxième étape envoie une finalisation qui fait référence à l'acquisition. C'est ainsi que vous séparez « lire la carte » de « débiter la carte » — utile lorsque le montant final n'est pas connu au moment où la carte est présentée.
Prérequis : une session active.
Acquisition simple de carte
Lire les données de la carte seules :
viewModelScope.launch {
clientSDK.sendCardAcquisitionRequest(
RetailerMessageArguments.CardAcquisitionMessageArguments.AcquisitionArguments(
saleTransactionId = "Sale001",
loyaltyHandlingType = LoyaltyHandlingType.FORBIDDEN
)
)
}
-
saleTransactionId— votre référence pour l'opération. -
loyaltyHandlingType— unLoyaltyHandlingTypeavec exactement deux valeurs :FORBIDDEN(pas de gestion de fidélité) ouALLOWED(autoriser le traitement de la fidélité lors de l'acquisition).
La réponse est un sous-type de RetailerAcquisitionResponse. Une réponse réussie contient un POITransactionID — conservez-le ; l'étape de finalisation en aura besoin.
Le flux en deux étapes (double transaction)
Étape 1 — acquérir et pré-déclarer le paiement
DualTransactionArguments acquiert la carte et déclare le paiement qui suivra, afin que l'application de paiement puisse capturer ce dont elle a besoin pour la finalisation ultérieure :
clientSDK.sendCardAcquisitionRequest(
RetailerMessageArguments.CardAcquisitionMessageArguments.DualTransactionArguments(
saleTransactionId = "Sale001",
paymentAmounts = PaymentAmounts(currency = "EUR", amount = BigDecimal("10.00")),
paymentType = RTRPaymentType.NORMAL,
loyaltyHandlingType = LoyaltyHandlingType.FORBIDDEN
)
)
Capturez le POITransactionID (et son horodatage) à partir de la SuccessRetailerAcquisitionResponse — ceux-ci relient la deuxième étape à la première.
Étape 2 — finaliser le paiement, en faisant référence à l'acquisition
Envoyez un paiement avec paymentType = COMPLETION portant une CardAcquisitionReference construite à partir de l'ID de transaction POI et de l'horodatage de l'acquisition :
clientSDK.sendPaymentRequest(
RetailerMessageArguments.PaymentRequestMessageArguments.CardAcquisitionCompletionArguments(
saleTransactionId = "Sale001",
paymentAmounts = PaymentAmounts(currency = "EUR", amount = BigDecimal("10.00")),
paymentType = PaymentType.COMPLETION,
cardAcquisitionReference = RTRCardAcquisitionReference(
transactionID = "<POITransactionID de l'étape 1>",
timeStamp = "<horodatage de l'étape 1>"
)
)
)
La cardAcquisitionReference de la finalisation est ce qui lie le débit à la lecture de la carte de la première étape. Sans réponse d'acquisition capturée, vous n'avez rien à référencer — exécutez d'abord l'étape un.
Lecture des résultats
when (message) {
is SuccessRetailerAcquisitionResponse -> { /* capture POITransactionID + horodatage */ }
is ErrorRetailerAcquisitionResponse -> { /* échec de l'acquisition */ }
// la finalisation produit une RetailerPaymentResponse, traitée comme un paiement normal
}
Articles connexes
- Guide : effectuer un paiement — l'alternative en une seule étape, et les mécanismes de finalisation.
- Comment fonctionne le modèle de message — capture de la réponse d'acquisition dans l'intercepteur.
-
Référence API (
sdk-doc.zip) — sous-types complets deCardAcquisitionMessageArguments,LoyaltyHandlingType, etCardAcquisitionReference.