kakaocert 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|