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); }