clt-sdk 2.0.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +20 -17
- data/clt-sdk.gemspec +7 -5
- data/lib/clt/credit_card.rb +85 -79
- data/lib/clt/cvs.rb +64 -67
- data/lib/clt/error_message.rb +2 -2
- data/lib/clt/general_methods.rb +6 -6
- data/lib/clt/version.rb +1 -1
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9783259746bf6dbd1abefad0255bbeb13dd2e80a
|
4
|
+
data.tar.gz: 0a0db1c56394854aeb4fabb97fe94c156cea6c43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69070180caf3277c607259f0b8ae388aa9afbe35cbbdb71216310bdacbce589b7dc566833f9cc2bd375cb1d2a195d303aba5498432d89ec1d80d296dd8729544
|
7
|
+
data.tar.gz: d50d4d36f59a3f7657fa798fda690d697f5891f4bdf318b733915198faff5d72e10f87d1800133388ed5587a41a1ecba7e63d09fdfa901b633d4a82a40e79087
|
data/README.md
CHANGED
@@ -35,7 +35,7 @@ require "clt-sdk"
|
|
35
35
|
Clt.setup do |config|
|
36
36
|
config.cvs_cust_id = "CVS_CUST_ID"
|
37
37
|
config.cvs_cust_password = "CVS_CUST_PASSWORD"
|
38
|
-
config.cvs_default_expire_day =
|
38
|
+
config.cvs_default_expire_day = 3
|
39
39
|
config.cocs_link_id = "COCS_LINK_ID"
|
40
40
|
config.cocs_hash_base = "COCS_HASH_BASE"
|
41
41
|
end
|
@@ -55,15 +55,18 @@ end
|
|
55
55
|
|
56
56
|
```ruby
|
57
57
|
result = cvs_client.order_create(
|
58
|
-
service_url:
|
59
|
-
cust_order_number:
|
58
|
+
service_url: 'SERVICE_URL',
|
59
|
+
cust_order_number: 'TESTORDER000001',
|
60
60
|
order_amount: 100,
|
61
|
-
|
62
|
-
|
61
|
+
payer_name: '測試',
|
62
|
+
payer_postcode: '100',
|
63
|
+
payer_address: '測試地址',
|
64
|
+
payer_mobile: '0987654321',
|
65
|
+
payer_email: 'test@localhost.com'
|
63
66
|
)
|
64
67
|
```
|
65
68
|
|
66
|
-
Optional parameters: `expire_date
|
69
|
+
Optional parameters: `expire_date`
|
67
70
|
|
68
71
|
> `expired_date` will overwrite `cvs_default_expire_day` setting.
|
69
72
|
|
@@ -71,9 +74,9 @@ end
|
|
71
74
|
|
72
75
|
```ruby
|
73
76
|
result = cvs_client.order_query(
|
74
|
-
service_url:
|
75
|
-
process_code_update_time_begin:
|
76
|
-
process_code_update_time_end:
|
77
|
+
service_url: 'SERVICE_URL',
|
78
|
+
process_code_update_time_begin: '2017-01-01T00:00:00+08:00',
|
79
|
+
process_code_update_time_end: '2017-01-01T23:59:59+08:00'
|
77
80
|
)
|
78
81
|
```
|
79
82
|
|
@@ -83,16 +86,16 @@ end
|
|
83
86
|
cocs_client = Clt::CreditCard.new
|
84
87
|
```
|
85
88
|
|
86
|
-
> `chk` will be automatically generated
|
89
|
+
> `chk` will be automatically generated.
|
87
90
|
|
88
91
|
#### Order Create
|
89
92
|
|
90
93
|
```ruby
|
91
94
|
result = cocs_client.order_create(
|
92
|
-
service_url:
|
93
|
-
cust_order_no:
|
95
|
+
service_url: 'SERVICE_URL',
|
96
|
+
cust_order_no: 'TESTORDER000001',
|
94
97
|
order_amount: 100,
|
95
|
-
order_detail:
|
98
|
+
order_detail: 'Order Test'
|
96
99
|
)
|
97
100
|
```
|
98
101
|
|
@@ -104,8 +107,8 @@ end
|
|
104
107
|
|
105
108
|
```ruby
|
106
109
|
result = cocs_client.order_cancel(
|
107
|
-
service_url:
|
108
|
-
cust_order_no:
|
110
|
+
service_url: 'SERVICE_URL',
|
111
|
+
cust_order_no: 'TESTORDER000001',
|
109
112
|
order_amount: 100
|
110
113
|
)
|
111
114
|
```
|
@@ -116,8 +119,8 @@ end
|
|
116
119
|
|
117
120
|
```ruby
|
118
121
|
result = cocs_client.order_refund(
|
119
|
-
service_url:
|
120
|
-
cust_order_no:
|
122
|
+
service_url: 'SERVICE_URL',
|
123
|
+
cust_order_no: 'TESTORDER000001',
|
121
124
|
order_amount: 100,
|
122
125
|
refund_amount: 100
|
123
126
|
)
|
data/clt-sdk.gemspec
CHANGED
@@ -9,21 +9,23 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Calvert"]
|
10
10
|
spec.email = [""]
|
11
11
|
|
12
|
-
spec.summary = "Basic API client for President Collect Payment Service
|
12
|
+
spec.summary = "Basic API client for President Collect Payment Service"
|
13
13
|
spec.description = ""
|
14
14
|
spec.homepage = "https://github.com/CalvertYang/clt-sdk"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
|
-
spec.files = `git ls-files -z`.split("\x0").reject
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^(test|spec|features)/})
|
19
|
+
end
|
18
20
|
spec.bindir = "bin"
|
19
21
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
22
|
spec.require_paths = ["lib"]
|
21
23
|
|
22
|
-
spec.add_dependency "nokogiri", "~> 1.
|
24
|
+
spec.add_dependency "nokogiri", "~> 1.7"
|
23
25
|
spec.add_dependency "nori", "~> 2.6"
|
24
26
|
|
25
|
-
spec.add_development_dependency "bundler", "~> 1.
|
26
|
-
spec.add_development_dependency "rake", "~>
|
27
|
+
spec.add_development_dependency "bundler", "~> 1.13"
|
28
|
+
spec.add_development_dependency "rake", "~> 12.0"
|
27
29
|
|
28
30
|
spec.required_ruby_version = ">= 2.1.5"
|
29
31
|
end
|
data/lib/clt/credit_card.rb
CHANGED
@@ -3,160 +3,166 @@ module Clt
|
|
3
3
|
include GeneralMethods
|
4
4
|
|
5
5
|
def initialize
|
6
|
-
raise ArgumentError,
|
7
|
-
ErrorMessage.
|
8
|
-
ErrorMessage.
|
6
|
+
raise ArgumentError, 'Please setup cocs_link_id first' if Clt.cocs_link_id.nil?
|
7
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :cocs_link_id, data: :String) unless Clt.cocs_link_id.is_a? String
|
8
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :cocs_link_id) if Clt.cocs_link_id.empty?
|
9
9
|
|
10
|
-
raise ArgumentError,
|
11
|
-
ErrorMessage.
|
12
|
-
ErrorMessage.
|
10
|
+
raise ArgumentError, 'Please setup cocs_hash_base first' if Clt.cocs_hash_base.nil?
|
11
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :cocs_hash_base, data: :String) unless Clt.cocs_hash_base.is_a? String
|
12
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :cocs_hash_base) if Clt.cocs_hash_base.empty?
|
13
13
|
end
|
14
14
|
|
15
15
|
# Order Create
|
16
|
-
def order_create
|
17
|
-
ErrorMessage.
|
16
|
+
def order_create(params = {})
|
17
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :Parameter, data: :Hash) unless params.is_a? Hash
|
18
18
|
|
19
|
-
ErrorMessage.
|
20
|
-
ErrorMessage.
|
21
|
-
ErrorMessage.
|
19
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil?
|
20
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :service_url, data: :String) unless params[:service_url].is_a? String
|
21
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty?
|
22
22
|
|
23
23
|
if params.has_key? :cust_order_no
|
24
|
-
ErrorMessage.
|
25
|
-
ErrorMessage.
|
26
|
-
ErrorMessage.
|
24
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :cust_order_no, data: :String) unless params[:cust_order_no].is_a? String
|
25
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :cust_order_no) if params[:cust_order_no].empty?
|
26
|
+
ErrorMessage.raise_error(msg: :data_length_too_short, field: :cust_order_no) if params[:cust_order_no].size < 3
|
27
27
|
end
|
28
28
|
|
29
|
-
ErrorMessage.
|
30
|
-
ErrorMessage.
|
31
|
-
ErrorMessage.
|
29
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :order_amount) if params[:order_amount].nil?
|
30
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :order_amount, data: :Integer) unless params[:order_amount].is_a? Integer
|
31
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :order_amount, data: 'greater than 0') if params[:order_amount] <= 0
|
32
32
|
|
33
|
-
ErrorMessage.
|
34
|
-
ErrorMessage.
|
35
|
-
ErrorMessage.
|
33
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :order_detail) if params[:order_detail].nil?
|
34
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :order_detail, data: :String) unless params[:order_detail].is_a? String
|
35
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :order_detail) if params[:order_detail].empty?
|
36
36
|
|
37
37
|
if params.has_key? :limit_product_id
|
38
|
-
ErrorMessage.
|
39
|
-
ErrorMessage.
|
38
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :limit_product_id, data: :String) unless params[:limit_product_id].is_a? String
|
39
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :limit_product_id) if params[:limit_product_id].empty?
|
40
40
|
end
|
41
41
|
|
42
42
|
if params.has_key? :chk
|
43
|
-
|
44
|
-
|
43
|
+
raise_error(msg: :parameter_should_be, field: :chk, data: :String) unless params[:chk].is_a? String
|
44
|
+
raise_error(msg: :cannot_be_empty, field: :chk) if params[:chk].empty?
|
45
45
|
end
|
46
46
|
|
47
47
|
service_url = params[:service_url]
|
48
48
|
params.delete :service_url
|
49
49
|
|
50
|
+
# get and converts time to local time
|
51
|
+
current_time = Time.now.localtime('+08:00')
|
52
|
+
|
50
53
|
data = {
|
51
54
|
link_id: Clt.cocs_link_id,
|
52
|
-
cust_order_no:
|
53
|
-
limit_product_id:
|
54
|
-
send_time:
|
55
|
-
|
56
|
-
}.merge(params)
|
55
|
+
cust_order_no: '',
|
56
|
+
limit_product_id: 'esun.normal',
|
57
|
+
send_time: current_time.strftime('%F %T')
|
58
|
+
}.merge(params).merge(return_type: 'json')
|
57
59
|
|
58
60
|
unless params.has_key? :chk
|
59
61
|
data[:chk] = generate_checksum "#{Clt.cocs_hash_base}$#{params[:order_amount]}$#{data[:send_time]}"
|
60
62
|
end
|
61
63
|
|
62
|
-
|
64
|
+
post_request(service_url: service_url, data: data)
|
63
65
|
end
|
64
66
|
|
65
67
|
# Order Cancel
|
66
|
-
def order_cancel
|
67
|
-
ErrorMessage.
|
68
|
+
def order_cancel(params = {})
|
69
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :Parameter, data: :Hash) unless params.is_a? Hash
|
68
70
|
|
69
|
-
ErrorMessage.
|
70
|
-
ErrorMessage.
|
71
|
-
ErrorMessage.
|
71
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil?
|
72
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :service_url, data: :String) unless params[:service_url].is_a? String
|
73
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty?
|
72
74
|
|
73
|
-
ErrorMessage.
|
74
|
-
ErrorMessage.
|
75
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :cust_order_no, data: :String) unless params[:cust_order_no].is_a? String
|
76
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :cust_order_no) if params[:cust_order_no].empty?
|
75
77
|
|
76
|
-
ErrorMessage.
|
77
|
-
ErrorMessage.
|
78
|
-
ErrorMessage.
|
78
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :order_amount) if params[:order_amount].nil?
|
79
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :order_amount, data: :Integer) unless params[:order_amount].is_a? Integer
|
80
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :order_amount, data: 'greater than 0') if params[:order_amount] <= 0
|
79
81
|
|
80
82
|
if params.has_key? :chk
|
81
|
-
|
82
|
-
|
83
|
+
raise_error(msg: :parameter_should_be, field: :chk, data: :String) unless params[:chk].is_a? String
|
84
|
+
raise_error(msg: :cannot_be_empty, field: :chk) if params[:chk].empty?
|
83
85
|
end
|
84
86
|
|
87
|
+
# get and converts time to local time
|
88
|
+
current_time = Time.now.localtime('+08:00')
|
89
|
+
|
85
90
|
data = {
|
86
91
|
link_id: Clt.cocs_link_id,
|
87
|
-
send_time:
|
88
|
-
|
89
|
-
}.merge(params)
|
92
|
+
send_time: current_time.strftime('%F %T')
|
93
|
+
}.merge(params).merge(return_type: 'json')
|
90
94
|
|
91
95
|
unless params.has_key? :chk
|
92
96
|
data[:chk] = generate_checksum "#{Clt.cocs_hash_base}$#{params[:cust_order_no]}$#{params[:order_amount]}$#{data[:send_time]}"
|
93
97
|
end
|
94
98
|
|
95
|
-
|
99
|
+
post_request(service_url: params[:service_url], data: data)
|
96
100
|
end
|
97
101
|
|
98
102
|
# Order Refund
|
99
|
-
def order_refund
|
100
|
-
ErrorMessage.
|
103
|
+
def order_refund(params = {})
|
104
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :Parameter, data: :Hash) unless params.is_a? Hash
|
101
105
|
|
102
|
-
ErrorMessage.
|
103
|
-
ErrorMessage.
|
104
|
-
ErrorMessage.
|
106
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil?
|
107
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :service_url, data: :String) unless params[:service_url].is_a? String
|
108
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty?
|
105
109
|
|
106
|
-
ErrorMessage.
|
107
|
-
ErrorMessage.
|
110
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :cust_order_no, data: :String) unless params[:cust_order_no].is_a? String
|
111
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :cust_order_no) if params[:cust_order_no].empty?
|
108
112
|
|
109
|
-
ErrorMessage.
|
110
|
-
ErrorMessage.
|
111
|
-
ErrorMessage.
|
113
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :order_amount) if params[:order_amount].nil?
|
114
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :order_amount, data: :Integer) unless params[:order_amount].is_a? Integer
|
115
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :order_amount, data: 'greater than 0') if params[:order_amount] <= 0
|
112
116
|
|
113
|
-
ErrorMessage.
|
114
|
-
ErrorMessage.
|
115
|
-
ErrorMessage.
|
117
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :refund_amount) if params[:refund_amount].nil?
|
118
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :refund_amount, data: :Integer) unless params[:refund_amount].is_a? Integer
|
119
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :refund_amount, data: 'greater than 0') if params[:refund_amount] <= 0
|
116
120
|
|
117
121
|
if params[:refund_amount] > params[:order_amount]
|
118
|
-
ErrorMessage.
|
122
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :refund_amount, data: 'less than or equal to order_amount')
|
119
123
|
end
|
120
124
|
|
121
125
|
if params.has_key? :chk
|
122
|
-
|
123
|
-
|
126
|
+
raise_error(msg: :parameter_should_be, field: :chk, data: :String) unless params[:chk].is_a? String
|
127
|
+
raise_error(msg: :cannot_be_empty, field: :chk) if params[:chk].empty?
|
124
128
|
end
|
125
129
|
|
130
|
+
# get and converts time to local time
|
131
|
+
current_time = Time.now.localtime('+08:00')
|
132
|
+
|
126
133
|
data = {
|
127
134
|
link_id: Clt.cocs_link_id,
|
128
|
-
send_time:
|
129
|
-
|
130
|
-
}.merge(params)
|
135
|
+
send_time: current_time.strftime('%F %T')
|
136
|
+
}.merge(params).merge(return_type: 'json')
|
131
137
|
|
132
138
|
unless params.has_key? :chk
|
133
139
|
data[:chk] = generate_checksum "#{Clt.cocs_hash_base}$#{params[:cust_order_no]}$#{params[:order_amount]}$#{params[:refund_amount]}$#{data[:send_time]}"
|
134
140
|
end
|
135
141
|
|
136
|
-
|
142
|
+
post_request(service_url: params[:service_url], data: data)
|
137
143
|
end
|
138
144
|
|
139
|
-
# Authorize success
|
140
|
-
def
|
145
|
+
# Authorize success callback validation
|
146
|
+
def auth_success_callback_valid?(params)
|
141
147
|
params = params.stringify_keys
|
142
|
-
checksum = params[
|
143
|
-
|
148
|
+
checksum = params['chk']
|
149
|
+
checksum_generated = generate_checksum "#{Clt.cocs_hash_base}$#{params['order_amount']}$#{params['send_time']}$#{params['ret']}$#{params['acquire_time']}$#{params['auth_code']}$#{params['card_no']}$#{params['notify_time']}$#{params['cust_order_no']}"
|
144
150
|
|
145
|
-
checksum ==
|
151
|
+
checksum == checksum_generated
|
146
152
|
end
|
147
153
|
|
148
|
-
# Authorize fail
|
149
|
-
def
|
154
|
+
# Authorize fail callback validation
|
155
|
+
def auth_fail_callback_valid?(params)
|
150
156
|
params = params.stringify_keys
|
151
|
-
checksum = params[
|
152
|
-
|
157
|
+
checksum = params['chk']
|
158
|
+
checksum_generated = generate_checksum "#{Clt.cocs_hash_base}$#{params['order_amount']}$#{params['send_time']}$#{params['ret']}$#{params['notify_time']}$#{params['cust_order_no']}"
|
153
159
|
|
154
|
-
checksum ==
|
160
|
+
checksum == checksum_generated
|
155
161
|
end
|
156
162
|
|
157
163
|
private
|
158
164
|
|
159
|
-
def
|
165
|
+
def post_request(service_url:, data:)
|
160
166
|
api_url = URI.parse(service_url)
|
161
167
|
response = Net::HTTP.post_form api_url, data
|
162
168
|
|
@@ -165,14 +171,14 @@ module Clt
|
|
165
171
|
begin
|
166
172
|
result = JSON.parse(response.body)
|
167
173
|
rescue
|
168
|
-
result = {
|
174
|
+
result = { 'status' => 'ERROR', 'msg' => 'Response parsing failed', 'response' => response.body }
|
169
175
|
end
|
170
176
|
|
171
177
|
result
|
172
178
|
when Net::HTTPClientError, Net::HTTPInternalServerError
|
173
179
|
raise Net::HTTPError, response.message
|
174
180
|
else
|
175
|
-
raise Net::HTTPError,
|
181
|
+
raise Net::HTTPError, 'Unexpected HTTP response'
|
176
182
|
end
|
177
183
|
end
|
178
184
|
end
|
data/lib/clt/cvs.rb
CHANGED
@@ -3,68 +3,65 @@ module Clt
|
|
3
3
|
include GeneralMethods
|
4
4
|
|
5
5
|
def initialize
|
6
|
-
raise ArgumentError,
|
7
|
-
ErrorMessage.
|
8
|
-
ErrorMessage.
|
6
|
+
raise ArgumentError, 'Please setup cvs_cust_id first' if Clt.cvs_cust_id.nil?
|
7
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :cvs_cust_id, data: :String) unless Clt.cvs_cust_id.is_a? String
|
8
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :cvs_cust_id) if Clt.cvs_cust_id.empty?
|
9
9
|
|
10
|
-
raise ArgumentError,
|
11
|
-
ErrorMessage.
|
12
|
-
ErrorMessage.
|
10
|
+
raise ArgumentError, 'Please setup cvs_cust_password first' if Clt.cvs_cust_password.nil?
|
11
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :cvs_cust_password, data: :String) unless Clt.cvs_cust_password.is_a? String
|
12
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :cvs_cust_password) if Clt.cvs_cust_password.empty?
|
13
13
|
|
14
|
-
ErrorMessage.
|
15
|
-
ErrorMessage.
|
14
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :cvs_default_expire_day, data: :Integer) unless Clt.cvs_default_expire_day.is_a? Integer
|
15
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :cvs_default_expire_day, data: 'greater than 0') if Clt.cvs_default_expire_day <= 0
|
16
16
|
end
|
17
17
|
|
18
|
-
def order_create
|
19
|
-
ErrorMessage.
|
18
|
+
def order_create(params = {})
|
19
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :Parameter, data: :Hash) unless params.is_a? Hash
|
20
20
|
|
21
|
-
ErrorMessage.
|
22
|
-
ErrorMessage.
|
23
|
-
ErrorMessage.
|
21
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil?
|
22
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :service_url, data: :String) unless params[:service_url].is_a? String
|
23
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty?
|
24
24
|
|
25
|
-
ErrorMessage.
|
26
|
-
ErrorMessage.
|
27
|
-
ErrorMessage.
|
25
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :cust_order_number) if params[:cust_order_number].nil?
|
26
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :cust_order_number, data: :String) unless params[:cust_order_number].is_a? String
|
27
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :cust_order_number) if params[:cust_order_number].empty?
|
28
28
|
|
29
|
-
ErrorMessage.
|
30
|
-
ErrorMessage.
|
29
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :order_amount) if params[:order_amount].nil?
|
30
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :order_amount, data: :Integer) unless params[:order_amount].is_a? Integer
|
31
31
|
|
32
32
|
if params.has_key? :expire_date
|
33
|
-
ErrorMessage.
|
34
|
-
ErrorMessage.
|
35
|
-
ErrorMessage.
|
33
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :expire_date, data: :String) unless params[:expire_date].is_a? String
|
34
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :expire_date) if params[:expire_date].empty?
|
35
|
+
ErrorMessage.raise_error(msg: :wrong_data_format, field: :expire_date) unless /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}\z/.match(params[:expire_date])
|
36
36
|
end
|
37
37
|
|
38
38
|
if params.has_key? :payer_name
|
39
|
-
ErrorMessage.
|
40
|
-
ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :payer_name) if params[:payer_name].empty?
|
39
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :payer_name, data: :String) unless params[:payer_name].is_a? String
|
41
40
|
end
|
42
41
|
|
43
42
|
if params.has_key? :payer_postcode
|
44
|
-
ErrorMessage.
|
45
|
-
ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :payer_postcode) if params[:payer_postcode].empty?
|
43
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :payer_postcode, data: :String) unless params[:payer_postcode].is_a? String
|
46
44
|
end
|
47
45
|
|
48
46
|
if params.has_key? :payer_address
|
49
|
-
ErrorMessage.
|
50
|
-
ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :payer_address) if params[:payer_address].empty?
|
47
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :payer_address, data: :String) unless params[:payer_address].is_a? String
|
51
48
|
end
|
52
49
|
|
53
|
-
ErrorMessage.
|
54
|
-
ErrorMessage.
|
55
|
-
ErrorMessage.
|
50
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :payer_mobile) if params[:payer_mobile].nil?
|
51
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :payer_mobile, data: :String) unless params[:payer_mobile].is_a? String
|
52
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :payer_mobile) if params[:payer_mobile].empty?
|
56
53
|
|
57
|
-
ErrorMessage.
|
58
|
-
ErrorMessage.
|
59
|
-
ErrorMessage.
|
54
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :payer_email) if params[:payer_email].nil?
|
55
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :payer_email, data: :String) unless params[:payer_email].is_a? String
|
56
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :payer_email) if params[:payer_email].empty?
|
60
57
|
|
61
|
-
expire_date = params.has_key?(:expire_date) ? params[:expire_date] :
|
58
|
+
expire_date = params.has_key?(:expire_date) ? params[:expire_date] : get_cvs_default_expire_date
|
62
59
|
|
63
60
|
# build xml data
|
64
|
-
builder = Nokogiri::XML::Builder.new(:
|
61
|
+
builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do
|
65
62
|
request {
|
66
63
|
header {
|
67
|
-
cmd
|
64
|
+
cmd 'cvs_order_regiater'
|
68
65
|
cust_id Clt.cvs_cust_id
|
69
66
|
cust_password Clt.cvs_cust_password
|
70
67
|
}
|
@@ -72,39 +69,39 @@ module Clt
|
|
72
69
|
cust_order_number params[:cust_order_number]
|
73
70
|
order_amount params[:order_amount]
|
74
71
|
expire_date expire_date
|
75
|
-
payer_name params[:payer_name]
|
76
|
-
payer_postcode params[:payer_postcode]
|
77
|
-
payer_address params[:payer_address]
|
72
|
+
payer_name params[:payer_name]
|
73
|
+
payer_postcode params[:payer_postcode]
|
74
|
+
payer_address params[:payer_address]
|
78
75
|
payer_mobile params[:payer_mobile]
|
79
76
|
payer_email params[:payer_email]
|
80
77
|
}
|
81
78
|
}
|
82
79
|
end
|
83
80
|
|
84
|
-
|
81
|
+
post_request(service_url: params[:service_url], data: builder.to_xml)
|
85
82
|
end
|
86
83
|
|
87
|
-
def order_query
|
88
|
-
ErrorMessage.
|
84
|
+
def order_query(params = {})
|
85
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :Parameter, data: :Hash) unless params.is_a? Hash
|
89
86
|
|
90
|
-
ErrorMessage.
|
91
|
-
ErrorMessage.
|
92
|
-
ErrorMessage.
|
87
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil?
|
88
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :service_url, data: :String) unless params[:service_url].is_a? String
|
89
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty?
|
93
90
|
|
94
|
-
ErrorMessage.
|
95
|
-
ErrorMessage.
|
96
|
-
ErrorMessage.
|
97
|
-
ErrorMessage.
|
91
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :process_code_update_time_begin) if params[:process_code_update_time_begin].nil?
|
92
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :process_code_update_time_begin, data: :String) unless params[:process_code_update_time_begin].is_a? String
|
93
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :process_code_update_time_begin) if params[:process_code_update_time_begin].empty?
|
94
|
+
ErrorMessage.raise_error(msg: :wrong_data_format, field: :process_code_update_time_begin) unless /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}\z/.match(params[:process_code_update_time_begin])
|
98
95
|
|
99
|
-
ErrorMessage.
|
100
|
-
ErrorMessage.
|
101
|
-
ErrorMessage.
|
102
|
-
ErrorMessage.
|
96
|
+
ErrorMessage.raise_error(msg: :missing_parameter, field: :process_code_update_time_end) if params[:process_code_update_time_end].nil?
|
97
|
+
ErrorMessage.raise_error(msg: :parameter_should_be, field: :process_code_update_time_end, data: :String) unless params[:process_code_update_time_end].is_a? String
|
98
|
+
ErrorMessage.raise_error(msg: :cannot_be_empty, field: :process_code_update_time_end) if params[:process_code_update_time_end].empty?
|
99
|
+
ErrorMessage.raise_error(msg: :wrong_data_format, field: :process_code_update_time_end) unless /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}\z/.match(params[:process_code_update_time_end])
|
103
100
|
|
104
|
-
builder = Nokogiri::XML::Builder.new(:
|
101
|
+
builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do
|
105
102
|
request {
|
106
103
|
header {
|
107
|
-
cmd
|
104
|
+
cmd 'cvs_order_query'
|
108
105
|
cust_id Clt.cvs_cust_id
|
109
106
|
cust_password Clt.cvs_cust_password
|
110
107
|
}
|
@@ -115,7 +112,7 @@ module Clt
|
|
115
112
|
}
|
116
113
|
end
|
117
114
|
|
118
|
-
|
115
|
+
post_request(service_url: params[:service_url], data: builder.to_xml)
|
119
116
|
end
|
120
117
|
|
121
118
|
private
|
@@ -124,35 +121,35 @@ module Clt
|
|
124
121
|
seconds_in_a_day = 60 * 60 * 24
|
125
122
|
offset = seconds_in_a_day * Clt.cvs_default_expire_day
|
126
123
|
|
127
|
-
|
124
|
+
# get and converts time to local time
|
125
|
+
current_time = Time.now.localtime('+08:00')
|
126
|
+
|
127
|
+
(current_time + offset).iso8601
|
128
128
|
end
|
129
129
|
|
130
|
-
def
|
130
|
+
def post_request(service_url:, data:)
|
131
131
|
api_url = URI.parse(service_url)
|
132
132
|
|
133
133
|
http = Net::HTTP.new(api_url.host, api_url.port)
|
134
|
-
http.use_ssl = true if api_url.scheme ==
|
135
|
-
|
136
|
-
req = Net::HTTP::Post.new(api_url.request_uri, initheader = { "Content-Type" => "text/xml" })
|
137
|
-
req.body = data
|
134
|
+
http.use_ssl = true if api_url.scheme == 'https'
|
138
135
|
|
139
|
-
response = http.
|
136
|
+
response = http.post(api_url.request_uri, data, { 'Content-Type' => 'text/xml' })
|
140
137
|
|
141
138
|
case response
|
142
139
|
when Net::HTTPOK
|
143
|
-
parser = Nori.new(:
|
140
|
+
parser = Nori.new(advanced_typecasting: false)
|
144
141
|
|
145
142
|
begin
|
146
|
-
response_hash = parser.parse(response.body)[
|
143
|
+
response_hash = parser.parse(response.body)['response']
|
147
144
|
rescue
|
148
|
-
response_hash = {
|
145
|
+
response_hash = { 'status' => 'ERROR', 'msg' => 'Response parsing failed', 'response' => response.body }
|
149
146
|
end
|
150
147
|
|
151
148
|
response_hash
|
152
149
|
when Net::HTTPClientError, Net::HTTPInternalServerError
|
153
150
|
raise Net::HTTPError, response.message
|
154
151
|
else
|
155
|
-
raise Net::HTTPError,
|
152
|
+
raise Net::HTTPError, 'Unexpected HTTP response'
|
156
153
|
end
|
157
154
|
end
|
158
155
|
end
|
data/lib/clt/error_message.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Clt
|
2
2
|
class ErrorMessage
|
3
|
-
def self.
|
3
|
+
def self.raise_error(params)
|
4
4
|
message = nil
|
5
5
|
|
6
6
|
case params[:msg]
|
@@ -11,7 +11,7 @@ module Clt
|
|
11
11
|
when :data_length_too_short
|
12
12
|
message = "The length of #{params[:field]} is too short"
|
13
13
|
when :wrong_data_format
|
14
|
-
message = "The format
|
14
|
+
message = "The format of #{params[:field]} is wrong"
|
15
15
|
when :cannot_be_empty
|
16
16
|
message = "#{params[:field]} cannot be empty"
|
17
17
|
end
|
data/lib/clt/general_methods.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
module Clt
|
2
2
|
module GeneralMethods
|
3
|
-
# APN(Active Payment Notification)
|
4
|
-
def
|
3
|
+
# APN(Active Payment Notification) notice validation
|
4
|
+
def apn_notice_valid?(params)
|
5
5
|
params = params.stringify_keys
|
6
|
-
checksum = params[
|
7
|
-
|
6
|
+
checksum = params['checksum']
|
7
|
+
checksum_generated = generate_checksum "#{params['api_id']}:#{params['trans_id']}:#{params['amount']}:#{params['status']}:#{params['nonce']}"
|
8
8
|
|
9
|
-
checksum ==
|
9
|
+
checksum == checksum_generated
|
10
10
|
end
|
11
11
|
|
12
|
-
def generate_checksum
|
12
|
+
def generate_checksum(data)
|
13
13
|
Digest::MD5.hexdigest data
|
14
14
|
end
|
15
15
|
end
|
data/lib/clt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clt-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Calvert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: nori
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,28 +44,28 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.13'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
54
|
+
version: '1.13'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '12.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '12.0'
|
69
69
|
description: ''
|
70
70
|
email:
|
71
71
|
- ''
|
@@ -111,8 +111,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
111
|
version: '0'
|
112
112
|
requirements: []
|
113
113
|
rubyforge_project:
|
114
|
-
rubygems_version: 2.5.
|
114
|
+
rubygems_version: 2.5.2
|
115
115
|
signing_key:
|
116
116
|
specification_version: 4
|
117
|
-
summary: Basic API client for President Collect Payment Service
|
117
|
+
summary: Basic API client for President Collect Payment Service
|
118
118
|
test_files: []
|