lw-pagto-certo 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,11 @@
1
+ == 0.0.3 2009-04-24
2
+
3
+ * Fixing dependencies (fails in Rails with ~> for activesupport)
4
+
5
+ == 0.0.2 2009-03-26
6
+
7
+ * Adding initial RSpec support
8
+
9
+ == 0.0.1 2009-03-26
10
+
11
+ * Initial release
@@ -0,0 +1,10 @@
1
+ History.txt
2
+ lib/lw-pagto-certo
3
+ lib/lw-pagto-certo/default.rb
4
+ lib/lw-pagto-certo/defaultDriver.rb
5
+ lib/lw-pagto-certo/defaultMappingRegistry.rb
6
+ lib/lw-pagto-certo/pagto-20090326.wsdl
7
+ lib/lw-pagto-certo/version.rb
8
+ lib/lw-pagto-certo.rb
9
+ Manifest.txt
10
+ README.rdoc
@@ -0,0 +1,163 @@
1
+ = lw-pagto-certo
2
+
3
+ * Gem para integração com o serviço Pagamento Certo da Locaweb
4
+
5
+ == DESCRIPTION:
6
+
7
+ Encapsula as chamadas SOAP ao servidor do Pagamento Certo, criando os
8
+ envelopes corretos de dados.
9
+
10
+ == REQUIREMENTS:
11
+
12
+ * ActiveSupport
13
+ * SOAP4R
14
+ * Builder
15
+
16
+ == INSTALL:
17
+
18
+ gem install akitaonrails-lw-pagto-certo --source=http://gems.github.com
19
+
20
+ == USANDO O PAGAMENTO CERTO DA LOCAWEB
21
+
22
+ === Passo 1: Cadastro do Vendedor
23
+
24
+ Antes de mais nada, você precisa se cadastrar como um vendedor, para ganhar uma
25
+ chave única, secreta, que o identifica como vendedor. Para isso vá ao site:
26
+
27
+ http://www.locaweb.com.br/produtos/pagamento-certo
28
+
29
+ Depois de se cadastrar, faça login no painel (http://pagamentocerto.com.br/painel),
30
+ adicione seus dados bancários, etc. No final você receberá a chave por e-mail, um
31
+ string com este formato: "XXXXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZZZZ". Guarde-a bem, você
32
+ a usará em todas as transações bancárias
33
+
34
+ === Passo 2: Aplicação
35
+
36
+ Você tem um website feito em Ruby on Rails. Nele você tem seus produtos, seu carrinho
37
+ de compras. No final de todo o processo, quando o cliente confirma o pagamento, você
38
+ fará esta chamada:
39
+
40
+ lw = LwPagtoCerto.new(:chave_vendedor => "XXXXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZZZZ",
41
+ :url_retorno => "http://meusite.dominio.com.br/confirmacao_pagamento")
42
+
43
+ A :url_retorno tem que ser uma URL válida, acessível pela internet. O processo funciona
44
+ assim:
45
+
46
+ * você inicia a transação e recebe um ID de transacao
47
+
48
+ * sua aplicação devolve um HTTP POST ao endereço em LwPagtoCerto.DefaultCheckoutUrl
49
+ com o campo "tdi" igual ao ID da transacao. isso redirecionará o seu cliente ao
50
+ site do pagamento certo, com todos os dados do pedido e já pronto para pagar
51
+
52
+ * depois que o seu cliente efetua o pagamento corretamente, o Pagamento Certo fará
53
+ um HTTP POST de volta à sua aplicação, na URL que você passou no :url_retorno,
54
+ devolvendo novamente o ID da transação no "params[:tdi]" (crie um controller Rails
55
+ e cheque isso na action "create", por exemplo). Por exemplo, se você tiver um
56
+ recurso assim:
57
+
58
+ # config/routes.rb
59
+ map.resource :checkout
60
+
61
+ # app/controllers/checkout_controller
62
+ class CheckoutController < ApplicationController
63
+ def create
64
+ id_transacao = params[:tdi]
65
+ lw = LwPagtoCerto.new(:chave_vendedor => "XXXXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZZZZ")
66
+ retorno = lw.consulta(id_transacao)
67
+ if retorno[:cod_retorno] == "15"
68
+ flash[:success] = "Pagamento bem sucedido"
69
+ else
70
+ flash[:error] = retorno[:mensagem_retorno]
71
+ end
72
+ end
73
+ end
74
+
75
+ Nesse caso a :url_retorno seria www.meusite.com/checkout
76
+
77
+ * como já adiantado no código acima, note a chamada à API de consulta da transação onde
78
+ você poderá ver se deu tudo certo ou não.
79
+
80
+ Uma vez criado a instância de LwPagtoCerto, preencha os dados do cliente corretamente
81
+ conforme o exemplo abaixo:
82
+
83
+ lw.comprador = {
84
+ :Nome => "Fabio Akita",
85
+ :Email => "fabio.akita@locaweb.com.br",
86
+ :Cpf => "12312312300",
87
+ :Rg => "123456780",
88
+ :Ddd => "11",
89
+ :Telefone => "12345678",
90
+ :TipoPessoa => "Fisica",
91
+ # :RazaoSocial => "",
92
+ # :Cnpj => "",
93
+ }
94
+ lw.pagamento = {
95
+ :Modulo => "Boleto",
96
+ # :Tipo => "",
97
+ }
98
+ lw.pedido = {
99
+ :Numero => "12345",
100
+ :ValorSubTotal => "2000",
101
+ :ValorFrete => "000",
102
+ :ValorAcrescimo => "000",
103
+ :ValorDesconto => "000",
104
+ :ValorTotal => "2000",
105
+ :Itens => {
106
+ :Item => {
107
+ :CodProduto => "4321",
108
+ :DescProduto => "Livro",
109
+ :Quantidade => "1",
110
+ :ValorUnitario => "2000",
111
+ :ValorTotal => "2000",
112
+ },
113
+ },
114
+ :Cobranca => {
115
+ :Endereco => "Rua Foo",
116
+ :Numero => "123",
117
+ :Bairro => "Foo",
118
+ :Cidade => "Sao Paulo",
119
+ :Cep => "12345678",
120
+ :Estado => "SP",
121
+ },
122
+ :Entrega => {
123
+ :Endereco => "Rua Foo",
124
+ :Numero => "123",
125
+ :Bairro => "Foo",
126
+ :Cidade => "Sao Paulo",
127
+ :Cep => "12345678",
128
+ :Estado => "SP",
129
+ },
130
+ }
131
+
132
+ Com o objeto LwPagtoCerto preenchido corretamente você deve chamar o método "inicia", que
133
+ começará uma transação aberta com o Pagamento Certo, lhe devolvendo o ID da transação. É
134
+ depois deste ponto que se faz o HTTP POST ao Pagamento Certo passando essa ID no campo
135
+ "tdi" do Post.
136
+
137
+ retorno = lw.inicia()
138
+ # => {:mensagem_retorno=>"Transa\303\247\303\243o iniciada.",
139
+ :id_transacao=>"YYYYYYYY-DDDD-EEEE-FFFF-ZZZZZZZZZZZZ",
140
+ :codigo=>"45383", :cod_retorno=>"0"}
141
+
142
+ Além disso, o objeto "retorno" ainda tem um método extra "cod_retorno_mensagem" para
143
+ traduzir o código no campo :cod_retorno.
144
+
145
+ Como explicado, depois que o cliente faz o pagamento, o Pagamento Certo te redireciona
146
+ à :url_retorno que você passou, repassando o ID da transação e então você pode verificar
147
+ o resultado assim:
148
+
149
+ retorno = lw.consulta("YYYYYYYY-DDDD-EEEE-FFFF-ZZZZZZZZZZZZ")
150
+ # => {:mensagem_retorno=>"Transa\303\247\303\243o ainda n\303\243o processada.",
151
+ :id_transacao=>"YYYYYYYY-DDDD-EEEE-FFFF-ZZZZZZZZZZZZ", :cod_retorno=>"12"}
152
+
153
+ Aqui também, o objeto "retorno" ainda tem um método extra "cod_retorno_mensagem" para
154
+ traduzir o código no campo :cod_retorno. Procure por mais constantes no arquivo
155
+ "lib/lw-pagto-certo/version.rb"
156
+
157
+ == REFERENCES
158
+
159
+ Para entender o fluxo em detalhes bem como cada um dos dados retornados, vá ao site:
160
+
161
+ http://pagamentocerto.com.br/downloads/
162
+
163
+ E baixe o kit de integração, que contém uma documentação detalhada em PDF.
@@ -0,0 +1,210 @@
1
+ require 'rubygems'
2
+ gem "soap4r", "~> 1.5.0"
3
+ require 'activesupport'
4
+ require 'builder'
5
+ require File.expand_path(File.dirname(__FILE__)) + '/lw-pagto-certo/defaultDriver.rb'
6
+ require File.expand_path(File.dirname(__FILE__)) + '/lw-pagto-certo/version.rb'
7
+
8
+ class LwPagtoCerto
9
+ DefaultEndpointUrl = "https://www.pagamentocerto.com.br/vendedor/vendedor.asmx"
10
+ DefaultCheckoutUrl = "https://www.pagamentocerto.com.br/pagamento/pagamento.aspx"
11
+
12
+ attr_accessor :chave_vendedor # chave criada ao se cadastrar no Pagto. Certo
13
+ attr_accessor :url_retorno # URL da sua aplicação para onde o Pagto. Certo redirecionará após o pagto.
14
+
15
+ # Dados de comprador - Hash
16
+ # {
17
+ # :Nome => "", # 3 a 255
18
+ # :Email => "", # 5 a 100
19
+ # :Cpf => "", # 11
20
+ # :Rg => "", # opcional 5 a 14
21
+ # :Ddd => "", # opcional 2
22
+ # :Telefone => "", # opcional 7 a 8
23
+ # :TipoPessoa => "", # 6 a 8
24
+ # :RazaoSocial => "", # 5 a 255
25
+ # :Cnpj => "", # 1 a 50
26
+ # }
27
+ attr_accessor :comprador
28
+
29
+ # Dados de pagamento - Hash
30
+ # {
31
+ # :Modulo => "", # 6 a 13
32
+ # :Tipo => "", # opcional 0 a 15
33
+ # }
34
+ attr_accessor :pagamento
35
+
36
+ # Dados do Pedido - Hash
37
+ # {
38
+ # :Numero => "", # seu número interno de controle do pedido
39
+ # :ValorSubTotal => "000", # dinheiro = 999.88 = 99988
40
+ # :ValorFrete => "000", # centavos são sempre os dois ultimos digitos
41
+ # :ValorAcrescimo => "000",
42
+ # :ValorDesconto => "000",
43
+ # :ValorTotal => "000",
44
+ # :Itens => {
45
+ # :Item => {
46
+ # :CodProduto => "", # 1 a 40
47
+ # :DescProduto => "", # 1 a 100
48
+ # :Quantidade => "0", #
49
+ # :ValorUnitario => "000", # 3 a 14
50
+ # :ValorTotal => "000", # 3 a 14
51
+ # },
52
+ # },
53
+ # :Cobranca => {
54
+ # :Endereco => "",
55
+ # :Numero => "",
56
+ # :Bairro => "",
57
+ # :Cidade => "",
58
+ # :Cep => "", # 8 dígitos
59
+ # :Estado => "", # precisa ser válido, como ex. SP, RJ, etc.
60
+ # },
61
+ # :Entrega => {
62
+ # :Endereco => "",
63
+ # :Numero => "",
64
+ # :Bairro => "",
65
+ # :Cidade => "",
66
+ # :Cep => "", # 8 dígitos
67
+ # :Estado => "", # precisa ser válido, como ex. SP, RJ, etc.
68
+ # }
69
+ # }
70
+ attr_accessor :pedido
71
+
72
+ mattr_accessor :soap
73
+ self.soap = ::VendedorSoap.new(DefaultEndpointUrl)
74
+
75
+ def initialize(options = {})
76
+ self.chave_vendedor = options[:chave_vendedor] || ""
77
+ self.url_retorno = options[:url_retorno] || ""
78
+ %w(comprador pagamento pedido).each do |method|
79
+ send("#{method}=".to_sym, {})
80
+ end
81
+ yield(self) if block_given?
82
+ end
83
+
84
+ # Inicia Transação
85
+ #
86
+ # Passa a estrutura Hash com os elementos de Transação documentadas acima
87
+ # ou pega a configuração feita via "setters"
88
+ #
89
+ # Exemplo:
90
+ #
91
+ # lw = LwPagtoCerto.new(:chave_vendedor => "xxxxx", :url_retorno => "http://dominio.com/pagto")
92
+ # lw.comprador = { :Nome => "Fabio", :Email => "fabio.akita@locaweb.com.br", .....}
93
+ # lw.pagamento = { :Modulo => LwPagtoCerto::Modulo::BOLETO }
94
+ # ...
95
+ # retorno = lw.inicia do |l|
96
+ # l.cobranca = { :Endereco => "", :Numero => "", ..... }
97
+ # end
98
+ #
99
+ # puts retorno[:cod_retorno]
100
+ # puts retorno[:mensagem_retorno]
101
+ def inicia(transacao = nil)
102
+ transacao = transacao || build_transacao
103
+ yield(self) if block_given?
104
+ payload = IniciaTransacao.new( self.chave_vendedor, self.url_retorno, transacao )
105
+ response = LwPagtoCerto.soap.iniciaTransacao(payload)
106
+ response = Hash.from_xml(response.iniciaTransacaoResult)
107
+ response = response["loca_web"]["transacao"].symbolize_keys
108
+
109
+ response[:data] = Time.parse(response[:data].gsub(/(\d+)\/(\d+)\/(\d+)\s(.*)/,
110
+ "#{$3}-#{$2}-#{$1}T#{$4}")) if response[:data]
111
+ if response[:CodRetorno]
112
+ response.instance_eval do
113
+ def cod_retorno_mensagem
114
+ LwPagtoCerto::INICIA_COD_RETORNO[self[:CodRetorno].to_sym]
115
+ end
116
+ end
117
+ end
118
+ response
119
+ end
120
+
121
+ # Consulta os Dados de uma Transação que já foi Paga
122
+ #
123
+ # lw = LwPagtoCerto.new(:chave_vendedor => "xxxxx", :url_retorno => "http://dominio.com/pagto")
124
+ # retorno = lw.consulta("xxxxxxxx") # passa Id da transação retornada ao chamar "inicia"
125
+ #
126
+ # puts retorno[:CodRetorno]
127
+ # puts retorno[:IdTransacao]
128
+ # puts retorno[:Codigo]
129
+ # puts retorno[:data] # => "26/3/2009 15:19:41"
130
+ # puts retorno[:MensagemRetorno]
131
+ def consulta(id_transacao = "")
132
+ payload = ConsultaTransacao.new self.chave_vendedor, id_transacao
133
+ response = LwPagtoCerto.soap.consultaTransacao(payload)
134
+ response = Hash.from_xml(response.consultaTransacaoResult)
135
+ response = response["loca_web"]["transacao"].symbolize_keys
136
+ if response[:CodRetorno]
137
+ response.instance_eval do
138
+ def cod_retorno_mensagem
139
+ LwPagtoCerto::FINALIZA_COD_RETORNO[self[:CodRetorno].to_sym]
140
+ end
141
+ end
142
+ end
143
+ response
144
+ end
145
+
146
+ def consultaPedido(id_transacao = "")
147
+ payload = ConsultaTransacao.new self.chave_vendedor, id_transacao
148
+ response = LwPagtoCerto.soap.consultaTransacao(payload)
149
+ response = Hash.from_xml(response.consultaTransacaoResult)
150
+ return response["loca_web"]["pedido"].symbolize_keys if response["loca_web"]["pedido"]
151
+ return []
152
+ end
153
+
154
+ # Usado internamento pelo Inicia Transacao para gerar o XML
155
+ # que define a transacao sendo iniciada. Utilize os accessors
156
+ # comprador, pagamento e pedido conforme comentado no começo do
157
+ # arquivo
158
+ def build_transacao
159
+ result = ""
160
+ xml = Builder::XmlMarkup.new(:indent => 2, :target => result)
161
+ xml.instruct!
162
+ xml.LocaWeb do |lw|
163
+ lw.Comprador do |c|
164
+ %w(Nome Email Cpf Rg Ddd Telefone TipoPessoa RazaoSocial Cnpj).each do |field|
165
+ eval "c.#{field} comprador[field.to_sym]" if comprador[field.to_sym]
166
+ end
167
+ end
168
+ lw.Pagamento do |p|
169
+ %w(Modulo Tipo).each do |field|
170
+ eval "p.#{field} pagamento[field.to_sym]" if pagamento[field.to_sym]
171
+ end
172
+ end
173
+ lw.Pedido do |p|
174
+ %w(Numero ValorSubTotal ValorFrete ValorAcrescimo ValorDesconto ValorTotal).each do |field|
175
+ eval "p.#{field} pedido[field.to_sym]" if pedido[field.to_sym]
176
+ end
177
+ if pedido[:Itens]
178
+ p.Itens do |items|
179
+ pedido[:Itens].each do |key, item|
180
+ items.Item do
181
+ %w(CodProduto DescProduto Quantidade ValorUnitario ValorTotal).each do |field|
182
+ eval "items.#{field} item[field.to_sym]" if item[field.to_sym]
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end
188
+ if pedido[:Cobranca]
189
+ p.Cobranca do |c|
190
+ %w(Endereco Numero Bairro Cidade Cep Estado).each do |field|
191
+ eval "c.#{field} pedido[:Cobranca][field.to_sym]" if pedido[:Cobranca][field.to_sym]
192
+ end
193
+ end
194
+ end
195
+ if pedido[:Entrega]
196
+ p.Entrega do |c|
197
+ %w(Endereco Numero Bairro Cidade Cep Estado).each do |field|
198
+ eval "c.#{field} pedido[:Cobranca][field.to_sym]" if pedido[:Entrega][field.to_sym]
199
+ end
200
+ end
201
+ end
202
+ end
203
+ end
204
+ result
205
+ end
206
+
207
+ def endpoint_url(url)
208
+ soap.endpoint_url = url
209
+ end
210
+ end
@@ -0,0 +1,79 @@
1
+ require 'xsd/qname'
2
+
3
+ # {http://www.locaweb.com.br}IniciaTransacao
4
+ # chaveVendedor - SOAP::SOAPString
5
+ # urlRetorno - SOAP::SOAPString
6
+ # xml - SOAP::SOAPString
7
+ class IniciaTransacao
8
+ attr_accessor :chaveVendedor
9
+ attr_accessor :urlRetorno
10
+ attr_accessor :xml
11
+
12
+ def initialize(chaveVendedor = nil, urlRetorno = nil, xml = nil)
13
+ @chaveVendedor = chaveVendedor
14
+ @urlRetorno = urlRetorno
15
+ @xml = xml
16
+ end
17
+ end
18
+
19
+ # {http://www.locaweb.com.br}IniciaTransacaoResponse
20
+ # iniciaTransacaoResult - SOAP::SOAPString
21
+ class IniciaTransacaoResponse
22
+ attr_accessor :iniciaTransacaoResult
23
+
24
+ def initialize(iniciaTransacaoResult = nil)
25
+ @iniciaTransacaoResult = iniciaTransacaoResult
26
+ end
27
+ end
28
+
29
+ # {http://www.locaweb.com.br}PagaTransacao
30
+ # chaveVendedor - SOAP::SOAPString
31
+ # urlRetorno - SOAP::SOAPString
32
+ # xml - SOAP::SOAPString
33
+ # xmlCartao - SOAP::SOAPString
34
+ class PagaTransacao
35
+ attr_accessor :chaveVendedor
36
+ attr_accessor :urlRetorno
37
+ attr_accessor :xml
38
+ attr_accessor :xmlCartao
39
+
40
+ def initialize(chaveVendedor = nil, urlRetorno = nil, xml = nil, xmlCartao = nil)
41
+ @chaveVendedor = chaveVendedor
42
+ @urlRetorno = urlRetorno
43
+ @xml = xml
44
+ @xmlCartao = xmlCartao
45
+ end
46
+ end
47
+
48
+ # {http://www.locaweb.com.br}PagaTransacaoResponse
49
+ # pagaTransacaoResult - SOAP::SOAPString
50
+ class PagaTransacaoResponse
51
+ attr_accessor :pagaTransacaoResult
52
+
53
+ def initialize(pagaTransacaoResult = nil)
54
+ @pagaTransacaoResult = pagaTransacaoResult
55
+ end
56
+ end
57
+
58
+ # {http://www.locaweb.com.br}ConsultaTransacao
59
+ # chaveVendedor - SOAP::SOAPString
60
+ # idTransacao - SOAP::SOAPString
61
+ class ConsultaTransacao
62
+ attr_accessor :chaveVendedor
63
+ attr_accessor :idTransacao
64
+
65
+ def initialize(chaveVendedor = nil, idTransacao = nil)
66
+ @chaveVendedor = chaveVendedor
67
+ @idTransacao = idTransacao
68
+ end
69
+ end
70
+
71
+ # {http://www.locaweb.com.br}ConsultaTransacaoResponse
72
+ # consultaTransacaoResult - SOAP::SOAPString
73
+ class ConsultaTransacaoResponse
74
+ attr_accessor :consultaTransacaoResult
75
+
76
+ def initialize(consultaTransacaoResult = nil)
77
+ @consultaTransacaoResult = consultaTransacaoResult
78
+ end
79
+ end
@@ -0,0 +1,63 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/default.rb'
2
+ require File.expand_path(File.dirname(__FILE__)) + '/defaultMappingRegistry.rb'
3
+ require 'soap/rpc/driver'
4
+
5
+ class VendedorSoap < ::SOAP::RPC::Driver
6
+ DefaultEndpointUrl = "https://www.pagamentocerto.com.br/vendedor/vendedor.asmx"
7
+
8
+ Methods = [
9
+ [ "http://www.locaweb.com.br/IniciaTransacao",
10
+ "iniciaTransacao",
11
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://www.locaweb.com.br", "IniciaTransacao"]],
12
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://www.locaweb.com.br", "IniciaTransacaoResponse"]] ],
13
+ { :request_style => :document, :request_use => :literal,
14
+ :response_style => :document, :response_use => :literal,
15
+ :faults => {} }
16
+ ],
17
+ [ "http://www.locaweb.com.br/PagaTransacao",
18
+ "pagaTransacao",
19
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://www.locaweb.com.br", "PagaTransacao"]],
20
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://www.locaweb.com.br", "PagaTransacaoResponse"]] ],
21
+ { :request_style => :document, :request_use => :literal,
22
+ :response_style => :document, :response_use => :literal,
23
+ :faults => {} }
24
+ ],
25
+ [ "http://www.locaweb.com.br/ConsultaTransacao",
26
+ "consultaTransacao",
27
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://www.locaweb.com.br", "ConsultaTransacao"]],
28
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://www.locaweb.com.br", "ConsultaTransacaoResponse"]] ],
29
+ { :request_style => :document, :request_use => :literal,
30
+ :response_style => :document, :response_use => :literal,
31
+ :faults => {} }
32
+ ]
33
+ ]
34
+
35
+ def initialize(endpoint_url = nil)
36
+ endpoint_url ||= DefaultEndpointUrl
37
+ super(endpoint_url, nil)
38
+ self.mapping_registry = DefaultMappingRegistry::EncodedRegistry
39
+ self.literal_mapping_registry = DefaultMappingRegistry::LiteralRegistry
40
+ init_methods
41
+ end
42
+
43
+ private
44
+
45
+ def init_methods
46
+ Methods.each do |definitions|
47
+ opt = definitions.last
48
+ if opt[:request_style] == :document
49
+ add_document_operation(*definitions)
50
+ else
51
+ add_rpc_operation(*definitions)
52
+ qname = definitions[0]
53
+ name = definitions[2]
54
+ if qname.name != name and qname.name.capitalize == name.capitalize
55
+ ::SOAP::Mapping.define_singleton_method(self, qname.name) do |*arg|
56
+ __send__(name, *arg)
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+
@@ -0,0 +1,62 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/default.rb'
2
+ require 'soap/mapping'
3
+
4
+ module DefaultMappingRegistry
5
+ EncodedRegistry = ::SOAP::Mapping::EncodedRegistry.new
6
+ LiteralRegistry = ::SOAP::Mapping::LiteralRegistry.new
7
+ NsWwwLocawebComBr = "http://www.locaweb.com.br"
8
+
9
+ LiteralRegistry.register(
10
+ :class => IniciaTransacao,
11
+ :schema_name => XSD::QName.new(NsWwwLocawebComBr, "IniciaTransacao"),
12
+ :schema_element => [
13
+ ["chaveVendedor", "SOAP::SOAPString", [0, 1]],
14
+ ["urlRetorno", "SOAP::SOAPString", [0, 1]],
15
+ ["xml", "SOAP::SOAPString", [0, 1]]
16
+ ]
17
+ )
18
+
19
+ LiteralRegistry.register(
20
+ :class => IniciaTransacaoResponse,
21
+ :schema_name => XSD::QName.new(NsWwwLocawebComBr, "IniciaTransacaoResponse"),
22
+ :schema_element => [
23
+ ["iniciaTransacaoResult", ["SOAP::SOAPString", XSD::QName.new(NsWwwLocawebComBr, "IniciaTransacaoResult")], [0, 1]]
24
+ ]
25
+ )
26
+
27
+ LiteralRegistry.register(
28
+ :class => PagaTransacao,
29
+ :schema_name => XSD::QName.new(NsWwwLocawebComBr, "PagaTransacao"),
30
+ :schema_element => [
31
+ ["chaveVendedor", "SOAP::SOAPString", [0, 1]],
32
+ ["urlRetorno", "SOAP::SOAPString", [0, 1]],
33
+ ["xml", "SOAP::SOAPString", [0, 1]],
34
+ ["xmlCartao", "SOAP::SOAPString", [0, 1]]
35
+ ]
36
+ )
37
+
38
+ LiteralRegistry.register(
39
+ :class => PagaTransacaoResponse,
40
+ :schema_name => XSD::QName.new(NsWwwLocawebComBr, "PagaTransacaoResponse"),
41
+ :schema_element => [
42
+ ["pagaTransacaoResult", ["SOAP::SOAPString", XSD::QName.new(NsWwwLocawebComBr, "PagaTransacaoResult")], [0, 1]]
43
+ ]
44
+ )
45
+
46
+ LiteralRegistry.register(
47
+ :class => ConsultaTransacao,
48
+ :schema_name => XSD::QName.new(NsWwwLocawebComBr, "ConsultaTransacao"),
49
+ :schema_element => [
50
+ ["chaveVendedor", "SOAP::SOAPString", [0, 1]],
51
+ ["idTransacao", "SOAP::SOAPString", [0, 1]]
52
+ ]
53
+ )
54
+
55
+ LiteralRegistry.register(
56
+ :class => ConsultaTransacaoResponse,
57
+ :schema_name => XSD::QName.new(NsWwwLocawebComBr, "ConsultaTransacaoResponse"),
58
+ :schema_element => [
59
+ ["consultaTransacaoResult", ["SOAP::SOAPString", XSD::QName.new(NsWwwLocawebComBr, "ConsultaTransacaoResult")], [0, 1]]
60
+ ]
61
+ )
62
+ end
@@ -0,0 +1,155 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.locaweb.com.br" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://www.locaweb.com.br" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
3
+ <wsdl:types>
4
+ <s:schema elementFormDefault="qualified" targetNamespace="http://www.locaweb.com.br">
5
+ <s:element name="IniciaTransacao">
6
+ <s:complexType>
7
+ <s:sequence>
8
+ <s:element minOccurs="0" maxOccurs="1" name="chaveVendedor" type="s:string" />
9
+ <s:element minOccurs="0" maxOccurs="1" name="urlRetorno" type="s:string" />
10
+ <s:element minOccurs="0" maxOccurs="1" name="xml" type="s:string" />
11
+ </s:sequence>
12
+ </s:complexType>
13
+ </s:element>
14
+ <s:element name="IniciaTransacaoResponse">
15
+ <s:complexType>
16
+ <s:sequence>
17
+ <s:element minOccurs="0" maxOccurs="1" name="IniciaTransacaoResult" type="s:string" />
18
+ </s:sequence>
19
+ </s:complexType>
20
+ </s:element>
21
+ <s:element name="PagaTransacao">
22
+ <s:complexType>
23
+ <s:sequence>
24
+ <s:element minOccurs="0" maxOccurs="1" name="chaveVendedor" type="s:string" />
25
+ <s:element minOccurs="0" maxOccurs="1" name="urlRetorno" type="s:string" />
26
+ <s:element minOccurs="0" maxOccurs="1" name="xml" type="s:string" />
27
+ <s:element minOccurs="0" maxOccurs="1" name="xmlCartao" type="s:string" />
28
+ </s:sequence>
29
+ </s:complexType>
30
+ </s:element>
31
+ <s:element name="PagaTransacaoResponse">
32
+ <s:complexType>
33
+ <s:sequence>
34
+ <s:element minOccurs="0" maxOccurs="1" name="PagaTransacaoResult" type="s:string" />
35
+ </s:sequence>
36
+ </s:complexType>
37
+ </s:element>
38
+ <s:element name="ConsultaTransacao">
39
+ <s:complexType>
40
+ <s:sequence>
41
+ <s:element minOccurs="0" maxOccurs="1" name="chaveVendedor" type="s:string" />
42
+ <s:element minOccurs="0" maxOccurs="1" name="idTransacao" type="s:string" />
43
+ </s:sequence>
44
+ </s:complexType>
45
+ </s:element>
46
+ <s:element name="ConsultaTransacaoResponse">
47
+ <s:complexType>
48
+ <s:sequence>
49
+ <s:element minOccurs="0" maxOccurs="1" name="ConsultaTransacaoResult" type="s:string" />
50
+ </s:sequence>
51
+ </s:complexType>
52
+ </s:element>
53
+ </s:schema>
54
+ </wsdl:types>
55
+ <wsdl:message name="IniciaTransacaoSoapIn">
56
+ <wsdl:part name="parameters" element="tns:IniciaTransacao" />
57
+ </wsdl:message>
58
+ <wsdl:message name="IniciaTransacaoSoapOut">
59
+ <wsdl:part name="parameters" element="tns:IniciaTransacaoResponse" />
60
+ </wsdl:message>
61
+ <wsdl:message name="PagaTransacaoSoapIn">
62
+ <wsdl:part name="parameters" element="tns:PagaTransacao" />
63
+ </wsdl:message>
64
+ <wsdl:message name="PagaTransacaoSoapOut">
65
+ <wsdl:part name="parameters" element="tns:PagaTransacaoResponse" />
66
+ </wsdl:message>
67
+ <wsdl:message name="ConsultaTransacaoSoapIn">
68
+ <wsdl:part name="parameters" element="tns:ConsultaTransacao" />
69
+ </wsdl:message>
70
+ <wsdl:message name="ConsultaTransacaoSoapOut">
71
+ <wsdl:part name="parameters" element="tns:ConsultaTransacaoResponse" />
72
+ </wsdl:message>
73
+ <wsdl:portType name="VendedorSoap">
74
+ <wsdl:operation name="IniciaTransacao">
75
+ <wsdl:input message="tns:IniciaTransacaoSoapIn" />
76
+ <wsdl:output message="tns:IniciaTransacaoSoapOut" />
77
+ </wsdl:operation>
78
+ <wsdl:operation name="PagaTransacao">
79
+ <wsdl:input message="tns:PagaTransacaoSoapIn" />
80
+ <wsdl:output message="tns:PagaTransacaoSoapOut" />
81
+ </wsdl:operation>
82
+ <wsdl:operation name="ConsultaTransacao">
83
+ <wsdl:input message="tns:ConsultaTransacaoSoapIn" />
84
+ <wsdl:output message="tns:ConsultaTransacaoSoapOut" />
85
+ </wsdl:operation>
86
+ </wsdl:portType>
87
+ <wsdl:binding name="VendedorSoap" type="tns:VendedorSoap">
88
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
89
+ <wsdl:operation name="IniciaTransacao">
90
+ <soap:operation soapAction="http://www.locaweb.com.br/IniciaTransacao" style="document" />
91
+ <wsdl:input>
92
+ <soap:body use="literal" />
93
+ </wsdl:input>
94
+ <wsdl:output>
95
+ <soap:body use="literal" />
96
+ </wsdl:output>
97
+ </wsdl:operation>
98
+ <wsdl:operation name="PagaTransacao">
99
+ <soap:operation soapAction="http://www.locaweb.com.br/PagaTransacao" style="document" />
100
+ <wsdl:input>
101
+ <soap:body use="literal" />
102
+ </wsdl:input>
103
+ <wsdl:output>
104
+ <soap:body use="literal" />
105
+ </wsdl:output>
106
+ </wsdl:operation>
107
+ <wsdl:operation name="ConsultaTransacao">
108
+ <soap:operation soapAction="http://www.locaweb.com.br/ConsultaTransacao" style="document" />
109
+ <wsdl:input>
110
+ <soap:body use="literal" />
111
+ </wsdl:input>
112
+ <wsdl:output>
113
+ <soap:body use="literal" />
114
+ </wsdl:output>
115
+ </wsdl:operation>
116
+ </wsdl:binding>
117
+ <wsdl:binding name="VendedorSoap12" type="tns:VendedorSoap">
118
+ <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
119
+ <wsdl:operation name="IniciaTransacao">
120
+ <soap12:operation soapAction="http://www.locaweb.com.br/IniciaTransacao" style="document" />
121
+ <wsdl:input>
122
+ <soap12:body use="literal" />
123
+ </wsdl:input>
124
+ <wsdl:output>
125
+ <soap12:body use="literal" />
126
+ </wsdl:output>
127
+ </wsdl:operation>
128
+ <wsdl:operation name="PagaTransacao">
129
+ <soap12:operation soapAction="http://www.locaweb.com.br/PagaTransacao" style="document" />
130
+ <wsdl:input>
131
+ <soap12:body use="literal" />
132
+ </wsdl:input>
133
+ <wsdl:output>
134
+ <soap12:body use="literal" />
135
+ </wsdl:output>
136
+ </wsdl:operation>
137
+ <wsdl:operation name="ConsultaTransacao">
138
+ <soap12:operation soapAction="http://www.locaweb.com.br/ConsultaTransacao" style="document" />
139
+ <wsdl:input>
140
+ <soap12:body use="literal" />
141
+ </wsdl:input>
142
+ <wsdl:output>
143
+ <soap12:body use="literal" />
144
+ </wsdl:output>
145
+ </wsdl:operation>
146
+ </wsdl:binding>
147
+ <wsdl:service name="Vendedor">
148
+ <wsdl:port name="VendedorSoap" binding="tns:VendedorSoap">
149
+ <soap:address location="https://www.pagamentocerto.com.br/vendedor/vendedor.asmx" />
150
+ </wsdl:port>
151
+ <wsdl:port name="VendedorSoap12" binding="tns:VendedorSoap12">
152
+ <soap12:address location="https://www.pagamentocerto.com.br/vendedor/vendedor.asmx" />
153
+ </wsdl:port>
154
+ </wsdl:service>
155
+ </wsdl:definitions>
@@ -0,0 +1,42 @@
1
+ class LwPagtoCerto
2
+ VERSION = '0.0.5'
3
+
4
+ MODULO_CARTAO = "CartaoCredito"
5
+ MODULO_BOLETO = "Boleto"
6
+ TIPO_VISA = "Visa"
7
+ TIPO_AMEX = "AmericanExpress"
8
+ TIPO_PESSOA_FISICA = "Fisica"
9
+ TIPO_PESSOA_JURIDICA = "Juridica"
10
+
11
+ MODULO = [MODULO_CARTAO, MODULO_BOLETO]
12
+ TIPO = [TIPO_VISA, TIPO_AMEX]
13
+ TIPO_PESSOA = [TIPO_PESSOA_FISICA, TIPO_PESSOA_JURIDICA]
14
+
15
+ INICIA_COD_RETORNO = {
16
+ :"0" => "Transação iniciada.",
17
+ :"1" => "Dados de entrada incorretos:",
18
+ :"2" => "Vendedor não autenticado.",
19
+ :"3" => "Conta de vendedor desativada.",
20
+ :"4" => "Conta de comprador desativada.",
21
+ :"5" => "Dados de comprador incorretos:",
22
+ :"6" => "XML inválido:",
23
+ :"7" => "XML mal formatado.",
24
+ :"8" => "Dados de pagamento incorretos:",
25
+ :"9" => "Dados de pedido incorretos:",
26
+ :"10" => "Erro ao iniciar a transação.",
27
+ :"21" => "CPF não pertence à conta de comprador informada.",
28
+ }
29
+
30
+ FINALIZA_COD_RETORNO = {
31
+ :"11" => "Transação não encontrada.",
32
+ :"12" => "Transação ainda não processada.",
33
+ :"13" => "Transação em processamento.",
34
+ :"14" => "Transação expirada.",
35
+ :"15" => "Transação processada.",
36
+ :"16" => "Erro ao consultar a transação.",
37
+ :"17" => "Transação com tempo de pagamento expirado.",
38
+ :"18" => "Usuário fechou a janela de pagamento.",
39
+ :"19" => "Pagamento cancelado pelo usuário.",
40
+ :"20" => "Número máximo de tentativas de pagamento atingido.",
41
+ }
42
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lw-pagto-certo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Fabio Akita
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-03-27 00:00:00 -03:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 2.0.2
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: builder
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.1.0
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: soap4r
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">"
42
+ - !ruby/object:Gem::Version
43
+ version: 1.5.0
44
+ version:
45
+ description: "Integra\xC3\xA7\xC3\xA3o para o servi\xC3\xA7o Pagamento Certo, da Locaweb."
46
+ email: fabio.akita@locaweb.com.br
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files: []
52
+
53
+ files:
54
+ - History.txt
55
+ - lib/lw-pagto-certo/default.rb
56
+ - lib/lw-pagto-certo/defaultDriver.rb
57
+ - lib/lw-pagto-certo/defaultMappingRegistry.rb
58
+ - lib/lw-pagto-certo/pagto-20090326.wsdl
59
+ - lib/lw-pagto-certo/version.rb
60
+ - lib/lw-pagto-certo.rb
61
+ - Manifest.txt
62
+ - README.rdoc
63
+ has_rdoc: true
64
+ homepage: http://pagamentocerto.com.br
65
+ licenses: []
66
+
67
+ post_install_message:
68
+ rdoc_options: []
69
+
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: "0"
77
+ version:
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
83
+ version:
84
+ requirements: []
85
+
86
+ rubyforge_project:
87
+ rubygems_version: 1.3.5
88
+ signing_key:
89
+ specification_version: 2
90
+ summary: "Integra\xC3\xA7\xC3\xA3o para o servi\xC3\xA7o Pagamento Certo, da Locaweb."
91
+ test_files: []
92
+