midas_client 0.2.1 → 0.2.13b

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.
@@ -5,16 +5,19 @@ module MidasClient
5
5
  include EndPoints
6
6
 
7
7
  attr_accessor :login, :password, :environment
8
+ attr_accessor :transaction
9
+ attr_accessor :subscription
10
+ attr_accessor :query
8
11
 
9
12
  def initialize(login=nil, password=nil, environment='DEVELOPMENT', option={})
10
13
  @login = login
11
14
  @password = password
12
15
  @environment = environment
13
- login.blank? ? log("POS STATIC INITIALIZED!") : log("POS #{login} INITIALIZED!")
16
+ login.blank? ? log("POS STATIC INITIALIZED!") : log("POS #{login} INITIALIZED - @environment: #{@environment}")
14
17
  end
15
18
 
16
19
  # Method that's wrap generic response
17
- def base_result(success, code, message)
20
+ def self.base_result(success, code, message)
18
21
  {
19
22
  result: {
20
23
  success: success,
@@ -87,5 +90,17 @@ module MidasClient
87
90
  response
88
91
  end
89
92
 
93
+ def transaction
94
+ @transaction ||= Transaction.new(login, password, environment)
95
+ end
96
+
97
+ def subscription
98
+ @subscription ||= Subscription.new(login, password, environment)
99
+ end
100
+
101
+ def query
102
+ @query ||= Query.new(login, password, environment)
103
+ end
104
+
90
105
  end
91
106
  end
@@ -62,8 +62,11 @@ module MidasClient
62
62
  method = :post
63
63
 
64
64
  # monta a URL de chamada da requisição
65
- endpoint= get_env[:url] + EndPoints::SUBSCRIPTIONS[:context] + EndPoints::SUBSCRIPTIONS[:create]
66
-
65
+ if params[:cardToken].blank?
66
+ endpoint= get_env[:url] + EndPoints::SUBSCRIPTIONS[:context] + EndPoints::SUBSCRIPTIONS[:create_manual]
67
+ else
68
+ endpoint= get_env[:url] + EndPoints::SUBSCRIPTIONS[:context] + EndPoints::SUBSCRIPTIONS[:create_recurrent]
69
+ end
67
70
 
68
71
  params[:externalDate] = (params[:externalDate].blank? ? Time.now.iso8601(1) : params[:externalDate])
69
72
  params[:invoicesCount]= (params[:invoicesCount].blank? ? 12 : params[:invoicesCount])
@@ -81,7 +84,7 @@ module MidasClient
81
84
  #
82
85
  # Response:
83
86
  # result: {
84
- # success: true/false
87
+ # success: true/falseb0FIYhr/xCvGFMuR1Wg059X/0cqwLg==
85
88
  # code: "XXX"
86
89
  # message: "Some message to you"
87
90
  # }
@@ -102,9 +105,11 @@ module MidasClient
102
105
  # Params:
103
106
  # subscriptionToken: querystring (Subscription unique identification generated by our
104
107
  # gateway and received in the subscription's creation response)
105
- # amount: number (Only integer numbers, with the last two digits representing the cents.
108
+ # params: {
109
+ # amount: number (Only integer numbers, with the last two digits representing the cents.
106
110
  # For example: 100 is equivalent to R$ 1,00)
107
- # callbackUrl string - URL to receive the result for each invoice charge
111
+ # callbackUrl: string - URL to receive the result for each invoice charge
112
+ # }
108
113
  #
109
114
  # Response:
110
115
  # result: {
@@ -123,19 +128,52 @@ module MidasClient
123
128
  response = request(method, endpoint, self.login, self.password, params)
124
129
 
125
130
  # recupera a lista de invoices da assinatura para chamar o método de atualização de cada invoice.
126
- result, invoices = subscription_invoices(subscription_token)
131
+ response_invoices = subscription_invoices(subscription_token)
132
+ result = response_invoices[:result]
133
+ invoices = response_invoices[:invoices]
127
134
 
128
135
  # filtra apenas as invoices em aberto
129
- opened_invoices = invoices.select{|s| s[:status] == 'OPEN'}
136
+ opened_invoices = invoices.select{|s| s[:status] == 'OPEN'} unless invoices.blank?
130
137
 
131
138
  # percorre cada uma das invoices abertas e chama o método de atualização
132
139
  opened_invoices.each do |inv|
133
140
  update_invoice(inv[:token], {amount: params[:amount]})
134
- end
141
+ end unless opened_invoices.blank?
135
142
  response
136
143
  end
137
144
 
138
- #= This method performs a query by a specific transaction.
145
+ #= This method renew a subscription increasing the number of invoices associated. Works as a most complete update_subscription operation.
146
+ # This is a is synchronous operation.
147
+ #
148
+ # Params:
149
+ # subscriptionToken: URL querystring
150
+ # body:
151
+ # {
152
+ # "invoicesCount":2,
153
+ # "amount":200,
154
+ # "expirationDate":"2019-01-01"
155
+ # }
156
+ #
157
+ # Response:
158
+ # result: {
159
+ # success: true/false
160
+ # code: "XXX"
161
+ # message: "Some message to you"
162
+ # }
163
+ def renew_subscription(subscription_token, params)
164
+ # define o método de envio da requisição
165
+ method = :put
166
+
167
+ # monta a URL de chamada da requisição
168
+ endpoint = get_env[:url] + EndPoints::SUBSCRIPTIONS[:context] + EndPoints::SUBSCRIPTIONS[:renew].gsub('{subscriptionToken}', subscription_token)
169
+
170
+ # faz a chamada a plataforma de pagamento (MIDAS) para atualizar o valor, numero de invoices e data de expiração inicial das novas invoices de uma assinatura.
171
+ response = request(method, endpoint, self.login, self.password, params)
172
+
173
+ response
174
+ end
175
+
176
+ #= This method performs a query by a specific subscription.
139
177
  # This is a is synchronous operation, using method GET
140
178
  #
141
179
  # Params:
@@ -219,6 +257,139 @@ module MidasClient
219
257
  request(method, endpoint, self.login, self.password, {})
220
258
  end
221
259
 
260
+ #= This method performs a query by a invoice token and return all transactions associated to it.
261
+ # This is a is synchronous operation, using method GET
262
+ #
263
+ # Params:
264
+ # invoice_token: string (Transaction unique identification generated by our
265
+ # gateway and received in the subscription's create response)#
266
+ #
267
+ #
268
+ # Response:
269
+ #
270
+ # {
271
+ # :result=>{
272
+ # :success=>true,
273
+ # :code=>"000",
274
+ # :message=>"Sucesso"
275
+ # },
276
+ # "transactions": [
277
+ # {
278
+ # "externalDate": "2017-10-13T03:00:00.731",
279
+ # "transactionType": "RECURRENT",
280
+ # "paymentMethod": "CREDIT_CARD",
281
+ # "creditCard": {
282
+ # "brand": "MASTER",
283
+ # "panLastDigits": "1137",
284
+ # "expirationMonth": 1,
285
+ # "expirationYear": 2022,
286
+ # "holderName": "Fulano de Tals",
287
+ # "customer": {
288
+ # "documentType": "CPF",
289
+ # "documentNumber": "24503795710"
290
+ # }
291
+ # },
292
+ # "amount": 22950,
293
+ # "instalments": 1,
294
+ # "token": "3962f882146ec3f6bf581a883f52004f",
295
+ # "status": "ERROR"
296
+ # }
297
+ # ]
298
+ # }
299
+ def invoice_transactions(invoice_token)
300
+ # define o método de envio da requisição
301
+ method = :get
302
+
303
+ # monta a URL de chamada da requisição
304
+ endpoint = get_env[:url] + EndPoints::SUBSCRIPTIONS[:context] + EndPoints::SUBSCRIPTIONS[:invoice_transactions].gsub('{invoiceToken}', invoice_token)
305
+
306
+ # faz a chamada a plataforma de pagamento (MIDAS)
307
+ request(method, endpoint, self.login, self.password, {})
308
+ end
309
+
310
+ #= This method associate a transactionToken to an invoice, which changes the invoice status
311
+ # This is a is synchronous operation, using method PUT
312
+ #
313
+ # Params:
314
+ # invoice_token: string (Transaction unique identification generated by our
315
+ # gateway and received in the subscription's create response)#
316
+ #
317
+ # transaction_token: string Identification of the token from the transaction that will
318
+ # be associated to the invoice
319
+ #
320
+ # Response:
321
+ #
322
+ # {
323
+ # :result=>{
324
+ # :success=>true,
325
+ # :code=>"000",
326
+ # :message=>"Sucesso"
327
+ # }
328
+ def invoice_payment(invoice_token, transaction_token)
329
+ # define o método de envio da requisição
330
+ method = :put
331
+
332
+ # monta a URL de chamada da requisição
333
+ endpoint = get_env[:url] + EndPoints::SUBSCRIPTIONS[:context] + EndPoints::SUBSCRIPTIONS[:invoice_payment].gsub('{invoiceToken}', invoice_token)
334
+
335
+ # faz a chamada a plataforma de pagamento (MIDAS)
336
+ request(method, endpoint, self.login, self.password, {transactionToken: transaction_token})
337
+ end
338
+
339
+ #= This method set an invoice as PAID, which changes the invoice status
340
+ # This is a is synchronous operation, using method PUT
341
+ #
342
+ # Params:
343
+ # payment_date: string (format YYYY-MM-DD, ex: 2018-05-28)
344
+ #
345
+ # payment_voucher: string Identification of the external payment that will
346
+ # be associated to the invoice
347
+ #
348
+ # Response:
349
+ #
350
+ # {
351
+ # :result=>{
352
+ # :success=>true,
353
+ # :code=>"000",
354
+ # :message=>"Sucesso"
355
+ # }
356
+ def invoice_external_payment(invoice_token, payment_date, payment_voucher)
357
+ # define o método de envio da requisição
358
+ method = :put
359
+
360
+ # monta a URL de chamada da requisição
361
+ endpoint = get_env[:url] + EndPoints::SUBSCRIPTIONS[:context] + EndPoints::SUBSCRIPTIONS[:invoice_external_payment].gsub('{invoiceToken}', invoice_token)
362
+
363
+ # faz a chamada a plataforma de pagamento (MIDAS)
364
+ request(method, endpoint, self.login, self.password, {paymentDate: payment_date, paymentVoucher: payment_voucher})
365
+ end
366
+
367
+ #= This method cancel an invoice of a subscription
368
+ # This is a is synchronous operation, using method PUT
369
+ #
370
+ # Params:
371
+ # invoice_token: string (Transaction unique identification generated by our
372
+ # gateway and received in the subscription's create response)#
373
+ #
374
+ # Response:
375
+ #
376
+ # {
377
+ # :result=>{
378
+ # :success=>true,
379
+ # :code=>"000",
380
+ # :message=>"Sucesso"
381
+ # }
382
+ def invoice_cancel(invoice_token)
383
+ # define o método de envio da requisição
384
+ method = :put
385
+
386
+ # monta a URL de chamada da requisição
387
+ endpoint = get_env[:url] + EndPoints::SUBSCRIPTIONS[:context] + EndPoints::SUBSCRIPTIONS[:invoice_cancel].gsub('{invoiceToken}', invoice_token)
388
+
389
+ # faz a chamada a plataforma de pagamento (MIDAS)
390
+ request(method, endpoint, self.login, self.password, {})
391
+ end
392
+
222
393
  #= This method updates the credit card information associated to the subscription.
223
394
  # This is a is synchronous operation, using method PUT
224
395
  #
@@ -253,13 +424,12 @@ module MidasClient
253
424
 
254
425
  #= This method updates a subscription.
255
426
  # This is a is synchronous operation.
256
- #
427
+ # QueryString:
428
+ # invoice_token: Invoice unique identification generated by our gateway
257
429
  # Params:
258
- # subscriptionToken: querystring (Subscription unique identification generated by our
259
- # gateway and received in the subscription's creation response)
260
430
  # amount: number (Only integer numbers, with the last two digits representing the cents.
261
431
  # For example: 100 is equivalent to R$ 1,00)
262
- # expirationDate string deadline date for the invoice. FORMAT: YYY-MM-DD
432
+ # expirationDate string deadline date for the invoice. FORMAT: YYYY-MM-DD
263
433
  #
264
434
  # Response:
265
435
  # result: {
@@ -377,5 +377,100 @@ module MidasClient
377
377
  request(method, endpoint, login, password, {})
378
378
  end
379
379
 
380
+ #= This method performs a query to list all creditcards form a user.
381
+ # This is a is synchronous operation, using method GET
382
+ #
383
+ # Params:
384
+ # documentType: string (CPF or CNPJ)
385
+ # documentNumber: string
386
+ #
387
+ #
388
+ # Response:
389
+ # result: {
390
+ # success: true/false
391
+ # code: "XXX"
392
+ # message: "Some message to you"
393
+ # }
394
+ def query_user_cards(document_type='CPF', document_number)
395
+ # define o método de envio da requisição
396
+ method = :get
397
+
398
+ # monta a URL de chamada da requisição
399
+ endpoint = get_env[:url] + EndPoints::OPERATIONS[:context] + EndPoints::OPERATIONS[:cards_by_user].gsub('{documentType}', document_type).gsub('{documentNumber}', document_number)
400
+
401
+ request(method, endpoint, login, password, {})
402
+ end
403
+
404
+ #= This method creates a billet to be paid
405
+ #
406
+ # Params:
407
+ # externalId: Unique identifier
408
+ # externalDate: Date of operation
409
+ # bankNumber: Bank Number associated to the PointOfSale
410
+ # payer/name: Payer details
411
+ # payer/documentType
412
+ # payer/documentNumber
413
+ # payer/address
414
+ # payer/neighborhood
415
+ # payer/zipCode
416
+ # payer/city
417
+ # payer/state
418
+ # expirationDate: Expiration Date
419
+ # amount: Value of transaction in cents
420
+ # callbackURL
421
+ #
422
+ # # Response:
423
+ # {
424
+ # "result": {
425
+ # "success": true,
426
+ # "code": "000",
427
+ # "message": "Sucesso"
428
+ # },
429
+ # "transactionToken": "83f90dd4569ab44cb46faa0f62b645a4",
430
+ # "lineCode": "34191.09008 00001.230721 00989.870001 1 74700000000100",
431
+ # "url": "http://api.sandbox.ansertecnologia.net/midas-core/v2/transaction/bankbillet/83f90dd4569ab44cb46faa0f62b645a4"
432
+ # }
433
+ def create_billet(*params)
434
+ # Parametros são recebidos como um array de hash, pego o 1o item do array
435
+ params = params.first
436
+
437
+ # define o método de envio da requisição
438
+ method = :post
439
+
440
+ # monta a URL de chamada da requisição
441
+ endpoint= get_env[:url] + EndPoints::OPERATIONS[:context] + EndPoints::OPERATIONS[:create_billet]
442
+
443
+ # regulariza o formato da data
444
+ params[:externalDate] = (params[:externalDate].blank? ? Time.now.iso8601(1) : params[:externalDate])
445
+
446
+ # faz a chamada a plataforma de pagamento (MIDAS)
447
+ request(method, endpoint, self.login, self.password, params)
448
+
449
+ end
450
+
451
+ #= This method return the URL of billet to be paid
452
+ # This is a is synchronous operation.
453
+ #
454
+ # Params:
455
+ # transactionToken: string (Transaction unique identification generated by our
456
+ # gateway and received in the create billet response)
457
+ #
458
+ # Response:
459
+ # result: {
460
+ # success: true/false
461
+ # code: "XXX"
462
+ # message: "Some message to you"
463
+ # }
464
+ def print_billet(transaction_token)
465
+ # define o método de envio da requisição
466
+ method = :get
467
+
468
+ # monta a URL de chamada da requisição
469
+ endpoint = get_env[:url] + EndPoints::OPERATIONS[:context] + EndPoints::OPERATIONS[:print_billet].gsub('{transactionToken}', transaction_token)
470
+
471
+ # faz a chamada a plataforma de pagamento (MIDAS)
472
+ request(method, endpoint, self.login, self.password, {})
473
+
474
+ end
380
475
  end
381
476
  end
@@ -19,6 +19,10 @@ module MidasClient
19
19
  logger.error "#{text}"
20
20
  end
21
21
 
22
+ def sanitized_document_number(number)
23
+ number.gsub('.', '').gsub('-','') unless number.nil?
24
+ end
25
+
22
26
  def sanitize_pci(text)
23
27
  CreditCardSanitizer.new(replacement_token: '@').sanitize!(text.to_s) || text
24
28
  end
@@ -1,3 +1,3 @@
1
1
  module MidasClient
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.13b"
3
3
  end
data/lib/midas_client.rb CHANGED
@@ -24,7 +24,7 @@ module MidasClient
24
24
  attr_reader :gem_root
25
25
 
26
26
  spec = Gem::Specification.find_by_name("midas_client")
27
- @gem_root = spec.gem_dir
27
+ @gem_root = spec.try(:gem_dir)
28
28
 
29
29
  end
30
- end
30
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: midas_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.13b
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Andre Oliveira
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-11 00:00:00.000000000 Z
11
+ date: 2023-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -97,7 +97,6 @@ files:
97
97
  - README.md
98
98
  - Rakefile
99
99
  - lib/midas_client.rb
100
- - lib/midas_client/billet.rb
101
100
  - lib/midas_client/endpoints.rb
102
101
  - lib/midas_client/management.rb
103
102
  - lib/midas_client/query.rb
@@ -123,12 +122,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
122
  version: '0'
124
123
  required_rubygems_version: !ruby/object:Gem::Requirement
125
124
  requirements:
126
- - - ">="
125
+ - - ">"
127
126
  - !ruby/object:Gem::Version
128
- version: '0'
127
+ version: 1.3.1
129
128
  requirements: []
130
- rubyforge_project:
131
- rubygems_version: 2.5.1
129
+ rubygems_version: 3.0.8
132
130
  signing_key:
133
131
  specification_version: 4
134
132
  summary: Midas Client REST API - https://ansertecnologia.com
@@ -1,7 +0,0 @@
1
- module MidasClient
2
-
3
- class Billet < Request
4
-
5
- end
6
-
7
- end