Acquisizione della carta e pagamenti in due fasi

  • Aggiornato

 

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 — un LoyaltyHandlingType con esattamente due valori: FORBIDDEN (nessuna gestione della fedeltà) o ALLOWED (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 di CardAcquisitionMessageArguments, LoyaltyHandlingType e CardAcquisitionReference.

Questo articolo ti è stato utile?

Utenti che ritengono sia utile: 0 su 0