class UmfHttp

Public Instance Methods

httpGet(urlStr) click to toggle source

向服务端发起GET请求

# File lib/UmfHttp.rb, line 26
def httpGet(urlStr)

end
httpPost(urlStr, params) click to toggle source

向服务端发起POST请求

# File lib/UmfHttp.rb, line 32
def httpPost(urlStr, params)
  uri = URI.parse(urlStr)
  https = Net::HTTP.new(uri.host)
  https.use_ssl = false
  req = Net::HTTP::Post.new(uri.path)
  param = UmfStringUtil.new.rasEncryptedStrEscape(params)
  param = UmfStringUtil.new.getPlainSortByAnd(param)
  UmfLogger.logInfoMsg("[UMF SDK]本次请求 service = " + params["service"] + " 对应的请求体 request.body = " + param)
  req.body = param
  res = https.request(req)
  output = res.body #{res.code} #{res.message}: #{res.body}
  UmfLogger.logInfoMsg("[UMF SDK]本次请求原始响应数据 " + output.force_encoding("utf-8"))
  # 对账直接返回
  if params["service"] == "download_settle_file"
    UmfLogger.logInfoMsg("[UMF SDK] 对账接口返回原始响应数据 " + output)
    return output
  end
  # 解析HTML返回 CONTENT
  contentStr = parseHTMLStr(output)
  contentArr = contentStr.split("&")
  response = {}
  contentArr.each { |elem|
    arr = elem.split("=",2)
    response[arr[0]] = arr[1]
  }
  UmfLogger.logInfoMsg("[UMF SDK]本次请求处理后返回的响应数据 "  + response.to_s)
  UmfLogger.logInfoMsg("--------------------log end---------------------")
  response.delete('sign')
  response.delete('sign_type')
  response.delete('version')
  return response
end
httpRequestWithJson(urlStr,isPost,jsonParam,headers) click to toggle source

子商户入网部分


# File lib/UmfHttp.rb, line 111
def httpRequestWithJson(urlStr,isPost,jsonParam,headers)
  UmfLogger.logInfoMsg("[UMF SDK 子商户入网]本次请求对应的URL " + urlStr)
  UmfLogger.logInfoMsg(isPost == true ? "[UMF SDK 子商户入网]本次请求方式 post" : "[UMF SDK 子商户入网]本次请求方式 get")
  # if(strpos($urlStr, UMF_RESTPAY_UPLOADCHILDFILE) !== false){
  #     //上传文件接口 由于文件的二进制数据过大 不写入log
  # }else{
  #     $log->logInfo("[UMF SDK 子商户入网]本次请求对应的json " .$jsonParam);
  # }

  uri = URI.parse(urlStr)
  https = Net::HTTP.new(uri.host)
  https.use_ssl = false
  if isPost==true
    req = Net::HTTP::Post.new(uri,headers)
    req.body = jsonParam
    res = https.request(req)
    response = res.body
  else isPost==false
    req = Net::HTTP::Get.new(uri,headers)
    res = https.request(req)
    response = res.body
  end
  # 验签
  arr = response.split('&',2)
  if arr.length == 2
    resPlain = arr[0]
    resSign = arr[1]
    verifyRet = UmfRSACryptUtil.new.verify(resPlain,resSign,'sha256')
    if verifyRet == true
      puts "[UMF SDK 子商户入网] 平台响应数据验证签名成功"
      UmfLogger.logInfoMsg("[UMF SDK 子商户入网]本次请求原始响应数据 " + response.force_encoding('utf-8').to_s)
      UmfLogger.logInfoMsg("--------------------log end---------------------")
      return JSON.parse(resPlain)
    else
      puts "[UMF SDK 子商户入网] 平台响应数据验证签名失败"
    end
  elsif urlStr==UMF_RESTPAY_AUTHORIZE
    return JSON.parse(response)
  end
end
parseHTMLStr(htmlStr) click to toggle source
# File lib/UmfHttp.rb, line 67
def parseHTMLStr(htmlStr)
  if htmlStr.length <= 0
    return
  end
  # MobilePayPlatform
  regex = /CONTENT="([\w\W]*?)"/
  content = regex.match(htmlStr).to_s.split("=",2)[1]
  resParamsArr = content.split("&")
  plain = ''
  sign = ''
  resParamsArr.each { |elem|
    arr = elem.split("=",2)
    if arr[0]=="sign_type"
      next
    end
    if arr[0]=="sign"
      sign = arr[1]
      next
    end
    plain = plain + elem + "&"
  }
  plain = plain.chop
  plain = plain.delete '"'
  sign = sign.chop
  begin
    # plain utf8-->gbk
    plain = plain.encode('gbk','utf-8')
  rescue Encoding::UndefinedConversionError
    puts $!.error_char.dump
    p $!.error_char.encoding
  end
  verifyRet = UmfRSACryptUtil.new.verify(plain,sign,"sha1")
  if verifyRet
    puts "[UMF SDK] 平台响应数据验证签名成功"
    return content
  else
    puts "[UMF SDK] 平台响应数据验证签名失败"
  end
end