6. 取引コンテキストを表示する
最終更新
役に立ちましたか?
各取引の後、あなたの デジタルウォレットアプリケーション は取引の詳細を表示できます。
NFCウォレットSDKは TransactionContext これらのコールバックで:
ContactlessPaymentServiceListener.onTransactionCompleted()
ContactlessPaymentServiceListener.onError()
を扱ってください TransactionContext を機密データとして扱ってください。
呼び出す TransactionContext.wipe() 使用が終わったら実行してください。
コンテキストから必要な値を読み取り、表示用にフォーマットします。
次のユーティリティはBCDエンコードされた値を文字列に変換します。
UIや決済ネットワークの要件に合わせてフォーマットを調整してください。
最終更新
役に立ちましたか?
役に立ちましたか?
@Override
public void onTransactionCompleted(TransactionContext ctx) {
try {
TransactionData data = TransactionData.from(ctx);
// UIにデータを表示します。
短期間のシークレットとして扱ってください。ログ出力や保存をしないでください。
ctx.wipe();
}
}
@Override
public void onError(
TransactionContext ctx,
PaymentServiceErrorCode errorCode,
String message) {
if (ctx == null) {
// トランザクションコンテキストが利用できない場合のエラーを処理します。
return;
}
try {
TransactionData data = TransactionData.from(ctx);
// UIにデータとエラーの詳細を表示します。
短期間のシークレットとして扱ってください。ログ出力や保存をしないでください。
ctx.wipe();
}
}
/**
* 取引表示のための便利なデータクラス。
*/
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() {
// ユーティリティクラス。
}
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 "PAY";
case 32:
return "REFUND";
default:
return "TRANSACTION";
}
}
}