6. Mostrar el contexto de la transacción
Última actualización
¿Te fue útil?
Después de cada transacción, tu aplicación de cartera digital puede mostrar los detalles de la transacción.
NFC Wallet SDK proporciona un TransactionContext en estas devoluciones de llamada:
ContactlessPaymentServiceListener.onTransactionCompleted()
ContactlessPaymentServiceListener.onError()
Trata TransactionContext como datos sensibles.
Llamar a TransactionContext.wipe() después de terminar de usarlo.
Lee los valores que necesitas del contexto y luego fórmalos para mostrarlos.
La siguiente utilidad convierte valores codificados en BCD a cadenas.
Ajusta el formato para que coincida con tu interfaz de usuario y con los requisitos de tu red de pagos.
Última actualización
¿Te fue útil?
¿Te fue útil?
@Override
public void onTransactionCompleted(TransactionContext ctx) {
try {
TransactionData data = TransactionData.from(ctx);
// Muestra los datos en tu interfaz de usuario.
} finally {
ctx.wipe();
}
}
@Override
public void onError(
TransactionContext ctx,
PaymentServiceErrorCode errorCode,
String message) {
if (ctx == null) {
// Maneja el error cuando no hay un contexto de transacción disponible.
return;
}
try {
TransactionData data = TransactionData.from(ctx);
// Muestra los datos y los detalles del error en tu interfaz de usuario.
} finally {
ctx.wipe();
}
}
/**
* Clase de datos auxiliar para mostrar transacciones.
*/
public class TransactionData {
private final String currencyCode;
private final double amount;
private final String transactionDate;
private final String transactionType;
private final String transactionId;
private TransactionData(
String currencyCode,
double amount,
String transactionDate,
String transactionType,
String transactionId) {
this.currencyCode = currencyCode;
this.amount = amount;
this.transactionDate = transactionDate;
this.transactionType = transactionType;
this.transactionId = transactionId;
}
public static TransactionData from(TransactionContext ctx) {
String currencyCode = TransactionDisplayUtils.bcdToString(ctx.getCurrencyCode());
String transactionDate = TransactionDisplayUtils.bcdToString(ctx.getTrxDate());
String transactionType = TransactionDisplayUtils.getTransactionType(ctx.getTrxType());
return new TransactionData(
currencyCode,
ctx.getAmount(),
transactionDate,
transactionType,
ctx.getTrxId());
}
public String getCurrencyCode() {
return currencyCode;
}
public double getAmount() {
return amount;
}
public String getTransactionDate() {
return transactionDate;
}
public String getTransactionType() {
return transactionType;
}
public String getTransactionId() {
return transactionId;
}
}public final class TransactionDisplayUtils {
private TransactionDisplayUtils() {
// Clase de utilidad.
}
public static String bcdToString(byte[] bcd) {
if (bcd == null) {
return "";
}
StringBuilder sb = new StringBuilder();
for (byte b : bcd) {
sb.append(bcdToString(b));
}
return sb.toString();
}
public static String bcdToString(byte bcd) {
int high = (bcd & 0xF0) >>> 4;
int low = (bcd & 0x0F);
return String.valueOf(high) + low;
}
public static String getTransactionType(byte trxType) {
switch (trxType) {
case 0:
return "PAGO";
case 32:
return "REEMBOLSO";
default:
return "TRANSACCIÓN";
}
}
}