class KakaocertService
Kakaocert API BaseService class
Constants
- BOUNDARY
- KAKAOCERT_APIVersion
- ServiceID_REAL
- ServiceURL_REAL
Attributes
ipRestrictOnOff[RW]
linkhub[RW]
scopes[RW]
token_table[RW]
Public Class Methods
instance(linkID, secretKey)
click to toggle source
# File lib/kakaocert.rb, line 23 def instance(linkID, secretKey) @instance ||= new @instance.token_table = {} @instance.linkhub = Linkhub.instance(linkID, secretKey) @instance.scopes = ["member","310","320","330"] @instance.ipRestrictOnOff = true return @instance end
Public Instance Methods
addScope(scopeValue)
click to toggle source
add Service Scope array
# File lib/kakaocert.rb, line 38 def addScope(scopeValue) @scopes.push(scopeValue) end
getCMSState(clientCode, receiptID)
click to toggle source
# File lib/kakaocert.rb, line 203 def getCMSState(clientCode, receiptID) if clientCode.to_s == '' raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.') end if receiptID.to_s == '' raise KakaocertException.new('-99999999', '접수아이디가 입력되지 않았습니다.') end httpget("/SignDirectDebit/Status/#{receiptID}", clientCode, "") end
getESignState(clientCode, receiptID)
click to toggle source
# File lib/kakaocert.rb, line 225 def getESignState(clientCode, receiptID) if clientCode.to_s == '' raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.') end if receiptID.to_s == '' raise KakaocertException.new('-99999999', '접수아이디가 입력되지 않았습니다.') end uri = "/SignToken/Status/#{receiptID}" httpget(uri, clientCode, "") end
getSession_Token(corpNum)
click to toggle source
Get Session Token by checking token-cached hash or token Request
# File lib/kakaocert.rb, line 48 def getSession_Token(corpNum) targetToken = nil refresh = false # check already cached CorpNum's SessionToken if @token_table.key?(corpNum.to_sym) targetToken = @token_table[corpNum.to_sym] end if targetToken.nil? refresh = true else # Token's expireTime must use parse() because time format is hh:mm:ss.SSSZ expireTime = DateTime.parse(targetToken['expiration']) serverUTCTime = DateTime.strptime(@linkhub.getTime()) refresh = expireTime < serverUTCTime end if refresh begin # getSessionToken from Linkhub targetToken = @linkhub.getSessionToken(ServiceID_REAL, corpNum, @scopes, @ipRestrictOnOff ? "" : "*") rescue LinkhubException => le raise KakaocertException.new(le.code, le.message) end # append token to cache hash @token_table[corpNum.to_sym] = targetToken end targetToken['session_token'] end
getVerifyAuthState(clientCode, receiptID)
click to toggle source
# File lib/kakaocert.rb, line 214 def getVerifyAuthState(clientCode, receiptID) if clientCode.to_s == '' raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.') end if receiptID.to_s == '' raise KakaocertException.new('-99999999', '접수아이디가 입력되지 않았습니다.') end httpget("/SignIdentity/Status/#{receiptID}", clientCode, "") end
gzip_parse(target)
click to toggle source
end of getSession_Token
# File lib/kakaocert.rb, line 83 def gzip_parse (target) sio = StringIO.new(target) gz = Zlib::GzipReader.new(sio) gz.read() end
httpget(url, corpNum, userID = '')
click to toggle source
Kakaocert API http Get Request Func
# File lib/kakaocert.rb, line 90 def httpget(url, corpNum, userID = '') headers = { "x-pb-version" => KAKAOCERT_APIVersion, "Accept-Encoding" => "gzip,deflate", } if corpNum.to_s != '' headers["Authorization"] = "Bearer " + getSession_Token(corpNum) end if userID.to_s != '' headers["x-pb-userid"] = userID end uri = URI(ServiceURL_REAL + url) request = Net::HTTP.new(uri.host, 443) request.use_ssl = true Net::HTTP::Get.new(uri) res = request.get(uri.request_uri, headers) if res.code == "200" if res.header['Content-Encoding'].eql?('gzip') JSON.parse(gzip_parse(res.body)) else JSON.parse(res.body) end else raise KakaocertException.new(JSON.parse(res.body)["code"], JSON.parse(res.body)["message"]) end end
httppost(url, corpNum, postData, action = '', userID = '', contentsType = '')
click to toggle source
Request HTTP Post
# File lib/kakaocert.rb, line 127 def httppost(url, corpNum, postData, action = '', userID = '', contentsType = '') headers = { "x-lh-version" => KAKAOCERT_APIVersion, "Accept-Encoding" => "gzip,deflate", } apiServerTime = @linkhub.getTime() hmacTarget = "POST\n" hmacTarget += Base64.strict_encode64(Digest::MD5.digest(postData)) + "\n" hmacTarget += apiServerTime + "\n" hmacTarget += KAKAOCERT_APIVersion + "\n" key = Base64.decode64(@linkhub._secretKey) data = hmacTarget digest = OpenSSL::Digest.new("sha1") hmac = Base64.strict_encode64(OpenSSL::HMAC.digest(digest, key, data)) headers["x-kc-auth"] = @linkhub._linkID+' '+hmac headers["x-lh-date"] = apiServerTime if contentsType == '' headers["Content-Type"] = "application/json; charset=utf8" else headers["Content-Type"] = contentsType end headers["Authorization"] = "Bearer " + getSession_Token(corpNum) uri = URI(ServiceURL_REAL + url) https = Net::HTTP.new(uri.host, 443) https.use_ssl = true Net::HTTP::Post.new(uri) res = https.post(uri.request_uri, postData, headers) if res.code == "200" if res.header['Content-Encoding'].eql?('gzip') JSON.parse(gzip_parse(res.body)) else JSON.parse(res.body) end else raise KakaocertException.new(JSON.parse(res.body)["code"], JSON.parse(res.body)["message"]) end end
requestCMS(clientCode, cmsRequestInfo)
click to toggle source
end of httppost
# File lib/kakaocert.rb, line 182 def requestCMS(clientCode, cmsRequestInfo) if clientCode.to_s == '' raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.') end httppost("/SignDirectDebit/Request", clientCode, cmsRequestInfo.to_json, "", "")["receiptId"] end
requestESign(clientCode, esignRequestInfo)
click to toggle source
# File lib/kakaocert.rb, line 189 def requestESign(clientCode, esignRequestInfo) if clientCode.to_s == '' raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.') end httppost("/SignToken/Request", clientCode, esignRequestInfo.to_json, "", "") end
requestVerifyAuth(clientCode, verifyAuthRequestInfo)
click to toggle source
# File lib/kakaocert.rb, line 196 def requestVerifyAuth(clientCode, verifyAuthRequestInfo) if clientCode.to_s == '' raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.') end httppost("/SignIdentity/Request", clientCode, verifyAuthRequestInfo.to_json, "", "")["receiptId"] end
setIpRestrictOnOff(value)
click to toggle source
# File lib/kakaocert.rb, line 42 def setIpRestrictOnOff(value) @ipRestrictOnOff = value end
verifyAuth(clientCode, receiptID)
click to toggle source
# File lib/kakaocert.rb, line 249 def verifyAuth(clientCode, receiptID) if clientCode.to_s == '' raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.') end if receiptID.to_s == '' raise KakaocertException.new('-99999999', '접수아이디가 입력되지 않았습니다.') end httpget("/SignIdentity/Verify/#{receiptID}", clientCode, "") end
verifyCMS(clientCode, receiptID)
click to toggle source
# File lib/kakaocert.rb, line 238 def verifyCMS(clientCode, receiptID) if clientCode.to_s == '' raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.') end if receiptID.to_s == '' raise KakaocertException.new('-99999999', '접수아이디가 입력되지 않았습니다.') end httpget("/SignDirectDebit/Verify/#{receiptID}", clientCode, "") end
verifyESign(clientCode, receiptID, signature = '')
click to toggle source
# File lib/kakaocert.rb, line 260 def verifyESign(clientCode, receiptID, signature = '') if clientCode.to_s == '' raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.') end if receiptID.to_s == '' raise KakaocertException.new('-99999999', '접수아이디가 입력되지 않았습니다.') end uri = "/SignToken/Verify/#{receiptID}" if signature.to_s != '' uri += "/"+signature end httpget(uri, clientCode, "") end