using System; using System.Configuration; using System.IO; using System.Text; using System.Web; using System.Xml; namespace SampleEndPoint { /// /// Summary description for DirectPharmacy1 /// public class SampleEndpointBuiltFromSampleCode : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string response = WenoMessage(); context.Response.Write(response); } public string WenoMessage() { string response = ""; try { // To receive authorization info which is userid:password format string authStr = HttpContext.Current.Request.Headers["Authorization"].Replace("Basic ", ""); authStr = Encoding.UTF8.GetString(Convert.FromBase64String(authStr)); string messageID = "0"; MemoryStream ms = new MemoryStream(); // get message HttpContext.Current.Request.InputStream.CopyTo(ms); string XMLMessage = System.Text.Encoding.UTF8.GetString(ms.ToArray()); XmlDocument xReq = new XmlDocument(); xReq.LoadXml(XMLMessage); // fetch message id string sMessagePath = @"/*[local-name() = 'Message']/*[local-name() = 'Header']/*[local-name() = 'MessageID']"; XmlNode messNode = xReq.SelectSingleNode(sMessagePath); if (messNode != null) { messageID = messNode.InnerText; } string sFromPath = @"/*[local-name() = 'Message']/*[local-name() = 'Header']/*[local-name() = 'From']"; string sToPath = @"/*[local-name() = 'Message']/*[local-name() = 'Header']/*[local-name() = 'To']"; string sFrom = ""; string sTo = ""; string sToQual; string sFromQual; XmlNode fromNode = xReq.SelectSingleNode(sFromPath); XmlNode toNode = xReq.SelectSingleNode(sToPath); if (fromNode != null && toNode != null) { sFrom = fromNode.InnerText; sTo = toNode.InnerText; if (fromNode.InnerText.ToUpper().Contains("D")) { sFromQual = "D"; sToQual = "P"; } else { sFromQual = "P"; sToQual = "D"; } } string messType = "Unknown_Type"; string sMessageTypePath = @"/*[local-name() = 'Message']/*[local-name() = 'Body']"; if (xReq.SelectSingleNode(sMessageTypePath) != null) messType = xReq.SelectSingleNode(sMessageTypePath).ChildNodes[0].Name; // store/process message as per your requirement WriteFile(XMLMessage, messType + "_ " + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".XML"); string[] arrAuth = authStr.Split(new char[] { ':' }); if (arrAuth.Length == 2) { string reqUserID = arrAuth[0]; string reqPassword = arrAuth[1]; string ClientUserID = ConfigurationManager.AppSettings["UserID"]; string ClientPassword = ConfigurationManager.AppSettings["Password"]; // send success/failure message in XML format as specified // To note here that in response to becomes from and from becomes to // If you know you are a pharmacy or ehr you can set hardcoded values here //response = GetStatusXMLFromWeno2017071("001", "Transaction Successfull", "", "M", "WENO"); //you can authenticate request as well if (reqUserID == ClientUserID && reqPassword == ClientPassword) { response = GetStatusXMLFromWeno2017071("001", "Transaction Successfull", "", "M", "WENO"); } else { response = GetErrorXMLFromWeno2017071("900", "Authentication Failed", "", "M", "WENO", Guid.NewGuid().ToString().Replace("-", "")); } } else { response = GetErrorXMLFromWeno2017071("900", "Invalid request", "", "M", "WENO", Guid.NewGuid().ToString().Replace("-", "")); } } catch (System.Exception ex) { response = GetErrorXMLFromWeno2017071("900", "Unhandled Error", "", "M", "WENO", Guid.NewGuid().ToString().Replace("-", "")); } //string sFinalResponse = Convert.ToBase64String(Encoding.UTF8.GetBytes(response)); return response; } public static void WriteFile(string strContent, string fileName) { FileStream fs = null; FileInfo fi = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "\\Messages\\" + fileName); if (!fi.Directory.Exists) { fi.Directory.Create(); } fs = new FileStream(fi.FullName, FileMode.Create); StreamWriter sw = new StreamWriter(fs); sw.WriteLine(strContent); sw.Close(); fs.Close(); } public static string GetStatusXML1(string errorCode, string description, string messageID, bool IsError, string fromQual = "", string toQual = "", string from = "", string to = "") { XmlDocument XMLTemplate = new XmlDocument(); if (!IsError) { XMLTemplate.Load(AppDomain.CurrentDomain.BaseDirectory + "\\XMLTemplate\\Status.XML"); } else { XMLTemplate.Load(AppDomain.CurrentDomain.BaseDirectory + "\\XMLTemplate\\Error.XML"); } XmlNode headerXMLTemplate = XMLTemplate.GetElementsByTagName("Header")[0]; headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.FromQualifier}", fromQual); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.From}", from); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.ToQualifier}", toQual); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.To}", to); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.MessageID}", "0"); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.SentTime}", DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffK")); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.RelatesToMessageID}", messageID); XmlNode bodyXMLTemplate = XMLTemplate.GetElementsByTagName("Body")[0]; bodyXMLTemplate.InnerXml = bodyXMLTemplate.InnerXml.Replace("{Status.Code}", errorCode); bodyXMLTemplate.InnerXml = bodyXMLTemplate.InnerXml.Replace("{Status.Description}", description); return XMLTemplate.InnerXml; } public static string GetStatusXMLFromWeno2017071(string errorCode, string description, string descriptionCode, string toQualifier, string to) { XmlDocument XMLTemplate = new XmlDocument(); XMLTemplate.Load(AppDomain.CurrentDomain.BaseDirectory + "\\XMLTemplate\\Status2017071.XML"); XmlNode headerXMLTemplate = XMLTemplate.GetElementsByTagName("Header")[0]; headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.FromQualifier}", "M"); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.From}", "WENO"); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.ToQualifier}", toQualifier); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.To}", to); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.MessageID}", "0"); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.SentTime}", DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffK")); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Status.RelatesToMessageID}", "0"); XmlNode bodyXMLTemplate = XMLTemplate.GetElementsByTagName("Body")[0]; bodyXMLTemplate.InnerXml = bodyXMLTemplate.InnerXml.Replace("{Status.Code}", errorCode); bodyXMLTemplate.InnerXml = bodyXMLTemplate.InnerXml.Replace("{Status.DescriptionCode}", descriptionCode); bodyXMLTemplate.InnerXml = bodyXMLTemplate.InnerXml.Replace("{Status.Description}", description); return XMLTemplate.InnerXml; } public static string GetErrorXMLFromWeno2017071(string errorCode, string description, string descriptionCode, string toQualifier, string to, string MessageID = "0", string RelatesToMessageID = "0") { XmlDocument XMLTemplate = new XmlDocument(); XMLTemplate.Load(AppDomain.CurrentDomain.BaseDirectory + "\\XMLTemplate\\Error2017071.XML"); XmlNode headerXMLTemplate = XMLTemplate.GetElementsByTagName("Header")[0]; headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Error.FromQualifier}", "M"); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Error.From}", "WENO"); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Error.ToQualifier}", toQualifier); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Error.To}", to); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Error.MessageID}", MessageID); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Error.SentTime}", DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffK")); headerXMLTemplate.InnerXml = headerXMLTemplate.InnerXml.Replace("{Error.RelatesToMessageID}", RelatesToMessageID); XmlNode bodyXMLTemplate = XMLTemplate.GetElementsByTagName("Body")[0]; bodyXMLTemplate.InnerXml = bodyXMLTemplate.InnerXml.Replace("{Error.Code}", errorCode); bodyXMLTemplate.InnerXml = bodyXMLTemplate.InnerXml.Replace("{Error.DescriptionCode}", descriptionCode); bodyXMLTemplate.InnerXml = bodyXMLTemplate.InnerXml.Replace("{Error.Description}", description); return XMLTemplate.InnerXml; } public bool IsReusable { get { return false; } } } }