clt-sdk 2.0.0 → 3.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 +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: []
|