expresscheckout 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/README.md +1 -1
- data/RELEASE.md +3 -0
- data/example.rb +12 -0
- data/expresscheckout.gemspec +1 -1
- data/lib/Cards.rb +15 -59
- data/lib/Customers.rb +92 -0
- data/lib/Orders.rb +25 -158
- data/lib/Payments.rb +59 -16
- data/lib/Test.rb +79 -24
- data/lib/Wallets.rb +74 -0
- data/lib/errors/api_connection_error.rb +2 -0
- data/lib/errors/api_error.rb +3 -0
- data/lib/errors/authentication_error.rb +3 -0
- data/lib/errors/invalid_arguement_error.rb +7 -0
- data/lib/errors/invalid_request_error.rb +3 -0
- data/lib/errors/juspay_error.rb +14 -0
- data/lib/expresscheckout/version.rb +1 -1
- data/lib/expresscheckout.rb +6 -3
- data/lib/util.rb +39 -15
- metadata +14 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 943df6f1dca8ae6f76f96ecea6843fe6abe112d2
|
4
|
+
data.tar.gz: 94048f6a2fcdca9ba1a02910562d792e4dc490d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6665100fb84b0d0f64a178715970097f829033f3f85f175d6798cd893a7b288cdf21e320042ba68d6a8c22eb9ddd3c4d60301f480a3d3c9597059fb79b4103c4
|
7
|
+
data.tar.gz: 7e934728755289d271a71d5e6c94efaf4f06ed28d2acc1d9a353799b64329a10ede5acdbb81263556d54079080ac954e62271804bbfa8ed0cb06894b7c5411be
|
data/.gitignore
CHANGED
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`.
|
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
data/example.rb
ADDED
data/expresscheckout.gemspec
CHANGED
@@ -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.
|
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.
|
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
|
-
|
259
|
-
|
260
|
-
order = Order.new(
|
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, :
|
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
|
-
|
49
|
-
|
50
|
-
|
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
|
-
|
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
|
-
|
84
|
+
parameters = {
|
85
|
+
:payment_method_type => "NB",
|
86
|
+
:format => 'json'
|
87
|
+
}
|
77
88
|
required_args = {}
|
78
|
-
Array[:order_id, :merchant_id, :
|
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, :
|
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
|
-
|
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
|
-
$
|
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.
|
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.
|
46
|
+
status = Orders.status(order_id:@timestamp)
|
46
47
|
assert_equal(status.amount, updated_order.amount)
|
47
|
-
|
48
|
+
end
|
48
49
|
|
50
|
+
def test_refund
|
49
51
|
# Test for refund
|
50
|
-
refunded_order = Orders.refund(unique_request_id: @timestamp, order_id:
|
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.
|
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.
|
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.
|
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:
|
92
|
-
merchant_id:'
|
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
|
-
|
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
|
-
|
104
|
+
|
106
105
|
# Test for create_net_banking_payment
|
107
106
|
payment = Payments.create_net_banking_payment(
|
108
|
-
order_id:
|
109
|
-
merchant_id:'
|
110
|
-
|
111
|
-
|
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
|
-
|
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,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
|
data/lib/expresscheckout.rb
CHANGED
@@ -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 = '
|
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
|
-
|
5
|
-
$
|
6
|
-
|
7
|
-
$
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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.
|
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
|
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
|
- - ">="
|