/// <summary> /// Finds a record in CardPaymentEntry table by entry identifier. /// </summary> /// <param name="entryId">The entry identifier.</param> /// <returns>The found record.</returns> public CardPaymentEntry GetCardPaymentEntryByEntryId(string entryId) { if (entryId == null) { throw new ArgumentNullException("entryId"); } CardPaymentEntry cardPaymentEntry = null; using (SqlConnection connection = new SqlConnection(this.connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand(GetCardPaymentEntryByEntryIdSprocName, connection)) { command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue("@id_EntryId", entryId); using (SqlDataReader reader = command.ExecuteReader()) { if (reader.Read()) { cardPaymentEntry = new CardPaymentEntry(); cardPaymentEntry.AllowVoiceAuthorization = reader.GetBoolean(reader.GetOrdinal("ALLOWVOICEAUTHORIZATION")); cardPaymentEntry.CardTypes = GetString(reader, reader.GetOrdinal("CARDTYPES")); cardPaymentEntry.DefaultCardHolderName = GetString(reader, reader.GetOrdinal("DEFAULTCARDHOLDERNAME")); cardPaymentEntry.DefaultCity = GetString(reader, reader.GetOrdinal("DEFAULTCITY")); cardPaymentEntry.DefaultCountryCode = GetString(reader, reader.GetOrdinal("DEFAULTCOUNTRYCODE")); cardPaymentEntry.DefaultPostalCode = GetString(reader, reader.GetOrdinal("DEFAULTPOSTALCODE")); cardPaymentEntry.DefaultStateOrProvince = GetString(reader, reader.GetOrdinal("DEFAULTSTATEORPROVINCE")); cardPaymentEntry.DefaultStreet1 = GetString(reader, reader.GetOrdinal("DEFAULTSTREET1")); cardPaymentEntry.DefaultStreet2 = GetString(reader, reader.GetOrdinal("DEFAULTSTREET2")); cardPaymentEntry.EntryData = GetString(reader, reader.GetOrdinal("ENTRYDATA")); cardPaymentEntry.EntryId = reader.GetGuid(reader.GetOrdinal("ENTRYID")).ToString(); cardPaymentEntry.EntryLocale = GetString(reader, reader.GetOrdinal("ENTRYLOCALE")); cardPaymentEntry.EntryUtcTime = reader.GetDateTime(reader.GetOrdinal("ENTRYUTCTIME")); cardPaymentEntry.HostPageOrigin = GetString(reader, reader.GetOrdinal("HOSTPAGEORIGIN")); cardPaymentEntry.IndustryType = GetString(reader, reader.GetOrdinal("INDUSTRYTYPE")); cardPaymentEntry.ServiceAccountId = GetString(reader, reader.GetOrdinal("SERVICEACCOUNTID")); cardPaymentEntry.ShowSameAsShippingAddress = reader.GetBoolean(reader.GetOrdinal("SHOWSAMEASSHIPPINGADDRESS")); cardPaymentEntry.SupportCardSwipe = reader.GetBoolean(reader.GetOrdinal("SUPPORTCARDSWIPE")); cardPaymentEntry.SupportCardTokenization = reader.GetBoolean(reader.GetOrdinal("SUPPORTCARDTOKENIZATION")); cardPaymentEntry.TransactionType = GetString(reader, reader.GetOrdinal("TRANSACTIONTYPE")); cardPaymentEntry.Used = reader.GetBoolean(reader.GetOrdinal("USED")); } } } } return(cardPaymentEntry); }
/// <summary> /// Inserts a record into CardPaymentEntry table. /// </summary> /// <param name="cardPaymentEntry">The record.</param> public void CreateCardPaymentEntry(CardPaymentEntry cardPaymentEntry) { if (cardPaymentEntry == null) { throw new ArgumentNullException("cardPaymentEntry"); } using (SqlConnection connection = new SqlConnection(this.connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand(CreateCardPaymentEntrySprocName, connection)) { command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue("@b_AllowVoiceAuthorization", cardPaymentEntry.AllowVoiceAuthorization); command.Parameters.AddWithValue("@nvc_CardTypes", cardPaymentEntry.CardTypes); command.Parameters.AddWithValue("@nvc_DefaultCardHolderName", Object2DBValue(cardPaymentEntry.DefaultCardHolderName)); command.Parameters.AddWithValue("@nvc_DefaultCity", Object2DBValue(cardPaymentEntry.DefaultCity)); command.Parameters.AddWithValue("@nvc_DefaultCountryCode", Object2DBValue(cardPaymentEntry.DefaultCountryCode)); command.Parameters.AddWithValue("@nvc_DefaultPostalCode", Object2DBValue(cardPaymentEntry.DefaultPostalCode)); command.Parameters.AddWithValue("@nvc_DefaultStateOrProvince", Object2DBValue(cardPaymentEntry.DefaultStateOrProvince)); command.Parameters.AddWithValue("@nvc_DefaultStreet1", Object2DBValue(cardPaymentEntry.DefaultStreet1)); command.Parameters.AddWithValue("@nvc_DefaultStreet2", Object2DBValue(cardPaymentEntry.DefaultStreet2)); command.Parameters.AddWithValue("@nvc_EntryData", cardPaymentEntry.EntryData); command.Parameters.AddWithValue("@id_EntryId", cardPaymentEntry.EntryId); command.Parameters.AddWithValue("@nvc_EntryLocale", cardPaymentEntry.EntryLocale); command.Parameters.AddWithValue("@dt_EntryUtcTime", cardPaymentEntry.EntryUtcTime); command.Parameters.AddWithValue("@nvc_HostPageOrigin", cardPaymentEntry.HostPageOrigin); command.Parameters.AddWithValue("@nvc_IndustryType", cardPaymentEntry.IndustryType); command.Parameters.AddWithValue("@nvc_ServiceAccountId", cardPaymentEntry.ServiceAccountId); command.Parameters.AddWithValue("@b_ShowSameAsShippingAddress", cardPaymentEntry.ShowSameAsShippingAddress); command.Parameters.AddWithValue("@b_SupportCardSwipe", cardPaymentEntry.SupportCardSwipe); command.Parameters.AddWithValue("@b_SupportCardTokenization", cardPaymentEntry.SupportCardTokenization); command.Parameters.AddWithValue("@nvc_TransactionType", cardPaymentEntry.TransactionType); command.Parameters.AddWithValue("@b_Used", cardPaymentEntry.Used); command.ExecuteNonQuery(); } } }
/// <summary> /// Converts a payment request to a card payment entry. /// </summary> /// <param name="request">The payment request.</param> /// <param name="errorList">The errors during conversion.</param> /// <returns>The card payment entry.</returns> private static CardPaymentEntry ConvertRequestToCardPaymentEntry(Request request, List <PaymentError> errorList) { string locale = request.Locale; if (string.IsNullOrWhiteSpace(locale)) { errorList.Add(new PaymentError(ErrorCode.LocaleNotSupported, "Locale is not specified.")); } var requestProperties = PaymentProperty.ConvertToHashtable(request.Properties); string serviceAccountId = GetPropertyStringValue( requestProperties, GenericNamespace.MerchantAccount, MerchantAccountProperties.ServiceAccountId, required: true, errors: errorList); string industryType = GetPropertyStringValue( requestProperties, GenericNamespace.TransactionData, TransactionDataProperties.IndustryType, required: false, errors: errorList); IndustryType industryTypeEnum; if (string.IsNullOrEmpty(industryType) || !Enum.TryParse(industryType, true, out industryTypeEnum)) { industryTypeEnum = IndustryType.Ecommerce; } string transactionType = GetPropertyStringValue( requestProperties, GenericNamespace.TransactionData, TransactionDataProperties.TransactionType, required: true, errors: errorList); TransactionType transactionTypeEnum = TransactionType.None; if (!Enum.TryParse(transactionType, true, out transactionTypeEnum) || (transactionTypeEnum != TransactionType.None && transactionTypeEnum != TransactionType.Authorize && transactionTypeEnum != TransactionType.Capture)) { errorList.Add(new PaymentError(ErrorCode.InvalidRequest, "The transaction type is not suppoted.")); } string supportCardSwipeString = GetPropertyStringValue( requestProperties, GenericNamespace.TransactionData, TransactionDataProperties.SupportCardSwipe, required: false, errors: errorList); bool supportCardSwipe = false; if (!string.IsNullOrWhiteSpace(supportCardSwipeString)) { bool.TryParse(supportCardSwipeString, out supportCardSwipe); } string supportCardTokenizationString = GetPropertyStringValue( requestProperties, GenericNamespace.TransactionData, TransactionDataProperties.SupportCardTokenization, required: false, errors: errorList); bool supportCardTokenization = false; if (!string.IsNullOrWhiteSpace(supportCardTokenizationString)) { bool.TryParse(supportCardTokenizationString, out supportCardTokenization); } // When transaction type is None, support card tokenization must be enabled. if (transactionTypeEnum == TransactionType.None && !supportCardTokenization) { errorList.Add(new PaymentError(ErrorCode.InvalidRequest, "When transaction type is None, support card tokenization must be enabled.")); } string allowVoiceAuthorizationString = GetPropertyStringValue( requestProperties, GenericNamespace.TransactionData, TransactionDataProperties.AllowVoiceAuthorization, required: false, errors: errorList); bool allowVoiceAuthorization = false; if (!string.IsNullOrWhiteSpace(allowVoiceAuthorizationString)) { bool.TryParse(allowVoiceAuthorizationString, out allowVoiceAuthorization); } string hostPageOrigin = GetPropertyStringValue( requestProperties, GenericNamespace.TransactionData, TransactionDataProperties.HostPageOrigin, required: true, errors: errorList); if (string.IsNullOrWhiteSpace(hostPageOrigin)) { errorList.Add(new PaymentError(ErrorCode.InvalidRequest, "The host page origin is not specified.")); } string cardTypes = GetPropertyStringValue( requestProperties, GenericNamespace.PaymentCard, PaymentCardProperties.CardType, required: false, errors: errorList); string defaultCardHolderName = GetPropertyStringValue( requestProperties, GenericNamespace.PaymentCard, PaymentCardProperties.Name, required: false, errors: errorList); string defaultStreet1 = GetPropertyStringValue( requestProperties, GenericNamespace.PaymentCard, PaymentCardProperties.StreetAddress, required: false, errors: errorList); string defaultStreet2 = GetPropertyStringValue( requestProperties, GenericNamespace.PaymentCard, PaymentCardProperties.StreetAddress2, required: false, errors: errorList); string defaultCity = GetPropertyStringValue( requestProperties, GenericNamespace.PaymentCard, PaymentCardProperties.City, required: false, errors: errorList); string defaultStateOrProvince = GetPropertyStringValue( requestProperties, GenericNamespace.PaymentCard, PaymentCardProperties.State, required: false, errors: errorList); string defaultPostalCode = GetPropertyStringValue( requestProperties, GenericNamespace.PaymentCard, PaymentCardProperties.PostalCode, required: false, errors: errorList); string defaultCountryCode = GetPropertyStringValue( requestProperties, GenericNamespace.PaymentCard, PaymentCardProperties.Country, required: false, errors: errorList); string showSameAsShippingAddressString = GetPropertyStringValue( requestProperties, GenericNamespace.PaymentCard, PaymentCardProperties.ShowSameAsShippingAddress, required: false, errors: errorList); bool showSameAsShippingAddress = false; if (!string.IsNullOrWhiteSpace(showSameAsShippingAddressString)) { bool.TryParse(showSameAsShippingAddressString, out showSameAsShippingAddress); } string entryData = JsonConvert.SerializeObject(request); // Create the request in database with an unique entry ID var cardPaymentEntry = new CardPaymentEntry() { AllowVoiceAuthorization = allowVoiceAuthorization, CardTypes = CardTypes.GetSupportedCardTypes(cardTypes), DefaultCardHolderName = defaultCardHolderName, DefaultCity = defaultCity, DefaultCountryCode = defaultCountryCode, DefaultPostalCode = defaultPostalCode, DefaultStateOrProvince = defaultStateOrProvince, DefaultStreet1 = defaultStreet1, DefaultStreet2 = defaultStreet2, EntryData = entryData, EntryId = CommonUtility.NewGuid().ToString(), EntryLocale = locale, EntryUtcTime = DateTime.UtcNow, HostPageOrigin = hostPageOrigin, IndustryType = industryTypeEnum.ToString(), ServiceAccountId = serviceAccountId, ShowSameAsShippingAddress = showSameAsShippingAddress, SupportCardSwipe = supportCardSwipe, SupportCardTokenization = supportCardTokenization, TransactionType = transactionType, Used = false, }; return(cardPaymentEntry); }