clt-sdk 1.0.1 → 2.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 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: