getCardInfo static method
Future<bool>
getCardInfo(
- List<
String> cardUid, - List<
String> cardNumber, - List<
String> balance, - List<
String> bankName, { - List<
String> ? cardAttr, - List<
String> ? cardInfo, - List<
String> ? rrn, - bool? startPooling,
- List<
String> ? beforeBalance, - dynamic callbackTimeout()?,
- dynamic errorNfc()?,
- int? commandBalance,
- List<
String> ? brizziData, - dynamic callbackState()?,
- String? reffNo,
- dynamic errorCode(
- String rc
get card info
Implementation
static Future<bool> getCardInfo(List<String> cardUid, List<String> cardNumber,
List<String> balance, List<String> bankName,
{List<String>? cardAttr,
List<String>? cardInfo,
List<String>? rrn,
bool? startPooling,
List<String>? beforeBalance,
Function(bool)? callbackTimeout,
Function(bool)? errorNfc,
int? commandBalance,
List<String>? brizziData,
Function(String)? callbackState,
String? reffNo,
Function(String rc)? errorCode}) async {
if (beforeBalance == null) beforeBalance = List<String>.filled(1, "");
if (cardAttr == null) cardAttr = List<String>.filled(1, "");
if (cardInfo == null) cardInfo = List<String>.filled(1, "");
if (brizziData == null) brizziData = List<String>.filled(1, "");
if (commandBalance == null)
commandBalance = FlutterNfcKit.COMMAND_CHECK_BALANCE;
bool res = false;
String apduClSelectApp = await _channel.invokeMethod('apduIsMyCard');
String apduClCardInfo = await _channel.invokeMethod('apduCardInfo');
String apduClBalance = await _channel.invokeMethod('apduBalance');
String apduClCardAttr = await _channel.invokeMethod('apduCardAttr');
String? selectApp;
String brizziToken = await _channel.invokeMethod('getBrizziToken');
print("brizziToken $brizziToken");
String reffNumber = (reffNo != null) ? reffNo : "";
try {
brizziData[0] = "";
if (startPooling!) {
callbackState!(WAITING_STATUS);
NFCTag tag = await FlutterNfcKit.poll(
commandOperation: commandBalance,
iosAlertMessage: "Tempelkan kartumu pada iPhone",
consumerToken: brizziToken,
username: "wahyudi@mdd.co.id",
consumerKey: "5L6AH60u3OVGroiN",
consumerSecret: "WDXSFPoLnf9nvrgIyJGcDZG71VuYbwre",
reffNo: reffNumber);
cardUid[0] = tag.id;
print("brizziResponse ${tag.brizziResponse}");
if (tag.brizziResponse != "") {
var brizziResponse = jsonDecode(tag.brizziResponse!);
var activatedBalance =
(brizziResponse['activated_balance'].toString() != "")
? brizziResponse['activated_balance'].toString()
: "0";
balance[0] = brizziResponse['last_balance'].toString();
beforeBalance[0] =
/*(int.parse(brizziResponse['last_balance'].toString()) -
int.parse(activatedBalance))
.toString();*/
brizziResponse['last_balance'].toString();
cardNumber[0] = brizziResponse['card_no'].toString();
bankName[0] = "BRI";
brizziData[0] = tag.brizziResponse!;
res = true;
return res;
}
}
var dataSelect = jsonDecode(apduClSelectApp);
var dataBalance = jsonDecode(apduClBalance);
var dataCardAttr = jsonDecode(apduClCardAttr);
List<ApduResponse> listData = dataSelect
.map<ApduResponse>((result) => new ApduResponse.fromJson(result))
.toList();
List<ApduResponse> listApduBalance = dataBalance
.map<ApduResponse>((result) => new ApduResponse.fromJson(result))
.toList();
List<ApduResponse> listApduCardAttr = dataCardAttr
.map<ApduResponse>((result) => new ApduResponse.fromJson(result))
.toList();
/// apdu cl select app
for (ApduResponse s in listData) {
selectApp = await FlutterNfcKit.transceive(s.apdu);
if (_apduIsOke(selectApp!)) {
bankName[0] = s.bankType;
// print("bank name ${bankName[0]}");
break;
}
}
for (ApduResponse b in listApduBalance) {
if (b.bankType == bankName[0]) {
String rApduCardAttr = "";
if (bankName[0] == "MANDIRI") {
/// when bank name mandiri
String apduBalance = await FlutterNfcKit.transceive(b.apdu);
cardInfo[0] = await FlutterNfcKit.transceive(apduClCardInfo);
for (ApduResponse apduCardAttr in listApduCardAttr) {
if (apduCardAttr.bankType == bankName[0])
rApduCardAttr =
await FlutterNfcKit.transceive(apduCardAttr.apdu);
}
String result = await _channel.invokeMethod(
'parseBalance', <String, dynamic>{
'apduBalance': "$apduBalance,${cardInfo[0]}",
'bankType': bankName[0]
});
// print("result $result");
List<String> items = result.split(",");
balance[0] = items[0];
beforeBalance[0] = items[0];
cardNumber[0] = items[1];
cardAttr[0] = rApduCardAttr;
} else if (bankName[0] == "BNI") {
/// when bank name bni
for (ApduResponse apduCardAttr in listApduCardAttr) {
if (apduCardAttr.bankType == bankName[0]) {
rApduCardAttr =
await FlutterNfcKit.transceive(apduCardAttr.apdu);
}
}
String apduBalance = await FlutterNfcKit.transceive(b.apdu);
String purse = apduBalance.substring(0, apduBalance.length - 4);
String crn = rApduCardAttr.substring(0, rApduCardAttr.length - 4);
String rRrn = b.apdu.substring(14, 30);
if (rrn != null) rrn[0] = rRrn;
String composeBni = await _channel.invokeMethod('composeBNI',
<String, dynamic>{'apduPurse': purse + crn + rRrn});
String result = await _channel.invokeMethod(
'parseBalance', <String, dynamic>{
'apduBalance': purse,
'bankType': bankName[0]
});
// print("result $result");
List<String> items = result.split(",");
balance[0] = items[0];
beforeBalance[0] = items[0];
cardNumber[0] = items[1];
cardInfo[0] = composeBni ?? "0";
} else if (bankName[0] == "BCA") {
/// when bank name bca
List<String> listApduBca = b.apdu.split(",");
String apduFirst = listApduBca[0];
String apduSecond = listApduBca[1];
String apduLast = listApduBca[2];
String rApduFirst = await FlutterNfcKit.transceive(apduFirst);
String rApduSecond = await FlutterNfcKit.transceive(apduSecond);
String rApduLast = await FlutterNfcKit.transceive(apduLast +
rApduSecond.substring(0, rApduSecond.length - 4) +
"29");
String result = await _channel.invokeMethod(
'parseBalance', <String, dynamic>{
'apduBalance': rApduLast,
'bankType': bankName[0]
});
// print("result $result");
List<String> items = result.split(",");
balance[0] = items[0];
beforeBalance[0] = items[0];
cardNumber[0] = items[1];
} else if (bankName[0] == "DKI-NEW") {
/// when bank name dki-new
String rApduBalance = await FlutterNfcKit.transceive(b.apdu);
String result = await _channel.invokeMethod(
'parseBalance', <String, dynamic>{
'apduBalance': "${selectApp},$rApduBalance",
'bankType': "DKI"
});
// print("result $result");
List<String> items = result.split(",");
balance[0] = items[0];
beforeBalance[0] = items[0];
cardNumber[0] = items[1];
}
// print("cardNumber = ${cardNumber[0]}, balance ${balance[0]}");
res = true;
}
}
} catch (error) {
String? rc;
res = false;
if (error.toString().toLowerCase().contains("polling tag timeout")){
callbackTimeout!(true);
rc=pollingTagTimeout;
}
if (error.toString().toLowerCase().contains("nfc not available") ||
error
.toString()
.toLowerCase()
.contains("stringindexoutofboundsexception")) {
print("error nfc not support");
errorNfc!(true);
rc=errorNFC;
}
print("error operation ${error.toString()}");
if (errorCode != null) {
errorCode(rc!);
}
}
return res;
}