braspag_rails 0.0.1

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