braspag_rails 0.0.1

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 (58) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +32 -0
  5. data/lib/braspag_rails/action_controller.rb +4 -0
  6. data/lib/braspag_rails/base.rb +40 -0
  7. data/lib/braspag_rails/codigos.rb +250 -0
  8. data/lib/braspag_rails/consultas.rb +49 -0
  9. data/lib/braspag_rails/generator.rb +12 -0
  10. data/lib/braspag_rails/railtie.rb +17 -0
  11. data/lib/braspag_rails/transacoes/credito.rb +165 -0
  12. data/lib/braspag_rails/transacoes/debito.rb +52 -0
  13. data/lib/braspag_rails/transacoes/fraude.rb +203 -0
  14. data/lib/braspag_rails/util.rb +45 -0
  15. data/lib/braspag_rails/version.rb +3 -0
  16. data/lib/braspag_rails.rb +7 -0
  17. data/lib/tasks/braspag_rails_tasks.rake +4 -0
  18. data/lib/templates/config.yml +18 -0
  19. data/test/braspag_rails_test.rb +7 -0
  20. data/test/dummy/README.rdoc +28 -0
  21. data/test/dummy/Rakefile +6 -0
  22. data/test/dummy/app/assets/javascripts/application.js +13 -0
  23. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  24. data/test/dummy/app/controllers/application_controller.rb +5 -0
  25. data/test/dummy/app/helpers/application_helper.rb +2 -0
  26. data/test/dummy/app/models/concerns/testes_antifraude.rb +73 -0
  27. data/test/dummy/app/models/concerns/testes_credito.rb +15 -0
  28. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  29. data/test/dummy/bin/bundle +3 -0
  30. data/test/dummy/bin/rails +4 -0
  31. data/test/dummy/bin/rake +4 -0
  32. data/test/dummy/config/application.rb +25 -0
  33. data/test/dummy/config/boot.rb +5 -0
  34. data/test/dummy/config/braspag.yml +17 -0
  35. data/test/dummy/config/database.yml +25 -0
  36. data/test/dummy/config/environment.rb +5 -0
  37. data/test/dummy/config/environments/development.rb +37 -0
  38. data/test/dummy/config/environments/production.rb +82 -0
  39. data/test/dummy/config/environments/test.rb +39 -0
  40. data/test/dummy/config/initializers/assets.rb +8 -0
  41. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  42. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  43. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  44. data/test/dummy/config/initializers/inflections.rb +16 -0
  45. data/test/dummy/config/initializers/mime_types.rb +4 -0
  46. data/test/dummy/config/initializers/session_store.rb +3 -0
  47. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  48. data/test/dummy/config/locales/en.yml +23 -0
  49. data/test/dummy/config/routes.rb +56 -0
  50. data/test/dummy/config/secrets.yml +22 -0
  51. data/test/dummy/config.ru +4 -0
  52. data/test/dummy/log/development.log +0 -0
  53. data/test/dummy/public/404.html +67 -0
  54. data/test/dummy/public/422.html +67 -0
  55. data/test/dummy/public/500.html +66 -0
  56. data/test/dummy/public/favicon.ico +0 -0
  57. data/test/test_helper.rb +15 -0
  58. metadata +167 -0
@@ -0,0 +1,165 @@
1
+ require 'savon'
2
+
3
+ module BraspagRails
4
+ module Transacao
5
+ class Credito
6
+
7
+ extend ::Savon::Model
8
+
9
+ client wsdl: BraspagRails.config['wsdl_transacao']
10
+ global :open_timeout, 30
11
+ global :convert_request_keys_to, :none
12
+ operations :authorize_transaction, :capture_credit_card_transaction, :void_credit_card_transaction,
13
+ :refund_credit_card_transaction
14
+
15
+ # value = valor da autorização (em centavos)
16
+ # holder = Nome do cartão
17
+ # number = Numero do cartão
18
+ # code = Codigo de segurança
19
+ # date = Data de validate do cartão
20
+ # method = Meio de Pagamento (BraspagRails::MEIOS_DE_PAGAMENTO)
21
+ # number_payments = número de pagamentos
22
+ # plan = Plano de Pagamento (BraspagRails::PLANOS_DE_PAGAMENTO)
23
+ # tax = Taxa do Serviço (em centavos)
24
+ def self.autorizar(value,holder,number,code,date,method,number_payments,plan,tax=0)
25
+ resp = authorize_transaction(message: {
26
+ request: {
27
+ RequestId: SecureRandom.uuid,
28
+ Version: "1.0",
29
+ OrderData: {
30
+ MerchantId: BraspagRails.config['merchant_id'],
31
+ OrderId: Random.rand(10000),
32
+ },
33
+ PaymentDataCollection: [
34
+ PaymentDataRequest: {
35
+ :'@xsi:type' => 'tns:CreditCardDataRequest',
36
+ PaymentMethod: method,
37
+ Amount: value,
38
+ Currency: BraspagRails.config['currency'],
39
+ Country: BraspagRails.config['country'],
40
+ NumberOfPayments: number_payments,
41
+ PaymentPlan: plan,
42
+ TransactionType: 1,
43
+ CardHolder: holder,
44
+ CardNumber: number,
45
+ CardSecurityCode: code,
46
+ CardExpirationDate: date,
47
+ ServiceTaxAmount: tax
48
+ }
49
+ ],
50
+ CustomerData: {
51
+ CustomerName: BraspagRails.config['customer_name']
52
+ }
53
+ }
54
+ })
55
+ resp
56
+ end
57
+
58
+ # braspagid = Código do braspag
59
+ # value = valor da autorização (em centavos)
60
+ # tax = Taxa do Serviço (em centavos)
61
+ def self.capturar(braspagid,value,tax=0)
62
+ resp = capture_credit_card_transaction(message: {
63
+ request: {
64
+ RequestId: SecureRandom.uuid,
65
+ Version: "1.0",
66
+ MerchantId: BraspagRails.config['merchant_id'],
67
+ TransactionDataCollection: [
68
+ TransactionDataRequest: {
69
+ BraspagTransactionId: braspagid,
70
+ Amount: value,
71
+ ServiceTaxAmount: tax
72
+ }
73
+ ]
74
+ }
75
+ })
76
+ resp
77
+ end
78
+
79
+ # value = valor da autorização (em centavos)
80
+ # holder = Nome do cartão
81
+ # number = Numero do cartão
82
+ # code = Codigo de segurança
83
+ # date = Data de validate do cartão
84
+ # method = Meio de Pagamento (BraspagRails::MEIOS_DE_PAGAMENTO)
85
+ # number_payments = número de pagamentos
86
+ # plan = Plano de Pagamento (BraspagRails::PLANOS_DE_PAGAMENTO)
87
+ # taxa = Taxa do Serviço (em centavos)
88
+ def self.autorizar_capturar(value,holder,number,code,date,method,number_payments,plan,tax=0)
89
+ resp = authorize_transaction(message: {
90
+ request: {
91
+ RequestId: SecureRandom.uuid,
92
+ Version: "1.0",
93
+ OrderData: {
94
+ MerchantId: BraspagRails.config['merchant_id'],
95
+ OrderId: Random.rand(10000),
96
+ },
97
+ PaymentDataCollection: [
98
+ PaymentDataRequest: {
99
+ :'@xsi:type' => 'tns:CreditCardDataRequest',
100
+ PaymentMethod: method,
101
+ Amount: value,
102
+ Currency: BraspagRails.config['currency'],
103
+ Country: BraspagRails.config['country'],
104
+ NumberOfPayments: number_payments,
105
+ PaymentPlan: plan,
106
+ TransactionType: 2,
107
+ CardHolder: holder,
108
+ CardNumber: number,
109
+ CardSecurityCode: code,
110
+ CardExpirationDate: date,
111
+ ServiceTaxAmount: tax
112
+ }
113
+ ],
114
+ CustomerData: {
115
+ CustomerName: BraspagRails.config['customer_name']
116
+ }
117
+ }
118
+ })
119
+ resp
120
+ end
121
+
122
+ # braspagid = Código do braspag
123
+ # value = valor da autorização (em centavos)
124
+ # tax = Taxa do Serviço (em centavos)
125
+ def self.cancelar(braspagid,value,tax=0)
126
+ resp = void_credit_card_transaction(message: {
127
+ request: {
128
+ RequestId: SecureRandom.uuid,
129
+ Version: "1.0",
130
+ MerchantId: BraspagRails.config['merchant_id'],
131
+ TransactionDataCollection: [
132
+ TransactionDataRequest: {
133
+ BraspagTransactionId: braspagid,
134
+ Amount: value,
135
+ ServiceTaxAmount: tax
136
+ }
137
+ ]
138
+ }
139
+ })
140
+ resp
141
+ end
142
+
143
+ # braspagid = Código do braspag
144
+ # value = valor da autorização (em centavos)
145
+ # tax = Taxa do Serviço (em centavos)
146
+ def self.estornar(braspagid,value,tax=0)
147
+ resp = void_credit_card_transaction(message: {
148
+ request: {
149
+ RequestId: SecureRandom.uuid,
150
+ Version: "1.0",
151
+ MerchantId: BraspagRails.config['merchant_id'],
152
+ TransactionDataCollection: [
153
+ TransactionDataRequest: {
154
+ BraspagTransactionId: braspagid,
155
+ Amount: value,
156
+ ServiceTaxAmount: tax
157
+ }
158
+ ]
159
+ }
160
+ })
161
+ resp
162
+ end
163
+ end
164
+ end
165
+ end
@@ -0,0 +1,52 @@
1
+ require 'savon'
2
+
3
+ module BraspagRails
4
+ module Transacao
5
+ class Debito
6
+
7
+ extend ::Savon::Model
8
+
9
+ client wsdl: BraspagRails.config['wsdl_transacao']
10
+ global :open_timeout, 30
11
+ global :convert_request_keys_to, :none
12
+ operations :authorize_transaction
13
+
14
+ # value = valor da autorização (em centavos)
15
+ # holder = Nome do cartão
16
+ # number = Numero do cartão
17
+ # code = Codigo de segurança
18
+ # date = Data de validate do cartão
19
+ # method = Meio de Pagamento (BraspagRails::MEIOS_DE_PAGAMENTO)
20
+ def self.autorizar(value,holder,number,code,date,method)
21
+ resp = authorize_transaction(message: {
22
+ request: {
23
+ RequestId: SecureRandom.uuid,
24
+ Version: "1.0",
25
+ OrderData: {
26
+ MerchantId: BraspagRails.config['merchant_id'],
27
+ OrderId: Random.rand(10000),
28
+ },
29
+ PaymentDataCollection: [
30
+ PaymentDataRequest: {
31
+ :'@xsi:type' => 'tns:DebitCardDataRequest',
32
+ PaymentMethod: method,
33
+ Amount: value,
34
+ Currency: BraspagRails.config['currency'],
35
+ Country: BraspagRails.config['country'],
36
+ CardHolder: holder,
37
+ CardNumber: number,
38
+ CardSecurityCode: code,
39
+ CardExpirationDate: date
40
+ }
41
+ ],
42
+ CustomerData: {
43
+ CustomerName: BraspagRails.config['customer_name']
44
+ }
45
+ }
46
+ })
47
+ resp
48
+ end
49
+
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,203 @@
1
+ require 'savon'
2
+
3
+ module BraspagRails
4
+ module Transacao
5
+ class Fraude
6
+
7
+ extend ::Savon::Model
8
+
9
+ client wsdl: BraspagRails.config['wsdl_analise_fraude']
10
+ global :open_timeout, 30
11
+ global :convert_request_keys_to, :none
12
+ operations :fraud_analysis, :update_status, :fraud_analysis_transaction_details
13
+
14
+ # Comprador
15
+ # cpf = CPF do comprador sem pontuacao com 11 caracteres
16
+ # id = Id do comprador
17
+ # email = Email do comprador
18
+ # primeiro_nome = Primeiro nome do comprador
19
+ # ultimo_nome = Primeiro nome do comprador
20
+ # Endereco
21
+ # cidade = Cidade do comprador
22
+ # pais = Pais do comprador
23
+ # cep = CEP do comprador
24
+ # estado = Sigla do Estado do comprador com 2 caracteres
25
+ # rua = Rua do comprador
26
+ # Cartao
27
+ # primeiro_nome = Primeiro nome no cartão
28
+ # ultimo_nome = Primeiro nome no cartão
29
+ # nome = Nome no cartão
30
+ # numero = Número do cartão
31
+ # codigo = Codigo de segurança
32
+ # bandeira = Bandeira do cartão (Visa Mastercard AmericanExpress DInersClub VisaElectron Elo)
33
+ # mes_expiracao = Mes da validate do cartão
34
+ # ano_expiracao = Ano da validate do cartão
35
+ # Browser
36
+ # host_name = Nome do host onde o comprador estava antes de entrar no site da loja.
37
+ # cookies = O browser do cliente aceita cookies. (true ou false)
38
+ # nome = Nome do browser utilizado pelo comprador
39
+ # ip = Endereço IP do comprador
40
+ # Produtos - Array de produtos
41
+ # descricao = Nome do produto
42
+ # sku = Código comerciante identificador do produto.
43
+ # codigo = Codigo do Produto
44
+ # quantidade = Quantidade do produto vendida
45
+ # valor_unitario = Valor Unitário do produto (em centavos)
46
+ # Avaliações (Para análise de risco)
47
+ # endereco = Em caso de divergência entre endereços de cobrança e entrega. (Yes - Low, No High, off)
48
+ # host = Importância do e-mail e endereço IP na análise de risco. (Low Normal High off)
49
+ # nonsensical = Importância da verificação feita sobre o pedido do comprador. (Low Normal High off)
50
+ # obscenidades = Importância da verificação sobre obscenidades do pedido do comprador. (Low Normal High off)
51
+ # chargebacks = O produto tem um histórico de chargebacks. (Low Normal High)
52
+ # telefone = Importância nos testes realizados com números de telefone. (Low Normal High off)
53
+ # horario = Importância no horário do dia em que foi feita a compra. (Low Normal High off)
54
+ # tempo = Importância no número de compras realizadas pelo cliente nos últimos 15 minutos.(Low Normal High off)
55
+ # Pedido
56
+ # id = Número do pedido
57
+ # sessionid = Identificador utilizado para cruzar informações obtidas pelo Browser do internauta com os dados enviados para análise. Este mesmo valor deve ser passado na variável SESSIONID do script do DeviceFingerPrint.
58
+ # valor_total = Valor Total da compra (em centavos)
59
+ # metodo = Método de pagamento (BraspagRails::MEIOS_DE_PAGAMENTO)
60
+ # numero_pagamento = Número de pagamentos
61
+ # plano_pagamento = Plano de Pagamento (BraspagRails::PLANOS_DE_PAGAMENTO)
62
+ # taxa_servico = Taxa do Serviço (em centavos)
63
+
64
+
65
+ def self.analisar(comprador, endereco, browser, cartao, produtos, pedido)
66
+ itens_data = []
67
+ produtos.each do |produto|
68
+ itens_data << {
69
+ GiftCategory: produto[:avaliacoes][:endereco],
70
+ HostHedge: produto[:avaliacoes][:host],
71
+ NonSensicalHedge: produto[:avaliacoes][:nonsensical],
72
+ ObscenitiesHedge: produto[:avaliacoes][:obscenidades],
73
+ PhoneHedge: produto[:avaliacoes][:telefone],
74
+ ProductData: {
75
+ Code: "Default",
76
+ Name: produto[:descricao],
77
+ Risk: produto[:avaliacoes][:chargebacks],
78
+ Sku: produto[:codigo],
79
+ Quantity: produto[:quantidade],
80
+ UnitPrice: produto[:valor_unitario]
81
+ },
82
+ TimeHedge: produto[:avaliacoes][:horario],
83
+ VelocityHedge: produto[:avaliacoes][:tempo]
84
+ }
85
+ end
86
+ resp = fraud_analysis(message:{
87
+ request: {
88
+ RequestId: SecureRandom.uuid,
89
+ Version: "1.0",
90
+ MerchantId: BraspagRails.config['merchant_id'],
91
+ AntiFraudSequenceType: "AnalyseAndAuthorizeOnSuccess",
92
+ DocumentData: {
93
+ Cpf: comprador[:cpf]
94
+ },
95
+ AntiFraudRequest: {
96
+ BillToData: {
97
+ City: endereco[:cidade],
98
+ Country: endereco[:pais],
99
+ CustomerId: comprador[:id],
100
+ # DateOfBirth: Data de Nascimento do comprador
101
+ Email: comprador[:email],
102
+ HostName: browser[:host_name],
103
+ HttpBrowserCookiesAccepted: browser[:cookies],
104
+ HttpBrowserType: browser[:nome],
105
+ IpAddress: browser[:ip],
106
+ FirstName: cartao[:primeiro_nome],
107
+ LastName: cartao[:ultimo_nome],
108
+ # PhoneNumber:
109
+ PostalCode: endereco[:cep],
110
+ State: endereco[:estado],
111
+ Street1: endereco[:rua]
112
+ },
113
+ # BusinessRulesScoreThreshold: Nível de risco aceitavel para ordenação de cada produto.
114
+ CardData: {
115
+ AccountNumber: cartao[:numero],
116
+ Card: cartao[:bandeira],
117
+ ExpirationMonth: cartao[:mes_expiracao],
118
+ ExpirationYear: cartao[:ano_expiracao],
119
+ },
120
+ ItemDataCollection: {
121
+ ItemData: itens_data
122
+ },
123
+ MerchantReferenceCode: pedido[:id],
124
+ DeviceFingerprintID: pedido[:sessionid],
125
+ PurchaseTotalsData: {
126
+ Currency: BraspagRails.config['currency'],
127
+ GrandTotalAmount: pedido[:valor_total],
128
+ },
129
+ ShipToData: {
130
+ City: endereco[:cidade],
131
+ Country: endereco[:pais],
132
+ FirstName: comprador[:primeiro_nome],
133
+ LastName: comprador[:ultimo_nome],
134
+ # PhoneNumber:
135
+ PostalCode: endereco[:cep],
136
+ ShippingMethod: "Other",
137
+ State: endereco[:estado],
138
+ Street1: endereco[:rua]
139
+ },
140
+ },
141
+ AuthorizeTransactionRequest: {
142
+ RequestId: SecureRandom.uuid,
143
+ Version: "1.0",
144
+ OrderData: {
145
+ MerchantId: BraspagRails.config['merchant_id'],
146
+ OrderId: Random.rand(10000),
147
+ },
148
+ PaymentDataCollection: [
149
+ PaymentDataRequest: {
150
+ :'@xsi:type' => 'ins0:CreditCardDataRequest',
151
+ PaymentMethod: pedido[:metodo],
152
+ Amount: pedido[:valor_total],
153
+ Currency: BraspagRails.config['currency'],
154
+ Country: BraspagRails.config['country'],
155
+ NumberOfPayments: pedido[:numero_pagamento],
156
+ PaymentPlan: pedido[:plano_pagamento],
157
+ TransactionType: 1,
158
+ CardHolder: cartao[:nome],
159
+ CardNumber: cartao[:numero],
160
+ CardSecurityCode: cartao[:codigo],
161
+ CardExpirationDate: "#{cartao[:mes_expiracao]}/#{cartao[:ano_expiracao]}",
162
+ ServiceTaxAmount: pedido[:taxa_servico]
163
+ }
164
+ ],
165
+ CustomerData: {
166
+ CustomerName: BraspagRails.config['customer_name']
167
+ }
168
+ }
169
+ }
170
+ })
171
+ resp
172
+ end
173
+
174
+
175
+ # antiFraudTransactionId = Id da transação de antifraude a ser localizada.
176
+ # status = Novo Status (ACCEPT ou REJECT)
177
+ # comentario = Comentário associado a mudança de status.
178
+ def self.alterar_status(antiFraudTransactionId, status, comentario = "")
179
+ resp = update_status(message:{
180
+ request: {
181
+ RequestId: SecureRandom.uuid,
182
+ MerchantId: BraspagRails.config['merchant_id'],
183
+ AntiFraudTransactionId: antiFraudTransactionId,
184
+ NewStatus: status,
185
+ Comment: comentario
186
+ }
187
+ })
188
+ resp
189
+ end
190
+
191
+ def self.consultar(antiFraudTransactionId)
192
+ resp = fraud_analysis_transaction_details(message:{
193
+ request: {
194
+ RequestId: SecureRandom.uuid,
195
+ MerchantId: BraspagRails.config['merchant_id'],
196
+ AntiFraudTransactionId: antiFraudTransactionId
197
+ }
198
+ })
199
+ resp
200
+ end
201
+ end
202
+ end
203
+ end
@@ -0,0 +1,45 @@
1
+ module BraspagRails
2
+ class Util
3
+
4
+ def self.autorizacao_com_sucesso?(code)
5
+ BraspagRails::CODIGOS_RETORNO_AUTORIZACAO[code.to_i] == "Operação realizada com sucesso"
6
+ end
7
+
8
+ def self.autorizacao_negada?(code)
9
+ BraspagRails::CODIGOS_RETORNO_AUTORIZACAO[code.to_i] == "Não autorizada" or
10
+ BraspagRails::CODIGOS_RETORNO_AUTORIZACAO[code.to_i] == "Cartão expirado" or
11
+ BraspagRails::CODIGOS_RETORNO_AUTORIZACAO[code.to_i] == "Problemas com o cartão de crédito" or
12
+ BraspagRails::CODIGOS_RETORNO_AUTORIZACAO[code.to_i] == "Cartão cancelado" or
13
+ BraspagRails::CODIGOS_RETORNO_AUTORIZACAO[code.to_i] == "Cartão bloqueado"
14
+ end
15
+
16
+ def self.autorizacao_timeout?(code)
17
+ BraspagRails::CODIGOS_RETORNO_AUTORIZACAO[code.to_i] == "Timed Out"
18
+ end
19
+
20
+ def self.captura_com_sucesso?(code)
21
+ BraspagRails::STATUS_RETORNO_CAPTURA[code.to_i] == "Sucesso"
22
+ end
23
+
24
+ def self.captura_negada?(code)
25
+ BraspagRails::STATUS_RETORNO_CAPTURA[code.to_i] == "Negada"
26
+ end
27
+
28
+ def self.consulta_autorizacao_com_sucesso?(code)
29
+ BraspagRails::STATUS_TRANSACAO[code.to_i] == "A transação foi autorizada"
30
+ end
31
+
32
+ def self.consulta_autorizacao_rejeitada?(code)
33
+ BraspagRails::STATUS_TRANSACAO[code.to_i] == "A transação não foi autorizada"
34
+ end
35
+
36
+ def self.consulta_captura_com_sucesso?(code)
37
+ BraspagRails::STATUS_TRANSACAO[code.to_i] == "A transação foi capturada"
38
+ end
39
+
40
+ def self.consulta_captura_rejeitada?(code)
41
+ BraspagRails::STATUS_TRANSACAO[code.to_i] == "A transação não foi autorizada"
42
+ end
43
+
44
+ end
45
+ end