Ejemplo n.º 1
0
        public async Task Create_Get_Delete_Customer_Profile_With_eCheck_Business_Checking_Successfully_Test()
        {
            // Arrange
            var client            = _sp.GetRequiredService <ICustomerProfileClient>();
            var paymentClient     = _sp.GetRequiredService <ICustomerPaymentProfileClient>();
            var transactionClient = _sp.GetRequiredService <ITransactionClient>();
            var options           = _sp.GetRequiredService <IOptions <AuthorizeNetOptions> >();

            var randomAccountNumber = new Random().Next(10000, int.MaxValue);

            // 1. Act create eCheck Customer/Payment profile
            var eCheckPaymentProfiles = new Collection <CustomerPaymentProfileType>
            {
                // e-check business checking
                new CustomerPaymentProfileType
                {
                    CustomerType = CustomerTypeEnum.Business,
                    Payment      = new PaymentType
                    {
                        BankAccount = new BankAccountType
                        {
                            BankName      = "Bank of China",
                            AccountType   = BankAccountTypeEnum.BusinessChecking,
                            RoutingNumber = "125008547",
                            AccountNumber = randomAccountNumber.ToString(),
                            NameOnAccount = "Joseph Stalin(Biden)",     // .Substring(0, 22),
                            EcheckType    = EcheckTypeEnum.CCD
                        },
                    }
                },

                new CustomerPaymentProfileType
                {
                    CustomerType = CustomerTypeEnum.Business,
                    Payment      = new PaymentType
                    {
                        CreditCard = new CreditCardType
                        {
                            CardNumber     = "2223000010309703",
                            ExpirationDate = "2024-12",
                            CardCode       = "900"
                        }
                    },

                    // visa requires to have the address
                    BillTo = new CustomerAddressType
                    {
                        Address = "1600 Pennsylvania Avenue NW",
                        City    = "Washington",
                        State   = "DC",
                        Zip     = "20500"
                    },
                }
            };

            // 1a. create request
            var createProfileRequest = new CreateCustomerProfileRequest
            {
                Profile = new CustomerProfileType
                {
                    Description = "eCheck Business Checking Customer",
                    Email       = "*****@*****.**",

                    // id within e-commerce site for the customer
                    MerchantCustomerId = "echeck-id-2",
                    ProfileType        = CustomerProfileTypeEnum.Regular,
                    PaymentProfiles    = eCheckPaymentProfiles,
                },

                ValidationMode = options.Value.ValidationMode
            };

            var createResponse = await client.CreateAsync(createProfileRequest);

            var code = createResponse.Messages.Message[0].Code;
            var text = createResponse.Messages.Message[0].Text;

            Assert.Equal("I00001", code);
            Assert.Equal("Successful.", text);
            var createResult = new PaymentGatewayResponse(createResponse.ValidationDirectResponseList[0]);

            Assert.Equal(MessageTypeEnum.Ok, createResponse.Messages.ResultCode);
            Assert.Equal(ResponseCodeEnum.Approved, createResult.ResponseCode);
            Assert.Equal("This transaction has been approved.", createResult.ResponseReasonCode);

            // delay for the time to process the record
            await Task.Delay(TimeSpan.FromSeconds(10));

            // 2. Act get an Customer/Payment profile
            var getUpdatedProfileResponse = await client.GetAsync(new GetCustomerProfileRequest
            {
                Email = "*****@*****.**",
                UnmaskExpirationDate = true,
            });

            // 3. Act Charge Customer Payment profile
            // pay with e-check
            var paymentProfileId = getUpdatedProfileResponse
                                   .Profile
                                   .PaymentProfiles
                                   .FirstOrDefault(x => x.Payment.BankAccount.EcheckType == EcheckTypeEnum.CCD)?
                                   .CustomerPaymentProfileId;

            var chargeRequest = new CreateTransactionRequest
            {
                TransactionRequest = new TransactionRequestType
                {
                    Amount          = 15.05m,
                    TransactionType = Enum.GetName(typeof(TransactionTypeEnum), TransactionTypeEnum.AuthCaptureTransaction),
                    Profile         = new CustomerProfilePaymentType
                    {
                        CustomerProfileId = getUpdatedProfileResponse.Profile.CustomerProfileId,
                        PaymentProfile    = new PaymentProfile
                        {
                            // pay with e-check
                            PaymentProfileId = paymentProfileId
                        }
                    },

                    Customer = new CustomerDataType
                    {
                        Id = "profile-test-56789"
                    },
                    Order = new OrderType
                    {
                        InvoiceNumber = "eck-invoice-1"
                    },

                    CustomerIP = options.Value.IpAddress,
                }
            };

            var chargeResponse = await transactionClient.CreateAsync(chargeRequest);

            Assert.Equal(MessageTypeEnum.Ok, chargeResponse.Messages.ResultCode);
            Assert.Equal(ResponseCodeEnum.Approved, ResponseMapper.GetResponseCode(chargeResponse.TransactionResponse.ResponseCode));
            Assert.Equal("This transaction has been approved.", chargeResponse.TransactionResponse.Messages[0].Description);
            _output.WriteLine(chargeResponse.TransactionResponse.TransId);

            // 4. Act get an Update Customer Payment profile
            var deleteRequest = new DeleteCustomerProfileRequest
            {
                CustomerProfileId = createResponse.CustomerProfileId
            };

            var deleteResponse = await client.DeleteAsync(deleteRequest);

            Assert.Equal(MessageTypeEnum.Ok, deleteResponse.Messages.ResultCode);
        }