public enum LendingProductType
public class LendNetMessageConstants
private LendNetMessageConstants()
public const string XPATH_CONTENT = "//MessageResponse/Content";
public const string XPATH_LOANAPPLICATION = "/Application/LoanApplication";
public const string XPATH_BASEELEMENTS = "/Application/Product/ProductDetails/CREDIT_CARD/BaseElements";
public const string XPATH_APPLICATION = "//MessageResponse/Content//Application";
public const string XPATH_FAULT = "//MessageResponse/Content/Fault";
public const string ATTRIBUTE_APPLICATION_ID = "ApplicationID";
public const int APPLICATION_ID_INVALID_RESP = 0;
public const string ATTRIBUTE_APPLICATION_LASTMODDATE = "LastModDate";
public const string APPLICATION_LASTMODDATE_INVALID_RESP = "";
public const string INTEREST_RATE_NODE = "InterestRate";
public const string INTEREST_RATE_TYPE_ATTRIBUTE = "Type";
public const string INTEREST_RATE_TIERS = "InterestTiers";
public const string INTEREST_TIER = "InterestTier";
public const string INTEREST_TIER_LOWER = "LowerAmount";
public const string INTEREST_TIER_UPPER = "UpperAmount";
public const string INTEREST_TIER_RATE = "Rate";
public const string XPATH_LOAN_APPLICATION_BLOCK = XPATH_CONTENT + XPATH_LOANAPPLICATION;
public const string NODE_SYSTEM_ASSESSMENT_RESULT = "SystemAssessResult";
public const string NODE_CREDITLIMIT_REDUCTION = "CreditLimitReduction";
public const string SYSTEM_ASSESSMENT_RESULT_INVALID_RESP = "";
public const string CREDITLIMIT_REDUCTION_INVALID_RESP = "";
public const string XPATH_BASE_ELEMENTS_BLOCK = XPATH_CONTENT + XPATH_BASEELEMENTS;
public const string NODES_PRODUCTOFFER = "ProductOffers/ProductOffer";
public const string NODE_RECOMMENTEDLIMIT = "MinLoanAmount";
public const string NODE_AFFORDABLELIMIT = "MaxLoanAmount";
public const string RECOMMENTEDLIMIT_REDUCTION_INVALID_RESP = "";
public const string AFFORDABLELIMIT_INVALID_RESP = "";
public const string NODE_BSB_SAVINGS = "//Application//Bsb";
public const string NODE_ACCOUNT_NUMBER_SAVINGS = "//Application//AcctNumber";
public const string NODE_BSB_TERM_DEPOSIT = XPATH_APPLICATION + "/Product/ProductDetails/TERM_DEPOSIT/BaseElements/Bsb";
public const string NODE_ACCOUNT_NUMBER_TERM_DEPOSIT = XPATH_APPLICATION + "/Product/ProductDetails/TERM_DEPOSIT/BaseElements/AcctNumber";
public const string NODE_NON_LENDING_PRODUCT_DETAILS = "//MessageResponse/Content/Application/Product/ProductDetails";
public const string XPATH_FAULT_BLOCK = XPATH_CONTENT + "/Fault";
public const string XPATH_SUB_FAULTS = "//SubFaults/Fault/Exception";
public const string NODE_FAULT_CODE = "FaultCode";
public const string NODE_FAULT_EXCEPTION = "Exception";
public const string NODE_FAULT_TYPE = "FaultType";
public const string FAULT_TYPE_INVALID_RESP = "InvalidResponse";
public const string FAULT_EXCEPTION_INVALID_RESP = "An exception has occurred because LendNet returns an empty or invalid response. ";
public const string FAULT_CODE_INVALID_RESP = "-9999";
public const string FAULT_CODE_TOO_MANY_PRODUCT = "9908";
public static bool printed = false;
public static void Main()
XmlNode rootXmlNode = ResponseRootXmlNode();
Console.WriteLine("ApplicationID: "+ ApplicationID);
Console.WriteLine("Success: "+ Success);
Console.WriteLine("FaultCode: "+ FaultCode);
Console.WriteLine("FaultType: "+ FaultType);
Console.WriteLine("FaultException: "+ FaultException);
Console.WriteLine("SubFaults: "+ SubFaults);
Console.WriteLine("BSB: "+ GetBSB(LendingProductType.SAVINGS));
Console.WriteLine("Account Number: "+ GetAccountNumber(LendingProductType.SAVINGS));
public static XmlNode ResponseRootXmlNode() {
string response = "<MessageResponse OperationType=\"SaveApplication\" OperationSubType=\"OlsSubmit\" UserID=\"bbacssys\" Domain=\"acs\" Success=\"FALSE\" timestamp=\"20230812T160807\" AuditId=\"520587688\" TraceID=\"opprdw000602\"><Content><Fault><FaultCode>8001</FaultCode><Exception>Errors occurred while communicating with CBS</Exception><Guid>20230812T1608071411184</Guid><SubFaults><Fault><FaultCode>8000</FaultCode><Exception>MSGA6036 ACCOUNT NUMBER DOES NOT EXIST OR IS NOT A CBS ACCOUNT NUMBER</Exception><Guid/></Fault><Fault><FaultCode>8000</FaultCode><Exception>MSGA6118 REDIRECTION ACCOUNT MUST BE THE SAME AS THE LINKED ACCOUNT</Exception><Guid/></Fault></SubFaults><Application ApplicationID=\"13257800\" ACSApplicationID=\"1230812155556891580\" ApplicationType=\"LOAN\" ApplicationSubType=\"\" CreatorId=\"bbacssys\" LastModDate=\"20230812T160807\" CipComplete=\"TRUE\"><LegalEntity LegalEntityID=\"P1\"><Individual><Customer><MonthsAt>178</MonthsAt><ExistingBWCustomer>true</ExistingBWCustomer></Customer><CifKey>000ZSlLC3R5G000</CifKey><Pan>40663166</Pan><MatchInCBS>TRUE</MatchInCBS><CbsSISType>FULL CIP</CbsSISType><CippedAsUnder18>false</CippedAsUnder18><EIDToken/></Individual></LegalEntity><Product ProductID=\"L1\" Status=\"IN_PROGRESS\"><ProductDetails><TERM_DEPOSIT><BaseElements/></TERM_DEPOSIT></ProductDetails></Product><LoanApplication><SystemAssessResult/></LoanApplication></Application></Fault></Content></MessageResponse>";
XmlDocument doc = new XmlDocument();
Console.WriteLine(e.Message);
XmlNode _rootXmlNode = doc.DocumentElement;
Console.WriteLine(_rootXmlNode.OuterXml);
public static bool Success
XmlNode attribute = ResponseRootXmlNode().Attributes["Success"];
if (attribute != null && attribute.Value.Trim().Length > 0)
return XmlConvert.ToBoolean(attribute.Value.ToLower());
public static int ApplicationID
if (ResponseRootXmlNode() == null) return
LendNetMessageConstants.APPLICATION_ID_INVALID_RESP;
XmlNode applicationNode = ResponseRootXmlNode().SelectSingleNode(
LendNetMessageConstants.XPATH_APPLICATION);
if (applicationNode == null) return 0;
XmlAttribute applicationIDAttrib = applicationNode.
Attributes[LendNetMessageConstants.ATTRIBUTE_APPLICATION_ID];
if (applicationIDAttrib == null) return 0;
if (applicationIDAttrib.Value == "") return 0;
return Int32.Parse(applicationIDAttrib.InnerText);
public static string FaultCode
if (ResponseRootXmlNode() == null) return LendNetMessageConstants.FAULT_CODE_INVALID_RESP;
XmlNode faultNode = ResponseRootXmlNode().SelectSingleNode(LendNetMessageConstants.XPATH_FAULT_BLOCK);
XmlNode faultCodeNode = faultNode.SelectSingleNode(LendNetMessageConstants.NODE_FAULT_CODE);
if (faultCodeNode == null)
return faultCodeNode.InnerText;
public static string FaultException
if (ResponseRootXmlNode() == null) return LendNetMessageConstants.FAULT_EXCEPTION_INVALID_RESP;
XmlNode faultNode = ResponseRootXmlNode().SelectSingleNode(LendNetMessageConstants.XPATH_FAULT_BLOCK);
if (faultNode == null) return string.Empty;
XmlNode faultExNode = faultNode.SelectSingleNode(LendNetMessageConstants.NODE_FAULT_EXCEPTION);
if (faultExNode == null) return string.Empty;
return faultExNode.InnerText;
public static string SubFaults
if (ResponseRootXmlNode() == null) return LendNetMessageConstants.FAULT_EXCEPTION_INVALID_RESP;
string subFaults = string.Empty;
XmlNodeList subFaultNodes = ResponseRootXmlNode().SelectNodes(LendNetMessageConstants.XPATH_SUB_FAULTS);
if (subFaultNodes == null) return subFaults;
Console.WriteLine("Num FaultNodes: "+ subFaultNodes.Count);
foreach (XmlNode faultNode in subFaultNodes)
if (!string.IsNullOrWhiteSpace(faultNode.InnerText))
subFaults += faultNode.InnerText + Environment.NewLine;
public static string FaultType
if (ResponseRootXmlNode() == null) return LendNetMessageConstants.FAULT_TYPE_INVALID_RESP;
XmlNode faultNode = ResponseRootXmlNode().SelectSingleNode(LendNetMessageConstants.XPATH_FAULT_BLOCK);
if (faultNode == null) return string.Empty;
XmlNode faultTypeNode = faultNode.SelectSingleNode(LendNetMessageConstants.NODE_FAULT_TYPE);
if (faultTypeNode == null) return string.Empty;
return faultTypeNode.InnerText;
public static string GetAccountNumber(LendingProductType productType)
string accountNumber = null;
if (ResponseRootXmlNode() != null)
XmlNode accNumberNode = null;
if (productType == LendingProductType.SAVINGS)
Console.WriteLine("Getting savings account number at:"+LendNetMessageConstants.NODE_ACCOUNT_NUMBER_SAVINGS);
accNumberNode = ResponseRootXmlNode().SelectSingleNode(LendNetMessageConstants.NODE_ACCOUNT_NUMBER_SAVINGS);
Console.WriteLine("Getting TD account number at: "+LendNetMessageConstants.NODE_ACCOUNT_NUMBER_TERM_DEPOSIT);
accNumberNode = ResponseRootXmlNode().SelectSingleNode(LendNetMessageConstants.NODE_ACCOUNT_NUMBER_TERM_DEPOSIT);
if (accNumberNode != null)
accountNumber = accNumberNode.InnerText;
public static string GetBSB(LendingProductType productType)
if (ResponseRootXmlNode() != null)
if (productType == LendingProductType.SAVINGS)
Console.WriteLine("Getting savings bsb at: "+LendNetMessageConstants.NODE_BSB_SAVINGS);
bsbNode = ResponseRootXmlNode().SelectSingleNode(LendNetMessageConstants.NODE_BSB_SAVINGS);
Console.WriteLine("Getting TD bsb at: "+LendNetMessageConstants.NODE_BSB_TERM_DEPOSIT);
bsbNode = ResponseRootXmlNode().SelectSingleNode(LendNetMessageConstants.NODE_BSB_TERM_DEPOSIT);