public VoidResponse VoidTransaction(string authorizationId) { VoidResponse response; if (_repo.TryGetAuthorization(authorizationId, out var authorization)) { if (authorization.IsVoid) { response = new VoidResponse(authorization.Currency, authorization.AmountCaptured) { IsError = true, Message = $"{authorization.CardNumber}: Unable to void transaction as it is already void" }; } else { _repo.VoidTransaction(authorizationId); response = new VoidResponse(authorization.Currency, authorization.AmountCaptured) { Message = $"{authorization.CardNumber}: Transaction voided successfully" }; } } else { response = new VoidResponse(string.Empty, -1) { IsError = true, Message = $"Invalid authorization Id - {authorizationId}" }; } return(response); }
public CaptureResponse Capture(CaptureRequest captureRequest) { CaptureResponse respose; if (_repo.TryGetAuthorization(captureRequest.AuthorizationId, out var authorization)) { if (IsCaptureAllowed(authorization)) { if (authorization.AmountCaptured + captureRequest.Amount <= authorization.AmountAuthorized) { _repo.UpdateCapture(captureRequest.AuthorizationId, captureRequest.Amount); respose = new CaptureResponse(authorization.Currency, captureRequest.Amount) { Message = $"{authorization.CardNumber} - Successfully captured {authorization.Currency} {captureRequest.Amount}" }; } else { respose = new CaptureResponse(authorization.Currency, captureRequest.Amount) { IsError = true, Message = $"{authorization.CardNumber} - Failed to capture {authorization.Currency} {captureRequest.Amount} as it exceeds authorized amount" }; } } else { respose = new CaptureResponse(authorization.Currency, captureRequest.Amount) { IsError = true, Message = $"{authorization.CardNumber} - Capture not allowed on a void/refunded transaction" }; } return(respose); } else { respose = new CaptureResponse(string.Empty, captureRequest.Amount) { IsError = true, Message = $"Capture failed. Invalid authorization Id: {captureRequest.AuthorizationId}" }; return(respose); } }
public RefundResponse Refund(RefundRequest refundRequest) { RefundResponse response; if (_repo.TryGetAuthorization(refundRequest.AuthorizationId, out var authorization)) { if (authorization.IsVoid) { response = new RefundResponse(authorization.Currency, authorization.AmountAuthorized) { IsError = true, Message = $"{authorization.CardNumber} - Refund failed as transaction is void" }; return(response); } if (refundRequest.Amount <= authorization.AmountAuthorized) { _repo.UpdateRefund(refundRequest.AuthorizationId, refundRequest.Amount); response = new RefundResponse(authorization.Currency, refundRequest.Amount) { Message = $"{authorization.CardNumber} - Successfully processed refund for {authorization.Currency} {refundRequest.Amount}" }; } else { response = new RefundResponse(authorization.Currency, refundRequest.Amount) { IsError = true, Message = $"{authorization.CardNumber} - Failed to process refund as amount is higher than captured amount" }; } return(response); } else { response = new RefundResponse(string.Empty, refundRequest.Amount) { IsError = true, Message = $"Refund failed. Invalid authorization Id: {refundRequest.AuthorizationId}" }; return(response); } }