public CommonApiResponse After3Ds(Submit3Ds submit3Ds, [FromServices] SessionManagerService sessionManager, [FromServices] OperationManagerService operationManager, [FromServices] PaymentSystemContext dbContext) { var merchant = (Merchant)HttpContext.Items["Merchant"]; var operation3ds = dbContext.Operation3ds.Include(x => x.Operation).FirstOrDefault(x => x.LocalMd == submit3Ds.MD); if (operation3ds == null || operation3ds.Operation.OperationStatus != OperationStatus.AdditionalAuth) { return new DebitResponse { Error = new ApiError(InnerError.CommonError) } } ; var session = dbContext.Session.Include(x => x.Operation).First(x => x.Id == operation3ds.Operation.SessionId); if (session.MerchantId != merchant.Id) { return new DebitResponse { Error = new ApiError(InnerError.CommonError) } } ; var possibility = operationManager.CheckPaymentPossibility(session, operation3ds.Operation); if (possibility != PaymentPossibility.PaymentAllowed) { return new DebitResponse { Error = new ApiError(InnerError.CommonError) } } ; var result = operationManager.Deposit(session, operation3ds, submit3Ds); return(new DebitResponse { Status = result.OperationStatus }); } } }
public ContentResult From3Ds([FromForm] Submit3Ds submit3Ds, [FromServices] OperationManagerService operationManager, [FromServices] FormManagerService formManager, [FromServices] PaymentSystemContext dbContext) { var operation3ds = dbContext.Operation3ds.Include(x => x.Operation).FirstOrDefault(x => x.LocalMd == submit3Ds.MD); if (operation3ds == null || operation3ds.Operation.OperationStatus != OperationStatus.AdditionalAuth) { return(base.Content(formManager.GetErrorForm())); } var session = dbContext.Session.Include(x => x.Operation).First(x => x.Id == operation3ds.Operation.SessionId); var possibility = operationManager.CheckPaymentPossibility(session, operation3ds.Operation); if (possibility != PaymentPossibility.PaymentAllowed) { return(base.Content(formManager.GetErrorForm())); } var result = operationManager.Deposit(session, operation3ds, submit3Ds); switch (result.OperationStatus) { case OperationStatus.Pending: return(base.Content(formManager.GetPendingForm())); case OperationStatus.Success: return(base.Content(formManager.GetSuccessForm())); case OperationStatus.Redirected: return(base.Content(formManager.GetRedirectForm(result.RedirectedUrl))); case OperationStatus.Error: return(session.CanTryToPayAnotherTime ? base.Content(formManager.GetRedirectForm("/form/v1/pay")) : base.Content(formManager.GetErrorForm())); default: return(base.Content(formManager.GetErrorForm())); } }
public IProcessingResponse Process3Ds(Session session, Operation operation, Terminal terminal, PaymentData paymentData, Submit3Ds submit3Ds) { return(new ProcessingResponse { ProcessingOrderId = Guid.NewGuid().ToString(), Status = OperationStatus.Success }); }
private ProceedStatus InnerAfter3ds(Session session, Operation3ds operation3ds, OperationType operationType, Submit3Ds submit3Ds) { var lastOperation = _dbContext.Operation.Include(x => x.Terminal).OrderByDescending(x => x.Id).First(x => x.SessionId == session.Id); if (lastOperation.Id != operation3ds.OperationId) { return new ProceedStatus { OperationStatus = OperationStatus.Error } } ; var processing = _processingFactory.GetProcessing(lastOperation.TerminalId, _dbContext); ProceedStatus response; PaymentData paymentData = null; if (operation3ds.SaveCredentials) { paymentData = _remoteContainer.Get(operation3ds.LocalMd); } try { var processingResponse = processing.Process3Ds(session, lastOperation, lastOperation.Terminal, paymentData, submit3Ds); lastOperation.OperationStatus = processingResponse.Status; switch (processingResponse.Status) { case OperationStatus.Success: lastOperation.InvolvedAmount = lastOperation.Amount; break; } response = new ProceedStatus { OperationStatus = lastOperation.OperationStatus }; } catch (Exception exc) { _logger.LogError(exc.Message); lastOperation.OperationStatus = OperationStatus.Error; response = new ProceedStatus { OperationStatus = OperationStatus.Error }; } finally { _dbContext.SaveChanges(); } return(response); }
public ProceedStatus Deposit(Session session, Operation3ds operation3ds, Submit3Ds submit3Ds) { return(InnerAfter3ds(session, operation3ds, OperationType.Deposit, submit3Ds)); }