stone_ecommerce 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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