stone_ecommerce 1.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.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +202 -0
  3. data/README.md +64 -0
  4. data/lib/gateway/Address/billing_address.rb +32 -0
  5. data/lib/gateway/Address/buyer_address.rb +36 -0
  6. data/lib/gateway/Address/delivery_address.rb +32 -0
  7. data/lib/gateway/AntiFraud/anti_fraud_analysis_result.rb +47 -0
  8. data/lib/gateway/AntiFraud/query_sale_anti_fraud_analysis_data.rb +51 -0
  9. data/lib/gateway/AntiFraud/query_sale_anti_fraud_analysis_history_data.rb +41 -0
  10. data/lib/gateway/BaseRequest.rb +11 -0
  11. data/lib/gateway/BaseResponse.rb +17 -0
  12. data/lib/gateway/BoletoTransaction/boleto_transaction.rb +43 -0
  13. data/lib/gateway/BoletoTransaction/boleto_transaction_data.rb +44 -0
  14. data/lib/gateway/BoletoTransaction/boleto_transaction_options.rb +14 -0
  15. data/lib/gateway/BoletoTransaction/boleto_transaction_report_file.rb +20 -0
  16. data/lib/gateway/BoletoTransaction/boleto_transaction_result.rb +35 -0
  17. data/lib/gateway/CreditCardTransaction/credit_card.rb +30 -0
  18. data/lib/gateway/CreditCardTransaction/credit_card_transaction.rb +32 -0
  19. data/lib/gateway/CreditCardTransaction/credit_card_transaction_data.rb +104 -0
  20. data/lib/gateway/CreditCardTransaction/credit_card_transaction_options.rb +27 -0
  21. data/lib/gateway/CreditCardTransaction/credit_card_transaction_report_file.rb +29 -0
  22. data/lib/gateway/CreditCardTransaction/manage_credit_card_transaction.rb +12 -0
  23. data/lib/gateway/CreditCardTransaction/retry_sale_credit_card_transaction.rb +13 -0
  24. data/lib/gateway/ErrorItem.rb +17 -0
  25. data/lib/gateway/ErrorReport.rb +18 -0
  26. data/lib/gateway/Gateway.rb +442 -0
  27. data/lib/gateway/InstantBuy/credit_card_data.rb +41 -0
  28. data/lib/gateway/InstantBuy/get_instant_buy_data_response.rb +18 -0
  29. data/lib/gateway/Merchant/merchant.rb +11 -0
  30. data/lib/gateway/OnlineDebit/online_debit_transaction_report_file.rb +18 -0
  31. data/lib/gateway/Order/order.rb +11 -0
  32. data/lib/gateway/Order/order_transaction_report_file.rb +6 -0
  33. data/lib/gateway/Parsers/boleto_transaction_parser.rb +31 -0
  34. data/lib/gateway/Parsers/credit_card_transaction_parser.rb +40 -0
  35. data/lib/gateway/Parsers/header_parser.rb +14 -0
  36. data/lib/gateway/Parsers/online_debit_transaction_parser.rb +30 -0
  37. data/lib/gateway/Parsers/trailer_parser.rb +15 -0
  38. data/lib/gateway/Person/buyer.rb +33 -0
  39. data/lib/gateway/Person/person.rb +47 -0
  40. data/lib/gateway/Recurrency/recurrency.rb +23 -0
  41. data/lib/gateway/Sale/create_sale_request.rb +36 -0
  42. data/lib/gateway/Sale/create_sale_response.rb +25 -0
  43. data/lib/gateway/Sale/manage_sale_request.rb +17 -0
  44. data/lib/gateway/Sale/manage_sale_response.rb +15 -0
  45. data/lib/gateway/Sale/query_sale_request.rb +36 -0
  46. data/lib/gateway/Sale/query_sale_response.rb +18 -0
  47. data/lib/gateway/Sale/request_data.rb +20 -0
  48. data/lib/gateway/Sale/retry_sale_options.rb +14 -0
  49. data/lib/gateway/Sale/retry_sale_request.rb +22 -0
  50. data/lib/gateway/Sale/retry_sale_response.rb +14 -0
  51. data/lib/gateway/Sale/sale_data.rb +33 -0
  52. data/lib/gateway/Sale/sale_order_data.rb +17 -0
  53. data/lib/gateway/SalesOption.rb +17 -0
  54. data/lib/gateway/ShoppingCart/shopping_cart.rb +26 -0
  55. data/lib/gateway/ShoppingCart/shopping_cart_item.rb +23 -0
  56. data/lib/gateway/Trailer.rb +6 -0
  57. data/lib/gateway/address.rb +25 -0
  58. data/lib/gateway/header.rb +5 -0
  59. data/lib/gateway/post_notification.rb +29 -0
  60. data/lib/gateway/transaction_report_file.rb +45 -0
  61. data/lib/stone_ecommerce.rb +70 -0
  62. data/spec/integration/gateway_spec.rb +616 -0
  63. data/spec/integration/test_helper.rb +69 -0
  64. data/spec/spec_helper.rb +96 -0
  65. data/stone_ecommerce.gemspec +19 -0
  66. metadata +247 -0
@@ -0,0 +1,442 @@
1
+ require_relative '../../lib/stone_ecommerce'
2
+
3
+ class Gateway
4
+
5
+ attr_reader :serviceEnvironment
6
+
7
+ attr_reader :merchantKey
8
+
9
+ def initialize(environment=:staging, merchantKey)
10
+ @serviceEnvironment = environment
11
+ @merchantKey = merchantKey
12
+ @@SERVICE_HEADERS = {:MerchantKey => "#{@merchantKey}", :Accept => 'application/json', :"Content-Type" => 'application/json'}
13
+ end
14
+
15
+ # URL de producao
16
+ @@SERVICE_URL_PRODUCTION = 'https://transaction.stone.com.br'
17
+
18
+ # URL de homologacao
19
+ @@SERVICE_URL_STAGING = ''
20
+
21
+ # URL de sandbox
22
+ @@SERVICE_URL_SANDBOX = ''
23
+
24
+ # URL do postnotification de producao
25
+ @@SERVICE_URL_NOTIFICATION_PRODUCTION = ''
26
+
27
+ # URL do postnotification de sandbox
28
+ @@SERVICE_URL_NOTIFICATION_SANDBOX = ''
29
+
30
+ # permite que o integrador adicione uma busca por transacoes utilizando alguns criterios
31
+ def Query(querySaleRequestEnum, key)
32
+ # try, tenta fazer o request
33
+ begin
34
+ # se for homologacao faz a chamada por aqui
35
+ if @serviceEnvironment == :staging
36
+ getRequest(@@SERVICE_URL_STAGING + '/Sale/Query/' + querySaleRequestEnum + '=' + key)
37
+
38
+ # se for producao, faz a chamada por aqui
39
+ elsif @serviceEnvironment == :production
40
+ getRequest(@@SERVICE_URL_PRODUCTION + '/Sale/Query/' + querySaleRequestEnum + '=' + key)
41
+
42
+ # se for sandbox
43
+ elsif @serviceEnvironment == :sandbox
44
+ getRequest(@@SERVICE_URL_SANDBOX + '/Sale/Query/' + querySaleRequestEnum + '=' + key)
45
+ end
46
+
47
+ # se der algum erro, trata aqui
48
+ rescue Exception => e
49
+ return e.message
50
+ end
51
+ end
52
+
53
+ # criar uma transacao na plataforma One utilizando um ou mais meios de pagamento
54
+ def CreateSale(createSaleRequest)
55
+
56
+ saleHash = createSaleRequest.to_json
57
+
58
+ saleHash['BoletoTransactionCollection'] = []
59
+
60
+ saleHash['CreditCardTransactionCollection'] = []
61
+
62
+ saleHash['ShoppingCartCollection'] = []
63
+
64
+ begin
65
+ # transforma a colecao de boleto em json
66
+ if createSaleRequest.BoletoTransactionCollection.any? == false || createSaleRequest.BoletoTransactionCollection.nil?
67
+ saleHash['BoletoTransactionCollection'] = nil
68
+
69
+ else
70
+ createSaleRequest.BoletoTransactionCollection.each_with_index do |boleto, index|
71
+ b = boleto.to_json
72
+ saleHash['BoletoTransactionCollection'] << b
73
+
74
+ if boleto.Options.to_json.any?
75
+ boleto_options = boleto.Options.to_json
76
+ saleHash['BoletoTransactionCollection'][index]['Options'] = boleto_options
77
+ else
78
+ saleHash['BoletoTransactionCollection'][index]['Options'] = nil
79
+ end
80
+
81
+ if boleto.BillingAddress.to_json.any?
82
+ boleto_billing_address = boleto.BillingAddress.to_json
83
+ saleHash['BoletoTransactionCollection'][index]['BillingAddress'] = boleto_billing_address
84
+ else
85
+ saleHash['BoletoTransactionCollection'][index]['BillingAddress'] = nil
86
+ end
87
+ end
88
+ end
89
+
90
+ # transforma a colecao de cartao de credito em json
91
+ if createSaleRequest.CreditCardTransactionCollection.any? == false || createSaleRequest.CreditCardTransactionCollection.nil?
92
+ saleHash['CreditCardTransactionCollection'] = nil
93
+ else
94
+ createSaleRequest.CreditCardTransactionCollection.each_with_index do |creditCard, index|
95
+ c = creditCard.to_json
96
+ saleHash['CreditCardTransactionCollection'] << c
97
+
98
+ if creditCard.Options.to_json.any?
99
+ credit_card_options = creditCard.Options.to_json
100
+ saleHash['CreditCardTransactionCollection'][index]['Options'] = credit_card_options
101
+ else
102
+ saleHash['CreditCardTransactionCollection'][index]['Options'] = nil
103
+ end
104
+
105
+ if creditCard.Recurrency.to_json.any?
106
+ credit_card_recurrency = creditCard.Recurrency.to_json
107
+ saleHash['CreditCardTransactionCollection'][index]['Recurrency'] = credit_card_recurrency
108
+ else
109
+ saleHash['CreditCardTransactionCollection'][index]['Recurrency'] = nil
110
+ end
111
+
112
+ if creditCard.CreditCard.to_json.any?
113
+ credit_card_item = creditCard.CreditCard.to_json
114
+ saleHash['CreditCardTransactionCollection'][index]['CreditCard'] = credit_card_item
115
+
116
+ if creditCard.CreditCard.BillingAddress.to_json.any?
117
+ credit_card_billing_address = creditCard.CreditCard.BillingAddress.to_json
118
+ saleHash['CreditCardTransactionCollection'][index]['CreditCard']['BillingAddress'] = credit_card_billing_address
119
+ else
120
+ saleHash['CreditCardTransactionCollection'][index]['CreditCard']['BillingAddress'] = nil
121
+ end
122
+
123
+ else
124
+ saleHash['CreditCardTransactionCollection'][index]['CreditCard'] = nil
125
+ end
126
+ end
127
+ end
128
+
129
+ # transforma a colecao de shoppingcart em json
130
+ if createSaleRequest.ShoppingCartCollection.any? == false || createSaleRequest.ShoppingCartCollection.nil?
131
+ saleHash['ShoppingCartCollection'] = nil
132
+ else
133
+ createSaleRequest.ShoppingCartCollection.each_with_index do |shoppingCart, index|
134
+ s = shoppingCart.to_json
135
+ saleHash['ShoppingCartCollection'] << s
136
+
137
+ if shoppingCart.DeliveryAddress.to_json.any?
138
+ delivery_address = shoppingCart.DeliveryAddress.to_json
139
+ saleHash['ShoppingCartCollection'][index]['DeliveryAddress'] = delivery_address
140
+ else
141
+ saleHash['ShoppingCartCollection'][index]['DeliveryAddress'] = nil
142
+ end
143
+
144
+ if shoppingCart.ShoppingCartItemCollection.any?
145
+ shoppingCart.ShoppingCartItemCollection.each do |cartItem|
146
+ item = cartItem.to_json
147
+ saleHash['ShoppingCartCollection'][index]['ShoppingCartItemCollection'] << item
148
+ end
149
+ else
150
+ saleHash['ShoppingCartCollection'][index]['ShoppingCartItemCollection'] = nil
151
+ end
152
+ end
153
+ end
154
+
155
+ # transforma objeto options em json
156
+ if createSaleRequest.Options.to_json.any?
157
+ o = createSaleRequest.Options.to_json
158
+ saleHash['Options'] = o
159
+ else
160
+ saleHash['Options'] = nil
161
+ end
162
+
163
+ # transforma objeto order em json
164
+ if createSaleRequest.Order.to_json.any?
165
+ order = createSaleRequest.Order.to_json
166
+ saleHash['Order'] = order
167
+ else
168
+ saleHash['Order'] = nil
169
+ end
170
+
171
+ # transforma objeto merchant em json
172
+ if createSaleRequest.Merchant.to_json.any?
173
+ merchant = createSaleRequest.Merchant.to_json
174
+ saleHash['Merchant'] = merchant
175
+ else
176
+ saleHash['Merchant'] = nil
177
+ end
178
+
179
+ # transforma objeto request data em json
180
+ if createSaleRequest.RequestData.to_json.any?
181
+ request_data = createSaleRequest.RequestData.to_json
182
+ saleHash['RequestData'] = request_data
183
+ else
184
+ saleHash['RequestData'] = nil
185
+ end
186
+
187
+ # transforma o objeto Buyer em json
188
+ if createSaleRequest.Buyer.AddressCollection.any?
189
+ b = createSaleRequest.Buyer.to_json
190
+ saleHash['Buyer'] = b
191
+
192
+ saleHash['Buyer']['AddressCollection'] = []
193
+ createSaleRequest.Buyer.AddressCollection.each do |address|
194
+ a = address.to_json
195
+ saleHash['Buyer']['AddressCollection'] << a
196
+ end
197
+ else
198
+ buyer_hash = createSaleRequest.Buyer.to_json
199
+ buyer_hash.delete('AddressCollection')
200
+ if buyer_hash.blank? == false
201
+ b = createSaleRequest.Buyer.to_json
202
+ saleHash['Buyer'] = b
203
+ saleHash['Buyer']['AddressCollection'] = nil
204
+ else
205
+ saleHash['Buyer'] = nil
206
+ end
207
+ end
208
+
209
+ rescue Exception => e
210
+ return e.message
211
+ end
212
+
213
+ if @serviceEnvironment == :staging
214
+ url = @@SERVICE_URL_STAGING + '/Sale/'
215
+ elsif @serviceEnvironment == :production
216
+ url = @@SERVICE_URL_PRODUCTION + '/Sale/'
217
+ elsif @serviceEnvironment == :sandbox
218
+ url = @@SERVICE_URL_SANDBOX + '/Sale/'
219
+ end
220
+ postRequest(saleHash.to_json, url)
221
+ end
222
+
223
+ # permite forcar a retentativa manualmente de uma transacao (podendo ser tambem uma recorrencia) nao autorizada
224
+ def Retry(retrySaleRequest)
225
+ saleHash = retrySaleRequest.to_json
226
+ saleHash['RetrySaleCreditCardTransactionCollection'] = []
227
+
228
+ begin
229
+ if retrySaleRequest.RetrySaleCreditCardTransactionCollection != nil
230
+ retrySaleRequest.RetrySaleCreditCardTransactionCollection.each do |retrySale|
231
+ r = retrySale.to_json
232
+ saleHash['RetrySaleCreditCardTransactionCollection'] << r
233
+
234
+ if retrySaleRequest.Options.to_json.any?
235
+ retry_options = retrySaleRequest.Options.to_json
236
+ saleHash['Options'] = retry_options
237
+ else
238
+ saleHash['Options'] = nil
239
+ end
240
+ end
241
+ end
242
+ rescue Exception => e
243
+ return e.message
244
+ end
245
+ if @serviceEnvironment == :staging
246
+ url = @@SERVICE_URL_STAGING + '/Sale/Retry'
247
+ elsif @serviceEnvironment == :production
248
+ url = @@SERVICE_URL_PRODUCTION + '/Sale/Retry'
249
+ elsif @serviceEnvironment == :sandbox
250
+ url = @@SERVICE_URL_SANDBOX + '/Sale/Retry'
251
+ end
252
+ postRequest(saleHash.to_json, url)
253
+ end
254
+
255
+ # eh uma forma de desfazer uma transação com cartao de credito mesmo a transacao sendo capturada
256
+ def Cancel(cancelSaleRequest)
257
+ saleHash = cancelSaleRequest.to_json
258
+ saleHash['CreditCardTransactionCollection'] = []
259
+
260
+ begin
261
+ if cancelSaleRequest.CreditCardTransactionCollection != nil
262
+ cancelSaleRequest.CreditCardTransactionCollection.each do |creditCard|
263
+ c = creditCard.to_json
264
+ saleHash['CreditCardTransactionCollection'] << c
265
+ end
266
+ end
267
+ rescue Exception => e
268
+ return e.message
269
+ end
270
+ if @serviceEnvironment == :staging
271
+ url = @@SERVICE_URL_STAGING + '/Sale/Cancel'
272
+ elsif @serviceEnvironment == :production
273
+ url = @@SERVICE_URL_PRODUCTION + '/Sale/Cancel'
274
+ elsif @serviceEnvironment == :sandbox
275
+ url = @@SERVICE_URL_SANDBOX + '/Sale/Cancel'
276
+ end
277
+ postRequest(saleHash.to_json, url)
278
+ end
279
+
280
+ # confirmacao de uma transacao de cartao de credito que ja fora autorizada
281
+ def Capture(captureRequest)
282
+ saleHash = captureRequest.to_json
283
+ saleHash['CreditCardTransactionCollection'] = []
284
+
285
+ begin
286
+ if captureRequest.CreditCardTransactionCollection != nil
287
+ captureRequest.CreditCardTransactionCollection.each do |creditCard|
288
+ c = creditCard.to_json
289
+ saleHash['CreditCardTransactionCollection'] << c
290
+ end
291
+ end
292
+ rescue Exception => e
293
+ return e.message
294
+ end
295
+ if @serviceEnvironment == :staging
296
+ url = @@SERVICE_URL_STAGING + '/Sale/Capture'
297
+ elsif @serviceEnvironment == :production
298
+ url = @@SERVICE_URL_PRODUCTION + '/Sale/Capture'
299
+ elsif @serviceEnvironment == :sandbox
300
+ url = @@SERVICE_URL_SANDBOX + '/Sale/Capture'
301
+ end
302
+ postRequest(saleHash.to_json, url)
303
+ end
304
+
305
+ # faz um parse do xml de post notificaton
306
+ def ParseXmlToNotification(xml)
307
+ begin
308
+ response = PostNotification.ParseNotification(xml)
309
+ rescue Exception => err
310
+ return err.message
311
+ end
312
+
313
+ return response
314
+ end
315
+
316
+ # faz uma requisicao e retorna uma string com o transaction report file
317
+ def TransactionReportFile(date)
318
+ begin
319
+ if @serviceEnvironment == :staging
320
+ url = @@SERVICE_URL_NOTIFICATION_PRODUCTION + date.strftime("%Y%m%d")
321
+ elsif @serviceEnvironment == :production
322
+ url = @@SERVICE_URL_NOTIFICATION_PRODUCTION + date.strftime("%Y%m%d")
323
+ elsif @serviceEnvironment == :sandbox
324
+ url = @@SERVICE_URL_NOTIFICATION_SANDBOX + date.strftime("%Y%m%d")
325
+ end
326
+
327
+ response = getReportFile(url)
328
+
329
+ rescue RestClient::ExceptionWithResponse => err
330
+ return err.response
331
+ end
332
+ return response
333
+ end
334
+
335
+ # faz o download do transaction report file e salva no computador em .txt
336
+ def TransactionReportFileDownloader(date, file_name, path)
337
+ begin
338
+ path = path + file_name + '.txt'
339
+
340
+ response = TransactionReportFile(date)
341
+
342
+ File.write(path, response)
343
+ rescue RestClient::ExceptionWithResponse => err
344
+ return err.response
345
+ end
346
+ end
347
+
348
+ # faz o parse da string recebida do transaction report file e retorna um hash
349
+ def TransactionReportFileParser(file_to_parse)
350
+ transaction_report_file = TransactionReportFile.new
351
+ begin
352
+ response = transaction_report_file.TransactionReportFileParser(file_to_parse)
353
+ rescue Exception => err
354
+ return err
355
+ end
356
+ return response
357
+ end
358
+
359
+ # faz uma requisicao com instant buy key
360
+ def InstantBuyKey(instant_buy_key)
361
+ # try, tenta fazer o request
362
+ begin
363
+
364
+ # se for homologacao faz a chamada por aqui
365
+ if @serviceEnvironment == :staging
366
+ getRequest(@@SERVICE_URL_STAGING + '/CreditCard/' + instant_buy_key)
367
+
368
+ # se for producao, faz a chamada por aqui
369
+ elsif @serviceEnvironment == :production
370
+ getRequest(@@SERVICE_URL_PRODUCTION + '/CreditCard/' + instant_buy_key)
371
+
372
+ # se for sandbox
373
+ elsif @serviceEnvironment == :sandbox
374
+ getRequest(@@SERVICE_URL_SANDBOX + '/CreditCard/' + instant_buy_key)
375
+ end
376
+
377
+ # se der algum erro, trata aqui
378
+ rescue Exception => e
379
+ return e.message
380
+ end
381
+ end
382
+
383
+ # faz uma requisicao com buyer key
384
+ def BuyerKey(buyer_key)
385
+ # try, tenta fazer o request
386
+ begin
387
+
388
+ # se for homologacao faz a chamada por aqui
389
+ if @serviceEnvironment == :staging
390
+ response = getRequest(@@SERVICE_URL_STAGING + '/CreditCard/' + buyer_key + '/BuyerKey')
391
+
392
+ # se for producao, faz a chamada por aqui
393
+ elsif @serviceEnvironment == :production
394
+ response = getRequest(@@SERVICE_URL_PRODUCTION + '/CreditCard/' + buyer_key + '/BuyerKey')
395
+
396
+ # se for sandbox, faz a chamada por aqui
397
+ elsif @serviceEnvironment == :sandbox
398
+ response = getRequest(@@SERVICE_URL_SANDBOX + '/CreditCard/' + buyer_key + '/BuyerKey')
399
+ end
400
+
401
+ # se der algum erro, trata aqui
402
+ rescue Exception => e
403
+ return e.message
404
+ end
405
+
406
+ # se nao houver erros, retorna o objeto
407
+ response
408
+ end
409
+
410
+ # funcao de post generica
411
+ def postRequest(payload, url)
412
+ response = nil
413
+ begin
414
+ response = RestClient.post(url, payload, headers=@@SERVICE_HEADERS)
415
+ rescue RestClient::ExceptionWithResponse => err
416
+ return err.response
417
+ end
418
+ json_response = JSON.load response
419
+ json_response
420
+ end
421
+
422
+ # funcao get generica
423
+ def getRequest(url)
424
+ response = nil
425
+ begin
426
+ response = RestClient.get(url, headers=@@SERVICE_HEADERS)
427
+ rescue RestClient::ExceptionWithResponse => err
428
+ return err.response
429
+ end
430
+ json_response = JSON.load response
431
+ json_response
432
+ end
433
+
434
+ def getReportFile(url)
435
+ begin
436
+ response = RestClient.get(url, headers={:MerchantKey => "#{@merchantKey}"})
437
+ rescue RestClient::ExceptionWithResponse => err
438
+ return err.response
439
+ end
440
+ return response
441
+ end
442
+ end
@@ -0,0 +1,41 @@
1
+ class CreditCardData
2
+ # N�mero mascardo do cart�o de cr�dito
3
+ attr_accessor :MaskedCreditCardNumber
4
+
5
+ # Bandeira do cart�o de cr�dito
6
+ attr_accessor :CreditCardBrand
7
+
8
+ @@CreditCardBrandEnum = {
9
+ :Visa => '1',
10
+ :MasterCard => '2',
11
+ :HiperCard => '3',
12
+ :Amex => '4',
13
+ :Diners => '5',
14
+ :Elo => '6',
15
+ :Aura => '7',
16
+ :Discover => '8',
17
+ :CasaShow => '9',
18
+ :Havan => '10',
19
+ :HugCard => '11',
20
+ :AndarAki => '12',
21
+ :LeaderCard => '13',
22
+ :Submarino => '14'
23
+ }
24
+
25
+ # Chave do cart�o de cr�dito. Utilizada para identificar um cart�o de cr�dito no gateway
26
+ attr_accessor :InstantBuyerKey
27
+
28
+ # Informa se o cart�o de cr�dito expirou
29
+ attr_accessor :IsExpiredCreditCard
30
+
31
+ def initialize
32
+ @CreditCardBrand = self.CreditCardBrandEnum
33
+ end
34
+
35
+ def to_json
36
+ hash = {}
37
+ instance_variables.each {|var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
38
+ hash
39
+ end
40
+
41
+ end
@@ -0,0 +1,18 @@
1
+ class GetInstantBuyDataResponse
2
+ # Lista de cart�es de cr�dito
3
+ attr_accessor :CreditCardDataCollection
4
+
5
+ # Total de cart�es de cr�dito retornados
6
+ attr_accessor :CreditCardDataCount
7
+
8
+ def initialize
9
+ @CreditCardDataCollection = Array.new
10
+ end
11
+
12
+ def to_json
13
+ hash = {}
14
+ instance_variables.each {|var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
15
+ hash
16
+ end
17
+
18
+ end
@@ -0,0 +1,11 @@
1
+ class Merchant
2
+ # Identificador da loja na plataforma
3
+ attr_accessor :MerchantReference
4
+
5
+ def to_json
6
+ hash = {}
7
+ instance_variables.each {|var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
8
+ hash
9
+ end
10
+
11
+ end
@@ -0,0 +1,18 @@
1
+ class OnlineDebitTransactionReportFile
2
+ attr_accessor :Order
3
+ attr_accessor :TransactionKey
4
+ attr_accessor :TransactionReference
5
+ attr_accessor :Bank
6
+ attr_accessor :Status
7
+ attr_accessor :AmountInCents
8
+ attr_accessor :AmountPaidInCents
9
+ attr_accessor :PaymentDate
10
+ attr_accessor :BankReturnCode
11
+ attr_accessor :BankPaymentDate
12
+ attr_accessor :Signature
13
+ attr_accessor :TransactionKeyToBank
14
+
15
+ def initialize
16
+ @Order = OrderTransactionReportFile.new
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ class Order
2
+ # Identificador do pedido no sistema da loja
3
+ attr_accessor :OrderReference
4
+
5
+ def to_json
6
+ hash = {}
7
+ instance_variables.each {|var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
8
+ hash
9
+ end
10
+
11
+ end
@@ -0,0 +1,6 @@
1
+ class OrderTransactionReportFile
2
+ attr_accessor :OrderKey
3
+ attr_accessor :OrderReference
4
+ attr_accessor :MerchantKey
5
+ attr_accessor :MerchantName
6
+ end
@@ -0,0 +1,31 @@
1
+ class BoletoTransactionParser
2
+ def Parse(elements)
3
+ @@DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
4
+
5
+ if elements.length < 18
6
+ throw('The expected parameter count is 18')
7
+ end
8
+
9
+ boleto_transaction = BoletoTransactionReportFile.new
10
+ boleto_transaction.Order.OrderKey = elements[1]
11
+ boleto_transaction.Order.OrderReference = elements[2]
12
+ boleto_transaction.Order.MerchantKey = elements[3]
13
+ boleto_transaction.Order.MerchantName = elements[4]
14
+
15
+ boleto_transaction.TransactionKey = elements[5]
16
+ boleto_transaction.TransactionReference = elements[6]
17
+ boleto_transaction.Status = elements[7]
18
+ boleto_transaction.NossoNumero = elements[8]
19
+ boleto_transaction.BankNumber = elements[9]
20
+ boleto_transaction.Agency = elements[10]
21
+ boleto_transaction.Account = elements[11]
22
+ boleto_transaction.BarCode = elements[12]
23
+ boleto_transaction.ExpirationDate = DateTime.strptime(elements[13],'%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT)
24
+ boleto_transaction.AmountInCents = elements[14].to_i
25
+ boleto_transaction.AmountPaidInCents = (elements[15].to_s == '') == false ? elements[15].to_i : 0
26
+ boleto_transaction.PaymentDate = (elements[16].to_s == '') == false ? DateTime.strptime(elements[16], '%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
27
+ boleto_transaction.CreditDate = (elements[17].chomp.to_s == '') == false ? DateTime.strptime(elements[17], '%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
28
+
29
+ return boleto_transaction
30
+ end
31
+ end
@@ -0,0 +1,40 @@
1
+ class CreditCardTransactionParser
2
+ def Parse(elements)
3
+ @@DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
4
+
5
+ if elements.length < 27
6
+ throw('The expected parameter count is 27')
7
+ end
8
+
9
+ credit_card_transaction = CreditCardTransactionReportFile.new
10
+ credit_card_transaction.Order.OrderKey = elements[1]
11
+ credit_card_transaction.Order.OrderReference = elements[2]
12
+ credit_card_transaction.Order.MerchantKey = elements[3]
13
+ credit_card_transaction.Order.MerchantName = elements[4]
14
+
15
+ credit_card_transaction.TransactionKey = elements[5]
16
+ credit_card_transaction.TransactionKeyToAcquirer = elements[6]
17
+ credit_card_transaction.CreditCardTransactionReference = elements[7]
18
+ credit_card_transaction.CreditCardBrand = elements[8]
19
+ credit_card_transaction.CreditCardNumber = elements[9]
20
+ credit_card_transaction.InstallmentCount = (elements[10].to_s == '') == false ? elements[10].to_i : 0
21
+ credit_card_transaction.AcquirerName = elements[11]
22
+ credit_card_transaction.Status = elements[12]
23
+ credit_card_transaction.AmountInCents = (elements[13].to_s == '') == false ? elements[13].to_i : 0
24
+ credit_card_transaction.IataAmountInCents = (elements[14].to_s == '') == false ? elements[14].to_i : 0
25
+ credit_card_transaction.AuthorizationCode = elements[15]
26
+ credit_card_transaction.TransactionIdentifier = elements[16]
27
+ credit_card_transaction.UniqueSequentialNumber = elements[17]
28
+ credit_card_transaction.AuthorizedAmountInCents = (elements[18].to_s == '') == false ? elements[18].to_i : 0
29
+ credit_card_transaction.CapturedAmountInCents = (elements[19].to_s == '') == false ? elements[19].to_i : 0
30
+ credit_card_transaction.VoidedAmountInCents = (elements[20].to_s == '') == false ? elements[20].to_i : 0
31
+ credit_card_transaction.RefundedAmountInCents = (elements[21].to_s == '') == false ? elements[21].to_i : 0
32
+ credit_card_transaction.AcquirerAuthorizationReturnCode = elements[22]
33
+ credit_card_transaction.AuthorizedDate = (elements[23].to_s == '') == false ? DateTime.strptime(elements[23], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
34
+ credit_card_transaction.CapturedDate = (elements[24].to_s == '') == false ? DateTime.strptime(elements[24], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
35
+ credit_card_transaction.VoidedDate = (elements[25].to_s == '') == false ? DateTime.strptime(elements[25], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
36
+ credit_card_transaction.LastProbeDate = (elements[26].chomp.to_s == '') == false ? DateTime.strptime(elements[26], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
37
+
38
+ return credit_card_transaction
39
+ end
40
+ end
@@ -0,0 +1,14 @@
1
+ class HeaderParser
2
+ def Parse(elements)
3
+ if elements.length < 4
4
+ throw('The expected parameter count is 4')
5
+ end
6
+
7
+ header = Header.new
8
+ header.TransactionProcessedDate = Date.parse(elements[1]).strftime('%Y%m%d')
9
+ header.ReportFileCreateDate = Date.parse(elements[2]).strftime('%Y%m%d %H:%M:%S')
10
+ header.Version = elements[3].chomp
11
+
12
+ return header
13
+ end
14
+ end
@@ -0,0 +1,30 @@
1
+ class OnlineDebitTransactionParser
2
+ def Parse(elements)
3
+ @@DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
4
+
5
+ if elements.length < 16
6
+ throw('The expected parameter count is 16')
7
+ end
8
+
9
+ online_debit_transaction = OnlineDebitTransactionReportFile.new
10
+
11
+ online_debit_transaction.Order.OrderKey = elements[1]
12
+ online_debit_transaction.Order.OrderReference = elements[2]
13
+ online_debit_transaction.Order.MerchantKey = elements[3]
14
+ online_debit_transaction.Order.MerchantName = elements[4]
15
+
16
+ online_debit_transaction.TransactionKey = elements[5]
17
+ online_debit_transaction.TransactionReference = elements[6]
18
+ online_debit_transaction.Bank = elements[7]
19
+ online_debit_transaction.Status = elements[8]
20
+ online_debit_transaction.AmountInCents = elements[9].to_i
21
+ online_debit_transaction.AmountPaidInCents = (elements[10].to_s == '') == false ? elements[10].to_i : 0
22
+ online_debit_transaction.PaymentDate = (elements[11].to_s == '') == false ? DateTime.strptime(elements[11],'%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
23
+ online_debit_transaction.BankReturnCode = elements[12]
24
+ online_debit_transaction.BankPaymentDate = elements[13]
25
+ online_debit_transaction.Signature = elements[14]
26
+ online_debit_transaction.TransactionKeyToBank = elements[15].chomp
27
+
28
+ return online_debit_transaction
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ class TrailerParser
2
+ def Parse(elements)
3
+ if elements.length < 5
4
+ throw('The expected parameter count is 5')
5
+ end
6
+
7
+ trailer = Trailer.new
8
+ trailer.OrderDataCount = elements[1]
9
+ trailer.CreditCardTransactionDataCount = elements[2]
10
+ trailer.BoletoTransactionDataCount = elements[3]
11
+ trailer.OnlineDebitTransactionDataCount = elements[4].chomp
12
+
13
+ return trailer
14
+ end
15
+ end