mundipagg_sdk 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 +191 -0
  3. data/README.md +63 -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 +416 -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/mundipagg_sdk.rb +70 -0
  62. data/mundipagg_sdk.gemspec +19 -0
  63. data/spec/integration/gateway_spec.rb +612 -0
  64. data/spec/integration/test_helper.rb +69 -0
  65. data/spec/spec_helper.rb +96 -0
  66. metadata +247 -0
@@ -0,0 +1,19 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'mundipagg_sdk'
3
+ s.summary = 'MundiPagg Ruby Client Library'
4
+ s.description = 'Ruby library for integrating with the MundiPagg payment web services'
5
+ s.version = '1.0.0' # Major.Minor.Revision
6
+ s.author = 'MundiPagg'
7
+ s.email = 'github@mundipagg.com'
8
+ s.homepage = 'http://www.mundipagg.com/'
9
+ s.files = Dir.glob ["README.md", "LICENSE", "lib/**/*.{rb}", "spec/**/*", "*.gemspec"]
10
+ s.add_dependency 'rest-client', '~> 1.8', '>= 1.8.0'
11
+ s.add_dependency 'rspec', '~> 3.3', '>= 3.3.0'
12
+ s.add_dependency 'nori', '~> 2.6', '>= 2.6.0'
13
+ s.add_dependency 'gyoku', '~> 1.3', '>= 1.3.1'
14
+ s.add_dependency 'nokogiri', '~> 1.6', '>= 1.6.6.2'
15
+ s.add_dependency 'ffi', '~> 1.9', '>= 1.9.10'
16
+ s.add_dependency 'bundler', '~> 1.10', '>= 1.10.6'
17
+ s.required_ruby_version = '>= 2.1.7'
18
+ s.license = 'Apache 2.0'
19
+ end
@@ -0,0 +1,612 @@
1
+ require_relative '../../lib/mundipagg_sdk'
2
+ require_relative 'test_helper'
3
+
4
+ merchant_key = '8A2DD57F-1ED9-4153-B4CE-69683EFADAD5'
5
+ gateway = Gateway.new(:sandbox, 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 = 'AuthOnly'
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, 15)
500
+ result = gateway.TransactionReportFile(date)
501
+ split_commas = result.split(',')
502
+
503
+ expect(split_commas[1]).to eq '20150915'
504
+ end
505
+
506
+ it 'should parse the transaction report file received' do
507
+ date = Date.new(2015, 9, 15)
508
+ request_to_parse = gateway.TransactionReportFile(date)
509
+ result = gateway.TransactionReportFileParser(request_to_parse)
510
+
511
+ expect(result['Header'].TransactionProcessedDate).to eq '20150915'
512
+ end
513
+
514
+ it 'should save the transaction report file at selected path' do
515
+ date = Date.new(2015, 9, 15)
516
+ file_name = 'Teste'
517
+ file_path = "C:\\Users\\Public\\Documents\\"
518
+ gateway.TransactionReportFileDownloader(date, file_name, file_path)
519
+
520
+ file_path = file_path + file_name + '.txt'
521
+ file_exist = File.exist?(file_path)
522
+ expect(file_exist).to eq true
523
+ end
524
+
525
+ it 'should consult transaction with instant buy key' do
526
+ credit_card_transaction = CreditCardTransaction.new
527
+ credit_card_transaction.CreditCard.CreditCardNumber = '4111111111111111'
528
+ credit_card_transaction.CreditCard.CreditCardBrand = 'Visa'
529
+ credit_card_transaction.CreditCard.ExpMonth = 10
530
+ credit_card_transaction.CreditCard.ExpYear = 2018
531
+ credit_card_transaction.CreditCard.SecurityCode = '123'
532
+ credit_card_transaction.CreditCard.HolderName = 'Luke Skywalker'
533
+ credit_card_transaction.AmountInCents = 100
534
+
535
+ sale_request = CreateSaleRequest.new
536
+ sale_request.CreditCardTransactionCollection << credit_card_transaction
537
+
538
+ sale_response = gateway.CreateSale(sale_request)
539
+
540
+ expect(sale_response['ErrorReport']).to eq nil
541
+
542
+ instant_buy_key = sale_response['CreditCardTransactionResultCollection'][0]['CreditCard']['InstantBuyKey']
543
+
544
+ response = gateway.InstantBuyKey(instant_buy_key)
545
+
546
+ expect(response['ErrorReport']).to eq nil
547
+ end
548
+
549
+ it 'should consult transaction with buyer key' do
550
+
551
+ credit_card_transaction = CreditCardTransaction.new
552
+ credit_card_transaction.CreditCard.CreditCardNumber = '4111111111111111'
553
+ credit_card_transaction.CreditCard.CreditCardBrand = 'Visa'
554
+ credit_card_transaction.CreditCard.ExpMonth = 10
555
+ credit_card_transaction.CreditCard.ExpYear = 2018
556
+ credit_card_transaction.CreditCard.SecurityCode = '123'
557
+ credit_card_transaction.CreditCard.HolderName = 'Luke Skywalker'
558
+ credit_card_transaction.AmountInCents = 100
559
+
560
+ sale_request = CreateSaleRequest.new
561
+ sale_request.Buyer.Name = 'Anakin Skywalker'
562
+ sale_request.Buyer.Birthdate = Date.new(1994, 9, 26).strftime("%Y-%m-%dT%H:%M:%S")
563
+ sale_request.Buyer.DocumentNumber = '12345678901'
564
+ sale_request.Buyer.DocumentType = 'CPF'
565
+ sale_request.Buyer.PersonType = 'Person'
566
+ sale_request.Buyer.Gender = 'M'
567
+ sale_request.CreditCardTransactionCollection << credit_card_transaction
568
+
569
+ sale_response = gateway.CreateSale(sale_request)
570
+
571
+ expect(sale_response['ErrorReport']).to eq nil
572
+
573
+ response = gateway.BuyerKey(sale_response['BuyerKey'])
574
+
575
+ expect(response['ErrorReport']).to eq nil
576
+ end
577
+
578
+ it 'should do a credit card transaction with instant buy key' do
579
+ credit_card_transaction = CreditCardTransaction.new
580
+ credit_card_transaction.CreditCard.CreditCardNumber = '4111111111111111'
581
+ credit_card_transaction.CreditCard.CreditCardBrand = 'Visa'
582
+ credit_card_transaction.CreditCard.ExpMonth = 10
583
+ credit_card_transaction.CreditCard.ExpYear = 2018
584
+ credit_card_transaction.CreditCard.SecurityCode = '123'
585
+ credit_card_transaction.CreditCard.HolderName = 'Luke Skywalker'
586
+ credit_card_transaction.AmountInCents = 100
587
+
588
+ sale_request = CreateSaleRequest.new
589
+ sale_request.CreditCardTransactionCollection << credit_card_transaction
590
+
591
+ sale_response = gateway.CreateSale(sale_request)
592
+
593
+ expect(sale_response['ErrorReport']).to eq nil
594
+
595
+ instant_buy_key = sale_response['CreditCardTransactionResultCollection'][0]['CreditCard']['InstantBuyKey']
596
+
597
+ # coleta dados do cartao
598
+ creditCardTransaction = CreditCardTransaction.new
599
+ creditCardTransaction.AmountInCents = 100
600
+ creditCardTransaction.CreditCard.InstantBuyKey = instant_buy_key
601
+
602
+ # cria a transacao
603
+ createSaleRequest = CreateSaleRequest.new
604
+ createSaleRequest.CreditCardTransactionCollection << creditCardTransaction
605
+
606
+ # faz a requisicao de criação de transacao, retorna um hash com a resposta
607
+ response = gateway.CreateSale(createSaleRequest)
608
+
609
+ expect(response['ErrorReport']).to eq nil
610
+ end
611
+
612
+ end