public PaymentResult Execute() { if (_environment.RaiseAskOpenConnection()) { _transport.OpenConnection(); } ApduCollection responses = _commandTransmitter.TransmitAPDU(_apdu); if (_environment.RaiseAskCloseConnection()) { _transport.CloseConnection(); } //Contains the result (success or failure) and much information about the transaction StatusInformationApdu statusInformation = responses.FindFirstApduOfType <StatusInformationApdu>(); //Completion is only sent if everything worked fine CompletionApduResponse completion = responses.FindFirstApduOfType <CompletionApduResponse>(); //Abort is only sent if something went wrong AbortApduResponse abort = responses.FindFirstApduOfType <AbortApduResponse>(); //If the terminal is not registered a application layer nack (0x84 XX XX) is sent StatusApdu status = responses.FindFirstApduOfType <StatusApdu>(); bool success = true; int? errorCode = null; string errorDescription = ""; if (completion == null && abort != null) { success = false; errorCode = (byte)abort.ResultCode; errorDescription = abort.ResultCode.ToString(); } else if (statusInformation != null) { StatusInformationResultCode result = statusInformation.FindParameter <StatusInformationResultCode>(StatusInformationApdu.StatusParameterEnum.ResultCode); if (result.ResultCode != StatusCodes.ErrorIDEnum.NoError) { success = false; errorCode = (byte)result.ResultCode; errorDescription = result.ResultCode.ToString(); } } else if (status != null && status.Status != StatusCodes.ErrorIDEnum.NoError) { success = false; errorCode = (byte)status.Status; errorDescription = status.Status.ToString(); } PaymentResult authResult = new PaymentResult(success, errorCode, errorDescription, statusInformation); authResult.PrintDocuments = _commandTransmitter.PrintDocuments; return(authResult); }
public void Execute() { if (_environment.RaiseAskOpenConnection()) { _transport.OpenConnection(); } ApduCollection responses = _commandTransmitter.TransmitAPDU(_initialisation); if (_environment.RaiseAskCloseConnection()) { _transport.CloseConnection(); } }
public virtual U Execute() { if (_environment.RaiseAskOpenConnection()) { _transport.OpenConnection(); } ApduCollection responses = _commandTransmitter.TransmitAPDU(_apdu); if (_environment.RaiseAskCloseConnection()) { _transport.CloseConnection(); } return(null); }
public InitialisationResult Execute() { InitialisationResult result = new InitialisationResult(); result.Success = true; try { if (_environment.RaiseAskOpenConnection()) { _transport.OpenConnection(); } MagicResponseCommandTransmitter commandTransmitter = new MagicResponseCommandTransmitter(_transport); commandTransmitter.ResponseReceived += new Action <IZvtApdu>(commandTransmitter_ResponseReceived); commandTransmitter.StatusReceived += new Action <IntermediateStatusApduResponse>(commandTransmitter_StatusReceived); ApduCollection responses = commandTransmitter.TransmitAPDU(_registration); CompletionApduResponse completionApdu = responses.FindFirstApduOfType <CompletionApduResponse>(); if (completionApdu == null) { throw new NotSupportedException("Did not receive Completion from RegistrationApdu"); } //if statusbyte is not supplied (== null) no extra action need to be performed CompletionStatusByteParameter statusByte = completionApdu.FindParameter <CompletionStatusByteParameter>(CompletionApduResponse.ParameterTypeEnum.StatusByte); if (statusByte != null && statusByte.InitialisationNecessary) { _log.Info("PT needs initialisation"); InitialisationApdu init = new InitialisationApdu(); ApduCollection apdus = commandTransmitter.TransmitAPDU(init); AbortApduResponse abort = apdus.FindFirstApduOfType <AbortApduResponse>(); if (abort != null) { _log.Info("Initialisation failed with '{0}({1})'", abort.ResultCode, (byte)abort.ResultCode); result.Success = false; result.ProtocolSpecificErrorCode = (byte)abort.ResultCode; result.ProtocolSpecificErrorDescription = abort.ResultCode.ToString(); } } if (statusByte != null && statusByte.DiagnosisNecessary && result.Success) { _log.Info("PT needs diagnosis"); DiagnosisApdu diag = new DiagnosisApdu(); ApduCollection apdus = commandTransmitter.TransmitAPDU(diag); AbortApduResponse abort = apdus.FindFirstApduOfType <AbortApduResponse>(); if (abort != null) { _log.Fatal("Diagnosis failed with '{0}({1})'", abort.ResultCode, (byte)abort.ResultCode); result.Success = false; result.ProtocolSpecificErrorCode = (byte)abort.ResultCode; result.ProtocolSpecificErrorDescription = abort.ResultCode.ToString(); } } result.PrintDocuments = commandTransmitter.PrintDocuments; } finally { if (_environment.RaiseAskCloseConnection()) { _transport.CloseConnection(); } } return(result); }