コード例 #1
0
        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
            });
        }
    }
}
コード例 #2
0
        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()));
            }
        }
コード例 #3
0
 public IProcessingResponse Process3Ds(Session session, Operation operation, Terminal terminal, PaymentData paymentData, Submit3Ds submit3Ds)
 {
     return(new ProcessingResponse
     {
         ProcessingOrderId = Guid.NewGuid().ToString(), Status = OperationStatus.Success
     });
 }
コード例 #4
0
        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);
        }
コード例 #5
0
 public ProceedStatus Deposit(Session session, Operation3ds operation3ds, Submit3Ds submit3Ds)
 {
     return(InnerAfter3ds(session, operation3ds, OperationType.Deposit, submit3Ds));
 }