首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails POST请求实践融合API

Rails POST请求实践融合API
EN

Stack Overflow用户
提问于 2016-08-31 16:58:30
回答 1查看 192关注 0票数 1

我正在与实践融合API合作接收悬而未决的订单。我正在尝试写一个POST请求,以确认在GET请求期间收到的下载订单。一旦Practice Fusion接收到POST请求,挂起的订单就会被删除。

我用的宝石:

休息-客户

simple_hl7 --用于hl7解析

这是我的工作要求:

代码语言:javascript
复制
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|VendorCode||ClientID|20130930225002+0000||ACK^ELINCS^ ACK_ELINCS|MessageControlID|P|2.5.1||||||||| ELINCS_MT-ACK-1_1.0 MSA\c9b2-42e9-abb1-a1b473079512 *如上面示例顺序和确认消息中的颜色协调所示,您的ACK逻辑应该使用相关订单的MSH-4客户端ID值填充确认的MSH-6客户端ID,使用订单消息的MSH-10中的控制ID填充MSA-2值。 *您确认消息的MSH-4中填充的“供应商代码”值是实践融合指定的唯一值。如果以前没有提供此值,请与您的实现资源联系。

下面是一些提供的C#示例代码来完成这一任务:

代码语言:javascript
复制
/// <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);
 }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-23 15:50:34

我想出来了。此方法将成功回发,但仍需要考虑如果订单已成功张贴。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39255164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档