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,616 @@
1
+ require_relative '../../lib/stone_ecommerce'
2
+ require_relative 'test_helper'
3
+
4
+ merchant_key = 'merchant_key'
5
+ gateway = Gateway.new(:production, merchant_key)
6
+
7
+ RSpec.describe Gateway do
8
+ it 'should create a sale with boleto' do
9
+ createSaleRequest = CreateSaleRequest.new
10
+
11
+ boletoTransaction = BoletoTransaction.new
12
+ boletoTransaction.AmountInCents = 100
13
+ boletoTransaction.BankNumber = '237'
14
+ boletoTransaction.DocumentNumber = '12345678901'
15
+ boletoTransaction.Instructions = 'Pagar antes do vencimento'
16
+ boletoTransaction.TransactionReference = 'BoletoTest#Ruby01'
17
+ boletoTransaction.Options.CurrencyIso = 'BRL'
18
+ boletoTransaction.Options.DaysToAddInBoletoExpirationDate = 5
19
+
20
+ createSaleRequest.BoletoTransactionCollection << boletoTransaction
21
+
22
+ response = gateway.CreateSale(createSaleRequest)
23
+
24
+ expect(response[:ErrorReport]).to eq nil
25
+ end
26
+
27
+ it 'should create a sale with credit card' do
28
+ createSaleRequest = CreateSaleRequest.new
29
+
30
+ buyerAddress = BuyerAddress.new
31
+ buyerAddress.AddressType = 'Residential'
32
+ buyerAddress.City = 'Rio de Janeiro'
33
+ buyerAddress.Complement = '10 Andar'
34
+ buyerAddress.Country = 'Brazil'
35
+ buyerAddress.District = 'Centro'
36
+ buyerAddress.Number = '199'
37
+ buyerAddress.State = 'RJ'
38
+ buyerAddress.Street = 'Rua da Quitanda'
39
+ buyerAddress.ZipCode = '20091005'
40
+
41
+ creditCardTransaction = CreditCardTransaction.new
42
+ creditCardTransaction.AmountInCents = 100
43
+ creditCardTransaction.InstallmentCount = 1
44
+ creditCardTransaction.TransactionReference = 'CreditCard One RubySDK Test'
45
+ creditCardTransaction.Options.PaymentMethodCode = 1
46
+ creditCardTransaction.Options.SoftDescriptorText = 'My Store Name'
47
+ creditCardTransaction.CreditCard.CreditCardNumber = '5453010000066167'
48
+ creditCardTransaction.CreditCard.ExpMonth = 5
49
+ creditCardTransaction.CreditCard.ExpYear = 18
50
+ creditCardTransaction.CreditCard.HolderName = 'Maria do Carmo'
51
+ creditCardTransaction.CreditCard.SecurityCode = '123'
52
+ creditCardTransaction.CreditCard.CreditCardBrand = 'Mastercard'
53
+ creditCardTransaction.CreditCard.BillingAddress.City = 'Rio de Janeiro'
54
+ creditCardTransaction.CreditCard.BillingAddress.Complement = '10 Andar'
55
+ creditCardTransaction.CreditCard.BillingAddress.Country = 'Brazil'
56
+ creditCardTransaction.CreditCard.BillingAddress.District = 'Centro'
57
+ creditCardTransaction.CreditCard.BillingAddress.Number = '199'
58
+ creditCardTransaction.CreditCard.BillingAddress.State = 'RJ'
59
+ creditCardTransaction.CreditCard.BillingAddress.Street = 'Rua da Quitanda'
60
+ creditCardTransaction.CreditCard.BillingAddress.ZipCode = '20091005'
61
+
62
+ createSaleRequest.CreditCardTransactionCollection << creditCardTransaction
63
+ createSaleRequest.Buyer.Birthdate = Date.new(2001, 9, 26).strftime("%Y-%m-%dT%H:%M:%S")
64
+ createSaleRequest.Buyer.BuyerCategory = 'Normal'
65
+ createSaleRequest.Buyer.Email = 'mundiBuyer@mundi.com.br'
66
+ createSaleRequest.Buyer.EmailType = 'Personal'
67
+ createSaleRequest.Buyer.Gender = 'M'
68
+ createSaleRequest.Buyer.HomePhone = '22222222'
69
+ createSaleRequest.Buyer.MobilePhone = '988888888'
70
+ createSaleRequest.Buyer.WorkPhone = '25555555'
71
+ createSaleRequest.Buyer.CreateDateInMerchant = (Date.parse(Time.now.to_s)).strftime("%Y-%m-%dT%H:%M:%S")
72
+ createSaleRequest.Buyer.LastBuyerUpdateInMerchant = (Date.parse(Time.now.to_s)).strftime("%Y-%m-%dT%H:%M:%S")
73
+ createSaleRequest.Buyer.DocumentNumber = '51212382749'
74
+ createSaleRequest.Buyer.DocumentType = 'CPF'
75
+ createSaleRequest.Buyer.Name = 'Jose da Silva Ramos'
76
+ createSaleRequest.Buyer.PersonType = 'Person'
77
+ createSaleRequest.Buyer.AddressCollection << buyerAddress
78
+
79
+ response = gateway.CreateSale(createSaleRequest)
80
+
81
+ expect(response[:ErrorReport]).to eq nil
82
+
83
+ end
84
+
85
+ it 'should create a sale with all types of transactions and all fields filled' do
86
+ buyerAddressItem = BuyerAddress.new
87
+ buyerAddressItem.AddressType = 'Comercial'
88
+ buyerAddressItem.City = 'Rio de Janeiro'
89
+ buyerAddressItem.Complement = '10 Andar'
90
+ buyerAddressItem.Country = 'Brazil'
91
+ buyerAddressItem.District = 'Centro'
92
+ buyerAddressItem.Number = '199'
93
+ buyerAddressItem.State = 'RJ'
94
+ buyerAddressItem.Street = 'Rua da Quitanda'
95
+ buyerAddressItem.ZipCode = '20091005'
96
+
97
+ boletoTransactionItem = BoletoTransaction.new
98
+ boletoTransactionItem.AmountInCents = 350
99
+ boletoTransactionItem.BankNumber = '237'
100
+ boletoTransactionItem.BillingAddress.City = 'Rio de Janeiro'
101
+ boletoTransactionItem.BillingAddress.Complement = '10º andar'
102
+ boletoTransactionItem.BillingAddress.Country = 'Brazil'
103
+ boletoTransactionItem.BillingAddress.District = 'Centro'
104
+ boletoTransactionItem.BillingAddress.Number = '199'
105
+ boletoTransactionItem.BillingAddress.State = 'RJ'
106
+ boletoTransactionItem.BillingAddress.Street = 'Rua da Quitanda'
107
+ boletoTransactionItem.BillingAddress.ZipCode = '20091005'
108
+ boletoTransactionItem.DocumentNumber = '12345678901'
109
+ boletoTransactionItem.Instructions = 'Pagar antes do vencimento'
110
+ boletoTransactionItem.Options.CurrencyIso = 'BRL'
111
+ boletoTransactionItem.Options.DaysToAddInBoletoExpirationDate = 7
112
+ boletoTransactionItem.TransactionDateInMerchant = Date.new(2014, 11, 5).strftime("%Y-%m-%dT%H:%M:%S")
113
+ boletoTransactionItem.TransactionReference = 'RubySDK-BoletoTransactionTest'
114
+
115
+ creditCardTransactionItem = CreditCardTransaction.new
116
+ creditCardTransactionItem.AmountInCents = 750
117
+ creditCardTransactionItem.CreditCardOperation = 'AuthAndCapture'
118
+ creditCardTransactionItem.InstallmentCount = 1
119
+ creditCardTransactionItem.TransactionDateInMerchant = Date.new(2014, 11, 5).strftime("%Y-%m-%dT%H:%M:%S")
120
+ creditCardTransactionItem.TransactionReference = 'RubySDK-CreditCardTransactionTest'
121
+ creditCardTransactionItem.Options.CaptureDelayInMinutes = 0
122
+ creditCardTransactionItem.Options.CurrencyIso = 'BRL'
123
+ creditCardTransactionItem.Options.ExtendedLimitCode = nil
124
+ creditCardTransactionItem.Options.ExtendedLimitEnabled = false
125
+ creditCardTransactionItem.Options.IataAmountInCents = 0
126
+ creditCardTransactionItem.Options.InterestRate = 0
127
+ creditCardTransactionItem.Options.MerchantCategoryCode = nil
128
+ creditCardTransactionItem.Options.PaymentMethodCode = 1
129
+ creditCardTransactionItem.Options.SoftDescriptorText = 'Nome da Loja'
130
+ creditCardTransactionItem.Recurrency.DateToStartBilling = (Date.parse(Time.now.to_s)).strftime("%Y-%m-%dT%H:%M:%S")
131
+ creditCardTransactionItem.Recurrency.Frequency = 'Monthly'
132
+ creditCardTransactionItem.Recurrency.Interval = 1
133
+ creditCardTransactionItem.Recurrency.OneDollarAuth = false
134
+ creditCardTransactionItem.Recurrency.Recurrences = 2
135
+ creditCardTransactionItem.CreditCard.BillingAddress.City = 'Rio de Janeiro'
136
+ creditCardTransactionItem.CreditCard.BillingAddress.Complement = '10º andar'
137
+ creditCardTransactionItem.CreditCard.BillingAddress.Country = 'Brazil'
138
+ creditCardTransactionItem.CreditCard.BillingAddress.District = 'Centro'
139
+ creditCardTransactionItem.CreditCard.BillingAddress.Number = '199'
140
+ creditCardTransactionItem.CreditCard.BillingAddress.State = 'RJ'
141
+ creditCardTransactionItem.CreditCard.BillingAddress.Street = 'Ruda da Quitanda'
142
+ creditCardTransactionItem.CreditCard.BillingAddress.ZipCode = '20091005'
143
+ creditCardTransactionItem.CreditCard.CreditCardBrand = 'Visa'
144
+ creditCardTransactionItem.CreditCard.CreditCardNumber = '4111111111111111'
145
+ creditCardTransactionItem.CreditCard.ExpMonth = 10
146
+ creditCardTransactionItem.CreditCard.ExpYear = 19
147
+ creditCardTransactionItem.CreditCard.HolderName = 'Maria do Carmo'
148
+ creditCardTransactionItem.CreditCard.InstantBuyKey = '00000000-0000-0000-0000-000000000000'
149
+ creditCardTransactionItem.CreditCard.SecurityCode = '123'
150
+
151
+ shoppingCartItem = ShoppingCartItemCollection.new
152
+ shoppingCartItem.Description = 'Descricao do Produto'
153
+ shoppingCartItem.DiscountAmountInCents = 120
154
+ shoppingCartItem.ItemReference = 'product#666'
155
+ shoppingCartItem.Name = 'Nome do produto'
156
+ shoppingCartItem.Quantity = 1
157
+ shoppingCartItem.TotalCostInCents = 1100
158
+ shoppingCartItem.UnitCostInCents = 1220
159
+
160
+ shoppingCartCollectionItem = ShoppingCartCollection.new
161
+ shoppingCartCollectionItem.DeliveryAddress.City = 'Rio de Janeiro'
162
+ shoppingCartCollectionItem.DeliveryAddress.Complement = '10º andar'
163
+ shoppingCartCollectionItem.DeliveryAddress.Country = 'Brazil'
164
+ shoppingCartCollectionItem.DeliveryAddress.District = 'Centro'
165
+ shoppingCartCollectionItem.DeliveryAddress.Number = '199'
166
+ shoppingCartCollectionItem.DeliveryAddress.State = 'RJ'
167
+ shoppingCartCollectionItem.DeliveryAddress.Street = 'Rua da Quitanda'
168
+ shoppingCartCollectionItem.DeliveryAddress.ZipCode = '20091005'
169
+ shoppingCartCollectionItem.DeliveryDeadline = Date.new(2014, 12, 5).strftime("%Y-%m-%dT%H:%M:%S")
170
+ shoppingCartCollectionItem.EstimatedDeliveryDate = Date.new(2014, 11, 25).strftime("%Y-%m-%dT%H:%M:%S")
171
+ shoppingCartCollectionItem.FreighCostInCents = 0
172
+ shoppingCartCollectionItem.ShippingCompany = 'Nome da empresa responsável pela entrega'
173
+ shoppingCartCollectionItem.ShoppingCartItemCollection << shoppingCartItem
174
+
175
+ createSaleRequest = CreateSaleRequest.new
176
+
177
+ createSaleRequest.Buyer.AddressCollection = Array.new
178
+
179
+ createSaleRequest.Buyer.Birthdate = Date.new(1990, 3, 3).strftime("%Y-%m-%dT%H:%M:%S")
180
+ createSaleRequest.Buyer.DocumentNumber = '12345678901'
181
+ createSaleRequest.Buyer.DocumentType = 'CPF'
182
+ createSaleRequest.Buyer.Email = 'someone@example.com'
183
+ createSaleRequest.Buyer.EmailType = 'Personal'
184
+ createSaleRequest.Buyer.FacebookId = ''
185
+ createSaleRequest.Buyer.Gender = 'M'
186
+ createSaleRequest.Buyer.HomePhone = '2112345678'
187
+ createSaleRequest.Buyer.MobilePhone = '21987654321'
188
+ createSaleRequest.Buyer.Name = 'Someone'
189
+ createSaleRequest.Buyer.PersonType = 'Person'
190
+ createSaleRequest.Buyer.TwitterId = ''
191
+ createSaleRequest.Buyer.WorkPhone = '2178563412'
192
+ createSaleRequest.Buyer.BuyerCategory = 'Normal'
193
+ createSaleRequest.Buyer.BuyerKey = '00000000-0000-0000-0000-000000000000'
194
+ createSaleRequest.Buyer.BuyerReference = 'RubyBuyer#JohnConnor'
195
+ createSaleRequest.Buyer.CreateDateInMerchant = Date.new(2014, 4, 15).strftime("%Y-%m-%dT%H:%M:%S")
196
+ createSaleRequest.Buyer.LastBuyerUpdateInMerchant = Date.new(2014, 4, 15).strftime("%Y-%m-%dT%H:%M:%S")
197
+ createSaleRequest.Buyer.AddressCollection << buyerAddressItem
198
+ createSaleRequest.Merchant.MerchantReference = 'Nome da Loja'
199
+ createSaleRequest.Options.AntiFraudServiceCode = 0
200
+ createSaleRequest.Options.CurrencyIso = 'BRL'
201
+ createSaleRequest.Options.IsAntiFraudEnabled = false
202
+ createSaleRequest.Options.Retries = 3
203
+ createSaleRequest.Order.OrderReference = 'RubySDK-TestOrder'
204
+ createSaleRequest.RequestData.EcommerceCategory = 'B2B'
205
+ createSaleRequest.RequestData.IpAddress = '127.0.0.1'
206
+ createSaleRequest.RequestData.Origin = ''
207
+ createSaleRequest.RequestData.SessionId = ''
208
+ createSaleRequest.BoletoTransactionCollection << boletoTransactionItem
209
+ createSaleRequest.CreditCardTransactionCollection << creditCardTransactionItem
210
+
211
+ response = gateway.CreateSale(createSaleRequest)
212
+
213
+ expect(response[:ErrorReport]).to eq nil
214
+ end
215
+
216
+ it 'should consult the order with order key' do
217
+ querySaleRequest = QuerySaleRequest.new
218
+ createSaleRequest = CreateSaleRequest.new
219
+
220
+ boletoTransaction = BoletoTransaction.new
221
+ boletoTransaction.AmountInCents = 100
222
+ boletoTransaction.BankNumber = '237'
223
+ boletoTransaction.DocumentNumber = '12345678901'
224
+ boletoTransaction.Instructions = 'Pagar antes do vencimento'
225
+ boletoTransaction.TransactionReference = 'BoletoTest#Ruby01'
226
+ boletoTransaction.Options.CurrencyIso = 'BRL'
227
+ boletoTransaction.Options.DaysToAddInBoletoExpirationDate = 5
228
+
229
+ createSaleRequest.BoletoTransactionCollection << boletoTransaction
230
+
231
+ boleto_response = gateway.CreateSale(createSaleRequest)
232
+
233
+ querySaleRequest.OrderKey = boleto_response['OrderResult']['OrderKey']
234
+ responseQuery = gateway.Query(QuerySaleRequest.QuerySaleRequestEnum[:OrderKey], querySaleRequest.OrderKey)
235
+
236
+ orderKey = responseQuery["SaleDataCollection"][0]["OrderData"]["OrderKey"]
237
+
238
+ expect(orderKey).to eq querySaleRequest.OrderKey
239
+ end
240
+
241
+ it 'should consult the order with order reference' do
242
+ querySaleRequest = QuerySaleRequest.new
243
+ createSaleRequest = CreateSaleRequest.new
244
+
245
+ boletoTransaction = BoletoTransaction.new
246
+ boletoTransaction.AmountInCents = 100
247
+ boletoTransaction.BankNumber = '237'
248
+ boletoTransaction.DocumentNumber = '12345678901'
249
+ boletoTransaction.Instructions = 'Pagar antes do vencimento'
250
+ boletoTransaction.TransactionReference = 'BoletoTest#Ruby01'
251
+ boletoTransaction.Options.CurrencyIso = 'BRL'
252
+ boletoTransaction.Options.DaysToAddInBoletoExpirationDate = 5
253
+
254
+ createSaleRequest.Order.OrderReference = 'RubyOrderReferenceUnitTest'
255
+ createSaleRequest.BoletoTransactionCollection << boletoTransaction
256
+
257
+ boleto_response = gateway.CreateSale(createSaleRequest)
258
+
259
+ querySaleRequest.OrderReference = boleto_response['OrderResult']['OrderReference']
260
+ responseQuery = gateway.Query(QuerySaleRequest.QuerySaleRequestEnum[:OrderReference], querySaleRequest.OrderReference)
261
+
262
+ orderReference = responseQuery["SaleDataCollection"][0]["OrderData"]["OrderReference"]
263
+
264
+ expect(orderReference).to eq querySaleRequest.OrderReference
265
+ end
266
+
267
+ it 'should do a retry method' do
268
+ retrySaleRequest = RetrySaleRequest.new
269
+ retrySaleCreditCardTransactionItem = RetrySaleCreditCardTransaction.new
270
+
271
+ createSaleRequest = CreateSaleRequest.new
272
+ creditCardTransactionItem = CreditCardTransaction.new
273
+ creditCardTransactionItem.AmountInCents = 100
274
+ creditCardTransactionItem.CreditCard.CreditCardBrand = 'Visa'
275
+ creditCardTransactionItem.CreditCard.CreditCardNumber = '41111111111111'
276
+ creditCardTransactionItem.CreditCard.ExpMonth = 10
277
+ creditCardTransactionItem.CreditCard.ExpYear = 19
278
+ creditCardTransactionItem.CreditCard.HolderName = 'Maria do Carmo'
279
+ creditCardTransactionItem.CreditCard.SecurityCode = '123'
280
+ creditCardTransactionItem.CreditCardOperation = 'AuthAndCapture'
281
+ creditCardTransactionItem.InstallmentCount = 1
282
+ creditCardTransactionItem.Options.CurrencyIso = 'BRL'
283
+ creditCardTransactionItem.Options.PaymentMethodCode = 1
284
+ creditCardTransactionItem.TransactionReference = 'RubySDK-RetryTest'
285
+
286
+ createSaleRequest.CreditCardTransactionCollection << creditCardTransactionItem
287
+ createSaleRequest.Order.OrderReference = 'RubySDK-RetryTest'
288
+
289
+ # cria o pedido que sera usado para retentativa
290
+ responseCreate = gateway.CreateSale(createSaleRequest)
291
+
292
+ # pega o orderkey e o transaction key da resposta que sao necessarios para fazer a retentativa
293
+ orderKey = responseCreate["OrderResult"]["OrderKey"]
294
+ transactionKey = responseCreate['CreditCardTransactionResultCollection'][0]['TransactionKey']
295
+
296
+ # monta o objeto de retentativa
297
+ retrySaleCreditCardTransactionItem.SecurityCode = '123'
298
+ retrySaleCreditCardTransactionItem.TransactionKey = transactionKey
299
+ retrySaleRequest.OrderKey = orderKey
300
+ retrySaleRequest.RetrySaleCreditCardTransactionCollection << retrySaleCreditCardTransactionItem
301
+
302
+ # faz a requisicao de retentativa
303
+ response = gateway.Retry(retrySaleRequest)
304
+
305
+ # espera que o transaction key seja igual, significa que foi tudo ok no teste
306
+ responseTransactionKey = response['CreditCardTransactionResultCollection'][0]['TransactionKey']
307
+
308
+ expect(responseTransactionKey).to eq transactionKey
309
+
310
+ end
311
+
312
+ it 'should cancel a transaction' do
313
+ createSaleRequest = CreateSaleRequest.new
314
+ creditCardTransactionItem = CreditCardTransaction.new
315
+ creditCardTransactionItem.AmountInCents = 100
316
+ creditCardTransactionItem.CreditCard.CreditCardBrand = 'Visa'
317
+ creditCardTransactionItem.CreditCard.CreditCardNumber = '41111111111111'
318
+ creditCardTransactionItem.CreditCard.ExpMonth = 10
319
+ creditCardTransactionItem.CreditCard.ExpYear = 19
320
+ creditCardTransactionItem.CreditCard.HolderName = 'Maria do Carmo'
321
+ creditCardTransactionItem.CreditCard.SecurityCode = '123'
322
+ creditCardTransactionItem.CreditCardOperation = 'AuthAndCapture'
323
+ creditCardTransactionItem.InstallmentCount = 1
324
+ creditCardTransactionItem.Options.CurrencyIso = 'BRL'
325
+ creditCardTransactionItem.Options.PaymentMethodCode = 1
326
+ creditCardTransactionItem.TransactionReference = 'RubySDK-CancelTest'
327
+
328
+ createSaleRequest.CreditCardTransactionCollection << creditCardTransactionItem
329
+ createSaleRequest.Order.OrderReference = 'RubySDK-CancelTest'
330
+
331
+ # cria o pedido que sera usado para cancelamento
332
+ responseCreate = gateway.CreateSale(createSaleRequest)
333
+
334
+ # pega o orderkey e o transaction key da resposta que sao necessarios para fazer o cancelamento
335
+ orderKey = responseCreate["OrderResult"]["OrderKey"]
336
+ transactionKey = responseCreate['CreditCardTransactionResultCollection'][0]['TransactionKey']
337
+
338
+ # itens necessarios para cancelamento da transacao de cartao de credito
339
+ cancelCreditCardTransactionItem = ManageCreditCardTransaction.new
340
+ cancelCreditCardTransactionItem.AmountInCents = 100
341
+ cancelCreditCardTransactionItem.TransactionKey = transactionKey
342
+ cancelCreditCardTransactionItem.TransactionReference = 'RubySDK-CancelTest'
343
+
344
+ # monta o objeto para cancelamento de transacao
345
+ cancelSaleRequest = ManageSaleRequest.new
346
+ cancelSaleRequest.OrderKey = orderKey
347
+ cancelSaleRequest.CreditCardTransactionCollection << cancelCreditCardTransactionItem
348
+
349
+ response = gateway.Cancel(cancelSaleRequest)
350
+
351
+ expect(response[:ErrorReport]).to eq nil
352
+ end
353
+
354
+ it 'should capture a transaction' do
355
+ createSaleRequest = CreateSaleRequest.new
356
+ creditCardTransactionItem = CreditCardTransaction.new
357
+ creditCardTransactionItem.AmountInCents = 100
358
+ creditCardTransactionItem.CreditCard.CreditCardBrand = 'Visa'
359
+ creditCardTransactionItem.CreditCard.CreditCardNumber = '41111111111111'
360
+ creditCardTransactionItem.CreditCard.ExpMonth = 10
361
+ creditCardTransactionItem.CreditCard.ExpYear = 19
362
+ creditCardTransactionItem.CreditCard.HolderName = 'Maria do Carmo'
363
+ creditCardTransactionItem.CreditCard.SecurityCode = '123'
364
+ creditCardTransactionItem.CreditCardOperation = 'AuthAndCapture'
365
+ creditCardTransactionItem.InstallmentCount = 1
366
+ creditCardTransactionItem.Options.CurrencyIso = 'BRL'
367
+ creditCardTransactionItem.Options.PaymentMethodCode = 1
368
+ creditCardTransactionItem.TransactionReference = 'RubySDK-CaptureTest'
369
+
370
+ createSaleRequest.CreditCardTransactionCollection << creditCardTransactionItem
371
+ createSaleRequest.Order.OrderReference = 'RubySDK-CaptureTest'
372
+
373
+ # cria o pedido que sera usado para captura
374
+ responseCreate = gateway.CreateSale(createSaleRequest)
375
+
376
+ # pega o orderkey e o transaction key da resposta que sao necessarios para fazer a captura
377
+ orderKey = responseCreate["OrderResult"]["OrderKey"]
378
+ transactionKey = responseCreate['CreditCardTransactionResultCollection'][0]['TransactionKey']
379
+
380
+ # itens necessarios para captura da transacao de cartao de credito
381
+ captureCreditCardTransactionItem = ManageCreditCardTransaction.new
382
+ captureCreditCardTransactionItem.AmountInCents = 100
383
+ captureCreditCardTransactionItem.TransactionKey = transactionKey
384
+ captureCreditCardTransactionItem.TransactionReference = 'RubySDK-CaptureTest'
385
+
386
+ # monta o objeto para cancelamento de transacao
387
+ captureSaleRequest = ManageSaleRequest.new
388
+ captureSaleRequest.OrderKey = orderKey
389
+ captureSaleRequest.CreditCardTransactionCollection << captureCreditCardTransactionItem
390
+
391
+ response = gateway.Capture(captureSaleRequest)
392
+
393
+ # espera que o ErrorReport seja nulo, significa que foi tudo ok na transação
394
+ expect(response['ErrorReport']).to eq nil
395
+ end
396
+
397
+ it 'should do a parse xml to notification interpretation' do
398
+ creditCardTransactionItem = CreditCardTransaction.new
399
+ creditCardTransactionItem.AmountInCents = 100
400
+ creditCardTransactionItem.TransactionReference = 'Ruby PostNotification Test'
401
+ creditCardTransactionItem.InstallmentCount = 1
402
+ creditCardTransactionItem.CreditCardOperation = 'AuthAndCapture'
403
+ creditCardTransactionItem.CreditCard.CreditCardBrand = 'Visa'
404
+ creditCardTransactionItem.CreditCard.CreditCardNumber = '4111111111111111'
405
+ creditCardTransactionItem.CreditCard.HolderName = 'Bruce Wayne'
406
+ creditCardTransactionItem.CreditCard.SecurityCode = '123'
407
+ creditCardTransactionItem.CreditCard.ExpMonth = 5
408
+ creditCardTransactionItem.CreditCard.ExpYear = 20
409
+ creditCardTransactionItem.Options.PaymentMethodCode = 1
410
+
411
+ createSaleRequest = CreateSaleRequest.new
412
+ createSaleRequest.CreditCardTransactionCollection << creditCardTransactionItem
413
+
414
+ response_hash = gateway.CreateSale(createSaleRequest)
415
+
416
+ credit_card_result = response_hash['CreditCardTransactionResultCollection'][0]
417
+
418
+ expect(credit_card_result['Success']).to eq true
419
+ # expect(credit_card_result['CreditCardOperation']).to eq 'AuthOnly'
420
+ # expect(credit_card_result['CreditCardTransactionStatus']).to eq 'AuthorizedPendingCapture'
421
+
422
+ captureCreditCardTransactionItem = ManageCreditCardTransaction.new
423
+ captureCreditCardTransactionItem.AmountInCents = creditCardTransactionItem.AmountInCents
424
+ captureCreditCardTransactionItem.TransactionKey = credit_card_result['TransactionKey']
425
+ captureCreditCardTransactionItem.TransactionReference = creditCardTransactionItem.TransactionReference
426
+
427
+ captureSale = ManageSaleRequest.new
428
+ captureSale.OrderKey = response_hash['OrderResult']['OrderKey']
429
+ captureSale.CreditCardTransactionCollection << captureCreditCardTransactionItem
430
+
431
+ captureResponse = gateway.Capture(captureSale)
432
+
433
+ expect(captureResponse['ErrorReport']).to eq nil
434
+
435
+
436
+ xml = TestHelper.CreateFakePostNotification(response_hash, captureResponse)
437
+
438
+ response = gateway.ParseXmlToNotification(xml)
439
+
440
+ expect(response.nil?).to eq false
441
+ end
442
+
443
+ it 'should do a parse on online debit xml' do
444
+ xml = '<StatusNotification xmlns="http://schemas.datacontract.org/2004/07/Gateway.NotificationService.DataContract"
445
+ xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
446
+ i:schemaLocation="http://schemas.datacontract.org/2004/07/Gateway.NotificationService.DataContract StatusNotificationXmlSchema.xsd">
447
+ <AmountInCents>500</AmountInCents>
448
+ <AmountPaidInCents>0</AmountPaidInCents>
449
+ <BoletoTransaction>
450
+ <AmountInCents>500</AmountInCents>
451
+ <AmountPaidInCents>0</AmountPaidInCents>
452
+ <BoletoExpirationDate>2013-02-08T00:00:00</BoletoExpirationDate>
453
+ <NossoNumero>0123456789</NossoNumero>
454
+ <StatusChangedDate>2012-11-06T08:55:49.753</StatusChangedDate>
455
+ <TransactionKey>4111D523-9A83-4BE3-94D2-160F1BC9C4BD</TransactionKey>
456
+ <TransactionReference>B2E32108</TransactionReference>
457
+ <PreviousBoletoTransactionStatus>Generated</PreviousBoletoTransactionStatus>
458
+ <BoletoTransactionStatus>Paid</BoletoTransactionStatus>
459
+ </BoletoTransaction>
460
+ <CreditCardTransaction>
461
+ <Acquirer>Simulator</Acquirer>
462
+ <AmountInCents>2000</AmountInCents>
463
+ <AuthorizedAmountInCents>2000</AuthorizedAmountInCents>
464
+ <CapturedAmountInCents>2000</CapturedAmountInCents>
465
+ <CreditCardBrand>Visa</CreditCardBrand>
466
+ <RefundedAmountInCents i:nil="true"/>
467
+ <StatusChangedDate>2012-11-06T10:52:55.93</StatusChangedDate>
468
+ <TransactionIdentifier>123456</TransactionIdentifier>
469
+ <TransactionKey>351FC96A-7F42-4269-AF3C-1E3C179C1CD0</TransactionKey>
470
+ <TransactionReference>24de0432</TransactionReference>
471
+ <UniqueSequentialNumber>123456</UniqueSequentialNumber>
472
+ <VoidedAmountInCents i:nil="true"/>
473
+ <PreviousCreditCardTransactionStatus>AuthorizedPendingCapture</PreviousCreditCardTransactionStatus>
474
+ <CreditCardTransactionStatus>Captured</CreditCardTransactionStatus>
475
+ </CreditCardTransaction>
476
+
477
+ <OnlineDebitTransaction>
478
+ <AmountInCents>100</AmountInCents>
479
+ <AmountPaidInCents>0</AmountPaidInCents>
480
+ <StatusChangedDate>2013-06-27T19:46:46.87</StatusChangedDate>
481
+ <TransactionKey>fb3f158a-0309-4ae3-b8ef-3c5ac2d603d2</TransactionKey>
482
+ <TransactionReference>30bfee13-c908-4e3b-9f70-1f84dbe79fbf</TransactionReference>
483
+ <PreviousOnlineDebitTransactionStatus>OpenedPendingPayment</PreviousOnlineDebitTransactionStatus>
484
+ <OnlineDebitTransactionStatus>NotPaid</OnlineDebitTransactionStatus>
485
+ </OnlineDebitTransaction>
486
+
487
+ <MerchantKey>B1B1092C-8681-40C2-A734-500F22683D9B</MerchantKey>
488
+ <OrderKey>18471F05-9F6D-4497-9C24-D60D5BBB6BBE</OrderKey>
489
+ <OrderReference>64a85875</OrderReference>
490
+ <OrderStatus>Paid</OrderStatus>
491
+ </StatusNotification>'
492
+
493
+ response = gateway.ParseXmlToNotification(xml)
494
+
495
+ expect(response.nil?).to eq false
496
+ end
497
+
498
+ # it 'should bring the transaction report file' do
499
+ # date = Date.new(2015, 9, 19)
500
+ # result = gateway.TransactionReportFile(date)
501
+ # split_commas = result.split(',')
502
+ #
503
+ # expect(split_commas[1]).to eq '20150919'
504
+ # end
505
+ #
506
+ # it 'should parse the transaction report file received' do
507
+ # date = Date.new(2015, 9, 19)
508
+ # request_to_parse = gateway.TransactionReportFile(date)
509
+ # result = gateway.TransactionReportFileParser(request_to_parse)
510
+ #
511
+ # expect(result['Header'].TransactionProcessedDate).to eq '20150919'
512
+ # end
513
+ #
514
+ # it 'should save the transaction report file at selected path' do
515
+ # date = Date.new(2015, 9, 19)
516
+ #
517
+ # file = Tempfile.new('Test')
518
+ # gateway.TransactionReportFileDownloader(date, 'Test', file.path)
519
+ #
520
+ # file_path = file.path.to_s + 'Test.txt'
521
+ # file_exist = File.exist?(file_path)
522
+ #
523
+ # file.close
524
+ # file.unlink
525
+ #
526
+ # expect(file_exist).to eq true
527
+ # end
528
+
529
+ it 'should consult transaction with instant buy key' do
530
+ credit_card_transaction = CreditCardTransaction.new
531
+ credit_card_transaction.CreditCard.CreditCardNumber = '4111111111111111'
532
+ credit_card_transaction.CreditCard.CreditCardBrand = 'Visa'
533
+ credit_card_transaction.CreditCard.ExpMonth = 10
534
+ credit_card_transaction.CreditCard.ExpYear = 2018
535
+ credit_card_transaction.CreditCard.SecurityCode = '123'
536
+ credit_card_transaction.CreditCard.HolderName = 'Luke Skywalker'
537
+ credit_card_transaction.AmountInCents = 100
538
+
539
+ sale_request = CreateSaleRequest.new
540
+ sale_request.CreditCardTransactionCollection << credit_card_transaction
541
+
542
+ sale_response = gateway.CreateSale(sale_request)
543
+
544
+ expect(sale_response['ErrorReport']).to eq nil
545
+
546
+ instant_buy_key = sale_response['CreditCardTransactionResultCollection'][0]['CreditCard']['InstantBuyKey']
547
+
548
+ response = gateway.InstantBuyKey(instant_buy_key)
549
+
550
+ expect(response['ErrorReport']).to eq nil
551
+ end
552
+
553
+ it 'should consult transaction with buyer key' do
554
+
555
+ credit_card_transaction = CreditCardTransaction.new
556
+ credit_card_transaction.CreditCard.CreditCardNumber = '4111111111111111'
557
+ credit_card_transaction.CreditCard.CreditCardBrand = 'Visa'
558
+ credit_card_transaction.CreditCard.ExpMonth = 10
559
+ credit_card_transaction.CreditCard.ExpYear = 2018
560
+ credit_card_transaction.CreditCard.SecurityCode = '123'
561
+ credit_card_transaction.CreditCard.HolderName = 'Luke Skywalker'
562
+ credit_card_transaction.AmountInCents = 100
563
+
564
+ sale_request = CreateSaleRequest.new
565
+ sale_request.Buyer.Name = 'Anakin Skywalker'
566
+ sale_request.Buyer.Birthdate = Date.new(1994, 9, 26).strftime("%Y-%m-%dT%H:%M:%S")
567
+ sale_request.Buyer.DocumentNumber = '12345678901'
568
+ sale_request.Buyer.DocumentType = 'CPF'
569
+ sale_request.Buyer.PersonType = 'Person'
570
+ sale_request.Buyer.Gender = 'M'
571
+ sale_request.CreditCardTransactionCollection << credit_card_transaction
572
+
573
+ sale_response = gateway.CreateSale(sale_request)
574
+
575
+ expect(sale_response['ErrorReport']).to eq nil
576
+
577
+ response = gateway.BuyerKey(sale_response['BuyerKey'])
578
+
579
+ expect(response['ErrorReport']).to eq nil
580
+ end
581
+
582
+ it 'should do a credit card transaction with instant buy key' do
583
+ credit_card_transaction = CreditCardTransaction.new
584
+ credit_card_transaction.CreditCard.CreditCardNumber = '4111111111111111'
585
+ credit_card_transaction.CreditCard.CreditCardBrand = 'Visa'
586
+ credit_card_transaction.CreditCard.ExpMonth = 10
587
+ credit_card_transaction.CreditCard.ExpYear = 2018
588
+ credit_card_transaction.CreditCard.SecurityCode = '123'
589
+ credit_card_transaction.CreditCard.HolderName = 'Luke Skywalker'
590
+ credit_card_transaction.AmountInCents = 100
591
+
592
+ sale_request = CreateSaleRequest.new
593
+ sale_request.CreditCardTransactionCollection << credit_card_transaction
594
+
595
+ sale_response = gateway.CreateSale(sale_request)
596
+
597
+ expect(sale_response['ErrorReport']).to eq nil
598
+
599
+ instant_buy_key = sale_response['CreditCardTransactionResultCollection'][0]['CreditCard']['InstantBuyKey']
600
+
601
+ # coleta dados do cartao
602
+ creditCardTransaction = CreditCardTransaction.new
603
+ creditCardTransaction.AmountInCents = 100
604
+ creditCardTransaction.CreditCard.InstantBuyKey = instant_buy_key
605
+
606
+ # cria a transacao
607
+ createSaleRequest = CreateSaleRequest.new
608
+ createSaleRequest.CreditCardTransactionCollection << creditCardTransaction
609
+
610
+ # faz a requisicao de criação de transacao, retorna um hash com a resposta
611
+ response = gateway.CreateSale(createSaleRequest)
612
+
613
+ expect(response['ErrorReport']).to eq nil
614
+ end
615
+
616
+ end