kakaocert 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/kakaocert.rb +250 -0
- metadata +58 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7f88291f71923172a25f95327b61fe030ac82a1e
|
4
|
+
data.tar.gz: efeb76a1f4b75e05989e96e6dae23715b85498d9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9f2b92f874b2dd5e03ba3650b4bf93ead8d81c0c47fd5a8320abc9722c0141caf543862aad7f8c2f39306b67afe77acdb5c1c9337fc2fa29982038d6f82f7354
|
7
|
+
data.tar.gz: 4af284b38aca3a60cb8084cadd09b6cb1f27758575fcfe3857e97e12da858b2a84050bd0acfcf95c9b6466862a9b0b2c9d797e87d3bd0c51e448716c7d8b5364
|
data/lib/kakaocert.rb
ADDED
@@ -0,0 +1,250 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'net/http'
|
3
|
+
require 'uri'
|
4
|
+
require 'json'
|
5
|
+
require 'date'
|
6
|
+
require "digest"
|
7
|
+
require "base64"
|
8
|
+
require 'zlib'
|
9
|
+
require 'stringio'
|
10
|
+
require 'linkhub'
|
11
|
+
|
12
|
+
# Kakaocert API BaseService class
|
13
|
+
class KakaocertService
|
14
|
+
|
15
|
+
ServiceID_REAL = "KAKAOCERT"
|
16
|
+
ServiceURL_REAL = "https://kakaocert-api.linkhub.co.kr"
|
17
|
+
KAKAOCERT_APIVersion = "1.0"
|
18
|
+
BOUNDARY = "==KAKAOCERT_RUBY_SDK=="
|
19
|
+
|
20
|
+
attr_accessor :token_table, :scopes, :linkhub, :ipRestrictOnOff
|
21
|
+
|
22
|
+
# Generate Linkhub Class Singleton Instance
|
23
|
+
class << self
|
24
|
+
def instance(linkID, secretKey)
|
25
|
+
@instance ||= new
|
26
|
+
@instance.token_table = {}
|
27
|
+
@instance.linkhub = Linkhub.instance(linkID, secretKey)
|
28
|
+
@instance.scopes = ["member","310","320","330"]
|
29
|
+
@instance.ipRestrictOnOff = true
|
30
|
+
|
31
|
+
return @instance
|
32
|
+
end
|
33
|
+
|
34
|
+
private :new
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
# add Service Scope array
|
39
|
+
def addScope(scopeValue)
|
40
|
+
@scopes.push(scopeValue)
|
41
|
+
end
|
42
|
+
|
43
|
+
def setIpRestrictOnOff(value)
|
44
|
+
@ipRestrictOnOff = value
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
# Get Session Token by checking token-cached hash or token Request
|
49
|
+
def getSession_Token(corpNum)
|
50
|
+
targetToken = nil
|
51
|
+
refresh = false
|
52
|
+
|
53
|
+
# check already cached CorpNum's SessionToken
|
54
|
+
if @token_table.key?(corpNum.to_sym)
|
55
|
+
targetToken = @token_table[corpNum.to_sym]
|
56
|
+
end
|
57
|
+
|
58
|
+
if targetToken.nil?
|
59
|
+
refresh = true
|
60
|
+
else
|
61
|
+
# Token's expireTime must use parse() because time format is hh:mm:ss.SSSZ
|
62
|
+
expireTime = DateTime.parse(targetToken['expiration'])
|
63
|
+
serverUTCTime = DateTime.strptime(@linkhub.getTime())
|
64
|
+
refresh = expireTime < serverUTCTime
|
65
|
+
end
|
66
|
+
|
67
|
+
if refresh
|
68
|
+
begin
|
69
|
+
# getSessionToken from Linkhub
|
70
|
+
targetToken = @linkhub.getSessionToken(ServiceID_REAL, corpNum, @scopes, @ipRestrictOnOff ? "" : "*")
|
71
|
+
|
72
|
+
rescue LinkhubException => le
|
73
|
+
raise KakaocertException.new(le.code, le.message)
|
74
|
+
end
|
75
|
+
# append token to cache hash
|
76
|
+
@token_table[corpNum.to_sym] = targetToken
|
77
|
+
end
|
78
|
+
|
79
|
+
targetToken['session_token']
|
80
|
+
end
|
81
|
+
|
82
|
+
# end of getSession_Token
|
83
|
+
|
84
|
+
def gzip_parse (target)
|
85
|
+
sio = StringIO.new(target)
|
86
|
+
gz = Zlib::GzipReader.new(sio)
|
87
|
+
gz.read()
|
88
|
+
end
|
89
|
+
|
90
|
+
# Kakaocert API http Get Request Func
|
91
|
+
def httpget(url, corpNum, userID = '')
|
92
|
+
headers = {
|
93
|
+
"x-pb-version" => KAKAOCERT_APIVersion,
|
94
|
+
"Accept-Encoding" => "gzip,deflate",
|
95
|
+
}
|
96
|
+
|
97
|
+
if corpNum.to_s != ''
|
98
|
+
headers["Authorization"] = "Bearer " + getSession_Token(corpNum)
|
99
|
+
end
|
100
|
+
|
101
|
+
if userID.to_s != ''
|
102
|
+
headers["x-pb-userid"] = userID
|
103
|
+
end
|
104
|
+
|
105
|
+
uri = URI(ServiceURL_REAL + url)
|
106
|
+
request = Net::HTTP.new(uri.host, 443)
|
107
|
+
request.use_ssl = true
|
108
|
+
|
109
|
+
Net::HTTP::Get.new(uri)
|
110
|
+
|
111
|
+
res = request.get(uri.request_uri, headers)
|
112
|
+
|
113
|
+
if res.code == "200"
|
114
|
+
if res.header['Content-Encoding'].eql?('gzip')
|
115
|
+
JSON.parse(gzip_parse(res.body))
|
116
|
+
else
|
117
|
+
JSON.parse(res.body)
|
118
|
+
end
|
119
|
+
else
|
120
|
+
raise KakaocertException.new(JSON.parse(res.body)["code"],
|
121
|
+
JSON.parse(res.body)["message"])
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
#end of httpget
|
126
|
+
|
127
|
+
# Request HTTP Post
|
128
|
+
def httppost(url, corpNum, postData, action = '', userID = '', contentsType = '')
|
129
|
+
|
130
|
+
headers = {
|
131
|
+
"x-lh-version" => KAKAOCERT_APIVersion,
|
132
|
+
"Accept-Encoding" => "gzip,deflate",
|
133
|
+
}
|
134
|
+
|
135
|
+
apiServerTime = @linkhub.getTime()
|
136
|
+
|
137
|
+
hmacTarget = "POST\n"
|
138
|
+
hmacTarget += Base64.strict_encode64(Digest::MD5.digest(postData)) + "\n"
|
139
|
+
hmacTarget += apiServerTime + "\n"
|
140
|
+
|
141
|
+
hmacTarget += KAKAOCERT_APIVersion + "\n"
|
142
|
+
|
143
|
+
key = Base64.decode64(@linkhub._secretKey)
|
144
|
+
|
145
|
+
data = hmacTarget
|
146
|
+
digest = OpenSSL::Digest.new("sha1")
|
147
|
+
hmac = Base64.strict_encode64(OpenSSL::HMAC.digest(digest, key, data))
|
148
|
+
|
149
|
+
headers["x-kc-auth"] = @linkhub._linkID+' '+hmac
|
150
|
+
headers["x-lh-date"] = apiServerTime
|
151
|
+
|
152
|
+
if contentsType == ''
|
153
|
+
headers["Content-Type"] = "application/json; charset=utf8"
|
154
|
+
else
|
155
|
+
headers["Content-Type"] = contentsType
|
156
|
+
end
|
157
|
+
|
158
|
+
headers["Authorization"] = "Bearer " + getSession_Token(corpNum)
|
159
|
+
|
160
|
+
|
161
|
+
uri = URI(ServiceURL_REAL + url)
|
162
|
+
|
163
|
+
https = Net::HTTP.new(uri.host, 443)
|
164
|
+
https.use_ssl = true
|
165
|
+
Net::HTTP::Post.new(uri)
|
166
|
+
|
167
|
+
res = https.post(uri.request_uri, postData, headers)
|
168
|
+
|
169
|
+
if res.code == "200"
|
170
|
+
if res.header['Content-Encoding'].eql?('gzip')
|
171
|
+
JSON.parse(gzip_parse(res.body))
|
172
|
+
else
|
173
|
+
JSON.parse(res.body)
|
174
|
+
end
|
175
|
+
else
|
176
|
+
raise KakaocertException.new(JSON.parse(res.body)["code"],
|
177
|
+
JSON.parse(res.body)["message"])
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
#end of httppost
|
182
|
+
|
183
|
+
def requestCMS(clientCode, cmsRequestInfo, userID = "")
|
184
|
+
if clientCode.to_s == ''
|
185
|
+
raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.')
|
186
|
+
end
|
187
|
+
httppost("/SignDirectDebit/Request", clientCode, cmsRequestInfo.to_json, "", userID)
|
188
|
+
end
|
189
|
+
|
190
|
+
def requestESign(clientCode, esignRequestInfo, userID = "")
|
191
|
+
if clientCode.to_s == ''
|
192
|
+
raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.')
|
193
|
+
end
|
194
|
+
httppost("/SignToken/Request", clientCode, esignRequestInfo.to_json, "", userID)
|
195
|
+
end
|
196
|
+
|
197
|
+
def requestVerifyAuth(clientCode, verifyAuthRequestInfo, userID = "")
|
198
|
+
if clientCode.to_s == ''
|
199
|
+
raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.')
|
200
|
+
end
|
201
|
+
httppost("/SignIdentity/Request", clientCode, verifyAuthRequestInfo.to_json, "", userID)
|
202
|
+
end
|
203
|
+
|
204
|
+
def getCMSResult(clientCode, receiptID, userID = '')
|
205
|
+
if clientCode.to_s == ''
|
206
|
+
raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.')
|
207
|
+
end
|
208
|
+
if receiptID.to_s == ''
|
209
|
+
raise KakaocertException.new('-99999999', '접수아이디가 입력되지 않았습니다.')
|
210
|
+
end
|
211
|
+
|
212
|
+
httpget("/SignDirectDebit/#{receiptID}", clientCode, userID)
|
213
|
+
end
|
214
|
+
|
215
|
+
def getVerifyAuthResult(clientCode, receiptID, userID = '')
|
216
|
+
if clientCode.to_s == ''
|
217
|
+
raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.')
|
218
|
+
end
|
219
|
+
if receiptID.to_s == ''
|
220
|
+
raise KakaocertException.new('-99999999', '접수아이디가 입력되지 않았습니다.')
|
221
|
+
end
|
222
|
+
|
223
|
+
httpget("/SignIdentity/#{receiptID}", clientCode, userID)
|
224
|
+
end
|
225
|
+
|
226
|
+
def getESignResult(clientCode, receiptID, userID = '')
|
227
|
+
if clientCode.to_s == ''
|
228
|
+
raise KakaocertException.new('-99999999', '이용기관코드가 입력되지 않았습니다.')
|
229
|
+
end
|
230
|
+
if receiptID.to_s == ''
|
231
|
+
raise KakaocertException.new('-99999999', '접수아이디가 입력되지 않았습니다.')
|
232
|
+
end
|
233
|
+
|
234
|
+
httpget("/SignToken/#{receiptID}", clientCode, userID)
|
235
|
+
end
|
236
|
+
|
237
|
+
|
238
|
+
end
|
239
|
+
|
240
|
+
|
241
|
+
|
242
|
+
# Kakaocert API Exception Handler class
|
243
|
+
class KakaocertException < StandardError
|
244
|
+
attr_reader :code, :message
|
245
|
+
|
246
|
+
def initialize(code, message)
|
247
|
+
@code = code
|
248
|
+
@message = message
|
249
|
+
end
|
250
|
+
end
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kakaocert
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Linkhub Dev
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-06-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: linkhub
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.2.0
|
27
|
+
description: Kakaocert API SDK
|
28
|
+
email: code@linkhub.co.kr
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/kakaocert.rb
|
34
|
+
homepage: https://github.com/linkhub-sdk/kakaocert.ruby
|
35
|
+
licenses:
|
36
|
+
- APACHE LICENSE VERSION 2.0
|
37
|
+
metadata: {}
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options: []
|
40
|
+
require_paths:
|
41
|
+
- lib
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 2.0.0
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
requirements: []
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 2.4.8
|
55
|
+
signing_key:
|
56
|
+
specification_version: 4
|
57
|
+
summary: Kakaocert API SDK
|
58
|
+
test_files: []
|