internal BillingResponse Execute(BillingBuilder builder) { switch (builder.TransactionType) { case TransactionType.Activate: return(CommitPreloadBills()); case TransactionType.Create: if (builder.BillingLoadType == BillingLoadType.Bills) { return(PreloadBills(builder)); } else if (builder.BillingLoadType == BillingLoadType.SecurePayment) { return(LoadSecurePay(builder)); } else { throw new UnsupportedTransactionException(); } case TransactionType.Fetch: return(GetConvenienceFee(builder)); case TransactionType.Delete: return(ClearLoadedBills()); default: throw new UnsupportedTransactionException(); } }
public BillingResponse ProcessBillingRequest(BillingBuilder builder) { return(new BillingRequest(Credentials, ServiceUrl, Timeout) .WithRequestLogger(RequestLogger) .WithWebProxy(WebProxy) .Execute(builder)); }
/// <summary> /// Loads one or more bills for a specific customer and returns an identifier that can be used by the customer to retrieve their bills /// </summary> /// <param name="hostedPaymentData">The payment data to be hosted</param> /// <param name="configName">The name of the registered configuration to retrieve. This defaults to 'default'</param> /// <returns></returns> public LoadSecurePayResponse LoadHostedPayment(HostedPaymentData hostedPaymentData, string configName = "default") { var response = new BillingBuilder(TransactionType.Create) .WithBillingLoadType(BillingLoadType.SecurePayment) .WithHostedPaymentData(hostedPaymentData) .Execute(configName); return((LoadSecurePayResponse)response); }
/// <summary> /// Returns the fee for the given payment method and amount /// </summary> /// <param name="paymentMethod">The payment method that will be used to make the charge against</param> /// <param name="amount">The total amount to be charged</param> /// <param name="configName">The name of the registered configuration to retrieve. This defaults to 'default'</param> /// <returns></returns> public decimal CalculateConvenienceAmount(IPaymentMethod paymentMethod, decimal amount, string configName = "default") { var response = new BillingBuilder(TransactionType.Fetch) .WithPaymentMethod(paymentMethod) .WithAmount(amount) .Execute(configName); return(((ConvenienceFeeResponse)response).ConvenienceFee); }
public string Build(Element envelope, BillingBuilder builder, Credentials credentials) { var body = et.SubElement(envelope, "soapenv:Body"); var methodElement = et.SubElement(body, "bil:LoadSecurePayDataExtended"); var requestElement = et.SubElement(methodElement, "bil:request"); var customerIsEditable = SerializeBooleanValues(builder.HostedPaymentData.CustomerIsEditable); ValidateLoadSecurePay(builder.HostedPaymentData); BuildCredentials(requestElement, credentials); var billsElement = et.SubElement(requestElement, "bdms:BillData"); foreach (var bill in builder.HostedPaymentData.Bills) { var billElement = et.SubElement(billsElement, "bdms:SecurePayBill"); et.SubElement(billElement, "bdms:Amount", bill.Amount); et.SubElement(billElement, "bdms:BillTypeName", bill.BillType); et.SubElement(billElement, "bdms:Identifier1", bill.Identifier1); et.SubElement(billElement, "bdms:Identifier2", bill.Identifier2); et.SubElement(billElement, "bdms:Identifier3", bill.Identifier3); et.SubElement(billElement, "bdms:Identifier4", bill.Identifier4); } et.SubElement(requestElement, "bdms:CancelURL", builder.HostedPaymentData.CancelUrl); et.SubElement(requestElement, "bdms:MerchantCustomerID", builder.HostedPaymentData.CustomerKey ?? builder.HostedPaymentData.CustomerNumber ?? null); et.SubElement(requestElement, "bdms:OrderID", builder.OrderID); et.SubElement(requestElement, "bdms:PayorAddress", builder.HostedPaymentData.CustomerAddress.StreetAddress1); et.SubElement(requestElement, "bdms:PayorAddressIsEditable", customerIsEditable); et.SubElement(requestElement, "bdms:PayorBusinessNameIsEditable", customerIsEditable); et.SubElement(requestElement, "bdms:PayorCity", builder.HostedPaymentData.CustomerAddress.City); et.SubElement(requestElement, "bdms:PayorCityIsEditable", customerIsEditable); et.SubElement(requestElement, "bdms:PayorCountry", builder.HostedPaymentData.CustomerAddress.CountryCode); et.SubElement(requestElement, "bdms:PayorCountryIsEditable", customerIsEditable); et.SubElement(requestElement, "bdms:PayorEmailAddress", builder.HostedPaymentData.CustomerEmail); et.SubElement(requestElement, "bdms:PayorEmailAddressIsEditable", customerIsEditable); et.SubElement(requestElement, "bdms:PayorFirstName", builder.HostedPaymentData.CustomerFirstName); et.SubElement(requestElement, "bdms:PayorFirstNameIsEditable", customerIsEditable); et.SubElement(requestElement, "bdms:PayorLastName", builder.HostedPaymentData.CustomerLastName); et.SubElement(requestElement, "bdms:PayorLastNameIsEditable", customerIsEditable); et.SubElement(requestElement, "bdms:PayorMiddleNameIsEditable", customerIsEditable); et.SubElement(requestElement, "bdms:PayorPhoneNumber", builder.HostedPaymentData.CustomerPhoneMobile); et.SubElement(requestElement, "bdms:PayorPhoneNumberIsEditable", customerIsEditable); et.SubElement(requestElement, "bdms:PayorPostalCode", builder.HostedPaymentData.CustomerAddress.PostalCode); et.SubElement(requestElement, "bdms:PayorPostalCodeIsEditable", customerIsEditable); et.SubElement(requestElement, "bdms:PayorState", builder.HostedPaymentData.CustomerAddress.State); et.SubElement(requestElement, "bdms:PayorStateIsEditable", customerIsEditable); et.SubElement(requestElement, "bdms:ReturnURL", builder.HostedPaymentData.MerchantResponseUrl); et.SubElement(requestElement, "bdms:SecurePayPaymentType_ID", (int)builder.HostedPaymentData.HostedPaymentType); return(et.ToString(envelope)); }
public string Build(Element envelope, BillingBuilder builder, Credentials credentials) { var body = et.SubElement(envelope, "soapenv:Body"); var methodElement = et.SubElement(body, "bil:PreloadBills"); var requestElement = et.SubElement(methodElement, "bil:PreloadBillsRequest"); ValidateBills(builder.Bills); BuildCredentials(requestElement, credentials); var bills = et.SubElement(requestElement, "bdms:Bills"); foreach (var bill in builder.Bills) { var billElement = et.SubElement(bills, "bdms:Bill"); var billIdentifierExtended = et.SubElement(billElement, "bdms:BillIdentifierExtended"); et.SubElement(billIdentifierExtended, "bdms:BillType", bill.BillType); et.SubElement(billIdentifierExtended, "bdms:ID1", bill.Identifier1); et.SubElement(billIdentifierExtended, "bdms:ID2", bill.Identifier2); et.SubElement(billIdentifierExtended, "bdms:ID3", bill.Identifier3); et.SubElement(billIdentifierExtended, "bdms:ID4", bill.Identifier4); et.SubElement(billIdentifierExtended, "bdms:DueDate", bill.DueDate.ToString("o")); et.SubElement(billElement, "bdms:BillPresentment", GetBillPresentmentType(bill.BillPresentment)); if (bill.Customer != null && bill.Customer.Address != null) { var customerAddress = et.SubElement(billElement, "bdms:CustomerAddress"); et.SubElement(customerAddress, "bdms:AddressLineOne", bill.Customer.Address.StreetAddress1); et.SubElement(customerAddress, "bdms:City", bill.Customer.Address.City); et.SubElement(customerAddress, "bdms:Country", bill.Customer.Address.Country); et.SubElement(customerAddress, "bdms:PostalCode", bill.Customer.Address.PostalCode); et.SubElement(customerAddress, "bdms:State", bill.Customer.Address.State); } et.SubElement(billElement, "bdms:MerchantCustomerId", bill.Customer?.Id); et.SubElement(billElement, "bdms:ObligorEmailAddress", bill.Customer?.Email); et.SubElement(billElement, "bdms:ObligorFirstName", bill.Customer?.FirstName); et.SubElement(billElement, "bdms:ObligorLastName", bill.Customer?.LastName); et.SubElement(billElement, "bdms:ObligorPhoneNumber", bill.Customer?.HomePhone); et.SubElement(billElement, "bdms:RequiredAmount", bill.Amount); } return(et.ToString(envelope)); }
private BillingResponse PreloadBills(BillingBuilder builder) { var et = new ElementTree(); var envelope = CreateSOAPEnvelope(et, "PreloadBills"); var request = new PreloadBillsRequest(et) .Build(envelope, builder, Credentials); var response = DoTransaction(request, publicEndpoint); var result = new PreloadBillsResponse() .WithResponseTagName("PreloadBillsResponse") .WithResponse(response) .Map(); if (result.IsSuccessful) { return(result); } throw new GatewayException(message: "An error occurred attempting to load the hosted bills", responseCode: result.ResponseCode, responseMessage: result.ResponseMessage); }
private ConvenienceFeeResponse GetConvenienceFee(BillingBuilder builder) { var et = new ElementTree(); var envelope = CreateSOAPEnvelope(et, "GetConvenienceFee"); var request = new GetConvenienceFeeRequest(et) .Build(envelope, builder, Credentials); var response = DoTransaction(request, publicEndpoint); var result = new ConvenienceFeeRequestResponse() .WithResponseTagName("GetConvenienceFeeResponse") .WithResponse(response) .Map(); if (result.IsSuccessful) { return(result); } throw new GatewayException(message: "An error occurred attempting to retrieve the payment fee", responseCode: result.ResponseCode, responseMessage: result.ResponseMessage); }
public string Build(Element envelope, BillingBuilder builder, Credentials credentials) { var body = et.SubElement(envelope, "soapenv:Body"); var methodElement = et.SubElement(body, "bil:GetConvenienceFee"); var requestElement = et.SubElement(methodElement, "bil:GetConvenienceFeeRequest"); string accountNumber = null; string routingNumber = null; string paymentMethod = null; if (builder.PaymentMethod is eCheck eCheck) { routingNumber = eCheck.RoutingNumber; paymentMethod = "ACH"; } else if (builder.PaymentMethod is CreditCardData credit) { accountNumber = credit.Number; } BuildCredentials(requestElement, credentials); et.SubElement(requestElement, "bdms:BaseAmount", builder.Amount); if (accountNumber != null) { et.SubElement(requestElement, "bdms:CardNumber", accountNumber); } et.SubElement(requestElement, "bdms:CardProcessingMethod", GetCardProcessingMethod(builder.PaymentMethod.PaymentMethodType)); if (paymentMethod != null) { et.SubElement(requestElement, "bdms:PaymentMethod", paymentMethod); } et.SubElement(requestElement, "bdms:RoutingNumber", routingNumber); return(et.ToString(envelope)); }
public BillingResponse ProcessBillingRequest(BillingBuilder builder) { return(new BillingRequest(Credentials, ServiceUrl, Timeout) .Execute(builder)); }