private void UpdateGatewaySettings(PayFacBuilder builder) { var certTransactions = new List <TransactionType>() { TransactionType.EditAccount, TransactionType.ObtainSSOKey, TransactionType.UpdateBankAccountOwnership, TransactionType.AddFunds, TransactionType.AddCardFlashFunds }; if (certTransactions.Contains(builder.TransactionType)) { this.Headers["X509Certificate"] = SetX509Certificate(); } }
private PayFacResponseData PopulateProPayResponse(PayFacBuilder builder, Element root) { if (builder.TransactionType == TransactionType.GetAccountDetails && builder.TransactionModifier == TransactionModifier.Additional) { return(PopulateResponseWithEnhancedAccountDetails(root)); } else { return(new PayFacResponseData() { AccountNumber = GetAccountNumberFromResponse(root), RecAccountNum = root.GetValue <string>("recAccntNum"), Password = root.GetValue <string>("password"), Amount = root.GetValue <string>("amount"), TransNum = root.GetValue <string>("transNum"), Pending = root.GetValue <string>("pending"), SecondaryAmount = root.GetValue <string>("secondaryAmount"), SecondaryTransNum = root.GetValue <string>("secondaryTransNum"), SourceEmail = root.GetValue <string>("sourceEmail"), AuthToken = root.GetValue <string>("AuthToken"), BeneficialOwnerDataResults = GetBeneficialOwnerDataResultsFromResponse(root), AccountStatus = root.GetValue <string>("accntStatus"), PhysicalAddress = GetPhysicalAddressFromResponse(root), Affiliation = root.GetValue <string>("affiliation"), APIReady = root.GetValue <string>("apiReady"), CurrencyCode = root.GetValue <string>("currencyCode"), Expiration = root.GetValue <string>("expiration"), SignupDate = root.GetValue <string>("signupDate"), Tier = root.GetValue <string>("tier"), VisaCheckoutMerchantID = root.GetValue <string>("visaCheckoutMerchantId"), CreditCardTransactionLimit = root.GetValue <string>("CreditCardTransactionLimit"), CreditCardMonthLimit = root.GetValue <string>("CreditCardMonthLimit"), ACHPaymentPerTranLimit = root.GetValue <string>("ACHPaymentPerTranLimit"), ACHPaymentMonthLimit = root.GetValue <string>("ACHPaymentMonthLimit"), CreditCardMonthlyVolume = root.GetValue <string>("CreditCardMonthlyVolume"), ACHPaymentMonthlyVolume = root.GetValue <string>("ACHPaymentMonthlyVolume"), ReserveBalance = root.GetValue <string>("ReserveBalance"), MasterPassCheckoutMerchantID = root.GetValue <string>("MasterPassCheckoutMerchantId"), PendingAmount = root.GetValue <string>("pendingAmount"), ReserveAmount = root.GetValue <string>("reserveAmount>"), ACHOut = GetACHOutBalanceInfoFromResponse(root), FlashFunds = GetFlashFundsBalanceInfoFromResponse(root) }); } }
public Transaction MapResponse(PayFacBuilder builder, string rawResponse) { var root = new ElementTree(rawResponse).Get("XMLResponse"); var responseCode = root.GetValue <string>("status"); if (responseCode != "00") { throw new GatewayException($"Unexpected Gateway Response: {responseCode}", responseCode); } var proPayResponse = PopulateProPayResponse(builder, root); var response = new Transaction() { PayFacData = proPayResponse, ResponseCode = responseCode }; return(response); }
private void HydrateBankDetails(ElementTree xml, Element xmlTrans, PayFacBuilder builder) { if (builder.CreditCardInformation != null) { xml.SubElement(xmlTrans, "NameOnCard", builder.CreditCardInformation.CardHolderName); xml.SubElement(xmlTrans, "ccNum", builder.CreditCardInformation.Number); xml.SubElement(xmlTrans, "expDate", builder.CreditCardInformation.ShortExpiry); } if (builder.ACHInformation != null) { xml.SubElement(xmlTrans, "PaymentBankAccountNumber", builder.ACHInformation.AccountNumber); xml.SubElement(xmlTrans, "PaymentBankRoutingNumber", builder.ACHInformation.RoutingNumber); xml.SubElement(xmlTrans, "PaymentBankAccountType", builder.ACHInformation.AccountType); } if (builder.BankAccountData != null) { xml.SubElement(xmlTrans, "AccountCountryCode", builder.BankAccountData.AccountCountryCode); xml.SubElement(xmlTrans, "accountName", builder.BankAccountData.AccountName); xml.SubElement(xmlTrans, "AccountNumber", builder.BankAccountData.AccountNumber); xml.SubElement(xmlTrans, "AccountOwnershipType", builder.BankAccountData.AccountOwnershipType); xml.SubElement(xmlTrans, "AccountType", builder.BankAccountData.AccountType); xml.SubElement(xmlTrans, "BankName", builder.BankAccountData.BankName); xml.SubElement(xmlTrans, "RoutingNumber", builder.BankAccountData.RoutingNumber); } if (builder.SecondaryBankInformation != null) { xml.SubElement(xmlTrans, "SecondaryAccountCountryCode", builder.SecondaryBankInformation.AccountCountryCode); xml.SubElement(xmlTrans, "SecondaryAccountName", builder.SecondaryBankInformation.AccountName); xml.SubElement(xmlTrans, "SecondaryAccountNumber", builder.SecondaryBankInformation.AccountNumber); xml.SubElement(xmlTrans, "SecondaryAccountOwnershipType", builder.SecondaryBankInformation.AccountOwnershipType); xml.SubElement(xmlTrans, "SecondaryAccountType", builder.SecondaryBankInformation.AccountType); xml.SubElement(xmlTrans, "SecondaryBankName", builder.SecondaryBankInformation.BankName); xml.SubElement(xmlTrans, "SecondaryRoutingNumber", builder.SecondaryBankInformation.RoutingNumber); } }
public Transaction ProcessPayFac(PayFacBuilder builder) { UpdateGatewaySettings(builder); var et = new ElementTree(); var request = et.Element("XMLRequest"); // Credentials et.SubElement(request, "certStr", CertStr); et.SubElement(request, "termid", TermID); et.SubElement(request, "class", "partner"); //Transaction var xmlTrans = et.SubElement(request, "XMLTrans"); et.SubElement(xmlTrans, "transType", MapRequestType(builder)); // Account Details HydrateAccountDetails(et, xmlTrans, builder); var response = DoTransaction(et.ToString(request)); return(MapResponse(builder, response)); }
public string MapRequestType(PayFacBuilder builder) { switch (builder.TransactionType) { case TransactionType.CreateAccount: return("01"); case TransactionType.EditAccount: return("42"); case TransactionType.ResetPassword: return("32"); case TransactionType.RenewAccount: return("39"); case TransactionType.UpdateBeneficialOwnership: return("44"); case TransactionType.DisownAccount: return("41"); case TransactionType.UploadDocumentChargeback: return("46"); case TransactionType.UploadDocument: return("47"); case TransactionType.ObtainSSOKey: return("300"); case TransactionType.UpdateBankAccountOwnership: return("210"); case TransactionType.AddFunds: return("37"); case TransactionType.SweepFunds: return("38"); case TransactionType.AddCardFlashFunds: return("209"); case TransactionType.PushMoneyFlashFunds: return("45"); case TransactionType.DisburseFunds: return("02"); case TransactionType.SpendBack: return("11"); case TransactionType.ReverseSplitPay: return("43"); case TransactionType.SplitFunds: return("16"); case TransactionType.GetAccountDetails: // We are using the Additional TransactionModifier to differentiate between GetAccountDetails and GetAccountDetailsEnhanced if (builder.TransactionModifier == TransactionModifier.Additional) { return("19"); } // If the TransactionModifier isn't "Additional" then it is either "None" or an unsupported value that should be treated as "None" return("13"); case TransactionType.GetAccountBalance: return("14"); default: throw new UnsupportedTransactionException(); } }
private void HydrateBankAccountOwnershipData(ElementTree xml, Element xmlTrans, PayFacBuilder builder) { if (builder.PrimaryBankAccountOwner != null || builder.SecondaryBankAccountOwner != null) { var ownersDataTag = xml.SubElement(xmlTrans, "BankAccountOwnerData"); if (builder.PrimaryBankAccountOwner != null) { var primaryOwnerTag = xml.SubElement(ownersDataTag, "PrimaryBankAccountOwner"); xml.SubElement(primaryOwnerTag, "FirstName", builder.PrimaryBankAccountOwner.FirstName); xml.SubElement(primaryOwnerTag, "LastName", builder.PrimaryBankAccountOwner.LastName); xml.SubElement(primaryOwnerTag, "Address1", builder.PrimaryBankAccountOwner.OwnerAddress.StreetAddress1); xml.SubElement(primaryOwnerTag, "Address2", builder.PrimaryBankAccountOwner.OwnerAddress.StreetAddress2); xml.SubElement(primaryOwnerTag, "Address3", builder.PrimaryBankAccountOwner.OwnerAddress.StreetAddress3); xml.SubElement(primaryOwnerTag, "City", builder.PrimaryBankAccountOwner.OwnerAddress.City); xml.SubElement(primaryOwnerTag, "StateProvince", builder.PrimaryBankAccountOwner.OwnerAddress.State); xml.SubElement(primaryOwnerTag, "PostalCode", builder.PrimaryBankAccountOwner.OwnerAddress.PostalCode); xml.SubElement(primaryOwnerTag, "Country", builder.PrimaryBankAccountOwner.OwnerAddress.Country); xml.SubElement(primaryOwnerTag, "Phone", builder.PrimaryBankAccountOwner.PhoneNumber); } if (builder.SecondaryBankAccountOwner != null) { var secondaryOwnerTag = xml.SubElement(ownersDataTag, "SecondaryBankAccountOwner"); xml.SubElement(secondaryOwnerTag, "FirstName", builder.SecondaryBankAccountOwner.FirstName); xml.SubElement(secondaryOwnerTag, "LastName", builder.SecondaryBankAccountOwner.LastName); xml.SubElement(secondaryOwnerTag, "Address1", builder.SecondaryBankAccountOwner.OwnerAddress.StreetAddress1); xml.SubElement(secondaryOwnerTag, "Address2", builder.SecondaryBankAccountOwner.OwnerAddress.StreetAddress2); xml.SubElement(secondaryOwnerTag, "Address3", builder.SecondaryBankAccountOwner.OwnerAddress.StreetAddress3); xml.SubElement(secondaryOwnerTag, "City", builder.SecondaryBankAccountOwner.OwnerAddress.City); xml.SubElement(secondaryOwnerTag, "StateProvince", builder.SecondaryBankAccountOwner.OwnerAddress.State); xml.SubElement(secondaryOwnerTag, "PostalCode", builder.SecondaryBankAccountOwner.OwnerAddress.PostalCode); xml.SubElement(secondaryOwnerTag, "Country", builder.SecondaryBankAccountOwner.OwnerAddress.Country); xml.SubElement(secondaryOwnerTag, "Phone", builder.SecondaryBankAccountOwner.PhoneNumber); } } }
private void HydrateAccountDetails(ElementTree xml, Element xmlTrans, PayFacBuilder builder) { xml.SubElement(xmlTrans, "accountNum", builder.AccountNumber); xml.SubElement(xmlTrans, "sourceEmail", builder.SourceEmail); xml.SubElement(xmlTrans, "externalId", builder.ExternalID); xml.SubElement(xmlTrans, "recAccntNum", builder.ReceivingAccountNumber); xml.SubElement(xmlTrans, "amount", builder.Amount); if (builder.AllowPending != null) { xml.SubElement(xmlTrans, "allowPending", builder.AllowPending == true ? "Y" : "N"); } xml.SubElement(xmlTrans, "password", builder.Password); if (builder.AccountPermissions != null) { HydrateAccountPermissions(xml, xmlTrans, builder.AccountPermissions); } if (builder.UserPersonalData != null) { HydrateUserPersonalData(xml, xmlTrans, builder.UserPersonalData); } if (builder.BusinessData != null) { HydrateBusinessData(xml, xmlTrans, builder.BusinessData); } HydrateBankDetails(xml, xmlTrans, builder); if (builder.MailingAddressInformation != null) { HydrateMailAddress(xml, xmlTrans, builder.MailingAddressInformation); } if (builder.ThreatRiskData != null) { HydrateThreatRiskData(xml, xmlTrans, builder.ThreatRiskData); } if (builder.SignificantOwnerData != null) { HydrateSignificantOwnerData(xml, xmlTrans, builder.SignificantOwnerData); } if (!string.IsNullOrEmpty(builder.TimeZone)) { var timezoneElement = xml.SubElement(xmlTrans, "TimeZone", builder.TimeZone); } if (builder.DeviceData != null) { HydrateDeviceData(xml, xmlTrans, builder.DeviceData); } if (builder.BeneficialOwnerData != null) { HydrateBeneficialOwnerData(xml, xmlTrans, builder.BeneficialOwnerData); } if (builder.GrossBillingInformation != null) { HydrateGrossBillingData(xml, xmlTrans, builder.GrossBillingInformation); } if (builder.RenewalAccountData != null) { HydrateAccountRenewDetails(xml, xmlTrans, builder.RenewalAccountData); } if (builder.FlashFundsPaymentCardData != null) { HydrateFlashFundsPaymentCardData(xml, xmlTrans, builder.FlashFundsPaymentCardData); } if (builder.DocumentUploadData != null) { HydrateDocumentUploadData(xml, xmlTrans, builder.TransactionType, builder.DocumentUploadData); } if (builder.SSORequestData != null) { HydrateSSORequestData(xml, xmlTrans, builder.SSORequestData); } HydrateBankAccountOwnershipData(xml, xmlTrans, builder); xml.SubElement(xmlTrans, "ccAmount", builder.CCAmount); if (builder.RequireCCRefund != null) { xml.SubElement(xmlTrans, "requireCCRefund", builder.RequireCCRefund == true ? "Y" : "N"); } xml.SubElement(xmlTrans, "transNum", builder.TransNum); }
public string MapRequestType(PayFacBuilder builder) { switch (builder.TransactionType) { case TransactionType.CreateAccount: return("01"); case TransactionType.EditAccount: return("42"); case TransactionType.ResetPassword: return("32"); case TransactionType.RenewAccount: return("39"); case TransactionType.UpdateBeneficialOwnership: return("44"); case TransactionType.DisownAccount: return("41"); case TransactionType.UploadDocumentChargeback: return("46"); case TransactionType.UploadDocument: return("47"); case TransactionType.ObtainSSOKey: return("300"); case TransactionType.UpdateBankAccountOwnership: return("210"); case TransactionType.AddFunds: return("37"); case TransactionType.SweepFunds: return("38"); case TransactionType.AddCardFlashFunds: return("209"); case TransactionType.PushMoneyFlashFunds: return("45"); case TransactionType.DisburseFunds: return("02"); case TransactionType.SpendBack: return("11"); case TransactionType.ReverseSplitPay: return("43"); case TransactionType.SplitFunds: return("16"); case TransactionType.GetAccountDetails: return("13"); case TransactionType.GetAccountBalance: return("14"); default: throw new UnsupportedTransactionException(); } }