buildApplePayConfigurationJson function
String?
buildApplePayConfigurationJson({
- required CheckoutCustomizationData? customization,
- required String currencyCode,
- String countryCode = 'AE',
- String displayNameFallback = 'Pay',
Builds a JSON string for the pay package's
Apple Pay PaymentConfiguration.
Uses the checkout customization entry with type: "APPLE_PAY" (normalized),
show != 0, and non-empty identifier or merchant_id as merchantIdentifier.
Implementation
String? buildApplePayConfigurationJson({
required CheckoutCustomizationData? customization,
required String currencyCode,
String countryCode = 'AE',
String displayNameFallback = 'Pay',
}) {
if (customization == null) return null;
AvailablePaymentMethod? method;
const appleKey = 'APPLE_PAY';
for (final m in customization.availableMethods) {
if (normalizeCheckoutPaymentMethodType(m.type) !=
normalizeCheckoutPaymentMethodType(appleKey)) {
continue;
}
if (m.show == 0) continue;
final merchantIdentifier = m.identifier.trim().isNotEmpty
? m.identifier.trim()
: m.merchantId.trim();
if (merchantIdentifier.isEmpty) continue;
method = m;
break;
}
if (method == null) return null;
final md = customization.merchantDetails;
final merchantLabel = _nonEmpty(md?.merchantName);
final companyLabel = _nonEmpty(md?.companyName);
final displayName = merchantLabel.isNotEmpty
? merchantLabel
: (companyLabel.isNotEmpty ? companyLabel : displayNameFallback);
final schemeSources = method.schemes.isNotEmpty
? method.schemes
: (md?.supportedCardSchemes ?? const <String>[]);
final networks = _mapSchemesToAppleNetworks(schemeSources);
final supportedNetworks = networks.isNotEmpty
? networks
: const ['visa', 'masterCard', 'amex'];
final cc = currencyCode.trim().toUpperCase();
final co = countryCode.trim().toUpperCase();
if (cc.isEmpty || co.isEmpty) return null;
final json = jsonEncode({
'provider': 'apple_pay',
'data': {
'merchantIdentifier': method.identifier.trim().isNotEmpty
? method.identifier.trim()
: method.merchantId.trim(),
'displayName': displayName,
'merchantCapabilities': ['3DS', 'debit', 'credit'],
'supportedNetworks': supportedNetworks,
'countryCode': co,
'currencyCode': cc,
},
});
_logApplePayConfiguration(json);
return json;
}