Home
Pharmacy Systems - Test receiving NCPDP standard eRx messages from WENO
This demo will show you how easy it is to receive eRx messages from WENO. To certify on WENO, pharmacy systems can choose the minimum API or the full API. The minimum API requires your system to receive real time NewRxs from WENO's prescribers with a Status or Error real time response as well as manage their stores' demographics manually on your dashboard or via the Manage API. The full API supports sending eRx messages to prescribers as well as receiving eRx messages. WENO recommends starting with the minimum API in order to help your stores meet the mandates for ePrescribing.
Follow these steps to send yourself a test eRx message
Step 1 - Enter a secure endpoint here:
*
Invalid Url
Note: when asked for the endpoint URL be sure to specify the
full path of the endpoint URL
containing the script that handles the messages Weno sends to your endpoint.
For example, if your server is located at https://www.myehr.com and the endpoint script is under /endpoint.php then your endpoint URL is https://www.myehr.com/endpoint.php
Don't have a secure endpoint set up? No problem. Open the sample code shown below to create one.
Sample Endpoint Creator Code to Copy Paste
Show/Hide PHP Code
Show/Hide C# Code
<?php // // receive_from_weno.php - receive a message from weno service // version 1.0 - fed@wenoexchange.com // function listen() { $messageID = '0'; $now = date('Y-m-d H:i:s'); $body = trim(file_get_contents('php://input')); $MessageType = ($body[0] == '<') ? 'XML' : 'JSON'; LogMessage("<<< Incoming {$MessageType} at {$now}"); LogMessage($body); // echo incoming message from Switch if ($MessageType == 'XML') { $xmlBody=simplexml_load_string($body); LogMessage('PHP representation of message:'); LogMessage(print_r($xmlBody,true)); $messageID = $xmlBody->Header[0]->MessageID; $sFrom = $xmlBody->Header[0]->To; $sTo = $xmlBody->Header[0]->From; $response = GetStatusXML('000','Transaction Successful', '0', $sToQual, $sFromQual, $sTo, $sFrom); // send response to Switch print_r($response->asXML()); } else { $jsonBody = json_decode($body); //LogMessage('PHP representation of message:'); //LogMessage(print_r($jsonBody)); $sFrom = $jsonBody->Header->To; $sTo = $jsonBody->Header->From; $response = GetStatusJSON('000','Transaction OK','0', '','', $sTo, $sFrom); echo json_encode($response); } } function logMessage($line) { $filename = 'receive_log'; // log file $fp = fopen($filename, "a"); fwrite($fp, $line . PHP_EOL); fclose($fp); } function GetStatusXML($code, $msg, $messageID, $sToQual, $sFromQual, $sTo, $sFrom) { // // be sure you have realtime_status.xml on the specified path // $xml_path = './'; $response = simplexml_load_file("{$xml_path}realtime_status.xml"); $response->Body[0]->Status[0]->Code[0] = $code; $response->Body[0]->Status[0]->Description[0] = $msg; $response->Header[0]->From[0] = $sFrom; $response->Header[0]->From->attributes()->Qualifier = $sFromQual; $response->Header[0]->To[0] = $sTo; $response->Header[0]->To[0]->attributes()->Qualifier = $sToQual; $response->Header[0]->MessageID[0] = $messageID; $response->Header[0]->SentTime[0] = date('Y-m-d H:i:s'); //some time $response->Header[0]->RelatesToMessageID[0] = $messageID; return $response; } function GetStatusJSON($code, $msg, $messageID, $sToQual, $sFromQual, $sTo, $sFrom) { $json_path = './'; $response = json_decode(file_get_contents("{$json_path}realtime_status.json")); $response->Message->Body->Status->Code = $code; $response->Message->Body->Status->Description = $msg; $response->Message->Header->From->{'#text'} = $sFrom; $response->Message->Header->To->{'#text'} = $sTo; $response->Message->Header->MessageID = $messageID; $response->Message->Header->SentTime = date('Y-m-d H:i:s'); //some time $response->Message->Header->RelatesToMessageID = $messageID; return $response; } // listen for incoming messages listen(); ?>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Xml; using System.IO; using System.Text; using System.Configuration; namespace SampleEndPoint { /// <summary> /// Summary description for DirectPharmacy1 /// </summary> 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 sFromQual = ""; string sFrom = ""; string sToQual = ""; string sTo = ""; 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; } } } }
Step 2 - Enter credentials for WENO to use when calling your endpoint
Username:
*
Password:
*
Step 3 - Select the Language of Your Status/Error NCPDP Real Time Response
XML
Json
Step 4 - Select which eRx message WENO will send to you & view your endpoint's response
NewRx-NonEPCS
NewRx-EPCS
NewRxResponseDenied
CancelRx
RXChangeResponse
RXHistoryRequest
RXHistoryResponse
Error
Verify
Download Sample Messages
Step 5 - Send back to WENO Status Message
(Show/Hide Sample)
in case of Success or Error Message
(Show/Hide Sample)
in case of Failure
<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" DatatypesVersion="20170715" TransportVersion="20170715" TransactionDomain="SCRIPT" TransactionVersion="20170715" StructuresVersion="20170715" ECLVersion="20170715"> <Header> <To Qualifier="D">UseOriginalSenderOfMessageHere</To> <From Qualifier="P">UseOriginalRecipientOfMessageHere</From> <MessageID>MustBEUnique</MessageID> <RelatesToMessageID>WillEchoOriginalMsgIDWithError</RelatesToMessageID> <SentTime>2019-06-29T09:49:07.70635Z</SentTime> <Security> <UsernameToken> <Username>UsernameToAuthenticateSendingSystem</Username> <Password Type="PasswordDigest">CredentialToAuthenticateSendingSystem</Password> </UsernameToken> </Security> <SenderSoftware> <SenderSoftwareDeveloper>AnyName</SenderSoftwareDeveloper> <SenderSoftwareProduct>SendingSystemName</SenderSoftwareProduct> <SenderSoftwareVersionRelease>V1</SenderSoftwareVersionRelease> </SenderSoftware> </Header> <Body> <Status> <Code>001</Code> <Description>Transaction successful</Description> </Status> </Body> </Message>
<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" DatatypesVersion="20170715" TransportVersion="20170715" TransactionDomain="SCRIPT" TransactionVersion="20170715" StructuresVersion="20170715" ECLVersion="20170715"> <Header> <To Qualifier="D">UseOriginalSenderOfMessageHere</To> <From Qualifier="P">UseOriginalRecipientOfMessageHere</From> <MessageID>MustBEUnique</MessageID> <RelatesToMessageID>WillEchoOriginalMsgIDWithError</RelatesToMessageID> <SentTime>2019-06-29T09:49:07.70635Z</SentTime> <Security> <UsernameToken> <Username>UsernameToAuthenticateSendingSystem</Username> <Password Type="PasswordDigest">CredentialToAuthenticateSendingSystem</Password> </UsernameToken> </Security> <SenderSoftware> <SenderSoftwareDeveloper>AnyName</SenderSoftwareDeveloper> <SenderSoftwareProduct>SendingSystemName</SenderSoftwareProduct> <SenderSoftwareVersionRelease>V1</SenderSoftwareVersionRelease> </SenderSoftware> </Header> <Body> <Error> <Code>900</Code> <Description>A description of the error will go here</Description> </Error> </Body> </Message>
Endpoint’s Response:
Clear
Close
Sign Up
Contact Us
Copyright WENO Exchange LLC, all rights reserved.
Privacy Policy(Last update 09.19.2024)