示例#1
0
 public PlatformService(
     PaymentSystemContext context,
     IHashingService hashingService)
 {
     _context        = context;
     _hashingService = hashingService;
 }
示例#2
0
 public SellerService(
     PaymentSystemContext context,
     IHashingService hashingService)
 {
     _context        = context;
     _hashingService = hashingService;
 }
 public static Merchant Get(string token, PaymentSystemContext context)
 {
     lock (LockObject)
     {
         Load(context);
         return(_cache.FirstOrDefault(x => x.Token == token));
     }
 }
 public static Terminal Get(int id, PaymentSystemContext context)
 {
     lock (LockObject)
     {
         Load(context);
         return(_cache.FirstOrDefault(x => x.Id == id));
     }
 }
 public static IList <Terminal> All(PaymentSystemContext context)
 {
     lock (LockObject)
     {
         Load(context);
         return(_cache.ToList());
     }
 }
 private static void Load(PaymentSystemContext context)
 {
     if (_loaded)
     {
         return;
     }
     _cache  = context.Merchant.Include(i => i.MerchantIpRange).ToList();
     _loaded = true;
 }
 public SellerController(
     ISellerService sellerService,
     PaymentSystemContext context,
     IAccountProvider accountProvider)
 {
     _sellerService   = sellerService;
     _context         = context;
     _accountProvider = accountProvider;
 }
 private static void Load(PaymentSystemContext context)
 {
     if (_loaded)
     {
         return;
     }
     _cache  = context.Terminal.ToList();
     _loaded = true;
 }
 public OperationManagerService(PaymentSystemContext dbContext,
                                ProcessingFactory processingFactory,
                                TerminalSelectorService terminalSelector,
                                ILogger <OperationManagerService> logger,
                                RemoteContainerService <PaymentData> remoteContainer)
 {
     _dbContext         = dbContext;
     _processingFactory = processingFactory;
     _terminalSelector  = terminalSelector;
     _logger            = logger;
     _remoteContainer   = remoteContainer;
 }
 public IProcessing GetProcessing(int id, PaymentSystemContext dbContext)
 {
     lock (LockObject)
     {
         if (!Cache.ContainsKey(id))
         {
             var processingDb = dbContext.Processing.FirstOrDefault(x => x.Id == id);
             if (processingDb == null)
             {
                 throw new Exception($"No processing with id-[{id}]");
             }
             Cache[id] = Create(processingDb);
         }
         return(Cache[id]);
     }
 }
示例#11
0
 private static void SeedData(PaymentSystemContext context)
 {
     try
     {
         //get data from json file and seed data in DB for test.
         var file      = File.ReadAllText("DummyData/DummyData.json");
         var dummyData = JsonConvert.DeserializeObject <IEnumerable <Account> >(file);
         context.AddRange(dummyData);
         context.SaveChanges();
     }
     catch (Exception)
     {
         //not adding any data to DB if exceptions
         return;
     }
 }
示例#12
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
            });
        }
    }
}
示例#13
0
        public ContentResult Pay(string Id,
                                 [FromServices] SessionManagerService sessionManager,
                                 [FromServices] OperationManagerService operationManager,
                                 [FromServices] FormManagerService formManager,
                                 [FromServices] PaymentSystemContext dbContext,
                                 [FromServices] FormDataCryptService cryptService)
        {
            try
            {
                var session = sessionManager.Get(Id);
                if (session.SessionType != SessionType.OneStep && session.SessionType != SessionType.TwoStep)
                {
                    return(base.Content(formManager.GetErrorForm()));
                }
                var result     = operationManager.CheckPaymentPossibility(session);
                var dictionary = new Dictionary <string, string>();
                switch (result)
                {
                case PaymentPossibility.LimitExceeded:
                case PaymentPossibility.SessionExpired:
                    return(base.Content(formManager.GetErrorForm()));

                case PaymentPossibility.AlreadyPaid:
                    return(base.Content(formManager.GetSuccessForm()));

                default:
                    var generationTime = DateTime.UtcNow;
                    session.LastFormGenerationTime = generationTime;
                    session.TryCount++;
                    dbContext.SaveChanges();
                    var formSign = new FormSign {
                        GenerationTime = generationTime, SessionId = session.Id
                    };
                    dictionary.Add("sessionId", session.ExternalId);
                    dictionary.Add("code", cryptService.Crypt(formSign));
                    return(base.Content(formManager.GetPaymentForm(dictionary)));
                }
            }
            catch (Exception)
            {
                return(base.Content(formManager.GetErrorForm()));
            }
        }
        public ContentResult Pay([FromForm] SubmitPay submitPay,
                                 [FromServices] OperationManagerService operationManager,
                                 [FromServices] FormManagerService formManager,
                                 [FromServices] PaymentSystemContext dbContext,
                                 [FromServices] FormDataCryptService cryptService)
        {
            if (string.IsNullOrEmpty(submitPay.ExternalId) || string.IsNullOrEmpty(submitPay.Code))
            {
                return(base.Content(formManager.GetErrorForm()));
            }
            var formCrypt = cryptService.DeCrypt(submitPay.Code);
            var session   = dbContext.Session.Include(x => x.Merchant).FirstOrDefault(x => x.Id == formCrypt.SessionId);

            if (session == null || session.ExternalId != submitPay.ExternalId || session.ExpireTime != formCrypt.GenerationTime)
            {
                return(base.Content(formManager.GetErrorForm()));
            }

            var paymentData = new PaymentData(submitPay.Pan, submitPay.Year, submitPay.Month, submitPay.Cvv);

            var result = operationManager.Deposit(session.Merchant, session, paymentData);

            switch (result.OperationStatus)
            {
            case OperationStatus.AdditionalAuth:
                return(base.Content(formManager.Get3DsForm(result.AdditionalAuth)));

            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 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()));
            }
        }
示例#16
0
 public Repository(PaymentSystemContext dbContext)
 {
     _dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
 }
 public TerminalSelectorService(PaymentSystemContext dbContext, IConfiguration configuration)
 {
     _dbContext = dbContext;
     _useCache  = configuration.GetSection("Caching").GetValue <bool>("Terminals");
 }
示例#18
0
 public SessionManagerService(PaymentSystemContext dbContext, ILogger <SessionManagerService> logger)
 {
     _dbContext = dbContext;
     _logger    = logger;
 }
 public CollectionRecordRepository(PaymentSystemContext dbContext) : base(dbContext)
 {
 }
示例#20
0
 //todo(max): add caching
 public AccountProvider(IHttpContextAccessor accessor, PaymentSystemContext context)
 {
     _httpContextAccessor = accessor;
     _context             = context;
 }
 public SellersController(PaymentSystemContext context, ISellerBS sellerBs)
 {
     _bs      = sellerBs;
     _context = context;
 }
示例#22
0
 public MerchantManagerService(PaymentSystemContext dbContext, IConfiguration configuration)
 {
     _dbContext = dbContext;
     _useCache  = configuration.GetSection("Caching").GetValue <bool>("Merchants");
 }
示例#23
0
 public PaymentSystemController(PaymentSystemContext context)
 {
     _context = context;
 }
 public TerminalsController(PaymentSystemContext context, ITerminalBS terminalBs)
 {
     _bs      = terminalBs;
     _context = context;
 }
 public SellerRepository(PaymentSystemContext context)
     : base(context)
 {
     paymentaymentSystemContext = context;
 }
        public IdentityRepository(PaymentSystemContext dbContext)
        {
            _dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));

            _userManager = new AppUserManager(new AppUserStore(dbContext));
        }
示例#27
0
 public TerminalRepository(PaymentSystemContext context)
     : base(context)
 {
     PaymentSystemContext = context;
 }
示例#28
0
 public TokenService(PaymentSystemContext context)
 {
     _context = context;
 }
示例#29
0
 public AccrualLoanRepository(PaymentSystemContext dbContext) : base(dbContext)
 {
 }