Beispiel #1
0
        public void CreditCardNumber_GivenString_ParsesCreditCardNumber()
        {
            var cc1 = new CreditCardNumber("4242424242424242");

            Assert.Equal(CreditCardType.Visa, cc1.Type);
            Assert.True(cc1.IsValid);

            var cc2 = new CreditCardNumber("4242-4242-4242-4242");

            Assert.Equal(CreditCardType.Visa, cc2.Type);
            Assert.Equal(cc2.ParsedNumber, cc1.Number);
            Assert.True(cc2.IsValid);

            var cc4 = new CreditCardNumber("5555 5555 5555 4444");

            Assert.Equal(CreditCardType.MasterCard, cc4.Type);
            Assert.True(cc4.IsValid);

            var cc5 = new CreditCardNumber("4012 8888 8888 1881");

            Assert.Equal(CreditCardType.Visa, cc2.Type);
            Assert.True(cc5.IsValid);

            var cc6 = new CreditCardNumber("5105105105105100");

            Assert.Equal(CreditCardType.MasterCard, cc6.Type);
            Assert.True(cc6.IsValid);

            var cc7 = new CreditCardNumber("6011111111111117");

            Assert.Equal(CreditCardType.Discover, cc7.Type);
            Assert.True(cc7.IsValid);
            var cc8 = new CreditCardNumber("6011000990139424");

            Assert.Equal(CreditCardType.Discover, cc8.Type);
            Assert.True(cc8.IsValid);

            var cc9 = new CreditCardNumber("30569309025904");

            Assert.Equal(CreditCardType.DinersClub, cc9.Type);
            Assert.True(cc9.IsValid);
            var cc10 = new CreditCardNumber("38520000023237");

            Assert.Equal(CreditCardType.DinersClub, cc10.Type);
            Assert.True(cc10.IsValid);

            var cc11 = new CreditCardNumber("3530111333300000");

            Assert.Equal(CreditCardType.JCB, cc11.Type);
            Assert.True(cc11.IsValid);
            var cc12 = new CreditCardNumber("3566002020360505");

            Assert.Equal(CreditCardType.JCB, cc12.Type);
            Assert.True(cc12.IsValid);

            var cc3 = new CreditCardNumber("4242-4242-4242-4241");

            Assert.Equal(CreditCardType.Visa, cc3.Type);
            Assert.False(cc3.IsValid);
        }
        internal override void WriteXml(XmlTextWriter xmlWriter)
        {
            xmlWriter.WriteStartElement("billing_info"); // Start: billing_info

            //if a recurly js token is supplied we don't want to send billing info here
            if (string.IsNullOrEmpty(TokenId))
            {
                xmlWriter.WriteStringIfValid("first_name", FirstName);
                xmlWriter.WriteStringIfValid("last_name", LastName);
                xmlWriter.WriteStringIfValid("name_on_account", NameOnAccount);
                xmlWriter.WriteStringIfValid("address1", Address1);
                xmlWriter.WriteStringIfValid("address2", Address2);
                xmlWriter.WriteStringIfValid("city", City);
                xmlWriter.WriteStringIfValid("state", State);
                xmlWriter.WriteStringIfValid("zip", PostalCode);
                xmlWriter.WriteStringIfValid("country", Country);
                xmlWriter.WriteStringIfValid("phone", PhoneNumber);
                xmlWriter.WriteStringIfValid("vat_number", VatNumber);
                xmlWriter.WriteStringIfValid("currency", Currency);

                if (!IpAddress.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("ip_address", IpAddress);
                }
                else
                {
                    Debug.WriteLine("Recurly Client Library: Recording IP Address is strongly recommended.");
                }

                if (!CreditCardNumber.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("number", CreditCardNumber);
                    xmlWriter.WriteElementString("month", ExpirationMonth.AsString());
                    xmlWriter.WriteElementString("year", ExpirationYear.AsString());

                    xmlWriter.WriteStringIfValid("verification_value", VerificationValue);
                }

                if (!AccountNumber.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("routing_number", RoutingNumber);
                    xmlWriter.WriteElementString("account_number", AccountNumber);
                    xmlWriter.WriteElementString("account_type", AccountType.ToString().EnumNameToTransportCase());
                }

                if (!PaypalBillingAgreementId.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("paypal_billing_agreement_id", PaypalBillingAgreementId);
                }

                if (!AmazonBillingAgreementId.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("amazon_billing_agreement_id", AmazonBillingAgreementId);
                }
            }

            xmlWriter.WriteStringIfValid("token_id", TokenId);

            xmlWriter.WriteEndElement(); // End: billing_info
        }
        public void InputPaymentMethod(String creditCardType, String creditCardNumber, String expMonth, String expYear, String cvv)
        {
            SelectElement CreditCardTypeDropdown     = new SelectElement(CreditCardType);
            SelectElement CreditCardExpMonthDropdown = new SelectElement(CreditCardExpMonth);
            SelectElement CreditCardExpYearDropdown  = new SelectElement(CreditCardExpYear);

            CreditCardTypeDropdown.SelectByText(creditCardType);
            CreditCardNumber.SendKeys(creditCardNumber);
            CreditCardExpMonthDropdown.SelectByValue(expMonth);
            CreditCardExpYearDropdown.SelectByValue(expYear);

            double initialImplicitWaitTime = Driver.WebDriver.Manage().Timeouts().ImplicitWait.TotalSeconds;

            try
            {
                Driver.WebDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
                CreditCardCVV.SendKeys(cvv);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                Driver.WebDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(initialImplicitWaitTime);
            }

            PaymentMethodContinueButton.Click();
        }
Beispiel #4
0
        public void ShouldHaveCorrectCardNumber()
        {
            const string cardNumber = "379354508162306";

            var creditCardNumber = CreditCardNumber.For(cardNumber);

            creditCardNumber.Number.ShouldBe(cardNumber);
        }
Beispiel #5
0
        public override void Receipt(List <Product> shoppingList, double subTotal, double taxTotal)
        {
            base.Receipt(shoppingList, subTotal, taxTotal);
            Console.WriteLine("Payment Type: Credit Card");

            string lastFour = CreditCardNumber.ToString().Substring(12, 4);

            Console.WriteLine($"Credit card number: XXXX XXXX XXXX {lastFour}");
        }
Beispiel #6
0
        public void ImplicitConversionToStringResultsInCorrectString()
        {
            const string cardNumber = "379354508162306";

            var creditCardNumber = CreditCardNumber.For(cardNumber);

            string result = creditCardNumber;

            result.ShouldBe(cardNumber);
        }
Beispiel #7
0
        public void ToStringReturnsCorrectFormat()
        {
            const string cardNumber = "379354508162306";

            var creditCardNumber = CreditCardNumber.For(cardNumber);

            var result = creditCardNumber.ToString();

            result.ShouldBe(cardNumber);
        }
 /// <summary>
 /// Return true, if the string value is a valid credit card number, false otherwise.
 /// </summary>
 /// <param name="creditCardNumber"></param>
 /// <returns></returns>
 public bool IsValid(string creditCardNumber)
 {
     try
     {
         return(CreditCardNumber.ValidateAccountNumber(creditCardNumber));
     }
     catch
     {
         return(false);
     }
 }
Beispiel #9
0
            public XElement ToQBXML(string name)
            {
                XElement xElement = new XElement(name);

                xElement.Add(CreditCardNumber.ToQBXML(nameof(CreditCardNumber)));
                xElement.Add(ExpirationMonth.ToQBXML(nameof(ExpirationMonth)));
                xElement.Add(ExpirationYear.ToQBXML(nameof(ExpirationYear)));
                xElement.Add(NameOnCard.ToQBXML(nameof(NameOnCard)));
                xElement.Add(CreditCardAddress.ToQBXML(nameof(CreditCardAddress)));
                xElement.Add(CreditCardPostalCode.ToQBXML(nameof(CreditCardPostalCode)));
                return(xElement);
            }
Beispiel #10
0
        public bool ValidateCreditCardNumber()
        {
            bool status = long.TryParse(CreditCardNumber.Trim(), out long checkResult);

            if (!status)
            {
                return(false);
            }

            var creditCardNumber    = CreditCardNumber;
            int sumAllOtherNumber   = 0;
            int sumMultipliedNumber = 0;
            var length = creditCardNumber.Length;

            for (var i = length - 1; i >= 0; i -= 2)
            {
                int vv = int.Parse(creditCardNumber[i].ToString());
                sumAllOtherNumber += vv;
                if ((i - 1) >= 0)
                {
                    var multipliedNumber = int.Parse(creditCardNumber[i - 1].ToString()) * 2;
                    if (multipliedNumber.ToString().Length == 2)
                    {
                        var str = multipliedNumber.ToString();
                        sumMultipliedNumber += int.Parse(str[0].ToString());
                        sumMultipliedNumber += int.Parse(str[1].ToString());
                    }
                    else
                    {
                        sumMultipliedNumber += multipliedNumber;
                    }
                }
            }

            var sum    = sumMultipliedNumber + sumAllOtherNumber;
            var result = sum.ToString().Length;

            if (sum.ToString()[result - 1] == '0')
            {
                return(true);
            }

            return(false);
        }
Beispiel #11
0
        public void InputPaymentMethod(String creditCardType, String creditCardNumber, String expMonth, String expYear, String cvv)
        {
            // WaitUntilElementVisible(By.XPath("//p[contains(text(),'How would you like to pay?')]"), 15);
            WaitUntilElementVisible(By.Id("formCart"), 15);

            SelectElement CreditCardTypeDropdown     = new SelectElement(CreditCardType);
            SelectElement CreditCardExpMonthDropdown = new SelectElement(CreditCardExpMonth);
            SelectElement CreditCardExpYearDropdown  = new SelectElement(CreditCardExpYear);

            CreditCardTypeDropdown.SelectByText(creditCardType);
            CreditCardNumber.SendKeys(creditCardNumber);
            CreditCardExpMonthDropdown.SelectByValue(expMonth);
            CreditCardExpYearDropdown.SelectByValue(expYear);

            double initialImplicitWaitTime = Driver.WebDriver.Manage().Timeouts().ImplicitWait.TotalSeconds;

            try
            {
                Driver.WebDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
                CreditCardCVV.SendKeys(cvv);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                Driver.WebDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(initialImplicitWaitTime);
            }

            /*try
             * {
             *  CheckoutPage.CreditCardCVV.SendKeys(cvv);
             * }
             * catch (Exception e)
             * {
             *  Console.WriteLine(e);
             * }*/

            PaymentMethodContinueButton.Click();
        }
Beispiel #12
0
        private async Task <bool> PayCreditCardAsync(decimal price, params string[] paymentParameters)
        {
            if (paymentParameters == null)
            {
                throw new ArgumentNullException(nameof(paymentParameters));
            }
            if (price <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(price));
            }

            try
            {
                var ccNumber       = new CreditCardNumber(paymentParameters[2]);
                var expDate        = new ExpirationDate(int.Parse(paymentParameters[3]), int.Parse(paymentParameters[4]));
                var validationCode = new CardValidationCode(paymentParameters[5]);

                var creditCard = new CreditCard(paymentParameters[1] + " " + paymentParameters[0],
                                                ccNumber,
                                                expDate,
                                                validationCode);

                var paymentApi = new PaymentApi(paymentParameters[6]);

                var result = await paymentApi.CreateTransactionAsync(price, creditCard, paymentParameters[0]);

                if (result.Equals(PaymentResult.PaymentSuccessful))
                {
                    return(true);
                }
            }
            catch (Exception)
            {
                return(false);
            }

            return(false);
        }
Beispiel #13
0
        public void TestCreditCardNumber()
        {
            var testInput = new List <Rchar>();

            testInput.Add(new RcharLimited(0, 'U'));
            testInput.AddRange(Etx.RandomRChars(true, 8, 1));
            var testSubject = new CreditCardNumber(testInput.ToArray())
            {
                CheckDigitFunc = NfString.CalcLuhnCheckDigit
            };

            var testResult00 = testSubject.Value;

            Assert.IsNotNull(testResult00);

            var testResult02 = testSubject.Value;

            Assert.AreEqual(testResult00, testResult02);

            var testResult10 = testSubject.Validate(testResult00);

            Assert.IsTrue(testResult10);
        }
        internal override void WriteXml(XmlTextWriter xmlWriter)
        {
            xmlWriter.WriteStartElement("billing_info"); // Start: billing_info
            xmlWriter.WriteStringIfValid("first_name", FirstName);
            xmlWriter.WriteStringIfValid("last_name", LastName);
            xmlWriter.WriteStringIfValid("address1", Address1);
            xmlWriter.WriteStringIfValid("address2", Address2);
            xmlWriter.WriteStringIfValid("city", City);
            xmlWriter.WriteStringIfValid("state", State);
            xmlWriter.WriteStringIfValid("zip", PostalCode);
            xmlWriter.WriteStringIfValid("country", Country);
            xmlWriter.WriteStringIfValid("phone", PhoneNumber);

            xmlWriter.WriteStringIfValid("vat_number", VatNumber);

            if (!IpAddress.IsNullOrEmpty())
            {
                xmlWriter.WriteElementString("ip_address", IpAddress);
            }
            else
            {
                Debug.WriteLine("Recurly Client Library: Recording IP Address is strongly recommended.");
            }

            if (!CreditCardNumber.IsNullOrEmpty())
            {
                xmlWriter.WriteElementString("number", CreditCardNumber);
                xmlWriter.WriteElementString("month", ExpirationMonth.AsString());
                xmlWriter.WriteElementString("year", ExpirationYear.AsString());

                xmlWriter.WriteStringIfValid("verification_value", VerificationValue);
            }

            xmlWriter.WriteStringIfValid("token_id", TokenId);

            xmlWriter.WriteEndElement(); // End: billing_info
        }
Beispiel #15
0
        }         // PayUsingElectronicCheck()

        /// <summary>
        /// This method provides functionality to pay a statement using
        /// a credit card as the method of payment.
        /// </summary>
        /// <param name="strCreditCardNumber">
        /// Thie customer credit card number used to pay the bill.
        /// </param>
        /// <param name="strNameOnCard">
        /// The name on the customer credit card.
        /// </param>
        /// <param name="strExpirationDate">
        /// The expiration date of the customer credit card.
        /// </param>
        /// <param name="dblAmount">
        /// The amount to be paid to the customer service account.
        /// </param>
        /// <returns>
        /// A payment receipt instance is returned with the results from
        /// the requested payment.
        /// </returns>
        public PaymentReceipt PayUsingCreditCard(
            [RequiredItem()][CreditCardNumberAttribute()] string strCreditCardNumber,
            [RequiredItem()] string strNameOnCard,
            [RequiredItem()][ValidCCDate()] string strExpirationDate,
            [RequiredItem()][DoubleRange(0.00, 9999999.99)] double dblAmount)
        {
            BillingLogEntry logEntry = new BillingLogEntry(
                eBillingActivityType.PayCredit,
                this.m_can.AccountNumber16, dblAmount);

            using (Log log = CreateLog(logEntry))
            {
                try
                {
                    MethodValidator validator = new MethodValidator(MethodBase.GetCurrentMethod(),
                                                                    strCreditCardNumber, strNameOnCard, strExpirationDate, dblAmount);
                    validator.Validate();

                    // convert the accountNumber.
                    CreditCardNumber creditCardNumber = (CreditCardNumber)TypeDescriptor.GetConverter(
                        typeof(CreditCardNumber)).ConvertFrom(strCreditCardNumber);

                    // Credit card validation
                    logEntry.PaymentType = creditCardNumber.PaymentType;
                    DateTime dttmExpirationDate = ValidCCDateAttribute.ToDate(strExpirationDate);

                    // set the siteId information
                    logEntry.SiteId = SiteId;

                    checkNSFStatus(true);

                    // Create a DAL to transalate Mop codes
                    DalMethodOfPayment dal = new DalMethodOfPayment();
                    DalPaymentReceipt  dalPaymentReceipt = new DalPaymentReceipt();

                    string paymentReceiptType = dalPaymentReceipt.GetPaymentReceiptType(_userId);
                    paymentReceiptType = paymentReceiptType == string.Empty?CmConstant.kstrDefaultReceiptType:paymentReceiptType;

                    PaymentReceipt rcpt = new PaymentReceipt();

                    // assure that the length of the customer name does NOT exceed 32 characters!
                    if (strNameOnCard.Length >= 32)
                    {
                        strNameOnCard = strNameOnCard.Substring(0, 31);
                    }

                    // Build input elements
                    Request.INL00072 inl72 =
                        new INL00072Helper(
                            dblAmount,
                            dblAmount,
                            CmConstant.kstrNegative,
                            creditCardNumber.AccountNumber,
                            strNameOnCard,
                            dttmExpirationDate,
                            dal.GetMopByUserPaymentType(UserName, (int)creditCardNumber.PaymentType),
                            CmConstant.kstrNegative,
                            m_can.StatementCode,
                            paymentReceiptType,
                            CmConstant.kstrDefaultWorkstation);

                    Request.MAC00027 mac27 =
                        new Mac00027Helper(
                            SiteId.ToString(),
                            m_can.AccountNumber9,
                            CmConstant.kstrDefaultTaskCode,
                            inl72);

                    // Use inherited functions to get a response
                    Response.MAC00027 mac27Response = (Response.MAC00027)
                                                      this.Invoke((Request.MAC00027)mac27);
                    Response.INL00072 inl72Response = mac27Response.Items[0] as Response.INL00072;

                    int intErrorCode = toInt32(inl72Response.IGIRTRNCODE);
                    if (intErrorCode > 0)
                    {
                        throw TranslateCmException(
                                  intErrorCode,
                                  string.Format("Authorization failed with error - ErrorCode: {0} ErrorText: {1}",
                                                inl72Response.IGIRTRNCODE,
                                                inl72Response.IGIMESGTEXT),
                                  null);
                    }

                    rcpt.AccountNumber16 = m_can.AccountNumber16;
                    rcpt.AmountPaid      = (inl72Response.AMNTTOAPLY.Length > 0) ? Double.Parse(inl72Response.AMNTTOAPLY): 0.00;
                    rcpt.PaymentType     = (ePaymentType) new MopPaymentType(this.UserName, inl72Response.MTHDOFPAYCODE);
                    rcpt.Status          = ePaymentStatus.Success;
                    rcpt.TransactionDate = new IcomsDate(inl72Response.ATHRZTNDATE).Date;

                    return(rcpt);
                }                 // try
                catch (BusinessLogicLayerException blle)
                {
                    //the dal threw an exception
                    logEntry.SetError(blle.Message);
                    throw;
                }
                catch (DataSourceException excDSE)
                {
                    //the dal threw an exception
                    logEntry.SetError(excDSE.Message);
                    throw new DataSourceUnavailableException(excDSE);
                }
                catch (CmErrorException excCm)
                {
                    logEntry.SetError(excCm.Message, excCm.ErrorCode);
                    throw TranslateCmException(excCm);
                }                 // catch( CmErrorException excCm )
                catch (Exception exc)
                {
                    logEntry.SetError(exc.Message);
                    throw;
                } // catch( Exception exc )
            }     // using( Log log = CreateLog( logEntry ) )
        }         // PayUsingCreditCard()
        internal override void WriteXml(XmlTextWriter xmlWriter)
        {
            xmlWriter.WriteStartElement("billing_info"); // Start: billing_info

            //if a recurly js token is supplied we don't want to send billing info here
            if (string.IsNullOrEmpty(TokenId))
            {
                xmlWriter.WriteStringIfValid("first_name", FirstName);
                xmlWriter.WriteStringIfValid("last_name", LastName);
                xmlWriter.WriteStringIfValid("company", Company);
                xmlWriter.WriteStringIfValid("name_on_account", NameOnAccount);
                xmlWriter.WriteStringIfValid("address1", Address1);
                xmlWriter.WriteStringIfValid("address2", Address2);
                xmlWriter.WriteStringIfValid("city", City);
                xmlWriter.WriteStringIfValid("state", State);
                xmlWriter.WriteStringIfValid("zip", PostalCode);
                xmlWriter.WriteStringIfValid("country", Country);
                xmlWriter.WriteStringIfValid("phone", PhoneNumber);
                xmlWriter.WriteStringIfValid("vat_number", VatNumber);
                xmlWriter.WriteStringIfValid("currency", Currency);

                if (!IpAddress.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("ip_address", IpAddress);
                }
                else
                {
                    Debug.WriteLine("Recurly Client Library: Recording IP Address is strongly recommended.");
                }

                if (!CreditCardNumber.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("number", CreditCardNumber);
                    xmlWriter.WriteElementString("month", ExpirationMonth.AsString());
                    xmlWriter.WriteElementString("year", ExpirationYear.AsString());

                    xmlWriter.WriteStringIfValid("verification_value", VerificationValue);
                }

                if (!AccountNumber.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("routing_number", RoutingNumber);
                    xmlWriter.WriteElementString("account_number", AccountNumber);
                    xmlWriter.WriteElementString("account_type", AccountType.ToString().EnumNameToTransportCase());
                }

                if (!PaypalBillingAgreementId.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("paypal_billing_agreement_id", PaypalBillingAgreementId);
                }

                if (!AmazonBillingAgreementId.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("amazon_billing_agreement_id", AmazonBillingAgreementId);
                }

                if (!AmazonRegion.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("amazon_region", AmazonRegion);
                }

                if (ExternalHppType.HasValue)
                {
                    xmlWriter.WriteElementString("external_hpp_type", ExternalHppType.Value.ToString().EnumNameToTransportCase());
                }

                if (!GatewayCode.IsNullOrEmpty())
                {
                    xmlWriter.WriteElementString("gateway_code", GatewayCode);
                    xmlWriter.WriteElementString("gateway_token", GatewayToken);

                    // EnumNameToTransportCase() turns MasterCard into "master_card",
                    // but it needs to be "master" for the server to accept it.
                    // Check for this edge case before writing the card_type tag.
                    var card = CardType.ToString().EnumNameToTransportCase();
                    if (card == "master_card")
                    {
                        card = "master";
                    }

                    xmlWriter.WriteElementString("card_type", card);
                }
            }

            xmlWriter.WriteStringIfValid("token_id", TokenId);

            xmlWriter.WriteEndElement(); // End: billing_info
        }
Beispiel #17
0
        /// <summary>
        /// Sets up the CustomerAccount to pay for services on a recurring basis
        /// using a credit card.
        /// </summary>
        /// <param name="strCreditCardNumber"></param>
        /// <param name="strNameOnCard"></param>
        /// <param name="strExpirationDate"></param>
        public void ActivateRecurringUsingCreditCard(
            [RequiredItem()][CreditCardNumber()] string strCreditCardNumber,
            [RequiredItem()] string strNameOnCard,
            [RequiredItem()][ValidCCDate()] string strExpirationDate)
        {
            BillingLogEntry logEntry = new BillingLogEntry(
                eBillingActivityType.RecurringCredit,
                this.m_can.AccountNumber16);

            using (Log log = CreateLog(logEntry))
            {
                try
                {
                    MethodValidator validator = new MethodValidator(MethodBase.GetCurrentMethod(),
                                                                    strCreditCardNumber, strNameOnCard, strExpirationDate);
                    validator.Validate();

                    // convert the accountNumber.
                    CreditCardNumber creditCardNumber = (CreditCardNumber)TypeDescriptor.GetConverter(
                        typeof(CreditCardNumber)).ConvertFrom(strCreditCardNumber);

                    // Credit card validation
                    logEntry.PaymentType = creditCardNumber.PaymentType;
                    DateTime dttmExpirationDate = ValidCCDateAttribute.ToDate(strExpirationDate);
                    // set the siteId information
                    logEntry.SiteId = SiteId;

                    // Create a DAL to transalate Mop codes
                    DalMethodOfPayment dal = new DalMethodOfPayment();

                    int intStatementCode = 0;
                    try{ intStatementCode = int.Parse(m_can.StatementCode); }catch { /*don't care*/ }

                    // check nsf status
                    checkNSFStatus(true);

                    // assure that the length of the customer name does NOT exceed 32 characters!
                    if (strNameOnCard.Length >= 32)
                    {
                        strNameOnCard = strNameOnCard.Substring(0, 31);
                    }

                    // Build input elements
                    Request.INL00073 inl73 = new INL00073Helper(dal.GetMopByUserPaymentType(
                                                                    UserName, (int)creditCardNumber.PaymentType), creditCardNumber.AccountNumber,
                                                                strNameOnCard, dttmExpirationDate, intStatementCode, false);
                    Request.MAC00027 mac27 = new Mac00027Helper(SiteId.ToString(),
                                                                m_can.AccountNumber9, CmConstant.kstrDefaultTaskCode, inl73);

                    // invoke and get the response object.
                    this.Invoke((Request.MAC00027)mac27);
                }
                catch (BusinessLogicLayerException blle)
                {
                    //the dal threw an exception
                    logEntry.SetError(blle.Message);
                    throw;
                }
                catch (DataSourceException excDSE)
                {
                    //the dal threw an exception
                    logEntry.SetError(excDSE.Message);
                    throw new DataSourceUnavailableException(excDSE);
                }
                catch (CmErrorException excCm)
                {
                    logEntry.SetError(excCm.Message, excCm.ErrorCode);
                    throw TranslateCmException(excCm);
                }
                catch (Exception exc)
                {
                    logEntry.SetError(exc.Message);
                    throw;
                }
            }
        }