示例#1
0
        private async Task ShouldMakePayPalPayment()
        {
            var paymentRequest = new PaymentRequest
            {
                Source = new RequestPayPalSource
                {
                    InvoiceNumber = "CKO00001",
                    LogoUrl       = "https://www.example.com/logo.jpg",
                },
                Currency = Currency.EUR,
                Amount   = 100,
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayment(paymentRequest);

            paymentResponse.ShouldNotBeNull();
            paymentResponse.Links["self"].ShouldNotBeNull();

            var payment = await PreviousApi.PaymentsClient().GetPaymentDetails(paymentResponse.Id);

            payment.ShouldNotBeNull();

            payment.Links["self"].ShouldNotBeNull();

            payment.Source.ShouldBeOfType(typeof(AlternativePaymentSourceResponse));
            var source = (AlternativePaymentSourceResponse)payment.Source;

            source.Count.ShouldBePositive();
            source.Type().ShouldBe(PaymentSourceType.PayPal);
        }
        protected async Task <PaymentResponse> MakeCardPayment(bool shouldCapture = false, long amount = 10L,
                                                               DateTime?captureOn = null)
        {
            if (!shouldCapture && captureOn != null)
            {
                throw new XunitException("CaptureOn was provided but the payment is not set for capture");
            }

            var requestCardSource = new RequestCardSource
            {
                Name           = TestCardSource.Visa.Name,
                Number         = TestCardSource.Visa.Number,
                ExpiryYear     = TestCardSource.Visa.ExpiryYear,
                ExpiryMonth    = TestCardSource.Visa.ExpiryMonth,
                Cvv            = TestCardSource.Visa.Cvv,
                BillingAddress = GetAddress(),
                Phone          = GetPhone()
            };

            var paymentRequest = new PaymentRequest
            {
                Source    = requestCardSource,
                Capture   = shouldCapture,
                Reference = Guid.NewGuid().ToString(),
                Amount    = amount,
                Currency  = Currency.GBP,
                CaptureOn = captureOn
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayment(paymentRequest);

            paymentResponse.ShouldNotBeNull();
            return(paymentResponse);
        }
        private async Task ShouldQueryDisputes()
        {
            var from    = DateTime.UtcNow.Subtract(TimeSpan.FromHours(24));
            var to      = DateTime.Now; // local timezone
            var request = new DisputesQueryFilter {
                Limit = 250, To = to, From = from
            };

            var response = await PreviousApi.DisputesClient().Query(request);

            response.ShouldNotBeNull();
            response.Limit.ShouldBe(250);
            response.Skip.ShouldNotBeNull();
            response.TotalCount.ShouldNotBeNull();
            response.To.ShouldNotBeNull();
            response.From.ShouldNotBeNull();

            if (response.TotalCount > 0)
            {
                var dispute        = response.Data[0];
                var disputeDetails = await PreviousApi.DisputesClient().GetDisputeDetails(dispute.Id);

                disputeDetails.ShouldNotBeNull();
                disputeDetails.Id.ShouldBe(dispute.Id);
                disputeDetails.Category.ShouldBe(dispute.Category);
                disputeDetails.Status.ShouldBe(dispute.Status);
                disputeDetails.Amount.ShouldBe(dispute.Amount);
                disputeDetails.ReasonCode.ShouldBe(dispute.ReasonCode);
                disputeDetails.Payment.ShouldNotBeNull();
                disputeDetails.Payment.Id.ShouldBe(dispute.PaymentId);
            }
        }
示例#4
0
        private async Task ShouldCreateAndUpdateCustomer()
        {
            //Create Customer
            var request = new CustomerRequest
            {
                Email = GenerateRandomEmail(),
                Name  = "Customer",
                Phone = new Phone
                {
                    CountryCode = "1",
                    Number      = "4155552671"
                }
            };
            var customerResponse = await PreviousApi.CustomersClient().Create(request);

            customerResponse.ShouldNotBeNull();
            //Edit Customer
            request.Email = GenerateRandomEmail();
            request.Name  = "Changed Name";

            var customerId = customerResponse.Id;
            await PreviousApi.CustomersClient().Update(customerId, request);

            var customerDetails = await PreviousApi.CustomersClient().Get(customerId);

            customerDetails.ShouldNotBeNull();
            customerDetails.Email.ShouldBe(request.Email);
            customerDetails.Name.ShouldBe(request.Name);
        }
        private async Task ShouldCreateAndGetHostedPayment()
        {
            var hostedPaymentRequest = CreateHostedPaymentRequest("ORD-123A");

            var createResponse = await PreviousApi.HostedPaymentsClient().CreateHostedPaymentsPageSession(hostedPaymentRequest);

            createResponse.ShouldNotBeNull();
            createResponse.Id.ShouldNotBeNullOrEmpty();
            createResponse.Reference.ShouldNotBeNullOrEmpty();
            createResponse.Links.ShouldNotBeNull();
            createResponse.Links.ContainsKey("redirect").ShouldBeTrue();

            var getResponse = await PreviousApi.HostedPaymentsClient().GetHostedPaymentsPageDetails(createResponse.Id);

            getResponse.ShouldNotBeNull();
            getResponse.Id.ShouldNotBeNullOrEmpty();
            getResponse.Reference.ShouldNotBeNullOrEmpty();
            getResponse.Status.ShouldBe(HostedPaymentStatus.PaymentPending);
            getResponse.Amount.ShouldNotBeNull();
            getResponse.Billing.ShouldNotBeNull();
            getResponse.Currency.ShouldBe(Currency.GBP);
            getResponse.Customer.ShouldNotBeNull();
            getResponse.Description.ShouldNotBeNullOrEmpty();
            getResponse.FailureUrl.ShouldNotBeNull();
            getResponse.SuccessUrl.ShouldNotBeNull();
            getResponse.CancelUrl.ShouldNotBeNullOrEmpty();
            getResponse.Links.Count.ShouldBe(2);
            getResponse.Products.Count.ShouldBe(1);
        }
        private async Task ShouldCreateAndUpdateInstrument()
        {
            var createInstrumentResponse = await CreateTokenInstrument();

            var updateInstrumentRequest = new UpdateInstrumentRequest
            {
                Name        = "New Name",
                ExpiryMonth = 12,
                ExpiryYear  = 2026,
            };

            var update = await PreviousApi.InstrumentsClient().Update(createInstrumentResponse.Id, updateInstrumentRequest);

            update.ShouldNotBeNull();
            update.HttpStatusCode.ShouldNotBeNull();
            update.ResponseHeaders.ShouldNotBeNull();
            update.Body.ShouldNotBeNull();

            var retrieveInstrumentResponse = await PreviousApi.InstrumentsClient().Get(createInstrumentResponse.Id);

            retrieveInstrumentResponse.ShouldNotBeNull();
            retrieveInstrumentResponse.Name.ShouldBe("New Name");
            retrieveInstrumentResponse.ExpiryMonth.ShouldBe(12);
            retrieveInstrumentResponse.ExpiryYear.ShouldBe(2026);
        }
示例#7
0
        private async Task ShouldMakeQPayPayment()
        {
            var paymentRequest = new PaymentRequest
            {
                Source = new RequestQPaySource
                {
                    Quantity    = 1,
                    Description = "QPay Demo Payment",
                    Language    = "en",
                    NationalId  = "070AYY010BU234M"
                },
                Currency = Currency.QAR,
                Amount   = 100,
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayment(paymentRequest);

            paymentResponse.ShouldNotBeNull();
            paymentResponse.Status.ShouldBe(PaymentStatus.Pending);
            paymentResponse.Links["self"].ShouldNotBeNull();
            paymentResponse.Links["redirect"].ShouldNotBeNull();

            var payment = await PreviousApi.PaymentsClient().GetPaymentDetails(paymentResponse.Id);

            payment.ShouldNotBeNull();

            payment.Status.ShouldBe(PaymentStatus.Pending);
            payment.Links["self"].ShouldNotBeNull();

            payment.Source.ShouldBeOfType(typeof(AlternativePaymentSourceResponse));
            var source = (AlternativePaymentSourceResponse)payment.Source;

            source.Count.ShouldBePositive();
            source.Type().ShouldBe(PaymentSourceType.QPay);
        }
示例#8
0
        private async Task ShouldCreateAndGetKlarnaSession()
        {
            var creditSessionRequest = new CreditSessionRequest()
            {
                PurchaseCountry = CountryCode.GB,
                Currency        = Currency.GBP,
                Locale          = "en-GB",
                Amount          = 1000,
                TaxAmount       = 1,
                Products        = new List <KlarnaProduct>()
                {
                    new KlarnaProduct()
                    {
                        Name           = "Brown leather belt",
                        Quantity       = 1,
                        UnitPrice      = 1000,
                        TaxRate        = 0,
                        TotalAmount    = 1000,
                        TotalTaxAmount = 0
                    }
                }
            };

            var creditSessionResponse = await PreviousApi.KlarnaClient().CreateCreditSession(creditSessionRequest);

            creditSessionResponse.ShouldNotBeNull();
            creditSessionResponse.SessionId.ShouldNotBeNullOrEmpty();
            creditSessionResponse.ClientToken.ShouldNotBeNullOrEmpty();
            creditSessionResponse.PaymentMethodCategories.ShouldNotBeNull();
            //creditSessionResponse.PaymentMethodCategories.Count.ShouldBePositive();

            foreach (var paymentMethodCategory in creditSessionResponse.PaymentMethodCategories)
            {
                paymentMethodCategory.Name.ShouldNotBeNullOrEmpty();
                paymentMethodCategory.Identifier.ShouldNotBeNullOrEmpty();
                paymentMethodCategory.AssetUrls.ShouldNotBeNull();
                paymentMethodCategory.AssetUrls.Descriptive.ShouldNotBeNullOrEmpty();
                paymentMethodCategory.AssetUrls.Standard.ShouldNotBeNullOrEmpty();
            }

            var creditSession = await PreviousApi.KlarnaClient().GetCreditSession(creditSessionResponse.SessionId);

            creditSession.ShouldNotBeNull();
            creditSession.ClientToken.ShouldNotBeNullOrEmpty();
            creditSession.PurchaseCountry.ShouldNotBeNull();
            creditSession.Currency.ShouldNotBeNull();
            creditSession.Locale.ShouldNotBeNull();
            creditSession.Amount.ShouldNotBeNull();
            creditSession.TaxAmount.ShouldNotBeNull();
            creditSession.Products.ShouldNotBeNull();
            foreach (var creditSessionProduct in creditSession.Products)
            {
                creditSessionProduct.Name.ShouldNotBeNullOrEmpty();
                creditSessionProduct.Quantity.ShouldNotBeNull();
                creditSessionProduct.UnitPrice.ShouldNotBeNull();
                creditSessionProduct.TaxRate.ShouldNotBeNull();
                creditSessionProduct.TotalAmount.ShouldNotBeNull();
                creditSessionProduct.TotalTaxAmount.ShouldNotBeNull();
            }
        }
示例#9
0
        private async Task ShouldMakePoliPayment()
        {
            var paymentRequest = new PaymentRequest
            {
                Source   = new RequestPoliSource(),
                Currency = Currency.AUD,
                Amount   = 100,
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayment(paymentRequest);

            paymentResponse.ShouldNotBeNull();
            paymentResponse.Status.ShouldBe(PaymentStatus.Declined);
            paymentResponse.Links["self"].ShouldNotBeNull();

            var payment = await PreviousApi.PaymentsClient().GetPaymentDetails(paymentResponse.Id);

            payment.ShouldNotBeNull();

            payment.Status.ShouldBe(PaymentStatus.Declined);
            payment.Links["self"].ShouldNotBeNull();

            payment.Source.ShouldBeOfType(typeof(AlternativePaymentSourceResponse));
            var source = (AlternativePaymentSourceResponse)payment.Source;

            source.Count.ShouldBePositive();
            source.Type().ShouldBe(PaymentSourceType.Poli);
        }
示例#10
0
        private async Task ShouldMakeBancontactPayment()
        {
            var paymentRequest = new PaymentRequest
            {
                Source = new RequestBancontactSource
                {
                    PaymentCountry    = CountryCode.BE,
                    AccountHolderName = "Bruce Wayne",
                    BillingDescriptor = "CKO Demo - bancontact",
                },
                Currency = Currency.EUR,
                Amount   = 100,
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayment(paymentRequest);

            paymentResponse.ShouldNotBeNull();
            paymentResponse.Status.ShouldBe(PaymentStatus.Pending);
            paymentResponse.Links["self"].ShouldNotBeNull();
            paymentResponse.Links["redirect"].ShouldNotBeNull();

            var payment = await PreviousApi.PaymentsClient().GetPaymentDetails(paymentResponse.Id);

            payment.ShouldNotBeNull();

            payment.Status.ShouldBe(PaymentStatus.Pending);
            payment.Links["self"].ShouldNotBeNull();

            payment.Source.ShouldBeOfType(typeof(AlternativePaymentSourceResponse));
            var source = (AlternativePaymentSourceResponse)payment.Source;

            source.Count.ShouldBePositive();
            source.Type().ShouldBe(PaymentSourceType.Bancontact);
        }
示例#11
0
        private async Task ShouldMakePrzelewy24Payment()
        {
            var paymentRequest = new PaymentRequest
            {
                Source = new RequestP24Source
                {
                    PaymentCountry     = CountryCode.PL,
                    AccountHolderName  = "Bruce Wayne",
                    AccountHolderEmail = "*****@*****.**",
                    BillingDescriptor  = "P24 Demo Payment"
                },
                Currency = Currency.PLN,
                Amount   = 100,
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayment(paymentRequest);

            paymentResponse.ShouldNotBeNull();
            paymentResponse.Status.ShouldBe(PaymentStatus.Pending);
            paymentResponse.Links["self"].ShouldNotBeNull();
            paymentResponse.Links["redirect"].ShouldNotBeNull();

            var payment = await PreviousApi.PaymentsClient().GetPaymentDetails(paymentResponse.Id);

            payment.ShouldNotBeNull();

            payment.Status.ShouldBe(PaymentStatus.Pending);
            payment.Links["self"].ShouldNotBeNull();

            payment.Source.ShouldBeOfType(typeof(AlternativePaymentSourceResponse));
            var source = (AlternativePaymentSourceResponse)payment.Source;

            source.Count.ShouldBePositive();
            source.Type().ShouldBe(PaymentSourceType.Przelewy24);
        }
        private async Task ShouldRetrieveDefaultEventTypes()
        {
            var allEventTypesWrapper = await PreviousApi.EventsClient().RetrieveAllEventTypes();

            var allEventTypes = allEventTypesWrapper.Items;

            allEventTypes.ShouldNotBeNull();
            allEventTypes.Count.ShouldBe(2);
            allEventTypes[0].EventTypes.ShouldNotBeNull();

            var versionOneEventTypesWrap = await PreviousApi.EventsClient().RetrieveAllEventTypes(allEventTypes[0].Version);

            var versionOneEventTypes = versionOneEventTypesWrap.Items;

            versionOneEventTypes.ShouldNotBeNull();
            versionOneEventTypes.Count.ShouldBe(1);
            versionOneEventTypes[0].Version.ShouldBe(allEventTypes[0].Version);
            versionOneEventTypes[0].EventTypes.Count.ShouldBe(allEventTypes[0].EventTypes.Count);

            var versionTwoEventTypesWrap = await PreviousApi.EventsClient().RetrieveAllEventTypes(allEventTypes[1].Version);

            var versionTwoEventTypes = versionTwoEventTypesWrap.Items;

            versionTwoEventTypes.ShouldNotBeNull();
            versionTwoEventTypes.Count.ShouldBe(1);
            versionTwoEventTypes[0].Version.ShouldBe(allEventTypes[1].Version);
            versionTwoEventTypes[0].EventTypes.Count.ShouldBe(allEventTypes[1].EventTypes.Count);
        }
示例#13
0
        private async Task ShouldMakeKnetPayment()
        {
            var paymentRequest = new PaymentRequest
            {
                Source = new RequestKnetSource
                {
                    Language = "en",
                },
                Currency = Currency.KWD,
                Amount   = 100,
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayment(paymentRequest);

            paymentResponse.ShouldNotBeNull();
            paymentResponse.Status.ShouldBe(PaymentStatus.Pending);
            paymentResponse.Links["self"].ShouldNotBeNull();
            paymentResponse.Links["redirect"].ShouldNotBeNull();

            var payment = await PreviousApi.PaymentsClient().GetPaymentDetails(paymentResponse.Id);

            payment.ShouldNotBeNull();

            payment.Status.ShouldBe(PaymentStatus.Pending);
            payment.Links["self"].ShouldNotBeNull();

            payment.Source.ShouldBeOfType(typeof(AlternativePaymentSourceResponse));
            var source = (AlternativePaymentSourceResponse)payment.Source;

            source.Count.ShouldBePositive();
            source.Type().ShouldBe(PaymentSourceType.KNet);
        }
示例#14
0
        private async Task ShouldMakeBenefitPayPayment()
        {
            var paymentRequest = new PaymentRequest
            {
                Source = new RequestBenefitPaySource
                {
                    IntegrationType = "mobile"
                },
                Currency = Currency.USD,
                Amount   = 100,
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayment(paymentRequest);

            paymentResponse.ShouldNotBeNull();
            paymentResponse.Status.ShouldBe(PaymentStatus.Pending);
            paymentResponse.Links["self"].ShouldNotBeNull();
            paymentResponse.Links["redirect"].ShouldNotBeNull();

            var payment = await PreviousApi.PaymentsClient().GetPaymentDetails(paymentResponse.Id);

            payment.ShouldNotBeNull();

            payment.Status.ShouldBe(PaymentStatus.Pending);
            payment.Links["self"].ShouldNotBeNull();

            payment.Source.ShouldBeOfType(typeof(AlternativePaymentSourceResponse));
            var source = (AlternativePaymentSourceResponse)payment.Source;

            source.Count.ShouldBePositive();
            source.Type().ShouldBe(PaymentSourceType.BenefitPay);
        }
示例#15
0
        private async Task ShouldCreateAndGetCustomer()
        {
            var request = new CustomerRequest
            {
                Email = GenerateRandomEmail(),
                Name  = "Customer",
                Phone = new Phone
                {
                    CountryCode = "1",
                    Number      = "4155552671"
                }
            };
            var customerResponse = await PreviousApi.CustomersClient().Create(request);

            customerResponse.ShouldNotBeNull();

            var customerDetails = await PreviousApi.CustomersClient().Get(customerResponse.Id);

            customerDetails.ShouldNotBeNull();
            customerDetails.Email.ShouldBe(request.Email);
            customerDetails.Name.ShouldBe(request.Name);
            customerDetails.Phone.ShouldNotBeNull();
            customerDetails.DefaultId.ShouldBeNull();
            customerDetails.Instruments.ShouldBeEmpty();
        }
示例#16
0
        private async Task ShouldMakeEpsPayment()
        {
            var paymentRequest = new PaymentRequest
            {
                Source = new RequestEpsSource
                {
                    Purpose = "Mens black t-shirt L",
                },
                Currency = Currency.EUR,
                Amount   = 100,
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayment(paymentRequest);

            paymentResponse.ShouldNotBeNull();
            paymentResponse.Status.ShouldBe(PaymentStatus.Pending);
            paymentResponse.Links["self"].ShouldNotBeNull();
            paymentResponse.Links["redirect"].ShouldNotBeNull();

            var payment = await PreviousApi.PaymentsClient().GetPaymentDetails(paymentResponse.Id);

            payment.ShouldNotBeNull();

            payment.Status.ShouldBe(PaymentStatus.Pending);
            payment.Links["self"].ShouldNotBeNull();

            payment.Source.ShouldBeOfType(typeof(AlternativePaymentSourceResponse));
            var source = (AlternativePaymentSourceResponse)payment.Source;

            source.Count.ShouldBePositive();
            source.Type().ShouldBe(PaymentSourceType.EPS);
        }
        private async Task ShouldTestFullDisputesWorkflow()
        {
            //Make the payment
            var payment = await MakeCardPayment(true, 1040L);

            payment.ShouldNotBeNull();

            var query = new DisputesQueryFilter {
                PaymentId = payment.Id
            };

            //Query for dispute
            DisputesQueryResponse queryResponse = await Retriable(async() =>
                                                                  await PreviousApi.DisputesClient().Query(query), HasItems);

            queryResponse.ShouldNotBeNull();
            queryResponse.Data[0].PaymentId.ShouldBe(payment.Id);

            //Upload dispute evidence
            const string filePath     = "./Resources/checkout.jpeg";
            var          fileResponse = await PreviousApi.DisputesClient().SubmitFile(filePath, "dispute_evidence");

            //Provide dispute evidence
            var disputeEvidenceRequest = new DisputeEvidenceRequest
            {
                ProofOfDeliveryOrServiceFile = fileResponse.Id,
                ProofOfDeliveryOrServiceText = "proof of delivery or service text",
                InvoiceOrReceiptFile         = fileResponse.Id,
                InvoiceOrReceiptText         = "Copy of the invoice",
                CustomerCommunicationFile    = fileResponse.Id,
                CustomerCommunicationText    = "Copy of an email exchange with the cardholder",
                AdditionalEvidenceFile       = fileResponse.Id,
                AdditionalEvidenceText       = "Scanned document"
            };
            var disputeId     = queryResponse.Data[0].Id;
            var emptyResponse = await PreviousApi.DisputesClient().PutEvidence(disputeId, disputeEvidenceRequest);

            emptyResponse.ShouldNotBeNull();
            emptyResponse.HttpStatusCode.ShouldNotBeNull();
            emptyResponse.ResponseHeaders.ShouldNotBeNull();

            //Verify the dispute evidence
            var evidence = await PreviousApi.DisputesClient().GetEvidence(disputeId);

            evidence.ShouldNotBeNull();
            evidence.ProofOfDeliveryOrServiceFile.ShouldBe(disputeEvidenceRequest.ProofOfDeliveryOrServiceFile);
            evidence.ProofOfDeliveryOrServiceText.ShouldBe(disputeEvidenceRequest.ProofOfDeliveryOrServiceText);
            evidence.InvoiceOrReceiptFile.ShouldBe(disputeEvidenceRequest.InvoiceOrReceiptFile);
            evidence.InvoiceOrReceiptText.ShouldBe(disputeEvidenceRequest.InvoiceOrReceiptText);
            evidence.CustomerCommunicationFile.ShouldBe(disputeEvidenceRequest.CustomerCommunicationFile);
            evidence.CustomerCommunicationText.ShouldBe(disputeEvidenceRequest.CustomerCommunicationText);
            evidence.AdditionalEvidenceFile.ShouldBe(disputeEvidenceRequest.AdditionalEvidenceFile);
            evidence.AdditionalEvidenceText.ShouldBe(disputeEvidenceRequest.AdditionalEvidenceText);

            //Submit the dispute
            await PreviousApi.DisputesClient().SubmitEvidence(disputeId);
        }
        private async Task ShouldGetIssuers()
        {
            var idealInfo = await PreviousApi.IdealClient().GetIssuers();

            idealInfo.ShouldNotBeNull();
            idealInfo.GetSelfLink().ShouldNotBeNull();
            idealInfo.Countries.ShouldNotBeNull();
            idealInfo.Countries.Count.ShouldBePositive();
        }
        private async Task <WebhookResponse> RegisterWebhook(string url)
        {
            var webhookRequest = new WebhookRequest()
            {
                Url = url, ContentType = WebhookContentType.Json, EventTypes = _eventTypes
            };

            return(await PreviousApi.WebhooksClient().RegisterWebhook(webhookRequest));
        }
        private async Task <CreateInstrumentResponse> CreateTokenInstrument()
        {
            var phone = new Phone
            {
                CountryCode = "44",
                Number      = "020 222333"
            };

            var billingAddress = new Address
            {
                AddressLine1 = "CheckoutSdk.com",
                AddressLine2 = "90 Tottenham Court Road",
                City         = "London",
                State        = "London",
                Zip          = "W1T 4TJ",
                Country      = CountryCode.GB
            };

            var cardTokenRequest = new CardTokenRequest
            {
                Name           = TestCardSource.Visa.Name,
                Number         = TestCardSource.Visa.Number,
                ExpiryYear     = TestCardSource.Visa.ExpiryYear,
                ExpiryMonth    = TestCardSource.Visa.ExpiryMonth,
                Cvv            = TestCardSource.Visa.Cvv,
                BillingAddress = billingAddress,
                Phone          = phone
            };

            var cardTokenResponse = await PreviousApi.TokensClient().Request(cardTokenRequest);

            cardTokenResponse.ShouldNotBeNull();

            var request = new CreateInstrumentRequest
            {
                Token    = cardTokenResponse.Token,
                Customer = new InstrumentCustomerRequest
                {
                    Email   = "*****@*****.**",
                    Name    = "Bruce Wayne",
                    Default = true,
                    Phone   = new Phone
                    {
                        CountryCode = "+1",
                        Number      = "4155552671"
                    }
                }
            };

            var createInstrumentResponse = await PreviousApi.InstrumentsClient().Create(request);

            createInstrumentResponse.ShouldNotBeNull();

            return(createInstrumentResponse);
        }
        private async Task ShouldGetPaymentDetails()
        {
            var paymentResponse = await MakeCardPayment(true);

            var payment = await Retriable(async() =>
                                          await PreviousApi.PaymentsClient().GetPaymentDetails(paymentResponse.Id));

            payment.Id.ShouldNotBeNullOrEmpty();
            payment.PaymentType.ShouldBe(PaymentType.Regular);
            payment.RequestedOn.ShouldNotBeNull();
            payment.Reference.ShouldNotBeNullOrEmpty();
            payment.SchemeId.ShouldNotBeNullOrEmpty();
            //payment.Status.ShouldBe(PaymentStatus.Captured);
            payment.Amount.ShouldBe(10);
            payment.Approved.ShouldBe(true);
            payment.Currency.ShouldBe(Currency.GBP);
            payment.ThreeDs.ShouldBeNull();
            //payment.Eci.ShouldNotBeNullOrEmpty();
            //Source
            payment.Source.ShouldBeAssignableTo(typeof(ResponseCardSource));
            var cardSourcePayment = (ResponseCardSource)payment.Source;

            cardSourcePayment.Type().ShouldBe(PaymentSourceType.Card);
            cardSourcePayment.Id.ShouldNotBeNullOrEmpty();
            cardSourcePayment.AvsCheck.ShouldBe("S");
            cardSourcePayment.CvvCheck.ShouldBe("Y");
            cardSourcePayment.Bin.ShouldNotBeNull();
            //cardSourcePayment.CardCategory.ShouldBe(CardCategory.Consumer);
            //cardSourcePayment.CardType.ShouldBe(CardType.Credit);
            cardSourcePayment.ExpiryMonth.ShouldNotBeNull();
            cardSourcePayment.ExpiryYear.ShouldNotBeNull();
            cardSourcePayment.Last4.ShouldNotBeNullOrEmpty();
            cardSourcePayment.Scheme.ShouldNotBeNullOrEmpty();
            cardSourcePayment.Name.ShouldNotBeNullOrEmpty();
            cardSourcePayment.FastFunds.ShouldNotBeNullOrEmpty();
            cardSourcePayment.Fingerprint.ShouldNotBeNullOrEmpty();
            //cardSourcePayment.Issuer.ShouldNotBeNullOrEmpty();
            //cardSourcePayment.IssuerCountry.ShouldBe(CountryCode.US);
            cardSourcePayment.Payouts.ShouldBe(true);
            //cardSourcePayment.ProductId.ShouldNotBeNullOrEmpty();
            //cardSourcePayment.ProductType.ShouldNotBeNullOrEmpty();
            //Customer
            payment.Customer.ShouldNotBeNull();
            payment.Customer.Id.ShouldNotBeNull();
            payment.Customer.Name.ShouldNotBeNull();
            //Risk
            payment.Risk.Flagged.ShouldBe(false);
            //Links
            payment.GetSelfLink().ShouldNotBeNull();
            payment.HasLink("actions").ShouldBeTrue();
            //payment.HasLink("capture").ShouldBeFalse();
            //payment.HasLink("void").ShouldBeFalse();
            //Other
            payment.BillingDescriptor.ShouldNotBeNull();
        }
示例#22
0
        private async Task TestRequestPreAuthenticationRiskScan(RiskPaymentRequestSource requestSource)
        {
            var preAuthenticationAssessmentRequest = new PreAuthenticationAssessmentRequest()
            {
                Date     = DateTime.Now,
                Source   = requestSource,
                Customer = new Common.CustomerRequest()
                {
                    Id    = "Id",
                    Email = GenerateRandomEmail(),
                    Name  = "name"
                },
                Payment = new RiskPayment()
                {
                    Psp = "CheckoutSdk.com",
                    Id  = "78453878"
                },
                Shipping = new RiskShippingDetails()
                {
                    Address = new Address()
                    {
                        AddressLine1 = "CheckoutSdk.com",
                        AddressLine2 = "90 Tottenham Court Road",
                        City         = "London",
                        State        = "London",
                        Zip          = "W1T 4TJ",
                        Country      = CountryCode.GB
                    }
                },
                Reference   = "ORD-1011-87AH",
                Description = "Set of 3 masks",
                Amount      = 6540,
                Device      = new Device()
                {
                    Ip       = "90.197.169.245",
                    Location = new Location()
                    {
                        Longitude = "0.1313",
                        Latitude  = "51.5107"
                    },
                    Type  = "Phone",
                    Os    = "ISO",
                    Model = "iPhone X",
                    Date  = DateTime.Now,
                }
            };

            var response = await PreviousApi.RiskClient()
                           .RequestPreAuthenticationRiskScan(preAuthenticationAssessmentRequest);

            response.ShouldNotBeNull();
            response.AssessmentId.ShouldNotBeNull();
            response.Result.ShouldNotBeNull();
            response.Result.Decision.ShouldNotBeNull();
        }
        private async Task ShouldGetInfo()
        {
            var idealInfo = await PreviousApi.IdealClient().GetInfo();

            idealInfo.ShouldNotBeNull();
            idealInfo.Links.ShouldNotBeNull();
            idealInfo.Links.Self.ShouldNotBeNull();
            idealInfo.Links.Issuers.ShouldNotBeNull();
            idealInfo.Links.Curies.ShouldNotBeNull();
            idealInfo.Links.Curies.Count.ShouldBePositive();
        }
        private async Task <WebhookResponse> RegisterWebhook()
        {
            var webhookRequest = new WebhookRequest()
            {
                Url         = "https://checkout.com/webhooks",
                ContentType = WebhookContentType.Json,
                EventTypes  = _paymentEventTypes
            };

            return(await PreviousApi.WebhooksClient().RegisterWebhook(webhookRequest));
        }
        private async Task ShouldCreateAndDeleteInstrument()
        {
            var createInstrumentResponse = await CreateTokenInstrument();

            var emptyResponse = await PreviousApi.InstrumentsClient().Delete(createInstrumentResponse.Id);

            emptyResponse.ShouldNotBeNull();
            emptyResponse.HttpStatusCode.ShouldNotBeNull();
            emptyResponse.ResponseHeaders.ShouldNotBeNull();

            await AssertNotFound(PreviousApi.InstrumentsClient().Get(createInstrumentResponse.Id));
        }
        private async Task ShouldCreatePaymentLink()
        {
            var address = new Address
            {
                AddressLine1 = "CheckoutSdk.com",
                AddressLine2 = "90 Tottenham Court Road",
                City         = "London",
                State        = "London",
                Zip          = "W1T 4TJ",
                Country      = CountryCode.GB
            };

            var paymentLinkRequest = new PaymentLinkRequest
            {
                Amount  = 10,
                Billing = new BillingInformation
                {
                    Address = address
                },
                Capture   = true,
                CaptureOn = DateTime.Now,
                Currency  = Currency.GBP,
                Customer  = new CustomerRequest
                {
                    Id    = "Id",
                    Email = GenerateRandomEmail(),
                    Name  = "name"
                },
                Description = "description",
                ExpiresIn   = 1,
                Locale      = "loc",
                Reference   = "ORD-123A",
                ThreeDs     = new ThreeDsRequest
                {
                    Enabled            = true,
                    AttemptN3D         = false,
                    Eci                = "05",
                    Cryptogram         = "AgAAAAAAAIR8CQrXcIhbQAAAAAA",
                    Xid                = "MDAwMDAwMDAwMDAwMDAwMzIyNzY=",
                    Version            = "2.0.1",
                    ChallengeIndicator = ChallengeIndicatorType.NoPreference
                },
                PaymentType = PaymentType.Regular
            };

            var response = await PreviousApi.PaymentLinksClient().Create(paymentLinkRequest);

            response.ShouldNotBeNull();
            response.Id.ShouldNotBeNull();
            response.Links.ShouldNotBeNull();
            response.Links.Count.ShouldBe(2);
            response.Reference.ShouldNotBeNull();
        }
示例#27
0
        private async Task ShouldMakeFawryPayment()
        {
            var fawrySource = new RequestFawrySource
            {
                Description    = "Fawry Demo Payment",
                CustomerEmail  = "*****@*****.**",
                CustomerMobile = "01058375055",
                Products       = new List <FawryProduct>
                {
                    new FawryProduct
                    {
                        ProductId   = "0123456789",
                        Description = "Fawry Demo Product",
                        Price       = 1000,
                        Quantity    = 1
                    }
                }
            };

            var paymentRequest = new PaymentRequest
            {
                Source   = fawrySource,
                Currency = Currency.EGP,
                Amount   = 1000,
                Capture  = true
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayment(paymentRequest);

            paymentResponse.ShouldNotBeNull();
            paymentResponse.Status.ShouldBe(PaymentStatus.Pending);
            paymentResponse.ResponseSummary.ShouldBeNull();
            paymentResponse.Links["self"].ShouldNotBeNull();
            paymentResponse.Links["approve"].ShouldNotBeNull();
            paymentResponse.Links["cancel"].ShouldNotBeNull();

            var payment = await PreviousApi.PaymentsClient().GetPaymentDetails(paymentResponse.Id);

            payment.ShouldNotBeNull();

            payment.Status.ShouldBe(PaymentStatus.Pending);
            payment.Links["self"].ShouldNotBeNull();
            payment.Links["approve"].ShouldNotBeNull();
            payment.Links["cancel"].ShouldNotBeNull();

            payment.Source.ShouldBeOfType(typeof(AlternativePaymentSourceResponse));
            var source = (AlternativePaymentSourceResponse)payment.Source;

            source.Count.ShouldBePositive();
            source.Type().ShouldBe(PaymentSourceType.Fawry);
        }
        private async Task ShouldRetrieveEventsByPaymentId_andRetrieveEventById_andGetNotification()
        {
            var webhook = await RegisterWebhook();

            var payment = await MakeCardPayment();

            payment.ShouldNotBeNull();


            var retrieveEventsRequest = new RetrieveEventsRequest {
                PaymentId = payment.Id
            };

            //Retrieve events
            EventsPageResponse events = await Retriable(async() =>
                                                        await PreviousApi.EventsClient().RetrieveEvents(retrieveEventsRequest));

            events.ShouldNotBeNull();
            events.TotalCount.ShouldBe(1);
            events.Data.ShouldNotBeNull();
            events.Data.Count.ShouldBe(1);

            var summaryResponse = events.Data[0];

            summaryResponse.Id.ShouldNotBeNull();
            summaryResponse.CreatedOn.ShouldNotBeNull();
            summaryResponse.Type.ShouldBe("payment_approved");

            //Retrieve event
            var eventResponse = await PreviousApi.EventsClient().RetrieveEvent(summaryResponse.Id);

            eventResponse.ShouldNotBeNull();
            eventResponse.Id.ShouldNotBeNull();
            eventResponse.Data.ShouldNotBeNull();
            eventResponse.Type.ShouldBe("payment_approved");

            //Get notification
            var eventNotification = await PreviousApi.EventsClient()
                                    .RetrieveEventNotification(eventResponse.Id, eventResponse.Notifications[0].Id);

            eventNotification.ShouldNotBeNull();
            eventNotification.Id.ShouldNotBeNull();
            eventNotification.Url.ShouldNotBeNull();
            eventNotification.Success.ShouldNotBeNull();

            // Retry Webhooks
            // Webhooks are not being re attempted. Adding the call to ensure.
            await PreviousApi.EventsClient().RetryWebhook(summaryResponse.Id, webhook.Id);

            await PreviousApi.EventsClient().RetryAllWebhooks(summaryResponse.Id);
        }
示例#29
0
        private async Task ShouldGetCustomerDetailsWithInstrument()
        {
            var cardTokenResponse = await PreviousApi.TokensClient().Request(GetCardTokenRequest());

            cardTokenResponse.ShouldNotBeNull();

            var request = new CreateInstrumentRequest
            {
                Token    = cardTokenResponse.Token,
                Customer = new InstrumentCustomerRequest
                {
                    Email   = "*****@*****.**",
                    Name    = "Instrument Customer",
                    Default = true,
                    Phone   = new Phone
                    {
                        CountryCode = "+1",
                        Number      = "4155552671"
                    }
                }
            };

            var createInstrumentResponse = await PreviousApi.InstrumentsClient().Create(request);

            createInstrumentResponse.ShouldNotBeNull();
            createInstrumentResponse.Customer.ShouldNotBeNull();
            createInstrumentResponse.Customer.Id.ShouldNotBeNullOrEmpty();

            CustomerDetailsResponse customerDetailsResponse = await PreviousApi.CustomersClient().Get(createInstrumentResponse.Customer.Id);

            customerDetailsResponse.ShouldNotBeNull();
            customerDetailsResponse.Instruments.ShouldNotBeNull();
            customerDetailsResponse.Instruments.Count.ShouldBe(1);

            InstrumentDetails instrumentDetails = customerDetailsResponse.Instruments[0];

            createInstrumentResponse.Id.ShouldBe(instrumentDetails.Id);
            createInstrumentResponse.Type.ShouldBe(InstrumentType.Card);
            createInstrumentResponse.Fingerprint.ShouldBe(instrumentDetails.Fingerprint);
            createInstrumentResponse.ExpiryMonth.ShouldBe(instrumentDetails.ExpiryMonth);
            createInstrumentResponse.ExpiryYear.ShouldBe(instrumentDetails.ExpiryYear);
            createInstrumentResponse.Scheme.ShouldBe(instrumentDetails.Scheme);
            createInstrumentResponse.Last4.ShouldBe(instrumentDetails.Last4);
            createInstrumentResponse.Bin.ShouldBe(instrumentDetails.Bin);
            createInstrumentResponse.CardType.ShouldBe(CardType.Credit);
            createInstrumentResponse.Issuer.ShouldBe(instrumentDetails.Issuer);
            createInstrumentResponse.IssuerCountry.ShouldNotBeNull();
            createInstrumentResponse.ProductId.ShouldBe(instrumentDetails.ProductId);
            createInstrumentResponse.ProductType.ShouldBe(instrumentDetails.ProductType);
        }
        private async Task ShouldRequestCardToken()
        {
            var phone = new Phone {
                CountryCode = "44", Number = "020 222333"
            };

            var billingAddress = new Address
            {
                AddressLine1 = "CheckoutSdk.com",
                AddressLine2 = "90 Tottenham Court Road",
                City         = "London",
                State        = "London",
                Zip          = "W1T 4TJ",
                Country      = CountryCode.GB
            };

            var cardTokenRequest = new CardTokenRequest
            {
                Name           = TestCardSource.Visa.Name,
                Number         = TestCardSource.Visa.Number,
                ExpiryYear     = TestCardSource.Visa.ExpiryYear,
                ExpiryMonth    = TestCardSource.Visa.ExpiryMonth,
                Cvv            = TestCardSource.Visa.Cvv,
                BillingAddress = billingAddress,
                Phone          = phone
            };

            var cardTokenResponse = await PreviousApi.TokensClient().Request(cardTokenRequest);

            cardTokenResponse.ShouldNotBeNull();

            cardTokenResponse.Token.ShouldNotBeNullOrEmpty();
            cardTokenResponse.Type.ShouldBe(TokenType.Card);
            cardTokenResponse.ExpiryMonth.ShouldBe(cardTokenRequest.ExpiryMonth);
            cardTokenResponse.ExpiryYear.ShouldBe(cardTokenRequest.ExpiryYear);
            cardTokenResponse.ExpiresOn.ShouldNotBeNull();
            cardTokenResponse.BillingAddress.ShouldNotBeNull();
            cardTokenResponse.BillingAddress.AddressLine1.ShouldBe(cardTokenRequest.BillingAddress.AddressLine1);
            cardTokenResponse.BillingAddress.AddressLine2.ShouldBe(cardTokenResponse.BillingAddress.AddressLine2);
            cardTokenResponse.BillingAddress.City.ShouldBe(cardTokenRequest.BillingAddress.City);
            cardTokenResponse.BillingAddress.State.ShouldBe(cardTokenRequest.BillingAddress.State);
            cardTokenResponse.BillingAddress.Zip.ShouldBe(cardTokenRequest.BillingAddress.Zip);
            cardTokenResponse.BillingAddress.Country.ShouldBe(cardTokenRequest.BillingAddress.Country);
            cardTokenResponse.Phone.ShouldNotBeNull();
            cardTokenResponse.Phone.CountryCode.ShouldBe(cardTokenRequest.Phone.CountryCode);
            cardTokenResponse.Phone.Number.ShouldBe(cardTokenRequest.Phone.Number);
            //cardTokenResponse.CardType.ShouldBe(CardType.Credit);
            //cardTokenResponse.CardCategory.ShouldBe(CardCategory.Consumer);
        }