`

ruby 调用savon接口示例

    博客分类:
  • RUBY
阅读更多
例子一

module Api
  module AobotQuotation

  	def self.query(body = {})
      begin
    	  quotation_client = Savon.client(wsdl: "#{Settings.robot_quotation_url}/QuotePriceService.svc?singleWsdl", log: false, pretty_print_xml: false)
    	  # 0:ok,有结果,-1:未找到合成路径,1:未接收到报价商品信息,2:JCHEM服务异常,3:WCF服务异常
    	  response = quotation_client.call(:get_one_step_price, message: {info: body.to_json})
    	  result = JSON.parse(response.body[:get_one_step_price_response][:get_one_step_price_result])
        return result
      rescue
        return {'Result' => {'ErrCode' => 3}}
      end
  	end

    def self.artificial_quotes(body = {})
      begin
        client = Savon.client(wsdl: "#{Settings.robot_quotation_url}/QuotePriceService.svc?singleWsdl", log: false, pretty_print_xml: false)
        # 0:ok,有结果,-1:未找到合成路径,1:未接收到报价商品信息,2:JCHEM服务异常,3:WCF服务异常
        response = client.call(:artificial_quotes, message: body)
        return response.body[:artificial_quotes_response][:artificial_quotes_result]
      rescue
        return '接口异常。'
      end
    end

  end
end

--------
module Api
  module Aide

  	def self.query(cas_number: "", product_num: "", ak_num: "")
  	  client = Savon.client(wsdl: "#{Settings.bide_quotation_url}?wsdl", log: false, pretty_print_xml: false)
      body = {"CASNumber" => cas_number, "ProductNum" => product_num, "AKNum" => ak_num, "client_id" => Settings.bide_client_id, "client_secret" => Settings.bide_client_secret}
  	  response = client.call(:get_stock_price_purity_data_cn, message: body.as_json)
      result = JSON.parse(response.body[:get_stock_price_purity_data_cn_response][:get_stock_price_purity_data_cn_result])
  	end

    def self.get_prices(cas)
      result = query(cas_number: cas)
      prices = []
      if result['ret'].to_i == 0
        result['rows'].each do |row|
          next if row['Price'].to_f <= 0
          package = row['PackSize'].to_f
          unit = row['PackSize'].to_s.gsub(/^\d+/, '').downcase
          next if package <= 0 || !['g', 'mg', 'kg', 't', 'ml', 'l'].include?(unit)
          next if OrderDetail.new.convert_unit(package, unit, 'g').to_f > row['Weight'].to_f
          prices << {package: package, unit: QuotationDetail.package_units[unit], price: row['Price'].to_f, art_no: row['ProductNum'], purity: row['Purity']}
        end
      end
      prices
    end

  end
end



例子二

# Soap
gem 'soap4r'
gem 'savon'


def download_msds
    order_item = OrderItem.find(params[:order_item_id])
    msds = Msds.new(order_item)
    result, flag = msds.generate
    send_data msds.render, filename: 'iChemical' << (flag ? '' : '-GT') << '-MSDS-' << order_item.order_item_no << '.pdf',type: "application/pdf", disposition: "attachment"
end


class Msds

  def initialize(order_item)
   super()
    @order_item = order_item
    @chemical = order_item.chemical
    @result = nil
  end

  def client
    client = Savon.client do
      wsdl MSETTING["wsdl_url"]
      ssl_verify_mode :none
      log true
    end
  end

  def generate
    if @order_item.msds_record.present?
      @result, flag = complete_modify_msds(@order_item.msds_record)
    else
      if call_msds[0].nil?
        @result, flag = call_fixed_msds
      else
        @result, flag = call_msds
      end
    end
  end

  def call_msds
    response = client.call(:generate_msds, message: { cas: @chemical.cas, catalogueNo: @chemical.catalog_no })
    [response.body[:generate_msds_response][:generate_msds_result], true]
  end

  def call_fixed_msds
    response = client.call(:generate_fixed_msds, message: { cas: @chemical.cas, catalogueNo: @chemical.catalog_no })
    [response.body[:generate_fixed_msds_response][:generate_fixed_msds_result], false]
  end

  def request_modify_msds
    response = client.call(:request_modify_msds, message: { cas: @chemical.cas })
    response.body[:request_modify_msds_response][:request_modify_msds_result][:string]
  end

  def complete_modify_msds(msds)
    response = client.call(:complete_modify_msds, message: { cas: @chemical.cas, catalogueNo: @chemical.catalog_no, name: msds.name, hazardsIdentification: msds.hazardsIdentification,other: msds.other, purity: msds.purity})
    [response.body[:complete_modify_msds_response][:complete_modify_msds_result], true]
  end

  def render
    Base64.strict_decode64(@result).force_encoding('UTF-8')
  end

end

0
0
分享到:
评论

相关推荐

    Ruby-Savon是一个Ruby编程语言的SOAP客户端

    Savon库的出现,弥补了Ruby在处理SOAP服务时的不足,为开发者提供了方便的接口和丰富的功能。 首先,让我们深入了解一下Savon的工作原理。Savon的核心在于解析和构建SOAP消息。当与SOAP服务通信时,它会将Ruby代码...

    ruby savon gem

    Ruby Savon Gem是专门为Ruby编程语言设计的一个库,用于处理SOAP(简单对象访问协议)服务。SOAP是一种在分布式环境中交换结构化和类型化的信息的协议,通常用于Web服务。Savon Gem允许Ruby开发者轻松地与SOAP服务器...

    savon-ruby-gem

    savon-ruby-gem

    savon:重金属SOAP客户端

    萨翁 重金属SOAP客户端 | | 版本2 Savon版本2可通过,并可通过以下方式安装: $ gem install savon 或将其添加到您的Gemfile中,如下所示: ... 有关更多示例,您应该检查。 Ruby版本支持 master -MRI 2.5、2.

    Enterprise Integration with Ruby

    可能会介绍如何使用像HTTParty、 curb 或者savon这样的库来创建和消费这些服务,以及如何处理身份验证、错误处理和数据格式转换。 3. **微服务架构**:随着微服务架构的流行,书中可能会讨论如何利用Ruby构建和管理...

    google-api-ads-ruby:适用于Ruby的Ads API客户端库

    当前支持的产品Google AdWords API Google Ad Manager API客户端库功能支持记录传入和传出SOAP消息支持记录请求信息基于Savon库兼容Ruby 2.1、2.2、2.3和2.4 OAuth2和OAuth2 JWT内置身份验证API调用的参数编号和类型...

    mage-benchmark:使用 ruby​​ 对 Magento API 和 DB 进行基准测试

    使用 ruby​​ 对 Magento API 和 DB 进行基准测试。 现在,脚本将简单地对customer.info soap api 调用进行基准测试,并将其与等效的 mysql 查询进行比较。 随意 fork 并向其添加更复杂的行为。 ##Usage Clone ...

    eurovat:欧盟增值税号码实用程序

    在Ruby 1.9上,它需要savon gem。 我们没有将Savon指定为依赖项,因此您必须自己做。 使用Rails时,请将其添加到您的Gemfile中: gem 'eurovat'gem 'savon', :platforms =&gt; :ruby_19密码验证我们的宝石使用带有PGP...

    faction:一个用于 Atlassian Crowd 的简单的基于 Savon 的 SOAP 客户端

    派Faction 是 Atlassian Crowd 的 SOAP API 的客户端。安装将此行添加到应用程序的 Gemfile 中: gem 'faction', github: 'onesto/faction'然后执行: $ bundle或者自己安装: $ gem install faction用法用户认证 ...

    ist的matlab代码-openligadb-json-api:一个简单的jsonAPI来openLigaDB的soapapi

    该项目是一个基于Sinatra和Savon(SOAP)的小型Ruby应用程序,可以更轻松地访问openLigaDB.de接口。 - Communitybasierte Sport-Ergebnisse - Details zur SOAP Schnittstelle [](REST / JSON Api和语言=&标签= ...

    皂液器“Dettol”:皂液器的多物理建模-matlab开发

    在压缩包文件"Distributeur%20de%20savon_envoi.zip"中,可能包含了项目的所有相关文件,如MATLAB代码、模型文件、仿真结果、报告文档等。解压后,我们可以深入研究项目的具体实现细节,包括模型的结构、参数设定、...

Global site tag (gtag.js) - Google Analytics