lw-pagto-certo
-
Gem para integração com o serviço Pagamento Certo da Locaweb
DESCRIPTION:
Encapsula as chamadas SOAP ao servidor do Pagamento Certo, criando os envelopes corretos de dados.
REQUIREMENTS:
-
ActiveSupport
-
SOAP4R
-
Builder
INSTALL:
gem install akitaonrails-lw-pagto-certo --source=http://gems.github.com
USANDO O PAGAMENTO CERTO DA LOCAWEB
Passo 1: Cadastro do Vendedor
Antes de mais nada, você precisa se cadastrar como um vendedor, para ganhar uma chave única, secreta, que o identifica como vendedor. Para isso vá ao site:
http://www.locaweb.com.br/produtos/pagamento-certo
Depois de se cadastrar, faça login no painel (pagamentocerto.com.br/painel), adicione seus dados bancários, etc. No final você receberá a chave por e-mail, um string com este formato: “XXXXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZZZZ”. Guarde-a bem, você a usará em todas as transações bancárias
Passo 2: Aplicação
Você tem um website feito em Ruby on Rails. Nele você tem seus produtos, seu carrinho de compras. No final de todo o processo, quando o cliente confirma o pagamento, você fará esta chamada:
lw = LwPagtoCerto.new(:chave_vendedor => "XXXXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZZZZ",
:url_retorno => "http://meusite.dominio.com.br/confirmacao_pagamento")
A :url_retorno tem que ser uma URL válida, acessível pela internet. O processo funciona assim:
-
você inicia a transação e recebe um ID de transacao
-
sua aplicação devolve um HTTP POST ao endereço em LwPagtoCerto.DefaultCheckoutUrl com o campo “tdi” igual ao ID da transacao. isso redirecionará o seu cliente ao site do pagamento certo, com todos os dados do pedido e já pronto para pagar
-
depois que o seu cliente efetua o pagamento corretamente, o Pagamento Certo fará um HTTP POST de volta à sua aplicação, na URL que você passou no :url_retorno, devolvendo novamente o ID da transação no “params” (crie um controller Rails e cheque isso na action “create”, por exemplo). Por exemplo, se você tiver um
recurso assim:
# config/routes.rb map.resource :checkout # app/controllers/checkout_controller class CheckoutController < ApplicationController def create id_transacao = params[:tdi] lw = LwPagtoCerto.new(:chave_vendedor => "XXXXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZZZZ") retorno = lw.consulta(id_transacao) if retorno[:cod_retorno] == "15" flash[:success] = "Pagamento bem sucedido" else flash[:error] = retorno[:mensagem_retorno] end end end
Nesse caso a :url_retorno seria www.meusite.com/checkout
-
como já adiantado no código acima, note a chamada à API de consulta da transação onde você poderá ver se deu tudo certo ou não.
Uma vez criado a instância de LwPagtoCerto, preencha os dados do cliente corretamente conforme o exemplo abaixo:
lw.comprador = {
:Nome => "Fabio Akita",
:Email => "[email protected]",
:Cpf => "12312312300",
:Rg => "123456780",
:Ddd => "11",
:Telefone => "12345678",
:TipoPessoa => "Fisica",
# :RazaoSocial => "",
# :Cnpj => "",
}
lw.pagamento = {
:Modulo => "Boleto",
# :Tipo => "",
}
lw.pedido = {
:Numero => "12345",
:ValorSubTotal => "2000",
:ValorFrete => "000",
:ValorAcrescimo => "000",
:ValorDesconto => "000",
:ValorTotal => "2000",
:Itens => {
:Item => {
:CodProduto => "4321",
:DescProduto => "Livro",
:Quantidade => "1",
:ValorUnitario => "2000",
:ValorTotal => "2000",
},
},
:Cobranca => {
:Endereco => "Rua Foo",
:Numero => "123",
:Bairro => "Foo",
:Cidade => "Sao Paulo",
:Cep => "12345678",
:Estado => "SP",
},
:Entrega => {
:Endereco => "Rua Foo",
:Numero => "123",
:Bairro => "Foo",
:Cidade => "Sao Paulo",
:Cep => "12345678",
:Estado => "SP",
},
}
Com o objeto LwPagtoCerto preenchido corretamente você deve chamar o método “inicia”, que começará uma transação aberta com o Pagamento Certo, lhe devolvendo o ID da transação. É depois deste ponto que se faz o HTTP POST ao Pagamento Certo passando essa ID no campo “tdi” do Post.
retorno = lw.inicia()
# => {:mensagem_retorno=>"Transa\303\247\303\243o iniciada.",
:id_transacao=>"YYYYYYYY-DDDD-EEEE-FFFF-ZZZZZZZZZZZZ",
:codigo=>"45383", :cod_retorno=>"0"}
Além disso, o objeto “retorno” ainda tem um método extra “cod_retorno_mensagem” para traduzir o código no campo :cod_retorno.
Como explicado, depois que o cliente faz o pagamento, o Pagamento Certo te redireciona à :url_retorno que você passou, repassando o ID da transação e então você pode verificar o resultado assim:
retorno = lw.consulta("YYYYYYYY-DDDD-EEEE-FFFF-ZZZZZZZZZZZZ")
# => {:mensagem_retorno=>"Transa\303\247\303\243o ainda n\303\243o processada.",
:id_transacao=>"YYYYYYYY-DDDD-EEEE-FFFF-ZZZZZZZZZZZZ", :cod_retorno=>"12"}
Aqui também, o objeto “retorno” ainda tem um método extra “cod_retorno_mensagem” para traduzir o código no campo :cod_retorno. Procure por mais constantes no arquivo “lib/lw-pagto-certo/version.rb”
REFERENCES
Para entender o fluxo em detalhes bem como cada um dos dados retornados, vá ao site:
http://pagamentocerto.com.br/downloads/
E baixe o kit de integração, que contém uma documentação detalhada em PDF.