Exemplo n.º 1
0
        protected override async Task <IPaymentHtmlPostResponse> PaymentHtmlPostChargeGenerator(IHdfcEnrolledCharge hdfcEnrolledCharge)
        {
            try
            {
                Dictionary <string, string> formFields = new Dictionary <string, string>();
                formFields.Add("TermUrl", _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Hdfc.ReturnUrl));
                formFields.Add("PaReq", hdfcEnrolledCharge.PaymentAuthenticationRequest);
                formFields.Add("MD", hdfcEnrolledCharge.PaymentId);
                formFields.Add("TransId", hdfcEnrolledCharge.TransactionId.ToString());
                formFields.Add("TransAmt", hdfcEnrolledCharge.Amount.ToString());

                IHtmlPostRequest htmlPostRequest = new HtmlPostRequest();
                htmlPostRequest.Method     = "POST";
                htmlPostRequest.Action     = $"{hdfcEnrolledCharge.AcsUrl}";
                htmlPostRequest.FormFields = formFields;
                _transactionPaymentDetailRepository.Save(new TransactionPaymentDetail
                {
                    TransactionId    = Convert.ToInt64(hdfcEnrolledCharge.TransactionId),
                    PaymentOptionId  = PaymentOptions.CreditCard,
                    PaymentGatewayId = PaymentGateway.HDFC,
                    RequestType      = "Enrolled Charge Posting",
                    Amount           = hdfcEnrolledCharge.Amount.ToString(),
                    PayConfNumber    = "",
                    PaymentDetail    = "{\"Request\":" + JsonConvert.SerializeObject(htmlPostRequest) + "}",
                });
                return(GetPaymentHtmlPostResponse(htmlPostRequest, null));
            }
            catch (Exception ex)
            {
                _logger.Log(LogCategory.Error, new Exception("Failed to create html post request", ex));
                return(GetPaymentHtmlPostResponse(null, ex.Message));
            }
        }
Exemplo n.º 2
0
        protected override async Task <IPaymentHtmlPostResponse> PaymentHtmlPostChargeGenerator(ICcavenueCharge ccavenueCharge)
        {
            try
            {
                Dictionary <string, string> formFields = new Dictionary <string, string>();
                formFields.Add("encRequest", GetCcavenueEncryptedChargeRequest(ccavenueCharge, _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Ccavenue.MerchantId), _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Ccavenue.WorkingKey),
                                                                               ccavenueCharge.ChannelId == Channels.Feel ? _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Ccavenue.FeelReturnUrl) : _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Ccavenue.ReturnUrl)));
                formFields.Add("access_code", _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Ccavenue.AccessKey));

                IHtmlPostRequest htmlPostRequest = new HtmlPostRequest();
                htmlPostRequest.Method     = "POST";
                htmlPostRequest.Action     = $"{_settings.GetConfigSetting<string>(SettingKeys.PaymentGateway.Ccavenue.PostUrl)}";
                htmlPostRequest.FormFields = formFields;
                string returnUrl = ccavenueCharge.ChannelId == Channels.Feel ? _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Ccavenue.FeelReturnUrl) : _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Ccavenue.ReturnUrl);

                _transactionPaymentDetailRepository.Save(new TransactionPaymentDetail
                {
                    TransactionId    = Convert.ToInt64(ccavenueCharge.TransactionId),
                    PaymentOptionId  = ccavenueCharge.PaymentOption == PaymentOptions.CashCard ? PaymentOptions.CashCard : PaymentOptions.NetBanking,
                    PaymentGatewayId = PaymentGateway.CCAvenue,
                    UserCardDetailId = ccavenueCharge.UserCardDetailId,
                    RequestType      = "Charge Posting",
                    Amount           = ccavenueCharge.Amount.ToString(),
                    PayConfNumber    = "",
                    PaymentDetail    = "{\"Request\":" + Newtonsoft.Json.JsonConvert.SerializeObject(htmlPostRequest) + ",\"ReturnUrl\":\"" + returnUrl + "\"}",
                });
                return(GetPaymentHtmlPostResponse(htmlPostRequest));
            }
            catch (Exception ex)
            {
                _logger.Log(LogCategory.Error, new Exception("Failed to generate html post request", ex));
                return(GetPaymentHtmlPostResponse(null, ex.Message));
            }
        }
Exemplo n.º 3
0
 protected override async Task <IPaymentResponse> CreateCharge(IASITransactCharge asiChargeParameters)
 {
     try
     {
         try
         {
             var PaymentDetail = "{\"Response\":" + Newtonsoft.Json.JsonConvert.SerializeObject(asiChargeParameters.asiFormData) + "}";
             _transactionPaymentDetailRepository.Save(new TransactionPaymentDetail
             {
                 TransactionId    = Convert.ToInt64(asiChargeParameters.asiFormData.Data.TransactionId),
                 PaymentOptionId  = PaymentOptions.None,
                 PaymentGatewayId = PaymentGateway.Payu,
                 RequestType      = "Charge Recieved",
                 Amount           = asiChargeParameters.asiFormData.Data.Payment.Amount.ToString(),
                 PayConfNumber    = asiChargeParameters.asiFormData.Data.Payment.Id,
                 PaymentDetail    = PaymentDetail,
             });
         }
         catch (Exception e)
         {
             _logger.Log(LogCategory.Error, new Exception("Failed to generate html post request", e));
         }
         _transactionStatusUpdater.UpdateTranscationStatus(Convert.ToInt64(asiChargeParameters.asiFormData.Data.TransactionId));
         return(GetPaymentResponse(true, PaymentGatewayError.None, PaymentGateway.Payu));
     }
     catch (Exception ex)
     {
         _logger.Log(LogCategory.Error, new Exception("Failed to Create Charge of ASI Response", ex));
         return(GetPaymentResponse(false, GetPaymentGatewayErrorCode(asiChargeParameters.asiFormData.Error), PaymentGateway.Payu));
     }
 }
Exemplo n.º 4
0
 public IHdfcEnrollmentResponse HdfcEnrollmentVerification(IHdfcCharge hdfcCharge)
 {
     try
     {
         IHdfcEnrolledCharge hdfcEnrolledCharge = new HdfcEnrolledCharge();
         string response    = HdfcChargerHelper.HttpWebRequestHandler(_settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Hdfc.EnrollmentVerificationUrl), HdfcChargerHelper.GetHdfcChargeRequest(hdfcCharge, _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Hdfc.TranportalId), _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Hdfc.TranportalPassword)));
         string result      = HdfcChargerHelper.GetResultField(response, "result");
         string error       = HdfcChargerHelper.GetResultField(response, "error_text");
         bool   errorStatus = string.IsNullOrWhiteSpace(error) ? true : false;
         if (errorStatus)
         {
             if (result.ToUpper().Equals("ENROLLED"))
             {
                 hdfcEnrolledCharge.AcsUrl = HdfcChargerHelper.GetResultField(response, "url");
                 hdfcEnrolledCharge.PaymentAuthenticationRequest = HdfcChargerHelper.GetResultField(response, "PAReq");
                 hdfcEnrolledCharge.PaymentId = HdfcChargerHelper.GetResultField(response, "paymentid");
             }
             hdfcEnrolledCharge.Result        = HdfcChargerHelper.GetResultField(response, "result");
             hdfcEnrolledCharge.Error         = HdfcChargerHelper.GetResultField(response, "error_text");
             hdfcEnrolledCharge.Eci           = !string.IsNullOrWhiteSpace(HdfcChargerHelper.GetResultField(response, "eci")) ? HdfcChargerHelper.GetResultField(response, "eci") : "7";
             hdfcEnrolledCharge.TransactionId = hdfcCharge.TransactionId;
             hdfcEnrolledCharge.Amount        = hdfcCharge.Amount;
             _transactionPaymentDetailRepository.Save(new TransactionPaymentDetail
             {
                 TransactionId    = Convert.ToInt64(hdfcCharge.TransactionId),
                 PaymentOptionId  = PaymentOptions.CreditCard,
                 PaymentGatewayId = PaymentGateway.HDFC,
                 UserCardDetailId = hdfcCharge.UserCardDetailId,
                 RequestType      = "Charge Resolver",
                 Amount           = hdfcCharge.Amount.ToString(),
                 PayConfNumber    = "",
                 PaymentDetail    = "{\"Response\":" + Newtonsoft.Json.JsonConvert.SerializeObject(hdfcEnrolledCharge) + "}",
             });
         }
         return(GetHdfcEnrollmentResponse(errorStatus ? hdfcEnrolledCharge : null, errorStatus ? PaymentGatewayError.None : HdfcChargerHelper.GetPaymentGatewayErrorCode(string.IsNullOrWhiteSpace(error) ? "Transaction declined" : error)));
     }
     catch (Exception ex)
     {
         _logger.Log(LogCategory.Error, new Exception("Failed to verify enrollment", ex));
         return(GetHdfcEnrollmentResponse(null, HdfcChargerHelper.GetPaymentGatewayErrorCode(ex.Message)));
     }
 }
Exemplo n.º 5
0
        private void UpdateTransactionStatus(FIL.Contracts.DataModels.Transaction transaction)
        {
            transaction.TransactionStatusId = Contracts.Enums.TransactionStatus.Success;
            transaction.UpdatedUtc          = DateTime.UtcNow;
            _transactionRepository.Save(transaction);

            _transactionPaymentDetailRepository.Save(new Contracts.DataModels.TransactionPaymentDetail
            {
                Amount           = transaction.NetTicketAmount.ToString(),
                CreatedBy        = Guid.NewGuid(),
                CreatedUtc       = DateTime.UtcNow,
                PayConfNumber    = "",
                PaymentDetail    = "FAP Live 0 price event",
                PaymentOptionId  = Contracts.Enums.PaymentOptions.CashCard,
                PaymentGatewayId = Contracts.Enums.PaymentGateway.Stripe,
                TransactionId    = transaction.Id,
                UserCardDetailId = 6,
                RequestType      = "Charge Received"
            });
        }
Exemplo n.º 6
0
 protected override async Task <IPaymentResponse> CreateCharge(IHdfcCharge hdfcCharge)
 {
     try
     {
         string response                  = HdfcChargerHelper.HttpWebRequestHandler(_settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Hdfc.TransactionPortalUrl), HdfcChargerHelper.GetHdfcChargeRequest(hdfcCharge, _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Hdfc.TranportalId), _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.Hdfc.TranportalPassword)));
         string result                    = HdfcChargerHelper.GetResultField(response, "result");
         string error                     = HdfcChargerHelper.GetResultField(response, "error_text");
         string amount                    = HdfcChargerHelper.GetResultField(response, "amt");
         string paymentId                 = HdfcChargerHelper.GetResultField(response, "payid");
         string transactionId             = HdfcChargerHelper.GetResultField(response, "trackid");
         string paymentConfirmationNumber = HdfcChargerHelper.GetResultField(response, "tranid");
         bool   payStatus                 = result.ToUpper().Equals("CAPTURED") ? true : false;
         if (payStatus)
         {
             if (transactionId != null)
             {
                 _transactionStatusUpdater.UpdateTranscationStatus(Convert.ToInt64(transactionId));
             }
         }
         _transactionPaymentDetailRepository.Save(new TransactionPaymentDetail
         {
             TransactionId    = Convert.ToInt64(hdfcCharge.TransactionId),
             PaymentOptionId  = PaymentOptions.CreditCard,
             PaymentGatewayId = PaymentGateway.HDFC,
             RequestType      = "Not Enrolled Recieved",
             Amount           = hdfcCharge.Amount.ToString(),
             PayConfNumber    = paymentConfirmationNumber,
             PaymentDetail    = "{\"Response\":{\"Result\":\"" + result + "\",\"Error\":\"" + error + "\",\"Amount\":\"" + amount + "\",\"PaymentConfirmationNumber\":\"" + paymentConfirmationNumber + "\",\"PaymentId\":\"" + paymentId + "\",\"TrackId\":\"" + transactionId + "\"}",
         });
         return(GetPaymentResponse(payStatus ? true : false, payStatus ? PaymentGatewayError.None : HdfcChargerHelper.GetPaymentGatewayErrorCode(string.IsNullOrWhiteSpace(error) ? "Transaction declined" : error)));
     }
     catch (Exception ex)
     {
         _logger.Log(LogCategory.Error, new Exception("Failed to create charge", ex));
         return(GetPaymentResponse(false, HdfcChargerHelper.GetPaymentGatewayErrorCode(ex.Message)));
     }
 }
Exemplo n.º 7
0
        protected override async Task <IPaymentResponse> CreateCharge(IStripeCharge stripeChargeParameters)
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(stripeChargeParameters.Token))
                {
                    if (stripeChargeParameters.IsIntentConfirm || stripeChargeParameters.Token.Contains("~"))
                    {
                        var    splitToken      = stripeChargeParameters.Token.Split('~');
                        string paymentMethodId = splitToken[1];
                        string paymentIntentId = splitToken[0];

                        var service        = new PaymentIntentService();
                        var confirmOptions = new PaymentIntentConfirmOptions();

                        PaymentIntent paymentIntent = service.Confirm(paymentIntentId, confirmOptions, new RequestOptions
                        {
                            ApiKey = GetStripeToken(stripeChargeParameters)
                        });
                        if (paymentIntent.Status == "succeeded")
                        {
                            if (paymentIntent.Status == "succeeded")
                            {
                                Transaction transactionResult = _transactionStatusUpdater.UpdateTranscationStatus(Convert.ToInt64(stripeChargeParameters.TransactionId));
                                if (stripeChargeParameters.ChannelId == Channels.Feel)
                                {
                                    try
                                    {
                                        var redemptionOrder = new Redemption_OrderDetails
                                        {
                                            AltId              = Guid.NewGuid(),
                                            ApprovedBy         = null,
                                            ApprovedUtc        = null,
                                            CreatedBy          = transactionResult.CreatedBy,
                                            CreatedUtc         = DateTime.UtcNow,
                                            IsEnabled          = false,
                                            OrderCompletedDate = null,
                                            OrderStatusId      = (int)FIL.Contracts.Enums.ApproveStatus.Pending,
                                            TransactionId      = Convert.ToInt64(stripeChargeParameters.TransactionId),
                                            UpdatedBy          = null,
                                            UpdatedUtc         = null
                                        };
                                        _orderDetailsRepository.Save(redemptionOrder);
                                        _zoomMeetingProvider.CreateMeeting(transactionResult);
                                    }
                                    catch (Exception e)
                                    {
                                        _logger.Log(LogCategory.Error, new Exception("Failed to save the redemption order", e));
                                    }
                                }
                                else if (stripeChargeParameters.ChannelId == Channels.Website)
                                {
                                    _zoomMeetingProvider.CreateMeeting(transactionResult);
                                }
                            }

                            _transactionPaymentDetailRepository.Save(new TransactionPaymentDetail
                            {
                                TransactionId    = Convert.ToInt64(stripeChargeParameters.TransactionId),
                                PaymentOptionId  = PaymentOptions.CreditCard,
                                PaymentGatewayId = PaymentGateway.Stripe,
                                RequestType      = "Charge Recieved",
                                Amount           = stripeChargeParameters.Amount.ToString(),
                                PayConfNumber    = paymentIntent.Id,
                                PaymentDetail    = "{\"Response\":" + Newtonsoft.Json.JsonConvert.SerializeObject(paymentIntent) + "}",
                            });
                            return(GetPaymentResponse(true, PaymentGatewayError.None));
                        }
                        else if ((paymentIntent.Status == "requires_source_action" || paymentIntent.Status == "requires_action") && paymentIntent.NextAction.Type == "use_stripe_sdk")
                        {
                            return(GetPaymentResponse(false, PaymentGatewayError.RequireSourceAction, PaymentGateway.Stripe, paymentIntent.ClientSecret));
                        }
                        return(GetPaymentResponse(false, GetPaymentGatewayErrorCode(paymentIntent.CancellationReason)));
                    }

                    Stripe.PaymentIntent stripeCharge = CreateStripeCharge(stripeChargeParameters);
                    if (stripeCharge != null)
                    {
                        var paymentConfirmationNumber = stripeCharge.Id;
                        if ((stripeCharge.Status == "requires_source_action" || stripeCharge.Status == "requires_action") && stripeCharge.NextAction.Type == "use_stripe_sdk")
                        {
                            return(GetPaymentResponse(false, PaymentGatewayError.RequireSourceAction, PaymentGateway.Stripe, stripeCharge.ClientSecret));
                        }

                        if (stripeCharge.Status == "succeeded")
                        {
                            Transaction transactionResult = _transactionStatusUpdater.UpdateTranscationStatus(Convert.ToInt64(stripeChargeParameters.TransactionId));
                            if (stripeChargeParameters.ChannelId == Channels.Feel)
                            {
                                try
                                {
                                    var redemptionOrder = new Redemption_OrderDetails
                                    {
                                        AltId              = Guid.NewGuid(),
                                        ApprovedBy         = null,
                                        ApprovedUtc        = null,
                                        CreatedBy          = transactionResult.CreatedBy,
                                        CreatedUtc         = DateTime.UtcNow,
                                        IsEnabled          = false,
                                        OrderCompletedDate = null,
                                        OrderStatusId      = (int)FIL.Contracts.Enums.ApproveStatus.Pending,
                                        TransactionId      = Convert.ToInt64(stripeChargeParameters.TransactionId),
                                        UpdatedBy          = null,
                                        UpdatedUtc         = null
                                    };
                                    _orderDetailsRepository.Save(redemptionOrder);
                                    _zoomMeetingProvider.CreateMeeting(transactionResult);
                                }
                                catch (Exception e)
                                {
                                    _logger.Log(LogCategory.Error, new Exception("Failed to save the redemption order", e));
                                }
                            }
                            else if (stripeChargeParameters.ChannelId == Channels.Website)
                            {
                                _zoomMeetingProvider.CreateMeeting(transactionResult);
                            }
                        }

                        _transactionPaymentDetailRepository.Save(new TransactionPaymentDetail
                        {
                            TransactionId    = Convert.ToInt64(stripeChargeParameters.TransactionId),
                            PaymentOptionId  = PaymentOptions.CreditCard,
                            PaymentGatewayId = PaymentGateway.Stripe,
                            RequestType      = "Charge Recieved",
                            Amount           = stripeChargeParameters.Amount.ToString(),
                            PayConfNumber    = stripeCharge.Id,
                            PaymentDetail    = "{\"Response\":" + Newtonsoft.Json.JsonConvert.SerializeObject(stripeCharge) + "}",
                        });

                        return(stripeCharge.Status == "succeeded" ? GetPaymentResponse(true, PaymentGatewayError.None) : GetPaymentResponse(false, GetPaymentGatewayErrorCode(stripeCharge.CancellationReason)));
                    }
                    else
                    {
                        return(GetPaymentResponse(false, PaymentGatewayError.Unknown));
                    }
                }
                else
                {
                    return(GetPaymentResponse(false, PaymentGatewayError.InvalidToken));
                }
            }
            catch (Exception ex)
            {
                if (!ex.Message.Contains("Your card was declined"))
                {
                    _logger.Log(LogCategory.Error, new Exception("Failed to create charge", ex));
                }
                _transactionPaymentDetailRepository.Save(new TransactionPaymentDetail
                {
                    TransactionId    = Convert.ToInt64(stripeChargeParameters.TransactionId),
                    PaymentOptionId  = PaymentOptions.CreditCard,
                    PaymentGatewayId = PaymentGateway.Stripe,
                    RequestType      = "Charge Recieved",
                    Amount           = stripeChargeParameters.Amount.ToString(),
                    PayConfNumber    = "",
                    PaymentDetail    = "{\"Response\":" + ex.Message + "}",
                });
                return(GetPaymentResponse(false, GetPaymentGatewayErrorCode(ex.Message)));
            }
        }
Exemplo n.º 8
0
        public async Task <ASIBookingResponse> saveASIData(ASIBooking aSIBooking)
        {
            var            transactionData    = _transactionRepository.Get(aSIBooking.TransactionId);
            var            transactionDetails = _transactionDetailRepository.GetByTransactionId(aSIBooking.TransactionId);
            List <Visitor> visitors           = new List <Visitor>();
            List <ASIHash> aSIHashes          = new List <ASIHash>();
            RootObject     rootObject         = new RootObject();

            foreach (FIL.Contracts.DataModels.TransactionDetail currentTransactionDetail in transactionDetails)
            {
                var clientETAData = aSIBooking.EventTicketAttributeList.Where(s => s.Id == currentTransactionDetail.EventTicketAttributeId && (TicketType)currentTransactionDetail.TicketTypeId == s.TicketType).FirstOrDefault();
                if (clientETAData != null)
                {
                    foreach (FIL.Contracts.Commands.Transaction.GuestUserDetail currentGuestDetail in clientETAData.GuestDetails)
                    {
                        _saveGuestUserProvider.SaveGuestUsers(currentGuestDetail, currentTransactionDetail);
                    }

                    _aSITransactionDetailTimeSlotIdMappingRepository.Save(new FIL.Contracts.DataModels.ASI.ASITransactionDetailTimeSlotIdMapping
                    {
                        EventTimeSlotMappingId = (long)clientETAData.VisitTimeId,
                        TransactionDetailId    = currentTransactionDetail.Id,
                        IsEnabled  = true,
                        CreatedUtc = DateTime.UtcNow,
                        UpdatedUtc = DateTime.UtcNow
                    });

                    _transactionDeliveryDetailRepository.Save(new TransactionDeliveryDetail
                    {
                        TransactionDetailId = currentTransactionDetail.Id,
                        DeliveryTypeId      = DeliveryTypes.PrintAtHome,
                        PickupBy            = 1,
                        SecondaryName       = "Zoonga",
                        SecondaryContact    = "Zoonga",
                        SecondaryEmail      = transactionData.EmailId,
                        PickUpAddress       = "Zoonga"
                    });
                }
            }
            // This is separate loop for API request payload..... I don't think we need to manage data from above loop... Better to keep it separate
            foreach (FIL.Contracts.DataModels.TransactionDetail currentTransactionDetail in transactionDetails)
            {
                var guestData          = _guestDetailRepository.GetByTransactionDetailId(currentTransactionDetail.Id);
                var asiTicketAttribute = aSIBooking.EventTicketAttributeList.Where(s => s.Id == currentTransactionDetail.EventTicketAttributeId).FirstOrDefault();
                if (guestData.Any())
                {
                    var currentETA        = _eventTicketAttributeRepository.Get(currentTransactionDetail.EventTicketAttributeId);
                    var currentETD        = _eventTicketDetailRepository.Get(currentETA.EventTicketDetailId);
                    var currentTc         = _ticketCategoryRepository.Get((int)currentETD.TicketCategoryId);
                    var currentED         = _eventDetailRepository.Get(currentETD.EventDetailId);
                    var currentE          = _eventRepository.Get(currentED.EventId);
                    var asiETableMapping  = _aSIMonumentEventTableMappingRepository.GetByEventId(currentE.Id);
                    var asiMonument       = _aSIMonumentRepository.Get(asiETableMapping.ASIMonumentId);
                    var asiMonumentDetail = _aSIMonumentDetailRepository.GetByNameAndMonumentId(currentED.Name, asiMonument.Id);
                    var asiTimeSlot       = _aSITransactionDetailTimeSlotIdMappingRepository.GetByTransactionDetailId(currentTransactionDetail.Id);
                    var eventTimeSlot     = _eventTimeSlotMappingRepository.Get(asiTimeSlot.EventTimeSlotMappingId);
                    //api.key |[monument.code | optional | date | age | country | amount] |[monument.code | optional | date | age | country | amount] | api.salt
                    foreach (FIL.Contracts.DataModels.GuestDetail currentGuestDetail in guestData)
                    {
                        Visitor     visitor     = new Visitor();
                        ASIHash     aSIHash     = new ASIHash();
                        Identity    indentity   = new Identity();
                        Monument    monument    = new Monument();
                        Nationality nationality = new Nationality();
                        Timeslot    timeslot    = new Timeslot();
                        visitor.Identity          = indentity;
                        visitor.Monument          = monument;
                        visitor.Monument.Timeslot = timeslot;
                        visitor.Nationality       = nationality;
                        var custerDocType = _customerDocumentTypeRepository.Get(currentGuestDetail.CustomerDocumentTypeId);
                        visitor.Age                  = Convert.ToInt32(currentGuestDetail.Age);
                        visitor.VisitorId            = currentGuestDetail.Id.ToString();
                        visitor.Amount               = currentTransactionDetail.PricePerTicket;
                        visitor.Gender               = currentGuestDetail.GenderId.ToString();
                        visitor.Name                 = currentGuestDetail.FirstName + " " + currentGuestDetail.LastName;
                        visitor.Date                 = ((System.DateTime)currentTransactionDetail.VisitDate).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
                        visitor.Identity.Type        = custerDocType.DocumentType;
                        visitor.Identity.No          = currentGuestDetail.DocumentNumber;
                        visitor.Monument.Code        = "TAJ";
                        visitor.Monument.Optional    = asiMonumentDetail.IsOptional;
                        visitor.Monument.Main        = true;
                        visitor.Monument.Timeslot.Id = eventTimeSlot.TimeSlotId;
                        visitor.Nationality.Group    = currentTc.Name;
                        visitor.Nationality.Country  = asiTicketAttribute == null ? "India" : asiTicketAttribute.ASIUserSelectedCountry;
                        visitors.Add(visitor);

                        aSIHash.Code           = asiMonument.Code;
                        aSIHash.IsOptional     = asiMonumentDetail.IsOptional;
                        aSIHash.Date           = (System.DateTime)currentTransactionDetail.VisitDate;
                        aSIHash.Nationality    = currentTc.Name;
                        aSIHash.Age            = Convert.ToInt32(currentGuestDetail.Age);
                        aSIHash.Amount         = currentTransactionDetail.PricePerTicket;
                        aSIHash.IdentityType   = "Passport";
                        aSIHash.IdentityNumber = "SADFG";
                        aSIHash.VisitorId      = currentGuestDetail.Id.ToString();
                        aSIHashes.Add(aSIHash);
                    }
                }
            }

            var ticketHash = "";

            foreach (FIL.Contracts.Models.ASI.ASIHash currentHash in aSIHashes)
            {
                TimeZoneInfo INDIAN_ZONE;
                try
                {
                    INDIAN_ZONE = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
                }
                catch (Exception e)
                {
                    INDIAN_ZONE = TimeZoneInfo.FindSystemTimeZoneById("Asia/Kolkata");
                }
                DateTime indianTime = TimeZoneInfo.ConvertTimeFromUtc(currentHash.Date, INDIAN_ZONE);
                var      time       = indianTime.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
                ticketHash = ticketHash + "[" + currentHash.Code + "|" + (!currentHash.IsOptional).ToString().ToLower() + "|" + currentHash.IsOptional.ToString().ToLower() + "|" + indianTime.ToString("yyyy-MM-dd") + "|" + currentHash.Age + "|" + currentHash.Nationality + "|" + currentHash.Amount.ToString("0.00") + "]" + "|";
                //ticketHash = ticketHash + "[" + "TAJ" + "|" + time + "|" + currentHash.IdentityType + "|" + currentHash.IdentityNumber + "|" + currentHash.Age + "|" + currentHash.Nationality + "|" + currentHash.Amount.ToString("0.00") + "|" + currentHash.VisitorId + "]" + "|";
            }
            var bookingHashRequestData = _settings.GetConfigSetting <string>(SettingKeys.Integration.ASI.APIKey) + "|" + ticketHash + _settings.GetConfigSetting <string>(SettingKeys.Integration.ASI.APISalt);
            var bookingHash            = GenerateSHA512Hash(bookingHashRequestData);

            rootObject.TransactionId = aSIBooking.TransactionId.ToString();
            rootObject.Hash          = bookingHash.ToLower();
            rootObject.Visitors      = visitors;
            rootObject.Email         = transactionData.EmailId == "*****@*****.**" ? transactionData.PhoneNumber : transactionData.EmailId;
            UserCardDetail userCardDetail = _userCardDetailRepository.GetByUserCardNumber(string.Empty, aSIBooking.UserId);

            if (userCardDetail == null)
            {
                UserCardDetail obj = new UserCardDetail
                {
                    UserId      = aSIBooking.UserId,
                    AltId       = new Guid(),
                    NameOnCard  = string.Empty,
                    CardNumber  = string.Empty,
                    ExpiryMonth = 12,
                    ExpiryYear  = 2020,
                    CardTypeId  = CardType.None
                };
                userCardDetail = _userCardDetailRepository.Save(obj);
            }

            _transactionPaymentDetailRepository.Save(new TransactionPaymentDetail // Create transaction payment request before calling booking POST API request...
            {
                TransactionId    = aSIBooking.TransactionId,
                PaymentOptionId  = PaymentOptions.None,
                PaymentGatewayId = PaymentGateway.Payu,
                UserCardDetailId = userCardDetail.Id,
                RequestType      = "Charge Posting",
                Amount           = transactionData.NetTicketAmount.ToString(),
                PayConfNumber    = "",
                PaymentDetail    = "{\"Request\":" + Newtonsoft.Json.JsonConvert.SerializeObject(rootObject) + "{\"hashparameter\":" + bookingHashRequestData + "}}",
            });
            var baseAddress = _settings.GetConfigSetting <string>(SettingKeys.Integration.ASI.IntegrationRoot).ToString() + "" + _settings.GetConfigSetting <string>(SettingKeys.Integration.ASI.APIKey).ToString();

            return(new ASIBookingResponse
            {
                RootObject = rootObject,
                ReturnUrl = baseAddress
            });
        }
Exemplo n.º 9
0
        protected override async Task <IPaymentHtmlPostResponse> PaymentHtmlPostChargeGenerator(INabTransactCharge nabTransactCharge)
        {
            try
            {
                string timeStamp = DateTime.UtcNow.ToString("yyyyMMddHHmmss"), txnType = "6";
                Dictionary <string, string> formFields = new Dictionary <string, string>();
                var settingKey = _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.NabTransact.MerchantId);
                var price      = nabTransactCharge.Amount.ToString("0.00");

                /* if (settingKey == "XYZ0010") // NAB test bed
                 * {
                 *   var splitprice = price.Split(".");
                 *   price = splitprice[0] + ".00";
                 *   price = Convert.ToDecimal(price).ToString("0.00");
                 * }*/
                formFields.Add("EPS_MERCHANT", _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.NabTransact.MerchantId));
                formFields.Add("EPS_TXNTYPE", txnType);
                formFields.Add("EPS_REFERENCEID", nabTransactCharge.TransactionId.ToString());
                formFields.Add("EPS_AMOUNT", price);
                formFields.Add("EPS_TIMESTAMP", timeStamp);

                //FingurePrint using SHA1 Hash
                formFields.Add("EPS_FINGERPRINT", GenerateSHA1Hash($"{_settings.GetConfigSetting<string>(SettingKeys.PaymentGateway.NabTransact.MerchantId)}|{_settings.GetConfigSetting<string>(SettingKeys.PaymentGateway.NabTransact.Password)}|{txnType}|{nabTransactCharge.TransactionId.ToString()}|{nabTransactCharge.Amount.ToString("0.00")}|" + timeStamp));

                formFields.Add("EPS_RESULTURL", _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.NabTransact.ReturnUrl));
                formFields.Add("EPS_CALLBACKURL", _settings.GetConfigSetting <string>(SettingKeys.PaymentGateway.NabTransact.ReturnUrl));
                formFields.Add("EPS_REDIRECT", "TRUE");
                formFields.Add("EPS_CURRENCY", nabTransactCharge.Currency.ToString());

                //Card details
                formFields.Add("EPS_CARDNUMBER", nabTransactCharge.PaymentCard.CardNumber);
                formFields.Add("EPS_EXPIRYMONTH", nabTransactCharge.PaymentCard.ExpiryMonth.ToString());
                formFields.Add("EPS_EXPIRYYEAR", nabTransactCharge.PaymentCard.ExpiryYear.ToString());
                formFields.Add("EPS_CCV", nabTransactCharge.PaymentCard.Cvv);
                formFields.Add("3D_XID", timeStamp + nabTransactCharge.TransactionId.ToString("000000").Substring(0, 6));
                formFields.Add("EPS_MERCHANTNUM", "22123456");
                formFields.Add("EPS_EMAILADDRESS", nabTransactCharge.User.Email.ToString());
                formFields.Add("EPS_IP", nabTransactCharge.IPAddress);

                IHtmlPostRequest htmlPostRequest = new HtmlPostRequest();
                htmlPostRequest.Method     = "Post";
                htmlPostRequest.Action     = $"{_settings.GetConfigSetting<string>(SettingKeys.PaymentGateway.NabTransact.PostUrl)}";
                htmlPostRequest.FormFields = formFields;

                _transactionPaymentDetailRepository.Save(new TransactionPaymentDetail
                {
                    TransactionId    = Convert.ToInt64(nabTransactCharge.TransactionId),
                    PaymentOptionId  = nabTransactCharge.PaymentOption,
                    PaymentGatewayId = PaymentGateway.NabTransact,
                    UserCardDetailId = nabTransactCharge.UserCardDetailId,
                    RequestType      = "Charge Posting",
                    Amount           = price,
                    PayConfNumber    = "",
                    PaymentDetail    = "{\"Request\":" + Newtonsoft.Json.JsonConvert.SerializeObject(htmlPostRequest) + "}",
                });
                /* update final transcation status */
                _transactionStatusUpdater.UpdateTranscationStatus(Convert.ToInt64(nabTransactCharge.TransactionId));

                await _mediator.Publish(new TransactionEvent
                {
                    TransactionStatus = TransactionStatus.UnderPayment,
                    TransactionId     = Convert.ToInt64(nabTransactCharge.TransactionId),
                    EmailId           = nabTransactCharge.User.Email,
                    ZipCode           = nabTransactCharge.BillingAddress.Zipcode
                });

                return(GetPaymentHtmlPostResponse(htmlPostRequest, null));
            }
            catch (Exception ex)
            {
                _logger.Log(LogCategory.Error, new Exception("Failed to generate html post request", ex));
                return(GetPaymentHtmlPostResponse(null, ex.Message));
            }
        }