예제 #1
0
 public async Task <IActionResult> PayWithNewCreditCard([FromBody] NewCreditCardPaymentRequest request)
 {
     return(OkOrBadRequest(await _creditCardPaymentProcessingService.Authorize(request,
                                                                               LanguageCode,
                                                                               ClientIp,
                                                                               _bookingPaymentCallbackService,
                                                                               await _agentContextService.GetAgent())));
 }
        public async Task <Result <PaymentResponse> > Authorize(NewCreditCardPaymentRequest request,
                                                                string languageCode, string ipAddress, IPaymentsService paymentsService, AgentContext agent)
        {
            var(_, isFailure, servicePrice, error) = await paymentsService.GetServicePrice(request.ReferenceCode);

            if (isFailure)
            {
                return(Result.Failure <PaymentResponse>(error));
            }

            return(await Validate(request)
                   .Bind(Authorize)
                   .TapIf(IsSaveCardNeeded, SaveCard)
                   .Bind(StorePaymentResults));;
예제 #3
0
 static Result Validate(NewCreditCardPaymentRequest payment)
 {
     return(GenericValidator <NewCreditCardPaymentRequest>
            .Validate(p =>
     {
         if (payment.IsSaveCardNeeded)
         {
             p.RuleFor(r => r.CardInfo)
             .ChildRules(c =>
             {
                 c.RuleFor(info => info.HolderName)
                 .NotEmpty()
                 .WithMessage($"{nameof(CreditCardInfo.HolderName)} is required to save card");
             });
         }
     }, payment));
 }
예제 #4
0
        public async Task <Result <PaymentResponse> > Authorize(NewCreditCardPaymentRequest request,
                                                                string languageCode, string ipAddress, IPaymentCallbackService paymentCallbackService, AgentContext agent)
        {
            _logger.LogCreditCardAuthorizationStarted(request.ReferenceCode);

            var(_, isFailure, servicePrice, error) = await paymentCallbackService.GetChargingAmount(request.ReferenceCode);

            if (isFailure)
            {
                _logger.LogCreditCardAuthorizationFailure(request.ReferenceCode, error);
                return(Result.Failure <PaymentResponse>(error));
            }

            return(await Validate(request)
                   .Bind(Authorize)
                   .TapIf(IsSaveCardNeeded, SaveCard)
                   .Bind(StorePaymentResults)
                   .Finally(WriteLog));