signOn static method

EcrSignOn signOn(
  1. Object? payload, {
  2. required String operationId,
})

Reads a sign-on answer.

Implementation

static EcrSignOn signOn(Object? payload, {required String operationId}) {
  final Map<Object?, Object?>? map = _asMap(payload);
  if (map == null) {
    return EcrSignOnFailed(
      merchantReference: '',
      failure: EcrMalformed(_notAMap(payload, 'a sign-on')),
    );
  }

  final String reference = _string(map, EcrResultKeys.merchantReference);
  final EcrTerminalCapabilities what =
      capabilities(map[EcrResultKeys.capabilities]);
  final String raw = _string(map, EcrResultKeys.raw);

  switch (_string(map, EcrResultKeys.outcome)) {
    case EcrOutcomes.available:
      return EcrSignOnAvailable(
        merchantReference: reference,
        capabilities: what,
        raw: raw,
      );
    case EcrOutcomes.unavailable:
      return EcrSignOnUnavailable(
        merchantReference: reference,
        reason: what.reason.isNotEmpty
            ? what.reason
            : _string(map, EcrResultKeys.responseMessage),
        capabilities: what,
        raw: raw,
      );
    case EcrOutcomes.failed:
      return EcrSignOnFailed(
        merchantReference: reference,
        failure: failure(map[EcrResultKeys.failure]),
      );
    case final String unknown:
      return EcrSignOnFailed(
        merchantReference: reference,
        failure: EcrMalformed(_unknownOutcome(unknown, 'a sign-on')),
      );
  }
}