Class: LwPagtoCerto

Inherits:
Object
  • Object
show all
Defined in:
lib/lw-pagto-certo.rb,
lib/lw-pagto-certo/version.rb

Constant Summary collapse

DefaultEndpointUrl =
"https://www.pagamentocerto.com.br/vendedor/vendedor.asmx"
DefaultCheckoutUrl =
"https://www.pagamentocerto.com.br/pagamento/pagamento.aspx"
VERSION =
'0.0.5'
MODULO_CARTAO =
"CartaoCredito"
MODULO_BOLETO =
"Boleto"
TIPO_VISA =
"Visa"
TIPO_AMEX =
"AmericanExpress"
TIPO_PESSOA_FISICA =
"Fisica"
TIPO_PESSOA_JURIDICA =
"Juridica"
MODULO =
[MODULO_CARTAO, MODULO_BOLETO]
TIPO =
[TIPO_VISA, TIPO_AMEX]
TIPO_PESSOA =
[TIPO_PESSOA_FISICA, TIPO_PESSOA_JURIDICA]
INICIA_COD_RETORNO =
{
  :"0" => "Transação iniciada.",
  :"1" => "Dados de entrada incorretos:",
  :"2" => "Vendedor não autenticado.",
  :"3" => "Conta de vendedor desativada.", 
  :"4" => "Conta de comprador desativada.", 
  :"5" => "Dados de comprador incorretos:", 
  :"6" => "XML inválido:", 
  :"7" => "XML mal formatado.", 
  :"8" => "Dados de pagamento incorretos:", 
  :"9" => "Dados de pedido incorretos:", 
  :"10" => "Erro ao iniciar a transação.", 
  :"21" => "CPF não pertence à conta de comprador informada.", 
}
FINALIZA_COD_RETORNO =
{
  :"11" => "Transação não encontrada.", 
  :"12" => "Transação ainda não processada.", 
  :"13" => "Transação em processamento.", 
  :"14" => "Transação expirada.", 
  :"15" => "Transação processada.", 
  :"16" => "Erro ao consultar a transação.", 
  :"17" => "Transação com tempo de pagamento expirado.", 
  :"18" => "Usuário fechou a janela de pagamento.", 
  :"19" => "Pagamento cancelado pelo usuário.", 
  :"20" => "Número máximo de tentativas de pagamento atingido.", 
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) {|_self| ... } ⇒ LwPagtoCerto

Returns a new instance of LwPagtoCerto.

Yields:

  • (_self)

Yield Parameters:

  • _self (LwPagtoCerto)

    the object that the method was called on



75
76
77
78
79
80
81
82
# File 'lib/lw-pagto-certo.rb', line 75

def initialize(options = {})
  self.chave_vendedor = options[:chave_vendedor] || ""
  self.url_retorno = options[:url_retorno] || ""
  %w(comprador pagamento pedido).each do |method|
    send("#{method}=".to_sym, {})
  end
  yield(self) if block_given?
end

Instance Attribute Details

#chave_vendedorObject

chave criada ao se cadastrar no Pagto. Certo



12
13
14
# File 'lib/lw-pagto-certo.rb', line 12

def chave_vendedor
  @chave_vendedor
end

#compradorObject

Dados de comprador - Hash

:Nome        => "", #          3 a 255
:Email       => "", #          5 a 100
:Cpf         => "", #          11
:Rg          => "", # opcional 5 a 14
:Ddd         => "", # opcional 2
:Telefone    => "", # opcional 7 a 8
:TipoPessoa  => "", #          6 a 8
:RazaoSocial => "", #          5 a 255
:Cnpj        => "", #          1 a 50



27
28
29
# File 'lib/lw-pagto-certo.rb', line 27

def comprador
  @comprador
end

#pagamentoObject

Dados de pagamento - Hash {

:Modulo => "",    #          6 a 13          
:Tipo   => "",    # opcional 0 a 15

}



34
35
36
# File 'lib/lw-pagto-certo.rb', line 34

def pagamento
  @pagamento
end

#pedidoObject

Dados do Pedido - Hash {

:Numero         => "",    # seu número interno de controle do pedido
:ValorSubTotal  => "000", # dinheiro = 999.88 = 99988
:ValorFrete     => "000", #   centavos são sempre os dois ultimos digitos
:ValorAcrescimo => "000",
:ValorDesconto  => "000",
:ValorTotal     => "000",
:Itens => { 
  :Item => {
    :CodProduto    => "",    # 1 a 40 
    :DescProduto   => "",    # 1 a 100
    :Quantidade    => "0",   # 
    :ValorUnitario => "000", # 3 a 14
    :ValorTotal    => "000", # 3 a 14
  },
},
:Cobranca => {
  :Endereco => "",
  :Numero   => "",
  :Bairro   => "",
  :Cidade   => "",
  :Cep      => "",  # 8 dígitos
  :Estado   => "",  # precisa ser válido, como ex. SP, RJ, etc.
},
:Entrega => {
  :Endereco => "",
    :Numero   => "",
    :Bairro   => "",
    :Cidade   => "",
    :Cep      => "",  # 8 dígitos
    :Estado   => "",  # precisa ser válido, como ex. SP, RJ, etc.
}

}



70
71
72
# File 'lib/lw-pagto-certo.rb', line 70

def pedido
  @pedido
end

#url_retornoObject

URL da sua aplicação para onde o Pagto. Certo redirecionará após o pagto.



13
14
15
# File 'lib/lw-pagto-certo.rb', line 13

def url_retorno
  @url_retorno
end

Instance Method Details

#build_transacaoObject

Usado internamento pelo Inicia Transacao para gerar o XML que define a transacao sendo iniciada. Utilize os accessors comprador, pagamento e pedido conforme comentado no começo do arquivo



158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
# File 'lib/lw-pagto-certo.rb', line 158

def build_transacao
  result = ""
  xml = Builder::XmlMarkup.new(:indent => 2, :target => result)
  xml.instruct!
  xml.LocaWeb do |lw|
    lw.Comprador do |c|
      %w(Nome Email Cpf Rg Ddd Telefone TipoPessoa RazaoSocial Cnpj).each do |field|
        eval "c.#{field} comprador[field.to_sym]" if comprador[field.to_sym]
      end
    end
    lw.Pagamento do |p|
      %w(Modulo Tipo).each do |field|
        eval "p.#{field} pagamento[field.to_sym]" if pagamento[field.to_sym]
      end
    end
    lw.Pedido do |p|
      %w(Numero ValorSubTotal ValorFrete ValorAcrescimo ValorDesconto ValorTotal).each do |field|
        eval "p.#{field} pedido[field.to_sym]" if pedido[field.to_sym]
      end
      if pedido[:Itens]
        p.Itens do |items|
          pedido[:Itens].each do |key, item|
            items.Item do
              %w(CodProduto DescProduto Quantidade ValorUnitario ValorTotal).each do |field|
                eval "items.#{field} item[field.to_sym]" if item[field.to_sym]
              end
            end
          end
        end
      end
      if pedido[:Cobranca]
        p.Cobranca do |c|
          %w(Endereco Numero Bairro Cidade Cep Estado).each do |field|
            eval "c.#{field} pedido[:Cobranca][field.to_sym]" if pedido[:Cobranca][field.to_sym]
          end            
        end
      end
      if pedido[:Entrega]
        p.Entrega do |c|
          %w(Endereco Numero Bairro Cidade Cep Estado).each do |field|
            eval "c.#{field} pedido[:Cobranca][field.to_sym]" if pedido[:Entrega][field.to_sym]
          end            
        end
      end
    end
  end
  result
end

#consulta(id_transacao = "") ⇒ Object

Consulta os Dados de uma Transação que já foi Paga

lw = LwPagtoCerto.new(:chave_vendedor => “xxxxx”, :url_retorno => “dominio.com/pagto”) retorno = lw.consulta(“xxxxxxxx”) # passa Id da transação retornada ao chamar “inicia”

puts retorno puts retorno puts retorno puts retorno # => “26/3/2009 15:19:41” puts retorno



131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/lw-pagto-certo.rb', line 131

def consulta(id_transacao = "")
  payload = ConsultaTransacao.new self.chave_vendedor, id_transacao
  response = LwPagtoCerto.soap.consultaTransacao(payload)
  response = Hash.from_xml(response.consultaTransacaoResult)
  response = response["loca_web"]["transacao"].symbolize_keys
  if response[:CodRetorno]
    response.instance_eval do 
      def cod_retorno_mensagem
        LwPagtoCerto::FINALIZA_COD_RETORNO[self[:CodRetorno].to_sym]
      end
    end
  end
  response
end

#consultaPedido(id_transacao = "") ⇒ Object



146
147
148
149
150
151
152
# File 'lib/lw-pagto-certo.rb', line 146

def consultaPedido(id_transacao = "")
  payload = ConsultaTransacao.new self.chave_vendedor, id_transacao
  response = LwPagtoCerto.soap.consultaTransacao(payload)
  response = Hash.from_xml(response.consultaTransacaoResult)
  return response["loca_web"]["pedido"].symbolize_keys if response["loca_web"]["pedido"]
  return []
end

#endpoint_url(url) ⇒ Object



207
208
209
# File 'lib/lw-pagto-certo.rb', line 207

def endpoint_url(url)
  soap.endpoint_url = url
end

#inicia(transacao = nil) {|_self| ... } ⇒ Object

Inicia Transação

Passa a estrutura Hash com os elementos de Transação documentadas acima ou pega a configuração feita via “setters”

Exemplo:

lw = LwPagtoCerto.new(:chave_vendedor => “xxxxx”, :url_retorno => “dominio.com/pagto”) lw.comprador = { :Nome => “Fabio”, :Email => “[email protected]”, .….} lw.pagamento = { :Modulo => LwPagtoCerto::Modulo::BOLETO } … retorno = lw.inicia do |l|

l.cobranca = { :Endereco => "", :Numero => "", ..... }

end

puts retorno puts retorno

Yields:

  • (_self)

Yield Parameters:

  • _self (LwPagtoCerto)

    the object that the method was called on



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/lw-pagto-certo.rb', line 101

def inicia(transacao = nil)
  transacao = transacao || build_transacao
  yield(self) if block_given?
  payload = IniciaTransacao.new( self.chave_vendedor, self.url_retorno, transacao )
  response = LwPagtoCerto.soap.iniciaTransacao(payload)
  response = Hash.from_xml(response.iniciaTransacaoResult)
  response = response["loca_web"]["transacao"].symbolize_keys
  
  response[:data] = Time.parse(response[:data].gsub(/(\d+)\/(\d+)\/(\d+)\s(.*)/, 
    "#{$3}-#{$2}-#{$1}T#{$4}")) if response[:data] 
  if response[:CodRetorno]
    response.instance_eval do 
      def cod_retorno_mensagem
        LwPagtoCerto::INICIA_COD_RETORNO[self[:CodRetorno].to_sym]
      end
    end
  end
  response
end