【问题标题】:Rails POST request to Practice Fusion APIRails POST 请求练习 Fusion API
【发布时间】:2017-01-08 08:55:44
【问题描述】:

我正在使用Practice Fusion API 接收待处理订单。我正在尝试编写一个 POST 请求来确认在 GET 请求期间收到的下载订单。一旦 Practice Fusion 收到 POST 请求,挂单就会被删除。

我正在使用的宝石:

休息客户端

simple_hl7 --用于hl7解析

这是我的工作 GET 请求:

def download_pf_orders
  download_count = 0
  uri = "#{PF_TEST_PENDING_API_URL}"
  rest_resource = RestClient::Resource.new(uri, PF_TEST_USERNAME, PF_TEST_PASSWORD)

  begin
    response = rest_resource.get(accept: 'application/json')
    json = JSON.parse(response)

    json.each do |data|

      sequence = data['SequenceNumber']
      puts "### Last Sequence Number: #{sequence}"

      PfOrder.create(
        sequence_number: data['SequenceNumber'],
        message_guid: data['MessageGuid'],
        hl7_document: data['Hl7Document']
        )
      download_count += 1
    end
  rescue => e
    puts "### Status Code: #{e.response.code} ###"
  end
  puts "### Downloaded Orders: #{download_count} ###"
end

这是 Practice Fusion 概述的 POST 请求标准:

HL7 ACK 消息示例

给定一条检索到的带有以下 MSH 段的订单消息:

MSH|^~\&|PracticeFusion|ClientID|||20130930225002+0000||OML^O21^OML_O21|a783a 5d7-c9b2-42e9-abb1-a1b473079512|P|2.5.1|||AL|NE|||||ELINCS_MT-OML-1_1.0

预期的 HL7 ACK 消息将包含以下 MSH 和 MSA 段:

MSH|^~\&|PracticeFusion|供应商代码||ClientID|20130930225002+0000||ACK^ELINCS^ ACK_ELINCS|MessageControlID|P|2.5.1||||||||| ELINCS_MT-ACK-1_1.0

MSA|CA|a783a5d7-c9b2-42e9-abb1-a1b473079512

***如上面示例订单和确认消息中的颜色协调所示,您的 ACK 逻辑应填充 MSH-6 使用 MSH-4 客户端 ID 值的确认的客户端 ID 关联的订单,以及使用控制 ID 的 MSA-2 值 订单消息的 MSH-10。

***在确认消息的 MSH-4 中填充的“供应商代码”值是由 Practice Fusion 分配的唯一值。请联系 如果以前没有此值的实现资源 已提供。

这里有一些提供的 C# 示例代码来完成此操作:

/// <summary>
/// Post an HL7 Order Acknowledgement message back to PracticeFusion to signal
acceptance...
/// </summary>
static void AcknowledgeOrder(string hl7AckMessage)
{
  var request = (HttpWebRequest)
  WebRequest.Create(ConfigurationManager.AppSettings["OrderAcknowledgementUri"]);
  request.PreAuthenticate = true;
  request.Credentials = new
  NetworkCredential(ConfigurationManager.AppSettings["PF.ApiUserName"],
   ConfigurationManager.AppSettings["PF.ApiPassword"]);
  request.Method = WebRequestMethods.Http.Post;
  request.ContentType = "application/x-www-form-urlencoded";
  using (var writer = new StreamWriter(request.GetRequestStream()))
  {
   writer.Write(hl7AckMessage);
 }
}

【问题讨论】:

    标签: c# ruby-on-rails post rest-client hl7


    【解决方案1】:

    我想通了。此方法会成功POST回来,但如果订单已经成功发布,仍然需要计入。

    def acknowledge_pf_order
      hl7_message = PfOrder.all
      hl7_message.each do |msg|
        clean_msg = msg.hl7_document.gsub(/\r/, '')
    
        msh_segment = clean_msg.gsub(MSH)
        msh_segment.each do |seg|
          parsed_msh = SimpleHL7::Message.parse(seg)
    
          parsed_msh.msh[4] = 'yourVendorCode'
          parsed_msh.msh[6] = 'yourClientID'
          parsed_msh.msh[9][1] = 'ACK'
          parsed_msh.msh[9][2] = 'ELINCS'
          parsed_msh.msh[9][3] = 'ACK_ELINCS'
          parsed_msh.msh[21] = 'ELINCS_MT-ACK-1_1.0'
    
          message_id = parsed_msh.msh[10]
          ack_message = parsed_msh.to_hl7
    
          msa_segment = "\nMSA|CA|#{message_id.to_s}"
    
          payload = ack_message << msa_segment
    
          uri = "#{PF_TEST_ACK_API_URL}"
          rest_resource = RestClient::Resource.new(uri, PF_TEST_USERNAME, PF_TEST_PASSWORD)
    
          begin
            response = rest_resource.post payload, content_type: 'text/plain'
            puts "### POST Status Code: #{response.code} ###"
          rescue Exception => e
            puts "### POST Status Code: #{e.response.code} ###"
          end
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2015-06-10
      • 1970-01-01
      相关资源
      最近更新 更多