public CardPaymentResult AuthorizeCreditCardPayment(UserCreditCard card, decimal amount) { var payResult = new CardPaymentResult(); try { var result = modClient.AuthorizeCreditCardPayment( this.clientId, this.clientCode, card.Alias.Value, amount); payResult = new CardPaymentResult() { TransactionId = result.transId.ToString(), Approved = result.approved, AuthString = result.authString, MessageText = result.messageText, }; } catch(Exception exc) { payResult = new CardPaymentResult() { Approved = false, ServiceUnavailable = true, MessageText = exc.Message }; } return payResult; }
public CardPaymentResult AuthorizeCreditCardPayment(UserCreditCard card, decimal amount) { var payResult = new CardPaymentResult(); try { var result = modClient.AuthorizeCreditCardPayment( this.clientId, this.clientCode, card.Alias.Value, amount); payResult = new CardPaymentResult() { TransactionId = result.transId.ToString(), Approved = result.approved, AuthString = result.authString, MessageText = result.messageText, }; } catch (Exception exc) { payResult = new CardPaymentResult() { Approved = false, ServiceUnavailable = true, MessageText = exc.Message }; } return(payResult); }
/// <summary> /// Finds a record in CardPaymentResult table by result access code. /// </summary> /// <param name="serviceAccountId">The service account ID. It guarantees only the account that generates a record can access it.</param> /// <param name="resultAccessCode">The result access code.</param> /// <returns>The found record.</returns> public CardPaymentResult GetCardPaymentResultByResultAccessCode(string serviceAccountId, string resultAccessCode) { if (serviceAccountId == null) { throw new ArgumentNullException("serviceAccountId"); } if (resultAccessCode == null) { throw new ArgumentNullException("resultAccessCode"); } CardPaymentResult cardPaymentResult = null; using (SqlConnection connection = new SqlConnection(this.connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand(GetCardPaymentResultByResultAccessCodeSprocName, connection)) { command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue("@nvc_ServiceAccountId", serviceAccountId); command.Parameters.AddWithValue("@id_ResultAccessCode", resultAccessCode); using (SqlDataReader reader = command.ExecuteReader()) { if (reader.Read()) { cardPaymentResult = new CardPaymentResult(); cardPaymentResult.EntryId = reader.GetGuid(reader.GetOrdinal("ENTRYID")).ToString(); cardPaymentResult.ResultAccessCode = reader.GetGuid(reader.GetOrdinal("RESULTACCESSCODE")).ToString(); cardPaymentResult.ResultData = GetString(reader, reader.GetOrdinal("RESULTDATA")); cardPaymentResult.Retrieved = reader.GetBoolean(reader.GetOrdinal("RETRIEVED")); cardPaymentResult.ServiceAccountId = GetString(reader, reader.GetOrdinal("SERVICEACCOUNTID")); } } } } return(cardPaymentResult); }
public void Create_Should_Call_PaymentProvider_And_Save_Payment_In_Repo() { // Arrange var paymentRequest = new PaymentRequest() { Card = new Card() { ExpiryDate = "11/2025", Cvv = "123", Number = "0000000000001234", Name = "Firstname Lastname" }, Amount = 500m, Currency = "GBP" }; var cardPaymentResult = new CardPaymentResult() { PaymentId = Guid.NewGuid(), Status = "authorized" }; _cardPaymentProvider.Setup(x => x.RequestPayment(paymentRequest)) .Returns(cardPaymentResult); var paymentRepo = new Entities.Payment(cardPaymentResult.PaymentId, paymentRequest.Card.Number.Mask(), paymentRequest.Card.ExpiryDate, cardPaymentResult.Status); _paymentRepo.Setup(x => x.Create(It.IsAny <Entities.Payment>())) .Returns(paymentRepo); // Act var result = _paymentService.Create(paymentRequest); // Assert result.ShouldNotBeNull(); result.Id.ShouldBe(paymentRepo.Id); result.CardNumber.ShouldBe(paymentRequest.Card.Number.Mask()); result.Status.ShouldBe(cardPaymentResult.Status); _cardPaymentProvider.Verify(x => x.RequestPayment(paymentRequest), Times.Once); _paymentRepo.Verify(x => x.Create(It.IsAny <Entities.Payment>()), Times.Once); }
/// <summary> /// Inserts a record into CardPaymentResult table. /// </summary> /// <param name="cardPaymentResult">The record.</param> public void CreateCardPaymentResult(CardPaymentResult cardPaymentResult) { if (cardPaymentResult == null) { throw new ArgumentNullException("cardPaymentResult"); } using (SqlConnection connection = new SqlConnection(this.connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand(CreateCardPaymentResultSprocName, connection)) { command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue("@id_EntryId", cardPaymentResult.EntryId); command.Parameters.AddWithValue("@b_Retrieved", cardPaymentResult.Retrieved); command.Parameters.AddWithValue("@id_ResultAccessCode", cardPaymentResult.ResultAccessCode); command.Parameters.AddWithValue("@nvc_ResultData", cardPaymentResult.ResultData); command.Parameters.AddWithValue("@nvc_ServiceAccountId", cardPaymentResult.ServiceAccountId); command.ExecuteNonQuery(); } } }
public Response RetrievePaymentAcceptResult([FromBody] Request request) { if (request == null) { throw new ArgumentNullException("request"); } if (request.Properties == null) { throw new ArgumentException("request.Properties cannot be null."); } // Initialize response var errorList = new List <PaymentError>(); var response = new Response() { Locale = request.Locale, }; // Validate merchant information ValidateMerchantAccount(request, errorList); // Get result access code from request var requestProperties = PaymentProperty.ConvertToHashtable(request.Properties); string serviceAccountId = GetPropertyStringValue( requestProperties, GenericNamespace.MerchantAccount, MerchantAccountProperties.ServiceAccountId, required: true, errors: errorList); string resultAccessCode = GetPropertyStringValue( requestProperties, GenericNamespace.TransactionData, TransactionDataProperties.PaymentAcceptResultAccessCode, required: true, errors: errorList); if (errorList.Count > 0) { response.Errors = errorList.ToArray(); return(response); } // Retrieve payment result if no errors var dataManager = new DataManager(); CardPaymentResult cardPaymentResult = dataManager.GetCardPaymentResultByResultAccessCode(serviceAccountId, resultAccessCode); if (cardPaymentResult == null) { // Result does not exist. errorList.Add(new PaymentError(ErrorCode.InvalidRequest, "Invalid payment result access code.")); response.Errors = errorList.ToArray(); return(response); } // Mark the result as retrieved so it cannot be retrieved again. dataManager.UpdateCardPaymentResultAsRetrieved(cardPaymentResult.ServiceAccountId, cardPaymentResult.ResultAccessCode); // Success response = JsonConvert.DeserializeObject <Response>(cardPaymentResult.ResultData); return(response); }