public PaymentInfo MakePayment(Card cardInfo, double amount) { //Logic //Use the cardinfo for payment. if (VerifyCard(cardInfo)) { ServiceExceptionInfo info = new ServiceExceptionInfo(); if (amount <= 0) { info.ErrorCode = 101; info.Description = "Invalid amount"; info.When = DateTime.Now; //throw new FaultException<ServiceExceptionInfo>(info, new FaultReason("Error in MakePayment, invalid amount")); throw new FaultException("Error in MakePayment, invalid amount"); } //Original Code Commented To Induce Bug - Not Checking for Balance if (cardBal < amount) { info.ErrorCode = 102; info.Description = "Insufficient balance in the card"; info.When = DateTime.Now; //throw new FaultException<ServiceExceptionInfo>(info, new FaultReason("Error in MakePayment, insufficient balance in the card")); throw new FaultException("Error in MakePayment, insufficient balance in the card"); } cardBal -= amount; s_card.Balance = cardBal; s_card = null; return(new PaymentInfo() { ReferenceNo = Guid.NewGuid().ToString(), Status = PaymentStatus.Success }); } return(null); }
/// <summary> /// Verifies the card to be used for payment /// </summary> /// <param name="cardInfo"></param> /// <returns>True if card information is valid</returns> public bool VerifyCard(Card cardInfo) { string cardNo = null; string cvvNo = null; string mName = null; CardType cardType = CardType.Visa; int cardExpMonth = 0; int cardExpYear = 0; for (int i = 0; i < cards.Count; i++) { if (cards[i].CardNo == cardInfo.CardNo) { mName = cards[i].MemberName; cardNo = cards[i].CardNo; cvvNo = cards[i].CVV; cardBal = cards[i].Balance; cardExpMonth = cards[i].ExpMonth; cardExpYear = cards[i].ExpYear; cardType = cards[i].CardType; s_card = cards[i]; break; } } if (cardNo == null) { throw new FaultException("Invalid Card Number or no such card number exists"); } if (cvvNo == null) { throw new FaultException("Invalid CVV Number"); } if (cardType != cardInfo.Type) { throw new FaultException("Invalid Card Type"); } if (cvvNo != cardInfo.Cvv2No) { throw new FaultException("Invalid CVV Number"); } if (mName != cardInfo.Name) { throw new FaultException("Invalid Member Name"); } if (cardExpMonth != cardInfo.ExpiryMonth) { throw new FaultException("Invalid Card Expiry Month"); } if (cardExpYear != cardInfo.ExpiryYear) { throw new FaultException("Invalid Card Expiry Year"); } if (cardExpYear < DateTime.Now.Year) { throw new FaultException("Card Expired"); } //if (cardExpYear == DateTime.Now.Year && cardExpMonth <= DateTime.Now.Month) //{ // throw new FaultException("Card Expired"); //} return(true); }