clt-sdk 1.0.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2d05f85f4b20ea6b1bcc86a195e3848cf1ecc1cb
4
- data.tar.gz: ef9fda455b33c44ce4dc07b1b25b0d4b860bafbb
3
+ metadata.gz: 6c1abca04bba99773ae3ec26193f14009553c099
4
+ data.tar.gz: 5acbc8ac75b3ba2a02135abb5455be647301e817
5
5
  SHA512:
6
- metadata.gz: a5eca1fb2c856d7643b879dfaad53bbb59be9e1c39c700f277545dc0bfff8ae56b508c7800c494918d90f1f9b4cafb8b18614f98365520522a29948b0fbf924e
7
- data.tar.gz: f3e51de53f4f24c890521cedcca89ad12762b389241d98e32246470bb7bb55e04080e064c2fb4ca9f08f346ba6dff5f2c9fe0cea3846ee8ed4176abb78aea36e
6
+ metadata.gz: d05873d9c4fe3eb930d430b4575f6f13e42ac5145d91d7af483c79399408d1f0457201f5b0440f5a4ab3817354ed54218b58819f280010ba615b0d84be8546e6
7
+ data.tar.gz: 3450de500406f4e5a1ce83769cdc2aa994e6b8ee52606f93d115d398ff6c00c9a55219b38105a7ee78ebc8548d01e05c4fc74336527dab8880eafa2fff1e09fd
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ 2.0.0 Aug 8th, 2016
2
+ * Update code according to new API document
3
+
1
4
  1.0.1 Jul 7th, 2016
2
5
  * Fix Net issue
3
6
 
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # Clt SDK
5
5
 
6
- Basic API client for President Collect Service.
6
+ API client for President Collect Service.
7
7
 
8
8
  ## Installation
9
9
 
@@ -33,59 +33,62 @@ $ gem install clt-sdk
33
33
  require "clt-sdk"
34
34
 
35
35
  Clt.setup do |config|
36
- config.cvs_cust_id = "YOUR_CVS_CUST_ID"
37
- config.cvs_cust_password = "YOUR_CVS_CUST_PASSWORD"
38
- config.cvs_expire_after = 1
39
- config.cocs_link_id = "YOUR_COCS_LINK_ID"
40
- config.cocs_hash_base = "YOUR_COCS_HASH_BASE"
36
+ config.cvs_cust_id = "CVS_CUST_ID"
37
+ config.cvs_cust_password = "CVS_CUST_PASSWORD"
38
+ config.cvs_default_expire_day = 1
39
+ config.cocs_link_id = "COCS_LINK_ID"
40
+ config.cocs_hash_base = "COCS_HASH_BASE"
41
41
  end
42
42
  ```
43
43
 
44
- `cvs_expire_after`: [**Optional**] The ibon payment code will expired after this setting day (Default: 1)
44
+ `cvs_default_expire_day`: **Optional.** ibon code will expired after this day (Default: 1)
45
45
 
46
46
  ## Example
47
47
 
48
48
  * ibon
49
49
 
50
50
  ```ruby
51
- cvs = Clt::Cvs.new
51
+ cvs_client = Clt::Cvs.new
52
52
  ```
53
53
 
54
54
  #### Order Create
55
55
 
56
56
  ```ruby
57
- result = cvs.order_create(
57
+ result = cvs_client.order_create(
58
58
  service_url: "SERVICE_URL",
59
- order_number: "TESTORDER000001",
60
- amount: 100,
61
- mobile: "0987654321",
62
- email: "test@localhost.com"
59
+ cust_order_number: "TESTORDER000001",
60
+ order_amount: 100,
61
+ payer_mobile: "0987654321",
62
+ payer_email: "test@localhost.com"
63
63
  )
64
64
  ```
65
65
 
66
- Optional parameters: `name`, `postcode`, `address`
66
+ Optional parameters: `expire_date`, `payer_name`, `payer_postcode`, `payer_address`
67
+
68
+ > `expired_date` will overwrite `cvs_default_expire_day` setting.
67
69
 
68
70
  #### Order Query
69
71
 
70
72
  ```ruby
71
- result = cvs.order_query(
73
+ result = cvs_client.order_query(
72
74
  service_url: "SERVICE_URL",
73
- update_time_begin: "2016-05-27T00:00:00+08:00"
75
+ process_code_update_time_begin: "2016-08-08T00:00:00+08:00",
76
+ process_code_update_time_end: "2016-08-08T23:59:59+08:00"
74
77
  )
75
78
  ```
76
79
 
77
- Optional parameters: `update_time_end`
78
-
79
80
  * Credit Card
80
81
 
81
82
  ```ruby
82
- credit_card = Clt::CreditCard.new
83
+ cocs_client = Clt::CreditCard.new
83
84
  ```
84
85
 
86
+ > `chk` will be automatically generated by default.
87
+
85
88
  #### Order Create
86
89
 
87
90
  ```ruby
88
- result = credit_card.order_create(
91
+ result = cocs_client.order_create(
89
92
  service_url: "SERVICE_URL",
90
93
  cust_order_no: "TESTORDER000001",
91
94
  order_amount: 100,
@@ -93,24 +96,26 @@ end
93
96
  )
94
97
  ```
95
98
 
96
- Optional parameters: `cust_order_no`, `limit_product_id`
99
+ Optional parameters: `cust_order_no`, `limit_product_id`, `chk`
97
100
 
98
- > System will automatic generate `cust_order_no` if empty
101
+ > `cust_order_no` will be automatically generated if empty.
99
102
 
100
103
  #### Order Cancel
101
104
 
102
105
  ```ruby
103
- result = credit_card.order_cancel(
106
+ result = cocs_client.order_cancel(
104
107
  service_url: "SERVICE_URL",
105
108
  cust_order_no: "TESTORDER000001",
106
109
  order_amount: 100
107
110
  )
108
111
  ```
109
112
 
113
+ Optional parameters: `chk`
114
+
110
115
  #### Order Refund
111
116
 
112
117
  ```ruby
113
- result = credit_card.order_refund(
118
+ result = cocs_client.order_refund(
114
119
  service_url: "SERVICE_URL",
115
120
  cust_order_no: "TESTORDER000001",
116
121
  order_amount: 100,
@@ -118,11 +123,12 @@ end
118
123
  )
119
124
  ```
120
125
 
126
+ Optional parameters: `chk`
127
+
121
128
  ## Contributing
122
129
 
123
130
  Bug reports and pull requests are welcome on GitHub at https://github.com/CalvertYang/clt-sdk.
124
131
 
125
-
126
132
  ## License
127
133
 
128
134
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/lib/clt-sdk.rb CHANGED
@@ -1,22 +1,25 @@
1
- require "clt/version"
2
- require "clt/error_message"
3
- require "clt/cvs"
4
- require "clt/credit_card"
5
-
6
1
  require "nokogiri"
7
2
  require "nori"
8
3
  require "json"
4
+ require "digest"
9
5
  require "net/http"
10
6
  require "net/https"
11
7
 
8
+ require "clt/version"
9
+ require "clt/error_message"
10
+ require "clt/general_methods"
11
+ require "clt/core_ext/hash"
12
+ require "clt/cvs"
13
+ require "clt/credit_card"
14
+
12
15
  module Clt
13
16
  class << self
14
- attr_accessor :cvs_cust_id, :cvs_cust_password, :cvs_expire_after
17
+ attr_accessor :cvs_cust_id, :cvs_cust_password, :cvs_default_expire_day
15
18
  attr_accessor :cocs_link_id, :cocs_hash_base
16
19
  end
17
20
 
18
- def self.cvs_expire_after
19
- @cvs_expire_after || 1
21
+ def self.cvs_default_expire_day
22
+ @cvs_default_expire_day || 1
20
23
  end
21
24
 
22
25
  def self.setup
@@ -0,0 +1,9 @@
1
+ class Hash
2
+ def stringify_keys
3
+ result = self.class.new
4
+ each_key do |key|
5
+ result[key.to_s] = self[key]
6
+ end
7
+ result
8
+ end
9
+ end
@@ -1,41 +1,49 @@
1
1
  module Clt
2
2
  class CreditCard
3
+ include GeneralMethods
4
+
3
5
  def initialize
4
6
  raise ArgumentError, "Please setup cocs_link_id first" if Clt.cocs_link_id.nil?
5
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :cocs_link_id, data: "String") unless Clt.cocs_link_id.is_a? String
7
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :cocs_link_id, data: "String") unless Clt.cocs_link_id.is_a? String
6
8
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :cocs_link_id) if Clt.cocs_link_id.empty?
7
9
 
8
10
  raise ArgumentError, "Please setup cocs_hash_base first" if Clt.cocs_hash_base.nil?
9
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :cocs_hash_base, data: "String") unless Clt.cocs_hash_base.is_a? String
11
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :cocs_hash_base, data: "String") unless Clt.cocs_hash_base.is_a? String
10
12
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :cocs_hash_base) if Clt.cocs_hash_base.empty?
11
13
  end
12
14
 
13
15
  # Order Create
14
16
  def order_create params = {}
15
- ErrorMessage.raise_argument_error(msg: :wrong_parameter_type, type: "Hash") unless params.is_a? Hash
17
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: "Parameter", data: "Hash") unless params.is_a? Hash
16
18
 
17
19
  ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil?
18
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :service_url, data: "String") unless params[:service_url].is_a? String
20
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :service_url, data: "String") unless params[:service_url].is_a? String
19
21
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty?
20
22
 
21
23
  if params.has_key? :cust_order_no
22
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :cust_order_no, data: "String") unless params[:cust_order_no].is_a? String
24
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :cust_order_no, data: "String") unless params[:cust_order_no].is_a? String
23
25
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :cust_order_no) if params[:cust_order_no].empty?
24
26
  ErrorMessage.raise_argument_error(msg: :data_length_too_short, field: :cust_order_no) if params[:cust_order_no].size < 3
25
27
  end
26
28
 
27
29
  ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :order_amount) if params[:order_amount].nil?
28
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :order_amount, data: "Integer") unless params[:order_amount].is_a? Fixnum
30
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :order_amount, data: "Integer") unless params[:order_amount].is_a? Integer
31
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :order_amount, data: "greater than 0") if params[:order_amount] <= 0
29
32
 
30
33
  ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :order_detail) if params[:order_detail].nil?
31
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :order_detail, data: "String") unless params[:order_detail].is_a? String
34
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :order_detail, data: "String") unless params[:order_detail].is_a? String
32
35
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :order_detail) if params[:order_detail].empty?
33
36
 
34
37
  if params.has_key? :limit_product_id
35
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :limit_product_id, data: "String") unless params[:limit_product_id].is_a? String
38
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :limit_product_id, data: "String") unless params[:limit_product_id].is_a? String
36
39
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :limit_product_id) if params[:limit_product_id].empty?
37
40
  end
38
41
 
42
+ if params.has_key? :chk
43
+ raise_argument_error(msg: :parameter_should_be, field: :chk, data: "String") unless params[:chk].is_a? String
44
+ raise_argument_error(msg: :cannot_be_empty, field: :chk) if params[:chk].empty?
45
+ end
46
+
39
47
  service_url = params[:service_url]
40
48
  params.delete :service_url
41
49
 
@@ -46,75 +54,107 @@ module Clt
46
54
  send_time: Time.now.strftime("%F %T"),
47
55
  return_type: "json"
48
56
  }.merge(params)
49
- data[:chk] = create_chk "#{Clt.cocs_hash_base}$#{params[:order_amount]}$#{data[:send_time]}"
57
+
58
+ unless params.has_key? :chk
59
+ data[:chk] = generate_checksum "#{Clt.cocs_hash_base}$#{params[:order_amount]}$#{data[:send_time]}"
60
+ end
50
61
 
51
62
  request(method: "POST", service_url: service_url, data: data)
52
63
  end
53
64
 
54
65
  # Order Cancel
55
66
  def order_cancel params = {}
56
- ErrorMessage.raise_argument_error(msg: :wrong_parameter_type, type: "Hash") unless params.is_a? Hash
67
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: "Parameter", data: "Hash") unless params.is_a? Hash
57
68
 
58
69
  ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil?
59
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :service_url, data: "String") unless params[:service_url].is_a? String
70
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :service_url, data: "String") unless params[:service_url].is_a? String
60
71
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty?
61
72
 
62
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :cust_order_no, data: "String") unless params[:cust_order_no].is_a? String
73
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :cust_order_no, data: "String") unless params[:cust_order_no].is_a? String
63
74
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :cust_order_no) if params[:cust_order_no].empty?
64
75
 
65
76
  ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :order_amount) if params[:order_amount].nil?
66
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :order_amount, data: "Integer") unless params[:order_amount].is_a? Fixnum
77
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :order_amount, data: "Integer") unless params[:order_amount].is_a? Integer
78
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :order_amount, data: "greater than 0") if params[:order_amount] <= 0
79
+
80
+ if params.has_key? :chk
81
+ raise_argument_error(msg: :parameter_should_be, field: :chk, data: "String") unless params[:chk].is_a? String
82
+ raise_argument_error(msg: :cannot_be_empty, field: :chk) if params[:chk].empty?
83
+ end
67
84
 
68
85
  data = {
69
86
  link_id: Clt.cocs_link_id,
70
87
  send_time: Time.now.strftime("%F %T"),
71
88
  return_type: "json"
72
89
  }.merge(params)
73
- data[:chk] = create_chk "#{Clt.cocs_hash_base}$#{params[:cust_order_no]}$#{params[:order_amount]}$#{data[:send_time]}"
90
+
91
+ unless params.has_key? :chk
92
+ data[:chk] = generate_checksum "#{Clt.cocs_hash_base}$#{params[:cust_order_no]}$#{params[:order_amount]}$#{data[:send_time]}"
93
+ end
74
94
 
75
95
  request(method: "POST", service_url: params[:service_url], data: data)
76
96
  end
77
97
 
78
98
  # Order Refund
79
99
  def order_refund params = {}
80
- ErrorMessage.raise_argument_error(msg: :wrong_parameter_type, type: "Hash") unless params.is_a? Hash
100
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: "Parameter", data: "Hash") unless params.is_a? Hash
81
101
 
82
102
  ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil?
83
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :service_url, data: "String") unless params[:service_url].is_a? String
103
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :service_url, data: "String") unless params[:service_url].is_a? String
84
104
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty?
85
105
 
86
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :cust_order_no, data: "String") unless params[:cust_order_no].is_a? String
106
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :cust_order_no, data: "String") unless params[:cust_order_no].is_a? String
87
107
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :cust_order_no) if params[:cust_order_no].empty?
88
108
 
89
109
  ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :order_amount) if params[:order_amount].nil?
90
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :order_amount, data: "Integer") unless params[:order_amount].is_a? Fixnum
110
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :order_amount, data: "Integer") unless params[:order_amount].is_a? Integer
111
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :order_amount, data: "greater than 0") if params[:order_amount] <= 0
91
112
 
92
113
  ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :refund_amount) if params[:refund_amount].nil?
93
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :refund_amount, data: "Integer") unless params[:refund_amount].is_a? Fixnum
114
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :refund_amount, data: "Integer") unless params[:refund_amount].is_a? Integer
115
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :refund_amount, data: "greater than 0") if params[:refund_amount] <= 0
116
+
117
+ if params[:refund_amount] > params[:order_amount]
118
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :refund_amount, data: "less than or equal to order_amount")
119
+ end
120
+
121
+ if params.has_key? :chk
122
+ raise_argument_error(msg: :parameter_should_be, field: :chk, data: "String") unless params[:chk].is_a? String
123
+ raise_argument_error(msg: :cannot_be_empty, field: :chk) if params[:chk].empty?
124
+ end
94
125
 
95
126
  data = {
96
127
  link_id: Clt.cocs_link_id,
97
128
  send_time: Time.now.strftime("%F %T"),
98
129
  return_type: "json"
99
130
  }.merge(params)
100
- data[:chk] = create_chk "#{Clt.cocs_hash_base}$#{params[:cust_order_no]}$#{params[:order_amount]}$#{params[:refund_amount]}$#{data[:send_time]}"
131
+
132
+ unless params.has_key? :chk
133
+ data[:chk] = generate_checksum "#{Clt.cocs_hash_base}$#{params[:cust_order_no]}$#{params[:order_amount]}$#{params[:refund_amount]}$#{data[:send_time]}"
134
+ end
101
135
 
102
136
  request(method: "POST", service_url: params[:service_url], data: data)
103
137
  end
104
138
 
105
- # Response data validation
106
- def data_valid? params
107
- chk = params["chk"]
108
- generated_chk = create_chk "#{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']}"
139
+ # Authorize success response validation
140
+ def auth_success_response_valid? params
141
+ params = params.stringify_keys
142
+ checksum = params["chk"]
143
+ new_checksum = 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']}"
109
144
 
110
- chk == generated_chk
145
+ checksum == new_checksum
111
146
  end
112
147
 
113
- private
148
+ # Authorize fail response validation
149
+ def auth_fail_response_valid? params
150
+ params = params.stringify_keys
151
+ checksum = params["chk"]
152
+ new_checksum = generate_checksum "#{Clt.cocs_hash_base}$#{params['order_amount']}$#{params['send_time']}$#{params['ret']}$#{params['notify_time']}$#{params['cust_order_no']}"
114
153
 
115
- def create_chk data
116
- Digest::MD5.hexdigest data
117
- end
154
+ checksum == new_checksum
155
+ end
156
+
157
+ private
118
158
 
119
159
  def request method:, service_url:, data:
120
160
  api_url = URI.parse(service_url)
data/lib/clt/cvs.rb CHANGED
@@ -1,55 +1,64 @@
1
1
  module Clt
2
2
  class Cvs
3
+ include GeneralMethods
4
+
3
5
  def initialize
4
6
  raise ArgumentError, "Please setup cvs_cust_id first" if Clt.cvs_cust_id.nil?
5
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :cvs_cust_id, data: "String") unless Clt.cvs_cust_id.is_a? String
7
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :cvs_cust_id, data: "String") unless Clt.cvs_cust_id.is_a? String
6
8
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :cvs_cust_id) if Clt.cvs_cust_id.empty?
7
9
 
8
10
  raise ArgumentError, "Please setup cvs_cust_password first" if Clt.cvs_cust_password.nil?
9
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :cvs_cust_password, data: "String") unless Clt.cvs_cust_password.is_a? String
11
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :cvs_cust_password, data: "String") unless Clt.cvs_cust_password.is_a? String
10
12
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :cvs_cust_password) if Clt.cvs_cust_password.empty?
11
13
 
12
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :cvs_cust_password, data: "Integer") unless Clt.cvs_expire_after.is_a? Fixnum
14
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :cvs_default_expire_day, data: "Integer") unless Clt.cvs_default_expire_day.is_a? Integer
15
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :cvs_default_expire_day, data: "greater than 0") if Clt.cvs_default_expire_day <= 0
13
16
  end
14
17
 
15
18
  def order_create params = {}
16
- ErrorMessage.raise_argument_error(msg: :wrong_parameter_type, type: "Hash") unless params.is_a? Hash
19
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: "Parameter", data: "Hash") unless params.is_a? Hash
17
20
 
18
21
  ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil?
19
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :service_url, data: "String") unless params[:service_url].is_a? String
22
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :service_url, data: "String") unless params[:service_url].is_a? String
20
23
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty?
21
24
 
22
- ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :order_number) if params[:order_number].nil?
23
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :order_number, data: "String") unless params[:order_number].is_a? String
24
- ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :order_number) if params[:order_number].empty?
25
+ ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :cust_order_number) if params[:cust_order_number].nil?
26
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :cust_order_number, data: "String") unless params[:cust_order_number].is_a? String
27
+ ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :cust_order_number) if params[:cust_order_number].empty?
28
+
29
+ ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :order_amount) if params[:order_amount].nil?
30
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :order_amount, data: "Integer") unless params[:order_amount].is_a? Integer
25
31
 
26
- ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :amount) if params[:amount].nil?
27
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :amount, data: "Integer") unless params[:amount].is_a? Fixnum
32
+ if params.has_key? :expire_date
33
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :expire_date, data: "String") unless params[:expire_date].is_a? String
34
+ ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :expire_date) if params[:expire_date].empty?
35
+ ErrorMessage.raise_argument_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
+ end
28
37
 
29
- if params.has_key? :name
30
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :name, data: "String") unless params[:name].is_a? String
31
- ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :name) if params[:name].empty?
38
+ if params.has_key? :payer_name
39
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :payer_name, data: "String") unless params[:payer_name].is_a? String
40
+ ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :payer_name) if params[:payer_name].empty?
32
41
  end
33
42
 
34
- if params.has_key? :postcode
35
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :postcode, data: "String") unless params[:postcode].is_a? String
36
- ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :postcode) if params[:postcode].empty?
43
+ if params.has_key? :payer_postcode
44
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :payer_postcode, data: "String") unless params[:payer_postcode].is_a? String
45
+ ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :payer_postcode) if params[:payer_postcode].empty?
37
46
  end
38
47
 
39
- if params.has_key? :address
40
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :address, data: "String") unless params[:address].is_a? String
41
- ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :address) if params[:address].empty?
48
+ if params.has_key? :payer_address
49
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :payer_address, data: "String") unless params[:payer_address].is_a? String
50
+ ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :payer_address) if params[:payer_address].empty?
42
51
  end
43
52
 
44
- ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :mobile) if params[:mobile].nil?
45
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :mobile, data: "String") unless params[:mobile].is_a? String
46
- ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :mobile) if params[:mobile].empty?
53
+ ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :payer_mobile) if params[:payer_mobile].nil?
54
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :payer_mobile, data: "String") unless params[:payer_mobile].is_a? String
55
+ ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :payer_mobile) if params[:payer_mobile].empty?
47
56
 
48
- ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :email) if params[:email].nil?
49
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :email, data: "String") unless params[:email].is_a? String
50
- ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :email) if params[:email].empty?
57
+ ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :payer_email) if params[:payer_email].nil?
58
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :payer_email, data: "String") unless params[:payer_email].is_a? String
59
+ ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :payer_email) if params[:payer_email].empty?
51
60
 
52
- expire_date = get_cvs_expire_date
61
+ expire_date = params.has_key?(:expire_date) ? params[:expire_date] : cvs_default_expire_date
53
62
 
54
63
  # build xml data
55
64
  builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do
@@ -60,14 +69,14 @@ module Clt
60
69
  cust_password Clt.cvs_cust_password
61
70
  }
62
71
  order {
63
- cust_order_number params[:order_number]
64
- order_amount params[:amount]
72
+ cust_order_number params[:cust_order_number]
73
+ order_amount params[:order_amount]
65
74
  expire_date expire_date
66
- payer_name params[:name] if params.has_key? :name
67
- payer_postcode params[:postcode] if params.has_key? :postcode
68
- payer_address params[:address] if params.has_key? :address
69
- payer_mobile params[:mobile]
70
- payer_email params[:email]
75
+ payer_name params[:payer_name] if params.has_key? :payer_name
76
+ payer_postcode params[:payer_postcode] if params.has_key? :payer_postcode
77
+ payer_address params[:payer_address] if params.has_key? :payer_address
78
+ payer_mobile params[:payer_mobile]
79
+ payer_email params[:payer_email]
71
80
  }
72
81
  }
73
82
  end
@@ -76,21 +85,21 @@ module Clt
76
85
  end
77
86
 
78
87
  def order_query params = {}
79
- ErrorMessage.raise_argument_error(msg: :wrong_parameter_type, type: "Hash") unless params.is_a? Hash
88
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: "Parameter", data: "Hash") unless params.is_a? Hash
80
89
 
81
90
  ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil?
82
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :service_url, data: "String") unless params[:service_url].is_a? String
91
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :service_url, data: "String") unless params[:service_url].is_a? String
83
92
  ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty?
84
93
 
85
- ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :update_time_begin) if params[:update_time_begin].nil?
86
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :update_time_begin, data: "String") unless params[:update_time_begin].is_a? String
87
- ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :update_time_begin) if params[:update_time_begin].empty?
94
+ ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :process_code_update_time_begin) if params[:process_code_update_time_begin].nil?
95
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :process_code_update_time_begin, data: "String") unless params[:process_code_update_time_begin].is_a? String
96
+ ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :process_code_update_time_begin) if params[:process_code_update_time_begin].empty?
97
+ ErrorMessage.raise_argument_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])
88
98
 
89
- if params.has_key? :update_time_end
90
- ErrorMessage.raise_argument_error(msg: :wrong_data, field: :update_time_end, data: "String") unless params[:update_time_end].is_a? String
91
- ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :update_time_end) if params[:update_time_end].empty?
92
- ErrorMessage.raise_argument_error(msg: :wrong_format, field: :update_time_end) unless /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}/.match(params[:update_time_end])
93
- end
99
+ ErrorMessage.raise_argument_error(msg: :missing_parameter, field: :process_code_update_time_end) if params[:process_code_update_time_end].nil?
100
+ ErrorMessage.raise_argument_error(msg: :parameter_should_be, field: :process_code_update_time_end, data: "String") unless params[:process_code_update_time_end].is_a? String
101
+ ErrorMessage.raise_argument_error(msg: :cannot_be_empty, field: :process_code_update_time_end) if params[:process_code_update_time_end].empty?
102
+ ErrorMessage.raise_argument_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])
94
103
 
95
104
  builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do
96
105
  request {
@@ -100,8 +109,8 @@ module Clt
100
109
  cust_password Clt.cvs_cust_password
101
110
  }
102
111
  query {
103
- process_code_update_time_begin params[:update_time_begin]
104
- process_code_update_time_end params[:update_time_end] if params.has_key? :update_time_end
112
+ process_code_update_time_begin params[:process_code_update_time_begin]
113
+ process_code_update_time_end params[:process_code_update_time_end]
105
114
  }
106
115
  }
107
116
  end
@@ -111,8 +120,9 @@ module Clt
111
120
 
112
121
  private
113
122
 
114
- def get_cvs_expire_date
115
- offset = 60 * 60 * 24 * Clt.cvs_expire_after
123
+ def get_cvs_default_expire_date
124
+ seconds_in_a_day = 60 * 60 * 24
125
+ offset = seconds_in_a_day * Clt.cvs_default_expire_day
116
126
 
117
127
  (Time.now + offset).iso8601
118
128
  end
@@ -6,13 +6,11 @@ module Clt
6
6
  case params[:msg]
7
7
  when :missing_parameter
8
8
  message = "Missing required parameter: #{params[:field]}"
9
- when :wrong_parameter_type
10
- message = "Parameter should be #{params[:type]}"
11
- when :wrong_data
9
+ when :parameter_should_be
12
10
  message = "#{params[:field]} should be #{params[:data]}"
13
11
  when :data_length_too_short
14
12
  message = "The length of #{params[:field]} is too short"
15
- when :wrong_format
13
+ when :wrong_data_format
16
14
  message = "The format for #{params[:field]} is wrong"
17
15
  when :cannot_be_empty
18
16
  message = "#{params[:field]} cannot be empty"
@@ -0,0 +1,16 @@
1
+ module Clt
2
+ module GeneralMethods
3
+ # APN(Active Payment Notification) response validation
4
+ def apn_response_valid? params
5
+ params = params.stringify_keys
6
+ checksum = params["checksum"]
7
+ new_checksum = generate_checksum "#{params['api_id']}:#{params['trans_id']}:#{params['amount']}:#{params['status']}:#{params['nonce']}"
8
+
9
+ checksum == new_checksum
10
+ end
11
+
12
+ def generate_checksum data
13
+ Digest::MD5.hexdigest data
14
+ end
15
+ end
16
+ end
data/lib/clt/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Clt
2
- VERSION = "1.0.1"
2
+ VERSION = "2.0.0"
3
3
  end
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: 1.0.1
4
+ version: 2.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: 2016-07-07 00:00:00.000000000 Z
11
+ date: 2016-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -85,9 +85,11 @@ files:
85
85
  - bin/setup
86
86
  - clt-sdk.gemspec
87
87
  - lib/clt-sdk.rb
88
+ - lib/clt/core_ext/hash.rb
88
89
  - lib/clt/credit_card.rb
89
90
  - lib/clt/cvs.rb
90
91
  - lib/clt/error_message.rb
92
+ - lib/clt/general_methods.rb
91
93
  - lib/clt/version.rb
92
94
  homepage: https://github.com/CalvertYang/clt-sdk
93
95
  licenses: