示例#1
0
        public void TestSuccessCreditCardTransaction_PreAuthorizeVoid_TransactionIsSuccess()
        {
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");

            //Test PreAuthorize method.
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;

            Assert.AreEqual(result.Success, true);
            Assert.IsNotNull(result.TransactionResponse);

            var tranResult = result.TransactionResponse;

            //Assert.AreEqual(tranResult.ResultCode, "0");
            //Assert.AreEqual(tranResult.ResultMessage, TransactionStatus.Approved.ToString("g"), true);
            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
            Assert.IsNotNull(tranResult.TransactionKey);

            string transactionKey = tranResult.TransactionKey;

            //Test Void method.
            result = _paymentService.Void(transactionKey, _extendedInformation).Result;
            Assert.AreEqual(result.Success, true);
            Assert.IsNotNull(result.TransactionResponse);

            tranResult = result.TransactionResponse;
            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
        }
示例#2
0
        public void ValidatePreAuthorizeMethod_CardInformationIsEmpty_PreAuthozationFail()
        {
            Card card = new Card(); // No card information is provided
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, card, _extendedInformation).Result;

            Assert.AreEqual(result.Success, false);
        }
示例#3
0
        public void ValidatePreAuthorizeMethod_CardInformationIsIncorrect_PreAuthozationFail()
        {
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");

            Card card = this._badcard;

            if (isAuthorizeNet)
            {
                card = new Card
                {
                    CardHolder = new CardHolder
                    {
                        FirstName = "PantsON",
                        LastName  = "Fire",
                    },

                    Account        = "4111111111111111",
                    Cvc            = "532",
                    ExpirationDate = "0925",
                    Billto         = new Address
                    {
                        City    = "Wheton",
                        Country = "USA",
                        Line1   = "218 Esat Avenue",
                        State   = "IL",
                        Zip     = "46282",
                        Email   = "*****@*****.**"
                    }
                };
            }
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, card, _extendedInformation).Result;

            Assert.AreEqual(false, result.Success);
        }
示例#4
0
        private async Task ParseTransactionReponse(ServiceNetResponse serviceResponse, HttpResponseMessage responseMessage)
        {
            serviceResponse.RawResponse  = responseMessage;
            serviceResponse.ResponseCode = ((int)responseMessage.StatusCode).ToString();

            if (responseMessage.StatusCode == HttpStatusCode.OK)
            {
                string responseConent = await responseMessage.Content.ReadAsStringAsync();

                var transResponse = JsonConvert.DeserializeObject <TransactionResponse>(responseConent);
                serviceResponse.TransactionResponse = transResponse;
                TransactionStatus status;
                Enum.TryParse <TransactionStatus>(transResponse.Status, out status);
                serviceResponse.TransactionStatus = status;
                if (TransactionStatus.Approved == serviceResponse.TransactionStatus)
                {
                    serviceResponse.Success = true;
                }
            }
            else
            {
                string responseConent = await responseMessage.Content.ReadAsStringAsync();

                this.logger.LogError($"Transaction Error, HttpStatus:{responseMessage.StatusCode}\r\n Message: {responseMessage.ReasonPhrase}\r\n Content:  {responseConent}");
            }
        }
示例#5
0
        public async Task ValidatePreAuthorizeMethod_CurrencyIsEmpty_PreAuthozationFail()
        {
            _currency = "";
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");
            ServiceNetResponse result = await _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation); //Currency is empty ""

            Assert.AreEqual(result.Success, false);
        }
示例#6
0
        /// <summary>
        /// Process a reference transaction, Capture, Refund, Void transaction call this function.
        /// </summary>
        /// <param name="setupTransaction">Setup the transaction, the <see cref="TransactionType">transaction type</see> and ReferenceKey must be set in the setupTransaction call back function. </param>
        /// <returns></returns>
        public virtual async Task <ServiceNetResponse> ProcessReferenceTransaction(Action <Transaction> setupTransaction)
        {
            ServiceNetResponse result = new ServiceNetResponse();
            var transaction           = new Transaction();

            if (setupTransaction != null)
            {
                setupTransaction(transaction);
            }

            if (string.IsNullOrWhiteSpace(transaction.ReferenceKey))
            {
                throw new Exception("The ReferenceKey must be set.");
            }

            if (string.IsNullOrWhiteSpace(transaction.Type))
            {
                throw new Exception("The transaction type must be set for a reference transaction.");
            }

            HttpRequestMessage message = new HttpRequestMessage();
            string             urlPath = $"/transaction/process";

            message.RequestUri = this.parseUri(urlPath);
            message.Method     = HttpMethod.Post;

            JsonSerializerSettings settings = new JsonSerializerSettings();

            settings.NullValueHandling = NullValueHandling.Ignore;
            string payloadString = JsonConvert.SerializeObject(transaction, settings);

            message.Content = new StringContent(payloadString, Encoding.UTF8, "application/json");
            if (this.logger.IsEnabled(LogLevel.Trace))
            {
                logger.LogTrace("Process Reference Transaction - PayLoad:{0}", payloadString);
            }

            try
            {
                using (HttpResponseMessage responseMessage = await this.httpClient.SendAsync(message))
                {
                    await TraceResponse(responseMessage);

                    await ParseTransactionReponse(result, responseMessage);
                }
            }
            catch (Exception ex)
            {
                result.ServiceException = ex;
                string cn = transaction.Card?.Account;
                if (!string.IsNullOrWhiteSpace(cn) && cn.Length >= 4)
                {
                    cn = cn.Substring(cn.Length - 4);
                }
                logger.LogError(ex, $"Exception in Create Transaction, Transaction Type: {transaction.Type}, Customer: {transaction.Customer},  Card Id: {transaction.Card?.ID}, Card Number End With: {cn} ");
            }
            return(result);
        }
示例#7
0
        public void TestSuccessCreditCardTransaction_PreAuthorizeCaptureRefundWithReferencedTransaction_TransactionIsSuccess()
        {
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");

            //Test PreAuthorize method.
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;

            Assert.AreEqual(result.Success, true);
            Assert.IsNotNull(result.TransactionResponse);

            var tranResult = result.TransactionResponse;

            //Assert.AreEqual(tranResult.ResultCode, "0");
            //Assert.AreEqual(tranResult.ResultMessage, TransactionStatus.Approved.ToString("g"), true);
            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
            Assert.IsNotNull(tranResult.TransactionKey);

            string transactionKey = tranResult.TransactionKey;

            //Test Capture method.
            result = _paymentService.Capture(transactionKey, _amount, _extendedInformation).Result;
            Assert.AreEqual(result.Success, true);
            Assert.IsNotNull(result.TransactionResponse);

            tranResult = result.TransactionResponse;

            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
            transactionKey = tranResult.TransactionKey;

            // Test Refund
            if (!isAuthorizeNet)//TODO: The authorize.net failed
            {
                string referencekey = transactionKey;
                _amount = 22.99M;
                result  = _paymentService.Credit(_amount, _currency, _goodcard, _extendedInformation).Result;

                Assert.AreEqual(result.Success, true);
                Assert.IsNotNull(result.TransactionResponse);

                tranResult = result.TransactionResponse;

                //Assert.AreEqual(tranResult.ResultCode, "0");
                //Assert.AreEqual(tranResult.ResultMessage, TransactionStatus.Approved.ToString("g"), true);
                Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
            }
            else
            {
                //try to void at first
                result = _paymentService.Void(transactionKey, _extendedInformation).Result;
                if (!result.Success)
                {
                    result = _paymentService.Refund(transactionKey, null, _extendedInformation).Result;
                }
                Assert.AreEqual(result.Success, true);
                Assert.IsNotNull(result.TransactionResponse);
            }
        }
示例#8
0
        public void ValidatePreAuthorizeMethod_Invalid_Account_Number_PreAuthozationFail()
        {
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");

            _goodcard.Account = "000000000000000";
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;
            var tranResult            = result.TransactionResponse;

            Assert.AreEqual(TransactionStatus.Failure, result.TransactionStatus);
        }
示例#9
0
        public void TestSuccessCreditCardTransaction_PreAuthorizeCaptureCredit_TransactionIsSuccess()
        {
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");

            //Test PreAuthorize method.
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;

            Assert.AreEqual(result.Success, true);
            Assert.IsNotNull(result.TransactionResponse);

            var tranResult = result.TransactionResponse;

            //Assert.AreEqual(tranResult.ResultCode, "0");
            //Authorize.Net ResultCode 1
            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
            //Assert.AreEqual(result.TransactionStatusCode, TransactionStatus.Approved.ToString("g"), true);
            Assert.IsNotNull(tranResult.TransactionKey);

            string transactionKey = tranResult.TransactionKey;

            //Test Capture method.
            result = _paymentService.Capture(transactionKey, _amount, _extendedInformation).Result;
            Assert.AreEqual(result.Success, true);
            Assert.IsNotNull(result.TransactionResponse);

            tranResult = result.TransactionResponse;

            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);

            //Re-assigning latest transaction key for next Void method to pass.
            transactionKey = tranResult.TransactionKey;

            //Test Credit method.
            //TODO: need check this late, Authorize.Net does not support this credit
            if (!isAuthorizeNet)
            {
                result = _paymentService.Refund(transactionKey, null, _extendedInformation).Result;
                Assert.AreEqual(result.Success, true);
                Assert.IsNotNull(result.TransactionResponse);

                tranResult = result.TransactionResponse;
                Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
            }
            else
            {
                //try to void at first
                result = _paymentService.Void(transactionKey, _extendedInformation).Result;
                if (!result.Success)
                {
                    result = _paymentService.Refund(transactionKey, null, _extendedInformation).Result;
                }
                Assert.AreEqual(result.Success, true);
                Assert.IsNotNull(result.TransactionResponse);
            }
        }
示例#10
0
        public void ValidatePreAuthorizeMethod_CorrectAddress_TestSuccess()
        {
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");
            _goodcard.Billto.Line1             = "218 Esat Avenue";
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;

            Assert.AreEqual(result.Success, true);
            var tranResult = result.TransactionResponse;

            Assert.AreEqual(tranResult.AVSAddressResponse, "Y");
        }
示例#11
0
        public void ValidatePreAuthorizeMethod_AmountIsNegative_PreAuthozationFail()
        {
            _amount = -1.0M;
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;

            Assert.AreEqual(result.Success, false);
            var tranResult = result.TransactionResponse;

            //Assert.AreEqual(tranResult.ResultCode, "4");
            Assert.AreEqual(TransactionStatus.Denied, result.TransactionStatus);
        }
示例#12
0
        public void ValidatePreAuthorizeMethod_ExtendedInformationIsEmpty_PreAuthozationFail()
        {
            if (isAuthorizeNet)
            {
                return;
            }

            ExtendedInformation extendedInformation = new ExtendedInformation(); //Extended information is empty
            ServiceNetResponse  result = _paymentService.PreAuthorize(_amount, _currency, _badcard, _extendedInformation).Result;

            Assert.AreEqual(false, result.Success);
        }
示例#13
0
        public void ValidatePreAuthorizeMethod_Invalid_Expiration_Date_PreAuthozationFail()
        {
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");

            _goodcard.ExpirationDate = "0298"; //Invalid expiration date.

            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;

            Assert.AreEqual(result.Success, false);
            var tranResult = result.TransactionResponse;

            Assert.AreEqual(TransactionStatus.Denied, result.TransactionStatus);
        }
示例#14
0
        /// <summary>
        /// Process a saved transaction with payment gateway.
        /// </summary>
        /// <param name="setupTransaction">The Transaction.Key must be set in the setupTransaction call back function.</param>
        /// <returns>The transaction process response</returns>
        public virtual async Task <ServiceNetResponse> ProcessTransaction(Action <Transaction> setupTransaction)
        {
            ServiceNetResponse result = new ServiceNetResponse();
            var transaction           = new Transaction();

            if (setupTransaction != null)
            {
                setupTransaction(transaction);
            }

            if (string.IsNullOrWhiteSpace(transaction.Key))
            {
                throw new Exception("The transaction key must be set.");
            }

            HttpRequestMessage message = new HttpRequestMessage();
            string             urlPath = $"/transaction/process/{transaction.Key}";

            if (!string.IsNullOrWhiteSpace(transaction.Card?.Cvc))
            {
                urlPath += $"?cvc={transaction.Card.Cvc}";
            }

            message.RequestUri = this.parseUri(urlPath);
            message.Method     = HttpMethod.Get;

            if (this.logger.IsEnabled(LogLevel.Trace))
            {
                logger.LogTrace("Process Saved Transaction - Key:{0}", transaction.Key);
            }

            try
            {
                using (HttpResponseMessage responseMessage = await this.httpClient.SendAsync(message))
                {
                    await TraceResponse(responseMessage);
                    await ParseTransactionReponse(result, responseMessage);
                }
            }
            catch (Exception ex)
            {
                result.ServiceException = ex;
                string cn = transaction.Card?.Account;
                if (!string.IsNullOrWhiteSpace(cn) && cn.Length >= 4)
                {
                    cn = cn.Substring(cn.Length - 4);
                }
                logger.LogError(ex, $"Exception in Create Transaction, Transaction Type: {transaction.Type}, Customer: {transaction.Customer},  Card Id: {transaction.Card?.ID}, Card Number End With: {cn} ");
            }
            return(result);
        }
示例#15
0
        public void ValidatePreAuthorizeMethod_Invalid_MerchantInformation_PreAuthozationFail()
        {
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");

            _amount = 1005M;
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;
            var tranResult            = result.TransactionResponse;

            //Assert.AreEqual(tranResult.ResultCode, "5");
            if (!isAuthorizeNet)
            {
                Assert.AreEqual(TransactionStatus.Denied, result.TransactionStatus);
            }
        }
示例#16
0
        public void ValidatePreAuthorizeMethod_AmountIsOver2000Range_PreAuthozationFail()
        {
            if (isAuthorizeNet)
            {
                return;
            }
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");

            _amount = 2019M;
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;
            var tranResult            = result.TransactionResponse;

            Assert.AreEqual(result.Success, false);
            //Assert.AreEqual(tranResult.ResultCode, "12");
            Assert.AreEqual(TransactionStatus.Denied, result.TransactionStatus);
        }
示例#17
0
        public void PreauthorizeCreditCardTransaction_SubmitRequest_PreAuthorizationIsSuccess()
        {
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");

            //Test PreAuthorize method.
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;

            Assert.AreEqual(true, result.Success);
            Assert.IsNotNull(result.TransactionResponse);

            var tranResult = result.TransactionResponse;

            //Jim: 2/26/2021, Authorize.Net result code is 1
            //Assert.AreEqual(tranResult.ResultCode, "0");
            Assert.AreEqual(result.TransactionStatus, TransactionStatus.Approved);
            //Assert.AreEqual(result.TransactionStatusCode, TransactionStatus.Approved.ToString("g"), true);
            Assert.IsTrue(!string.IsNullOrWhiteSpace(tranResult.AuthorizationCode));
        }
示例#18
0
        public async Task TestSuccessCreditCardTransaction_ChargeVoid_TransactionIsSuccess()
        {
            ExtendedInformation extInfo = new ExtendedInformation
            {
                Customer      = "TEST_0199999",
                InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff"),
                DocumentHead  = new LevelTwoData
                {
                    DiscountAmount = 10M,
                    DutyAmount     = 110M,
                    TaxAmount      = 10M,
                    FreightAmount  = 5M,
                    ShipFromZip    = "60139",
                    ShipToZip      = "60189",
                    PONumber       = "PO_1235",
                    OrderDate      = DateTime.Now
                }
            };
            //Test PreAuthorize method.
            ServiceNetResponse result = await _paymentService.Sale(115M, _currency, _goodcard, extInfo);

            Assert.AreEqual(result.Success, true);
            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
            Assert.IsNotNull(result.TransactionResponse);

            var tranResult = result.TransactionResponse;

            Assert.IsNotNull(tranResult.TransactionKey);

            string transactionKey = tranResult.TransactionKey;

            if (isAuthorizeNet) // skip void when gateway is Authorize.Net
            {
                return;
            }

            //Test Void method.
            result = _paymentService.Void(transactionKey, _extendedInformation).Result;
            Assert.AreEqual(true, result.Success);
            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
            Assert.IsNotNull(result.TransactionResponse);
        }
示例#19
0
        public void ValidatePreAuthorizeMethod_BILLTOSTREET_PreAuthozationFail()
        {
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");
            _goodcard.Billto.Line1             = "668 Esat Avenue";
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;

            Assert.AreEqual(true, result.Success);
            var tranResult = result.TransactionResponse;

            if (!isAuthorizeNet)
            {
                Assert.AreEqual("X", tranResult.AVSAddressResponse);
                Assert.AreEqual("X", tranResult.AVSZipResponse);
            }
            else
            {
                Assert.AreEqual("Y", tranResult.AVSAddressResponse);
                Assert.AreEqual("Y", tranResult.AVSZipResponse);
            }
        }
示例#20
0
        public void ValidatePreAuthorizeMethod_InCorrectCardSecurityCode_PreAuthozationFail()
        {
            _extendedInformation.InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff");

            _goodcard.Cvc = "601";
            if (isAuthorizeNet)
            {
                _goodcard.Cvc = "901";
            }
            ServiceNetResponse result = _paymentService.PreAuthorize(_amount, _currency, _goodcard, _extendedInformation).Result;
            var tranResult            = result.TransactionResponse;

            if (isAuthorizeNet)
            {
                Assert.AreEqual(false, result.Success);
                Assert.AreEqual(tranResult.CVV2Response, "N");
            }
            else
            {
                Assert.AreEqual(true, result.Success);
                Assert.AreEqual(tranResult.CVV2Response, "X");
            }
        }
示例#21
0
        public void TestSuccessCreditCardTransaction_PreAuthorize_Force_Void_TransactionIsSuccess()
        {
            var card = new Card
            {
                CardHolder = new CardHolder
                {
                    FirstName = "PantsON",
                    LastName  = "Fire",
                },

                Account        = "4111111111111111",
                Cvc            = "532",
                ExpirationDate = "0925",
                Billto         = new Address
                {
                    City    = "wheaton",
                    Country = "USA",
                    Line1   = "1953 Wexford Cir",
                    State   = "IL",
                    Zip     = "60189",
                    Email   = "*****@*****.**"
                },
                Tender = TenderTypeEnum.CreditCard
            };

            ExtendedInformation extInfo = new ExtendedInformation
            {
                Customer      = "TEST_0199999",
                InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff"),
                DocumentHead  = new LevelTwoData
                {
                    DiscountAmount = 10M,
                    DutyAmount     = 110M,
                    TaxAmount      = 10M,
                    FreightAmount  = 5M,
                    ShipFromZip    = "60139",
                    ShipToZip      = "60189",
                    PONumber       = "PO_1235",
                    OrderDate      = DateTime.Now
                },
                DocumentLines = new List <LevelThreeData> {
                    new LevelThreeData
                    {
                        ItemDesc     = "SHOE-LA01-BLACK",
                        ItemQuantity = 1M,
                        ItemUOM      = "PAIR",
                        ItemAmount   = 55M,
                        ItemDiscount = 5M
                    },
                    new LevelThreeData
                    {
                        ItemDesc     = "SHOE-LA02-WHITE",
                        ItemQuantity = 1M,
                        ItemUOM      = "PAIR",
                        ItemAmount   = 55M,
                        ItemDiscount = 5M
                    }
                },
                ExtentionInformation = new Dictionary <string, object>()
                {
                    { "AppID", "PayFabric.Net" },
                    { "DisableEmailReceipt", true }
                }
            };

            //Test PreAuthorize method.
            ServiceNetResponse result = _paymentService.PreAuthorize(115.0M, _currency, card, extInfo).Result;

            Assert.AreEqual(result.Success, true);
            Assert.IsNotNull(result.TransactionResponse);

            var tranResult = result.TransactionResponse;

            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
            Assert.IsNotNull(tranResult.TransactionKey);

            string authorizationCode = tranResult.AuthorizationCode;


            //Test Force method, set card.cvv=null;
            card.Cvc = null;
            result   = _paymentService.Force(authorizationCode, 115M, _currency, card, _extendedInformation).Result;
            Assert.AreEqual(true, result.Success);
            Assert.IsNotNull(result.TransactionResponse);

            tranResult = result.TransactionResponse;
            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);

            //Re-assign latest transaction key for next Void method to pass.
            var transactionKey = tranResult.TransactionKey;

            //Test Void method.
            result = _paymentService.Void(transactionKey, _extendedInformation).Result;
            Assert.AreEqual(true, result.Success);
            Assert.IsNotNull(result.TransactionResponse);

            tranResult = result.TransactionResponse;
            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
        }
示例#22
0
        public void TestSuccessCreditCardTransaction_PreAuthorizeCaptureVoid_TransactionIsSuccess()
        {
            ExtendedInformation extInfo = new ExtendedInformation
            {
                Customer      = "TEST_0199999",
                InvoiceNumber = "TEST" + DateTime.Now.ToString("yyyyMMdd_HHmmss.fffff"),
                DocumentHead  = new LevelTwoData
                {
                    DiscountAmount = 10M,
                    DutyAmount     = 110M,
                    TaxAmount      = 10M,
                    FreightAmount  = 5M,
                    ShipFromZip    = "60139",
                    ShipToZip      = "60189",
                    PONumber       = "PO_1235",
                    OrderDate      = DateTime.Now
                },
                DocumentLines = new List <LevelThreeData> {
                    new LevelThreeData
                    {
                        ItemDesc     = "SHOE-LA01-BLACK",
                        ItemQuantity = 1M,
                        ItemUOM      = "PAIR",
                        ItemAmount   = 55M,
                        ItemDiscount = 5M
                    },
                    new LevelThreeData
                    {
                        ItemDesc     = "SHOE-LA02-WHITE",
                        ItemQuantity = 1M,
                        ItemUOM      = "PAIR",
                        ItemAmount   = 55M,
                        ItemDiscount = 5M
                    }
                },
                ExtentionInformation = new Dictionary <string, object>()
                {
                    { "AppID", "PayFabric.Net" },
                    { "DisableEmailReceipt", true }
                }
            };
            //Test PreAuthorize method.
            ServiceNetResponse result = _paymentService.PreAuthorize(115.0M, _currency, _goodcard, extInfo).Result;

            Assert.AreEqual(result.Success, true);
            Assert.IsNotNull(result.TransactionResponse);

            var tranResult = result.TransactionResponse;

            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
            Assert.IsNotNull(tranResult.TransactionKey);

            string transactionKey = tranResult.TransactionKey;

            //Test Capture method.
            result = _paymentService.Capture(transactionKey, 115M, _extendedInformation).Result;
            Assert.AreEqual(true, result.Success);
            Assert.IsNotNull(result.TransactionResponse);

            tranResult = result.TransactionResponse;

            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);

            //Re-assign latest transaction key for next Void method to pass.
            transactionKey = tranResult.TransactionKey;

            //Test Void method.
            result = _paymentService.Void(transactionKey, _extendedInformation).Result;
            Assert.AreEqual(true, result.Success);
            Assert.IsNotNull(result.TransactionResponse);

            tranResult = result.TransactionResponse;
            Assert.AreEqual(TransactionStatus.Approved, result.TransactionStatus);
        }