expresscheckout 0.1.5 → 0.1.6

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: f2911f083bf551ec6ea823f7c7e51a9550640618
4
- data.tar.gz: 554f843e45ea181479b224cb15ef3a014289676f
3
+ metadata.gz: 943df6f1dca8ae6f76f96ecea6843fe6abe112d2
4
+ data.tar.gz: 94048f6a2fcdca9ba1a02910562d792e4dc490d1
5
5
  SHA512:
6
- metadata.gz: 45df3a1113adaba0a7d720791971d3ac19d5c4755a8f14638b5beac1fc05c0e3b2aa1584b2f63c1f55cfe0138883661d7d1c727e151b9eb6c1537bdd1ef49317
7
- data.tar.gz: 4930e17109385464d634759ff372cb15fd98ffd9275b583c4b3dfcd4c502fba3a728d6fcc1b4b4eed35da31d71ea682cafd6846fe78fca00f613d578103419ad
6
+ metadata.gz: 6665100fb84b0d0f64a178715970097f829033f3f85f175d6798cd893a7b288cdf21e320042ba68d6a8c22eb9ddd3c4d60301f480a3d3c9597059fb79b4103c4
7
+ data.tar.gz: 7e934728755289d271a71d5e6c94efaf4f06ed28d2acc1d9a353799b64329a10ede5acdbb81263556d54079080ac954e62271804bbfa8ed0cb06894b7c5411be
data/.gitignore CHANGED
@@ -7,3 +7,5 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ .idea/
11
+ *xml
data/README.md CHANGED
@@ -26,7 +26,7 @@ Or install it yourself as:
26
26
 
27
27
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
28
28
 
29
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
29
+ To install this gem onto your local machine, run `bundle exec rake install`.
30
30
 
31
31
  ## Contributing
32
32
 
data/RELEASE.md ADDED
@@ -0,0 +1,3 @@
1
+ # Release New Version
2
+
3
+ To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
data/example.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'expresscheckout'
2
+ require 'pp'
3
+
4
+ $api_key = '187BF8D543A545789497F14FCAFBD85C'
5
+
6
+ @timestamp = Time.now.to_i
7
+
8
+ order = Orders.create(:order_id => @timestamp, :amount =>10)
9
+ pp order
10
+
11
+ list = Orders.list()
12
+ pp list
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
26
  spec.bindir = "exe"
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
- spec.require_paths = ["lib","lib/Orders.rb","lib/expresscheckout.rb","lib/Payments.rb","lib/Cards.rb","lib/Test.rb","lib/util.rb",]
28
+ spec.require_paths = ["lib","lib/Orders.rb","lib/expresscheckout.rb","lib/Payments.rb","lib/Cards.rb","lib/Test.rb","lib/util.rb","lib/Customers.rb","lib/Wallets.rb"]
29
29
 
30
30
  spec.add_development_dependency "bundler", "~> 1.12"
31
31
  spec.add_development_dependency "rake", "~> 10.0"
data/lib/Cards.rb CHANGED
@@ -26,56 +26,26 @@ class Cards
26
26
 
27
27
  end
28
28
 
29
- def Cards.add(options={})
29
+ def Cards.create(options={})
30
+ if (options.length == 0)
31
+ raise InvalidArguementError.new()
32
+ end
33
+
30
34
  method = 'POST'
31
35
  url = '/card/add'
32
- parameters = {}
33
- required_args = {}
34
- Array[:merchant_id, :customer_id, :customer_email, :card_number, :card_exp_year, :card_exp_month].each do |key|
35
- required_args.store(key,'False')
36
- end
37
- options.each do |key, value|
38
- parameters.store(key,value)
39
- required_args[key] = 'True'
40
- end
41
- Array[:merchant_id, :customer_id, :customer_email, :card_number, :card_exp_year, :card_exp_month].each do |key|
42
- if required_args[key] == 'False'
43
- raise "ERROR: #{key} is a required argument for Cards.add"
44
- end
45
- end
46
- parameters.each do |key, _|
47
- unless Array[:merchant_id, :customer_id, :customer_email, :card_number, :card_exp_year,
48
- :card_exp_month, :name_on_card, :nickname].include?(key)
49
- puts " #{key} is an invalid argument for Cards.add"
50
- end
51
- end
52
36
  response = request(method,url,options)
53
37
  card = Card.new(response.body)
54
38
  return card
55
39
  end
56
40
 
57
41
  def Cards.list(options={})
42
+ customer_id = get_arg(options,:customer_id)
43
+ if customer_id == NIL
44
+ raise InvalidArguementError.new("ERROR: `customer_id` is a required parameter for Cards.list().")
45
+ end
46
+
58
47
  method = 'GET'
59
48
  url = '/card/list'
60
- parameters = {}
61
- required_args = {}
62
- Array[:customer_id].each do |key|
63
- required_args.store(key,'False')
64
- end
65
- options.each do |key, value|
66
- parameters.store(key,value)
67
- required_args[key] = 'True'
68
- end
69
- Array[:customer_id].each do |key|
70
- if required_args[key] == 'False'
71
- raise "ERROR: #{key} is a required argument for Cards.list"
72
- end
73
- end
74
- parameters.each do |key, _|
75
- unless Array[:customer_id].include?(key)
76
- puts " #{key} is an invalid argument for Cards.list"
77
- end
78
- end
79
49
  response = Array(request(method,url,options).body['cards'])
80
50
  cards = []
81
51
  i=0
@@ -88,27 +58,13 @@ class Cards
88
58
  end
89
59
 
90
60
  def Cards.delete(options={})
61
+ card_token = get_arg(options,:card_token)
62
+ if card_token == NIL
63
+ raise InvalidArguementError.new("ERROR: `card_token` is a required parameter for Card.delete().")
64
+ end
65
+
91
66
  method = 'POST'
92
67
  url = '/card/delete'
93
- parameters = {}
94
- required_args = {}
95
- Array[:card_token].each do |key|
96
- required_args.store(key,'False')
97
- end
98
- options.each do |key, value|
99
- parameters.store(key,value)
100
- required_args[key] = 'True'
101
- end
102
- Array[:card_token].each do |key|
103
- if required_args[key] == 'False'
104
- raise "ERROR: #{key} is a required argument for Cards.delete"
105
- end
106
- end
107
- parameters.each do |key, _|
108
- unless Array[:card_token].include?(key)
109
- puts " #{key} is an invalid argument for Cards.delete"
110
- end
111
- end
112
68
  response = request(method,url,options)
113
69
  card = Card.new(response.body)
114
70
  return card
data/lib/Customers.rb ADDED
@@ -0,0 +1,92 @@
1
+ require_relative 'util'
2
+
3
+ class Customers
4
+
5
+ # noinspection ALL
6
+ class Customer
7
+
8
+ attr_reader :id, :object, :date_created, :email_address, :first_name, :last_name, :mobile_country_code, :mobile_number, :object_reference_id
9
+
10
+ def initialize(options = {})
11
+ @id = get_arg(options, 'id')
12
+ @object = get_arg(options, 'object')
13
+ @date_created = get_arg(options, 'date_created')
14
+ @last_update = get_arg(options, 'last_updated')
15
+ @email_address = get_arg(options, 'email_address')
16
+ @first_name = get_arg(options, 'first_name')
17
+ @last_name = get_arg(options, 'last_name')
18
+ @mobile_country_code = get_arg(options, 'mobile_country_code')
19
+ @mobile_number = get_arg(options, 'mobile_number')
20
+ @object_reference_id = get_arg(options, 'object_reference_id')
21
+ end
22
+
23
+ end
24
+
25
+ def Customers.create(options={})
26
+ if (options.length == 0)
27
+ raise InvalidArguementError.new()
28
+ end
29
+ method = 'POST'
30
+ url = '/customers'
31
+ response = request(method,url,options)
32
+ customers = Customer.new(response.body)
33
+ return customers
34
+ end
35
+
36
+ def Customers.list(options={})
37
+ method = 'GET'
38
+ url = '/customers'
39
+ offset = get_arg(options,:offset)
40
+ count = get_arg(options,:count)
41
+
42
+ if count == NIL and offset == NIL
43
+ puts "count & offset can be passed if required.\n"
44
+ end
45
+
46
+ response = request(method,url,options).body
47
+ customer_list = Array(response['list'])
48
+ customers = []
49
+ customer_list.each do |customerData|
50
+ customer = Customer.new(customerData)
51
+ customers.push(customer)
52
+ end
53
+ customer_response = {
54
+ 'count' => response['count'],
55
+ 'offset' => response['offset'],
56
+ 'total' => response['total'],
57
+ 'list' => customers
58
+ }
59
+ return customer_response
60
+ end
61
+
62
+ def Customers.get(options={})
63
+ customer_id = get_arg(options,:customer_id)
64
+ if customer_id == NIL
65
+ raise InvalidArguementError.new("ERROR: `customer_id` is a required parameter for Customers.get().")
66
+ end
67
+
68
+ method = 'GET'
69
+ url = "/customers/#{customer_id}"
70
+ response = request(method,url,options)
71
+ customers = Customer.new(response.body)
72
+ return customers
73
+ end
74
+
75
+ def Customers.update(options={})
76
+ customer_id = get_arg(options,:customer_id)
77
+ if customer_id == NIL
78
+ raise InvalidArguementError.new("ERROR: `customer_id` is a required parameter for Customers.update().")
79
+ end
80
+
81
+ method = 'POST'
82
+ url = "/customers/#{customer_id}"
83
+ response = request(method,url,options)
84
+ customers = Customer.new(response.body)
85
+ return customers
86
+ end
87
+
88
+ def Customers.delete(options={})
89
+ raise "ERROR: Not Implemented"
90
+ end
91
+
92
+ end
data/lib/Orders.rb CHANGED
@@ -142,57 +142,26 @@ class Orders
142
142
  end
143
143
 
144
144
  def Orders.create(options={})
145
+ order = get_arg(options, :order_id)
146
+ if order == NIL
147
+ raise InvalidArguementError.new("ERROR: `order_id` is required parameter for Orders.create()")
148
+ end
149
+
145
150
  method = 'POST'
146
151
  url = '/order/create'
147
- parameters = {}
148
- required_args = {}
149
- Array[:order_id,:amount].each do |key|
150
- required_args.store(key,'False')
151
- end
152
- options.each do |key, value|
153
- parameters.store(key,value)
154
- required_args[key] = 'True'
155
- end
156
- Array[:order_id,:amount].each do |key|
157
- if required_args[key] == 'False'
158
- raise "ERROR: #{key} is a required argument for Orders.create"
159
- end
160
- end
161
- parameters.each do |key, _|
162
- unless @all_input_params.include?(key)
163
- puts " #{key} is an invalid argument for Orders.create"
164
- end
165
- end
166
- if parameters[:amount].class != Fixnum and parameters[:amount].class != Float
167
- raise "ERROR: 'amount' should be of type Fixnum or FLoat"
168
- end
169
152
  response = request(method,url,options)
170
153
  order = Order.new(response.body)
171
154
  return order
172
155
  end
173
156
 
174
- def Orders.get_status(options={})
157
+ def Orders.status(options={})
158
+ order = get_arg(options, :order_id)
159
+ if order == NIL
160
+ raise InvalidArguementError.new("ERROR: `order_id` is required parameter for Orders.status()")
161
+ end
162
+
175
163
  method = 'GET'
176
164
  url = '/order/status'
177
- parameters = {}
178
- required_args = {}
179
- Array[:order_id].each do |key|
180
- required_args.store(key,'False')
181
- end
182
- options.each do |key, value|
183
- parameters.store(key,value)
184
- required_args[key] = 'True'
185
- end
186
- Array[:order_id].each do |key|
187
- if required_args[key] == 'False'
188
- raise "ERROR: #{key} is a required argument for Orders.get_status"
189
- end
190
- end
191
- parameters.each do |key, _|
192
- unless Array[:order_id].include?(key)
193
- puts " #{key} is an invalid argument for Orders.get_status"
194
- end
195
- end
196
165
  response = request(method,url,options)
197
166
  order = Order.new(response.body)
198
167
  return order
@@ -201,142 +170,40 @@ class Orders
201
170
  def Orders.list(options={})
202
171
  method = 'GET'
203
172
  url = '/order/list'
204
- parameters = {}
205
- required_args = {}
206
- Array[].each do |key|
207
- required_args.store(key,'False')
208
- end
209
- options.each do |key, value|
210
- parameters.store(key,value)
211
- required_args[key] = 'True'
212
- end
213
- Array[].each do |key|
214
- if required_args[key] == 'False'
215
- raise "ERROR: #{key} is a required argument for Orders.list"
216
- end
217
- end
218
- parameters.each do |key, _|
219
- unless Array[:'created.gt', :'created.gt', :'created.lt', :'created.ge', :'created.le', :count, :offset].include?(key)
220
- puts " #{key} is an invalid argument for Orders.get_status"
221
- end
222
- end
223
- parameters.each do |key,_|
224
- if key == :'created.gt'
225
- if parameters[:'created.gt'].class != Fixnum
226
- puts 'created.gt should be of type Numeric\n'
227
- end
228
- end
229
- if key == :'created.lt'
230
- if parameters[:'created.lt'].class != Fixnum
231
- puts 'lt should be of type Numeric\n'
232
- end
233
- end
234
- if key == :'created.ge'
235
- if parameters[:'created.ge'].class != Fixnum
236
- puts 'created.ge should be of type Numeric\n'
237
- end
238
- end
239
- if key == :'created.le'
240
- if parameters[:'created.le'].class != Fixnum
241
- puts 'created.le should be of type Numeric\n'
242
- end
243
- end
244
- if key == :count
245
- if parameters[:count].class != Fixnum
246
- puts 'count should be of type Numeric\n'
247
- end
248
- end
249
- if key == :offset
250
- if parameters[:offset].class != Fixnum
251
- puts 'offset should be of type Numeric\n'
252
- end
253
- end
254
- end
255
173
  response = request(method,url,options).body
256
174
  orders = {count: response['count'],total: response['total'], offset: response['offset'] }
257
175
  list = []
258
- i=0
259
- while i < response['count']
260
- order = Order.new(response['list'][i])
176
+ order_list = Array(response['list'])
177
+ order_list.each do |orderData|
178
+ order = Order.new(orderData)
261
179
  list.push(order)
262
- i+=1
263
180
  end
264
181
  orders[:list] = list
265
182
  return orders
266
183
  end
267
184
 
268
185
  def Orders.update(options={})
186
+ order = get_arg(options, :order_id)
187
+ if order == NIL
188
+ raise InvalidArguementError.new("ERROR: `order_id` is required parameter for Orders.update()")
189
+ end
190
+
269
191
  method = 'POST'
270
192
  url = '/order/create'
271
- parameters = {}
272
- required_args = {}
273
- Array[:order_id].each do |key|
274
- required_args.store(key,'False')
275
- end
276
- options.each do |key, value|
277
- parameters.store(key,value)
278
- required_args[key] = 'True'
279
- end
280
- Array[:order_id].each do |key|
281
- if required_args[key] == 'False'
282
- raise "ERROR: #{key} is a required argument for Orders.update"
283
- end
284
- end
285
- parameters.each do |key, _|
286
- unless @all_input_params.include?(key)
287
- puts " #{key} is an invalid argument for Orders.create"
288
- end
289
- end
290
- parameters.each do |key,_|
291
- if key == :currency
292
- puts 'currency cannot be changed\n'
293
- end
294
- if key == :customer_id
295
- puts 'customer_id cannot be changed\n'
296
- end
297
- if key == :customer_email
298
- puts 'customer_email cannot be changed\n'
299
- end
300
- if key == :customer_phone
301
- puts 'customer_phone cannot be changed\n'
302
- end
303
- if key == :description
304
- puts 'description cannot be changed\n'
305
- end
306
- if key == :product_id
307
- puts 'product_id cannot be changed\n'
308
- end
309
- if key == :return_url
310
- puts 'return_url cannot be changed\n'
311
- end
312
- end
313
193
  response = request(method,url,options)
314
194
  order = Order.new(response.body)
315
195
  return order
316
196
  end
317
197
 
318
198
  def Orders.refund(options={})
199
+ order = get_arg(options, :order_id)
200
+ unique_request = get_arg(options, :unique_request_id)
201
+ if order == NIL or unique_request == NIL
202
+ raise InvalidArguementError.new("ERROR: `order_id` & `unique_request_id` is required parameter for Orders.refund()")
203
+ end
204
+
319
205
  method = 'POST'
320
206
  url = '/order/refund'
321
- parameters = {}
322
- required_args = {}
323
- Array[:unique_request_id,:order_id].each do |key|
324
- required_args.store(key,'False')
325
- end
326
- options.each do |key, value|
327
- parameters.store(key,value)
328
- required_args[key] = 'True'
329
- end
330
- Array[:unique_request_id,:order_id].each do |key|
331
- if required_args[key] == 'False'
332
- raise "ERROR: #{key} is a required argument for Orders.refund"
333
- end
334
- end
335
- parameters.each do |key, _|
336
- unless Array[:unique_request_id,:order_id, :amount].include?(key)
337
- puts " #{key} is an invalid argument for Orders.create"
338
- end
339
- end
340
207
  response = request(method,url,options)
341
208
  order = Order.new(response.body)
342
209
  return order
data/lib/Payments.rb CHANGED
@@ -34,9 +34,12 @@ class Payments
34
34
  def Payments.create_card_payment(options={})
35
35
  method = 'POST'
36
36
  url = '/txns'
37
- parameters = {}
37
+ parameters = {
38
+ :payment_method_type => "CARD",
39
+ :format => 'json'
40
+ }
38
41
  required_args = {}
39
- Array[:order_id, :merchant_id, :payment_method_type, :card_token, :card_number, :name_on_card,
42
+ Array[:order_id, :merchant_id, :card_token, :payment_method_type, :card_number, :name_on_card,
40
43
  :card_exp_year, :card_exp_month, :card_security_code, :save_to_locker, :redirect_after_payment,
41
44
  :format].each do |key|
42
45
  required_args.store(key,'False')
@@ -45,11 +48,15 @@ class Payments
45
48
  parameters.store(key,value)
46
49
  required_args[key] = 'True'
47
50
  end
48
- Array[:order_id, :merchant_id, :payment_method_type, :card_token, :card_number, :name_on_card,
49
- :card_exp_year, :card_exp_month, :card_security_code, :save_to_locker, :redirect_after_payment,
50
- :format].each do |key|
51
+
52
+ # Either token or card number validation
53
+ if required_args[:card_token] == 'False' and !([:card_number, :name_on_card, :card_exp_year,:card_exp_month, :card_security_code, :save_to_locker].all? {|s| options.key? s})
54
+ raise InvalidArguementError.new("ERROR: Either [card_token] or [card_number, name_on_card, card_exp_year, card_exp_month, card_security_code, save_to_locker] are required arguments for Payments.create_card_payment()")
55
+ end
56
+
57
+ Array[:order_id, :merchant_id, :redirect_after_payment].each do |key|
51
58
  if required_args[key] == 'False'
52
- raise "ERROR: #{key} is a required argument for Payments.create_card_payment"
59
+ raise InvalidArguementError.new("ERROR: #{key} is a required argument for Payments.create_card_payment")
53
60
  end
54
61
  end
55
62
  parameters.each do |key, _|
@@ -59,13 +66,14 @@ class Payments
59
66
  puts " #{key} is an invalid argument for Payments.create_card_payment"
60
67
  end
61
68
  end
62
- if parameters[:save_to_locker] != true and parameters[:save_to_locker] != false
63
- raise "ERROR: 'save_to_locker' should be true or false"
69
+ if required_args[:save_to_locker] == 'True' && parameters[:save_to_locker] != true and parameters[:save_to_locker] != false
70
+ raise InvalidArguementError.new("ERROR: 'save_to_locker' should be true or false")
64
71
  end
65
72
  if parameters[:redirect_after_payment] != true and parameters[:redirect_after_payment] != false
66
- raise "ERROR: 'redirect_after_payment' should be true or false"
73
+ raise InvalidArguementError.new("ERROR: 'redirect_after_payment' should be true or false")
67
74
  end
68
- response = request(method,url,options)
75
+
76
+ response = request(method,url,parameters)
69
77
  payment = Transaction.new(response.body)
70
78
  return payment
71
79
  end
@@ -73,18 +81,21 @@ class Payments
73
81
  def Payments.create_net_banking_payment(options={})
74
82
  method = 'POST'
75
83
  url = '/txns'
76
- parameters = {}
84
+ parameters = {
85
+ :payment_method_type => "NB",
86
+ :format => 'json'
87
+ }
77
88
  required_args = {}
78
- Array[:order_id, :merchant_id, :payment_method_type, :payment_method, :redirect_after_payment, :format].each do |key|
89
+ Array[:order_id, :merchant_id, :payment_method, :redirect_after_payment].each do |key|
79
90
  required_args.store(key,'False')
80
91
  end
81
92
  options.each do |key, value|
82
93
  parameters.store(key,value)
83
94
  required_args[key] = 'True'
84
95
  end
85
- Array[:order_id, :merchant_id, :payment_method_type, :payment_method, :redirect_after_payment, :format].each do |key|
96
+ Array[:order_id, :merchant_id, :payment_method, :redirect_after_payment].each do |key|
86
97
  if required_args[key] == 'False'
87
- raise "ERROR: #{key} is a required argument for Payments.create_net_banking_payment"
98
+ raise InvalidArguementError.new("ERROR: #{key} is a required argument for Payments.create_net_banking_payment")
88
99
  end
89
100
  end
90
101
  parameters.each do |key, _|
@@ -92,9 +103,41 @@ class Payments
92
103
  puts " #{key} is an invalid argument for Payments.create_net_banking_payment"
93
104
  end
94
105
  end
95
- response = request(method,url,options)
106
+
107
+ response = request(method,url,parameters)
108
+ payment = Transaction.new(response.body)
109
+ return payment
110
+ end
111
+
112
+ def Payments.create_wallet_payment(options={})
113
+ method = 'POST'
114
+ url = '/txns'
115
+ parameters = {
116
+ :payment_method_type => "WALLET",
117
+ :format => 'json'
118
+ }
119
+ required_args = {}
120
+ Array[:order_id, :merchant_id, :payment_method, :redirect_after_payment].each do |key|
121
+ required_args.store(key,'False')
122
+ end
123
+ options.each do |key, value|
124
+ parameters.store(key,value)
125
+ required_args[key] = 'True'
126
+ end
127
+ Array[:order_id, :merchant_id, :payment_method, :redirect_after_payment].each do |key|
128
+ if required_args[key] == 'False'
129
+ raise InvalidArguementError.new("ERROR: #{key} is a required argument for Payments.create_wallet_payment")
130
+ end
131
+ end
132
+ parameters.each do |key, _|
133
+ unless Array[:order_id, :merchant_id, :payment_method_type, :payment_method, :redirect_after_payment, :format, :direct_wallet_token].include?(key)
134
+ puts " #{key} is an invalid argument for Payments.create_wallet_payment"
135
+ end
136
+ end
137
+
138
+ response = request(method,url,parameters)
96
139
  payment = Transaction.new(response.body)
97
140
  return payment
98
141
  end
99
142
 
100
- end
143
+ end
data/lib/Test.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require_relative 'Orders'
2
2
  require_relative 'Cards'
3
3
  require_relative 'Payments'
4
+ require_relative 'Wallets'
5
+ require_relative 'Customers'
4
6
  require 'minitest/autorun'
5
7
  require 'pp'
6
8
 
@@ -16,9 +18,8 @@ def pp(obj)
16
18
  end
17
19
 
18
20
  class Test < Minitest::Test
19
-
20
- $api_key = '4168A8A476B84DBCAF409C24F379BAC5'
21
- $environment = 'production'
21
+ $api_key = '187BF8D543A545789497F14FCAFBD85C'
22
+ $environment = 'staging'
22
23
 
23
24
  def setup
24
25
  @timestamp = Time.now.to_i
@@ -31,7 +32,7 @@ class Test < Minitest::Test
31
32
  #pp order
32
33
 
33
34
  # Test for get_status
34
- status = Orders.get_status(order_id:@timestamp)
35
+ status = Orders.status(order_id:@timestamp)
35
36
  assert_equal(Float(status.order_id), @timestamp)
36
37
  #pp status
37
38
 
@@ -42,12 +43,13 @@ class Test < Minitest::Test
42
43
 
43
44
  # Test for update
44
45
  updated_order = Orders.update(order_id:@timestamp, amount:500)
45
- status = Orders.get_status(order_id:@timestamp)
46
+ status = Orders.status(order_id:@timestamp)
46
47
  assert_equal(status.amount, updated_order.amount)
47
- #pp updated_order
48
+ end
48
49
 
50
+ def test_refund
49
51
  # Test for refund
50
- refunded_order = Orders.refund(unique_request_id: @timestamp, order_id: 1465833326,amount: 10)
52
+ refunded_order = Orders.refund(unique_request_id: @timestamp, order_id: '1471441349',amount: 1)
51
53
  #pp refunded_order
52
54
  end
53
55
 
@@ -61,7 +63,7 @@ class Test < Minitest::Test
61
63
  def test_cards
62
64
 
63
65
  # Test for add
64
- card = Cards.add(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
66
+ card = Cards.create(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
65
67
  card_number:@timestamp*(10**6), card_exp_year:'20', card_exp_month:'12')
66
68
  refute_nil(card.reference)
67
69
  refute_nil(card.token)
@@ -73,9 +75,9 @@ class Test < Minitest::Test
73
75
  #pp deleted_card
74
76
  # Test for list
75
77
  #Test.delete_all_cards
76
- Cards.add(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
78
+ Cards.create(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
77
79
  card_number:@timestamp * (10 ** 6), card_exp_year:'20', card_exp_month:'12')
78
- Cards.add(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
80
+ Cards.create(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
79
81
  card_number:@timestamp * (10 ** 6)+1, card_exp_year:'20', card_exp_month:'12')
80
82
  card_list = Cards.list(customer_id:'user')
81
83
  refute_nil(card_list)
@@ -88,13 +90,10 @@ class Test < Minitest::Test
88
90
 
89
91
  # Test for create_card_payment
90
92
  payment = Payments.create_card_payment(
91
- order_id:1465893617,
92
- merchant_id:'juspay_recharge',
93
- payment_method_type:'CARD',
94
- card_token:'68d6b0c6-6e77-473f-a05c-b460ef983fd8',
93
+ order_id:1470043679,
94
+ merchant_id:'azhar',
95
95
  redirect_after_payment:false,
96
- format:'json',
97
- card_number:'5243681100075285',
96
+ card_number:'4242424242424242',
98
97
  name_on_card:'Customer',
99
98
  card_exp_year:'20',
100
99
  card_exp_month:'12',
@@ -102,18 +101,74 @@ class Test < Minitest::Test
102
101
  save_to_locker:false)
103
102
  refute_nil(payment.txn_id)
104
103
  assert_equal(payment.status, 'PENDING_VBV')
105
- pp payment
104
+
106
105
  # Test for create_net_banking_payment
107
106
  payment = Payments.create_net_banking_payment(
108
- order_id:1465893617,
109
- merchant_id:'juspay_recharge',
110
- payment_method_type:'NB',
111
- payment_method:'NB_ICICI',
112
- redirect_after_payment:false,
113
- format:'json')
107
+ order_id:1470043679,
108
+ merchant_id:'azhar',
109
+ payment_method:'NB_DUMMY',
110
+ redirect_after_payment:false)
114
111
  refute_nil(payment.txn_id)
115
112
  assert_equal(payment.status, 'PENDING_VBV')
116
- pp payment
113
+
114
+ # Test for create_wallet_payment
115
+ payment = Payments.create_wallet_payment(
116
+ order_id:'check5',
117
+ merchant_id:'azharamin',
118
+ payment_method:'MOBIKWIK',
119
+ redirect_after_payment:false)
120
+ refute_nil(payment.txn_id)
121
+ assert_match(/^(PENDING_VBV|CHARGED)$/,payment.status)
122
+ end
123
+
124
+ def test_customers
125
+ #Add customer
126
+ customer = Customers.create(
127
+ object_reference_id: "CustId#{@timestamp}",
128
+ mobile_number: '7272727272',
129
+ email_address: 'az@temp.com',
130
+ first_name: 'temp',
131
+ last_name: 'kumar',
132
+ mobile_country_code: '35'
133
+ )
134
+ refute_nil(customer)
135
+
136
+ #Get customer
137
+ customer = Customers.get(
138
+ customer_id: customer.id
139
+ )
140
+ refute_nil(customer)
141
+
142
+ #Update customer
143
+ customer = Customers.update(
144
+ customer_id: customer.id,
145
+ mobile_number: '7272727273',
146
+ email_address: 'newaz@temp.com',
147
+ first_name: 'newtemp',
148
+ last_name: 'newkumar',
149
+ mobile_country_code: '91'
150
+ )
151
+ refute_nil(customer)
152
+
153
+ #List customer
154
+ customer = Customers.list(
155
+ count: 1
156
+ )
157
+ assert_equal(customer['count'], 1)
158
+ end
159
+
160
+ def test_wallets
161
+ # List wallets by orderId
162
+ wallets = Wallets.list(order_id:'1471434419')
163
+ refute_nil(wallets[0].id)
164
+
165
+ # List wallets by customerId
166
+ wallets = Wallets.list(customer_id:'guest_user_101')
167
+ refute_nil(wallets[0].id)
168
+
169
+ # List wallets by customerId
170
+ wallets = Wallets.refresh_balance(customer_id:'guest_user_104')
171
+ refute_nil(wallets[0].id)
117
172
  end
118
173
  end
119
174
 
data/lib/Wallets.rb ADDED
@@ -0,0 +1,74 @@
1
+ require_relative 'util'
2
+
3
+ class Wallets
4
+
5
+ # noinspection ALL
6
+ class Wallet
7
+
8
+ attr_reader :id, :wallet, :object, :token, :current_balance, :last_refresh
9
+
10
+ def initialize(options = {})
11
+ @id = get_arg(options, 'id')
12
+ @object = get_arg(options, 'object')
13
+ @wallet = get_arg(options, 'wallet')
14
+ @token = get_arg(options, 'token')
15
+ @current_balance = get_arg(options, 'current_balance')
16
+ @last_refresh = get_arg(options, 'last_refreshed')
17
+ end
18
+
19
+ end
20
+
21
+ def Wallets.create(options={})
22
+ raise "ERROR: Not Implemented"
23
+ end
24
+
25
+ def Wallets.list(options={})
26
+ order = get_arg(options, :order_id)
27
+ customer = get_arg(options, :customer_id)
28
+
29
+ if customer == NIL and order == NIL
30
+ raise InvalidArguementError.new("ERROR: `customer_id` or `order_id` is required parameter for Wallets.list()")
31
+ end
32
+
33
+ if customer
34
+ url = "/customers/#{customer}/wallets"
35
+ else
36
+ url = "/orders/#{order}/wallets"
37
+ end
38
+
39
+ method = 'GET'
40
+ response = Array(request(method,url,{}).body['list'])
41
+ wallets = []
42
+ i=0
43
+ while i != response.count
44
+ wallet = Wallet.new(response[i])
45
+ wallets.push(wallet)
46
+ i+=1
47
+ end
48
+ return wallets
49
+ end
50
+
51
+ def Wallets.refresh_balance(options={})
52
+ customer = get_arg(options, :customer_id)
53
+
54
+ if customer == NIL
55
+ raise InvalidArguementError.new("ERROR: `customer_id` is required parameter for Wallets.refresh_balance()")
56
+ end
57
+
58
+ url = "/customers/#{customer}/wallets/refresh-balances"
59
+ method = 'GET'
60
+ response = Array(request(method,url,{}).body['list'])
61
+ wallets = []
62
+ i=0
63
+ while i != response.count
64
+ wallet = Wallet.new(response[i])
65
+ wallets.push(wallet)
66
+ i+=1
67
+ end
68
+ return wallets
69
+ end
70
+
71
+ def Wallets.delete(options={})
72
+ raise "ERROR: Not Implemented"
73
+ end
74
+ end
@@ -0,0 +1,2 @@
1
+ class APIConnectionError < JuspayError
2
+ end
@@ -0,0 +1,3 @@
1
+ class APIError < JuspayError
2
+ end
3
+
@@ -0,0 +1,3 @@
1
+ class AuthenticationError < JuspayError
2
+ end
3
+
@@ -0,0 +1,7 @@
1
+ class InvalidArguementError < JuspayError
2
+ def initialize(message=nil)
3
+ @_message = (message ? message : "ERROR: Please pass requiered parameters.")
4
+ super(@_message)
5
+ end
6
+ end
7
+
@@ -0,0 +1,3 @@
1
+ class InvalidRequestError < JuspayError
2
+ end
3
+
@@ -0,0 +1,14 @@
1
+ class JuspayError < StandardError
2
+
3
+ def initialize(message=nil, http_status=nil, json_body=nil)
4
+ @_message = message
5
+ @http_status = http_status
6
+ @json_body = json_body
7
+ end
8
+
9
+ def to_s
10
+ status_string = @http_status.nil? ? '' : "(Status #{@http_status})\n"
11
+ json_string = @json_body.nil? ? '' : "(Response #{@json_body})\n"
12
+ "\n#{status_string}#{json_string}#{@_message}\n"
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Expresscheckout
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
@@ -1,12 +1,15 @@
1
1
  require "expresscheckout/version"
2
2
 
3
3
  module Expresscheckout
4
- require 'unirest'
5
4
  require_relative 'Orders'
6
5
  require_relative 'Cards'
7
6
  require_relative 'Payments'
7
+ require_relative 'Customers'
8
+ require_relative 'Wallets'
8
9
 
9
- $api_key = ''
10
- $environment = 'production'
10
+ $api_key = nil
11
+ $environment = 'staging'
11
12
  $version= {:JuspayAPILibrary=>'Ruby v1.0'}
12
13
  end
14
+
15
+ require 'unirest'
data/lib/util.rb CHANGED
@@ -1,19 +1,43 @@
1
1
  require_relative 'expresscheckout'
2
+ # Errors
3
+ require 'errors/juspay_error'
4
+ require 'errors/api_error'
5
+ require 'errors/api_connection_error'
6
+ require 'errors/invalid_request_error'
7
+ require 'errors/authentication_error'
8
+ require 'errors/invalid_arguement_error'
2
9
 
3
- def request(method,url,parameters={})
4
- if $environment == 'production'
5
- $server = 'https://api.juspay.in'
6
- elsif $environment == 'staging'
7
- $server = 'https://sandbox.juspay.in'
8
- else
9
- raise 'ERROR: environment variable can be "production" or "staging"'
10
- end
11
- if method == 'GET'
12
- response = Unirest.get $server+url, headers: $version, auth:{:user=>$api_key, :password=>''}, parameters: parameters
13
- else
14
- response = Unirest.post $server +url, headers: $version, auth:{:user=>$api_key, :password=>''}, parameters: parameters
10
+ def request(method, url, parameters={})
11
+ begin
12
+ if $environment == 'production'
13
+ $server = 'https://api.juspay.in'
14
+ elsif $environment == 'staging'
15
+ $server = 'https://sandbox.juspay.in'
16
+ else
17
+ raise InvalidArguementError.new('ERROR: environment variable can be "production" or "staging"')
18
+ end
19
+ if $api_key == nil
20
+ raise AuthenticationError.new("ERROR: API key missing. Please specify api_key.")
21
+ end
22
+ if method == 'GET'
23
+ response = Unirest.get $server+url, headers: $version, auth: {:user => $api_key, :password => ''}, parameters: parameters
24
+ else
25
+ response = Unirest.post $server +url, headers: $version, auth: {:user => $api_key, :password => ''}, parameters: parameters
26
+ end
27
+ if (response.code >= 200 && response.code < 300)
28
+ return response
29
+ elsif ([400, 404].include? response.code)
30
+ raise InvalidRequestError.new('Invalid Request', response.code, response.body)
31
+ elsif (response.code == 401)
32
+ raise AuthenticationError.new('Unauthenticated Request', response.code, response.body)
33
+ else
34
+ raise APIError.new('Invalid Request', response.code, response.body)
35
+ end
36
+ rescue IOError
37
+ raise APIConnectionError.new('Connection error')
38
+ rescue SocketError
39
+ raise APIConnectionError.new('Socket error. Failed to connect.')
15
40
  end
16
- response
17
41
  end
18
42
 
19
43
  def get_arg(options = {}, param)
@@ -27,10 +51,10 @@ def get_arg(options = {}, param)
27
51
  end
28
52
 
29
53
  def check_param(options = {}, param)
30
- options.each do |key,_|
54
+ options.each do |key, _|
31
55
  if key.include?(param)
32
56
  return true
33
57
  end
34
58
  end
35
59
  false
36
- end
60
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expresscheckout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juspay
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-14 00:00:00.000000000 Z
11
+ date: 2016-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -65,14 +65,24 @@ files:
65
65
  - Gemfile
66
66
  - LICENSE.txt
67
67
  - README.md
68
+ - RELEASE.md
68
69
  - Rakefile
69
70
  - bin/console
70
71
  - bin/setup
72
+ - example.rb
71
73
  - expresscheckout.gemspec
72
74
  - lib/Cards.rb
75
+ - lib/Customers.rb
73
76
  - lib/Orders.rb
74
77
  - lib/Payments.rb
75
78
  - lib/Test.rb
79
+ - lib/Wallets.rb
80
+ - lib/errors/api_connection_error.rb
81
+ - lib/errors/api_error.rb
82
+ - lib/errors/authentication_error.rb
83
+ - lib/errors/invalid_arguement_error.rb
84
+ - lib/errors/invalid_request_error.rb
85
+ - lib/errors/juspay_error.rb
76
86
  - lib/expresscheckout.rb
77
87
  - lib/expresscheckout/version.rb
78
88
  - lib/util.rb
@@ -91,6 +101,8 @@ require_paths:
91
101
  - lib/Cards.rb
92
102
  - lib/Test.rb
93
103
  - lib/util.rb
104
+ - lib/Customers.rb
105
+ - lib/Wallets.rb
94
106
  required_ruby_version: !ruby/object:Gem::Requirement
95
107
  requirements:
96
108
  - - ">="