module AllpayWebService

Constants

VERSION

Public Instance Methods

parse(trade_type:, response: res_xml = nil) click to toggle source
# File lib/allpay/client.rb, line 475
def parse trade_type:, response:
  res_xml = nil
  res_hash = nil

  case trade_type
  when :create_trade, :verify_order_by_otp, :resend_otp
    if trade_type == :create_trade
      pattern = /<CreateTradeResult>(.+)<\/CreateTradeResult>/
    elsif trade_type == :verify_order_by_otp
      pattern = /<VerifyOrderByOtpResult>(.+)<\/VerifyOrderByOtpResult>/
    elsif trade_type == :resend_otp
      pattern = /<ResendOtpResult>(.+)<\/ResendOtpResult>/
    end

    match_result = pattern.match response.body

    unless match_result.nil?
      encrypted_result = match_result[1]
      res_xml = decrypt(encrypted_result)
    end
  when :query_trade
    pattern = /<QueryTradeResult>(.+)<\/QueryTradeResult>/

    match_result = pattern.match response.body

    unless match_result.nil?
      res_xml = CGI.unescapeHTML match_result[1]
    end
  when :do_action
    res_xml = decrypt(response.body)
  end

  begin
    parser = Nori.new(:advanced_typecasting => false)
    res_hash = parser.parse(res_xml)['Root']['Data'] unless res_xml.nil?
  end

  { "Xml" => res_xml, "Hash" => res_hash }
end
request(method: "POST", service_url:, data:, is_soap_request: false, platform_id: nil) click to toggle source
# File lib/allpay/client.rb, line 438
def request method: "POST", service_url:, data:, is_soap_request: false, platform_id: nil
  api_url = URI.parse(service_url)

  http = Net::HTTP.new(api_url.host, api_url.port)
  http.use_ssl = true if api_url.scheme == "https"

  req = Net::HTTP::Post.new(api_url.request_uri, initheader = {
    "Accept-Language" => "zh-tw",
    "Accept-Charset" => "utf-8",
    "Content-Type" => is_soap_request ? "application/soap+xml" : "application/x-www-form-urlencoded",
    "Host" => api_url.host
  })

  if is_soap_request
    req.body = data
  else
    form_data = {
      "MerchantID" => @merchant_id,
      "XMLData" => data
    }
    form_data["PlatformID"] = platform_id unless platform_id.nil?

    req.set_form_data(form_data)
  end

  http_response = http.request(req)

  case http_response
  when Net::HTTPOK
    http_response
  when Net::HTTPClientError, Net::HTTPInternalServerError
    raise Net::HTTPError.new(http_response.message, http_response)
  else
    raise Net::HTTPError.new('Unexpected HTTP response.', http_response)
  end
end