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)); } }
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)); } }
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)); } }
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))); } }
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" }); }
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))); } }
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))); } }
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 }); }
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)); } }