Пример #1
0
        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;
        }
Пример #2
0
        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);
        }
Пример #3
0
            /// <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);
            }
Пример #4
0
        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);
        }
Пример #5
0
            /// <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();
                    }
                }
            }
Пример #6
0
            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);
            }