Acquisition de carte et paiements en deux étapes

  • Mise à jour

 

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 — un LoyaltyHandlingType avec exactement deux valeurs : FORBIDDEN (pas de gestion de fidélité) ou ALLOWED (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 de CardAcquisitionMessageArguments, LoyaltyHandlingType, et CardAcquisitionReference.

Cet article vous a-t-il été utile ?

Utilisateurs qui ont trouvé cela utile : 0 sur 0