cardDataForSdkPayment method
Builds CardData for POST .../sdk/payment from paymentToken and any
card-like keys in parameters / customData maps (e.g. payment_token,
m_payment_token, card_number, cvv, expiry).
Implementation
CardData cardDataForSdkPayment() {
final slots = <String, String>{};
void ingestMap(Map<dynamic, dynamic> m) {
for (final e in m.entries) {
final key = e.key.toString().trim().toLowerCase();
final val = e.value?.toString().trim() ?? '';
if (key.isNotEmpty && val.isNotEmpty) {
slots[key] = val;
}
}
}
for (final p in parameters) {
if (p is Map) ingestMap(Map<dynamic, dynamic>.from(p));
}
for (final p in customData) {
ingestMap(Map<dynamic, dynamic>.from(p));
}
String? pick(List<String> keys) {
for (final k in keys) {
final v = slots[k];
if (v != null && v.isNotEmpty) return v;
}
return null;
}
final c = customerDetails;
final reqTok = paymentToken?.trim() ?? '';
final token =
pick([
'payment_token',
'm_payment_token',
'pay_token',
'token',
'card_token',
]) ??
(reqTok.isNotEmpty ? reqTok : null);
final cardNumber = pick(['card_number', 'cardnumber', 'pan', 'number']);
final cvv = pick(['cvv', 'cvc']) ?? '';
var month = pick(['expiry_month', 'exp_month', 'month']) ?? '';
var year = pick(['expiry_year', 'exp_year', 'year']) ?? '';
final expCombined = pick([
'expiry',
'expiry_date',
'card_expiry',
'expiry_date_iso',
]);
if (month.isEmpty && year.isEmpty && expCombined != null) {
final parts = expCombined.split(RegExp(r'[/\s.\-]+'));
if (parts.isNotEmpty) month = parts[0].trim();
if (parts.length > 1) year = parts[1].trim();
}
final holder = pick(['card_holder_name', 'cardholder_name', 'card_holder']);
final name = (holder != null && holder.isNotEmpty) ? holder : c.name.trim();
final email = pick(['email', 'card_email']);
final mobile = pick(['mobile', 'card_mobile']);
final code = pick(['code', 'country_code', 'dial_code']);
final brand = pick(['brand', 'card_brand', 'card_network', 'scheme']);
final lastFour = pick([
'last_four',
'last_4',
'last4',
'display_last_four',
'last_four_digits',
]);
return CardData(
cardNumber: cardNumber,
cardholderName: name.isEmpty ? '-' : name,
expiryMonth: month,
expiryYear: year,
cvv: cvv,
email: email ?? (c.email.trim().isEmpty ? null : c.email.trim()),
mobile: mobile ?? (c.mobile.trim().isEmpty ? null : c.mobile.trim()),
countryCode: code ?? (c.code.trim().isEmpty ? null : c.code.trim()),
paymentToken: token,
brand: brand,
displayLastFour: lastFour,
);
}