Annuler une transaction

  • Mise à jour

Une annulation annule un paiement précédemment effectué — par exemple, lorsque le mauvais montant a été facturé. L'élément crucial à bien comprendre est l'identifiant contre lequel vous effectuez l'annulation : une annulation cible le ID de transaction POI que le terminal a retourné dans la réponse de paiement originale, et non votre propre référence de vente.

Pré-requis : une session active, et le POITransactionID du paiement que vous souhaitez annuler.


Vous avez besoin de l'ID de transaction POI original

Lorsqu'un paiement réussit, sa SuccessRetailerPaymentResponse contient un POITransactionID dans les données POI. C'est ce que l'annulation annule. Si vous ne l'avez pas capturé au moment du paiement, vous pouvez le récupérer avec une requête de statut de transaction (voir Guide : vérifier le statut d'une transaction) — mais la méthode propre consiste à le stocker dès que le paiement réussit.

C'est l'erreur d'annulation la plus courante : passer votre propre saleTransactionId alors que l'ID de transaction POI original doit être utilisé. Ce sont des identifiants différents ; l'annulation doit référencer l'ID du terminal.


L'appel

viewModelScope.launch {
    clientSDK.sendReversalRequest(
        RetailerMessageArguments.ReversalRequestMessageArguments(
            originalPoiTransactionId = "<POITransactionID du paiement original>",
            saleTransactionId = "Sale001",
            transactionAmountsData =
                RetailerMessageArguments.ReversalRequestMessageArguments.TransactionAmountsData(
                    reversedAmount = BigDecimal("10.00"),
                    currency = "EUR"
                )
        )
    )
}
  • originalPoiTransactionId — le POITransactionID du paiement à annuler. C'est le champ clé.
  • saleTransactionIdvotre référence pour cette opération d'annulation.
  • transactionAmountsData — un TransactionAmountsData imbriqué contenant reversedAmount et currency.

Lire le résultat

when (message) {
    is SuccessRetailerReversalResponse -> { /* annulation acceptée */ }
    is ErrorRetailerReversalResponse   -> { /* annulation rejetée — examiner le détail */ }
}

Une annulation rejetée signifie généralement que l'ID de transaction POI était erroné, que la transaction avait déjà été annulée, ou qu'elle n'est plus annulable. La réponse d'erreur contient les détails.


Annulation vs. interruption

Ces deux opérations répondent à des besoins différents et sont faciles à confondre :

  • Interruption (sendAbortRequest()) arrête un paiement qui est encore en cours, avant l'autorisation de l'hôte. Il n'y a encore rien à annuler.
  • Annulation annule un paiement qui a déjà été effectué. L'argent a été transféré ; l'annulation le remet en place.

Si l'autorisation a eu lieu, l'interruption ne s'applique plus — procédez à une annulation à la place. Voir Dépannage : l'interruption n'a aucun effet après autorisation.


Articles connexes

  • Guide : effectuer un paiement — produit le POITransactionID que vous annulez.
  • Guide : vérifier le statut d'une transaction — récupérez un POITransactionID que vous n'avez pas stocké.
  • Comment fonctionne le modèle de message — gestion du super-type de réponse.
  • Référence API (sdk-doc.zip) — champs complets de ReversalRequestMessageArguments et TransactionAmountsData.

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

Utilisateurs qui ont trouvé cela utile : 0 sur 0