Esempio n. 1
0
            /// <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);
            }
Esempio n. 2
0
            /// <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);
            }