Moip, Rails E Retorno Automático

Peguei do site deles lol

"O que é o Moip?

O Moip é uma empresa de pagamentos online do IG e da Ideiasnet, que possibilita
o envio e recebimento de pagamentos na internet por meio de cartões de crédito,
débito e boleto."

Vamos lá, primeiro vamos criar uma conta para usar o modo de desenvolvimento do Moip aqui

Logamos no sistema e pegamos o token e a key para usarmos na app link

Agora vamo ver a gem do Moip no github

Seguindo as instruções do github, adicionamos a gem no arquivo gemfile, eu coloquei assim:

gem 'moip', '1.0.2', :git => 'git://github.com/moiplabs/moip-ruby.git'

Dê bundle install e em seguinda adicionei o seguinte código no arquivo environments/production.rb:

1
2
3
4
5
MoIP.setup do |config|
    config.uri = "https://desenvolvedor.moip.com.br/sandbox"
    config.token = "SEU_TOKEN"
    config.key = "SUA_KEY"
end

Não esqueça das aspas, agora vamos configurar nossa conta de desenvolvimento do Moip para fazer o retorno automático.

Depois de logado, ir ate o menu: Meus Dados - Preferências - Notificação das Transações

Habilite a opção logo abaixo do “Notificação de Alteração de Status de Pagamento”, em azul.

No campo abaixo de “* URL de notificação:” coloque sua url até o método que irá receber o retorno automático.

Ex.: http://domonio.com.br/payments/confirmation

Agora vá até o menu Ferramentas - API MoIP, e escolha um dos métodos de integração.

Voltamos para a aplicação e criaremos o controller e os métodos para fazer pagamento e o retorno automático.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# encoding: utf-8
class PaymentsController < ApplicationController
  skip_before_filter :verify_authencity_token, :only=>[:confirmation]

  def checkout # pega informaçoes do pagador, meio de pagamento e envia para o MOIP
    @pagador = { :nome => "Antonio Rogerio Medeiros da SIlva Filho",
                :login_moip => "argerim",
                :email => "argerim@gmail.com",
                :tel_cel => "(89)(89)9986-2058",
                :apelido => "Rogerio Medeiros",
                :identidade => "SEUCPF",
                :logradouro => "conjunto primavera casa 10 quadra d",
                :numero => "10",
                :complemento => "",
                :bairro => "Primavera",
                :cidade => "Teresina",
                :estado => "PI",
                :pais => "BRA",
                :cep => "64003-530",
                :tel_fixo => "(86)3126-2312" }

    @credit = { :valor => "500.00", :id_proprio => "armsfilho-gmail-com", :forma => "CartaoCredito",
                :instituicao => "AmericanExpress",:numero => "345678901234564",
                :expiracao => "08/11", :codigo_seguranca => "1234",
                :nome => "João Silva", :identidade => "134.277.017.00",
                :telefone => "(21)9208-0547", :data_nascimento => "25/10/1980",
                :parcelas => "2", :recebimento => "AVista",
                :pagador => @pagador, :razao => "Pagamento" }

    response = MoIP::Client.checkout(@credit)

    # redireciona usuario para confirmar pagamento
    redirect_to MoIP::Client.moip_page(response["Token"])
  end

  def confirmation
    if request.post?
      notificador = params #MoIP::Client.notification(params)
      if params[:status_pagamento] == "1" # 1 para pagamento confirmado
        @user = User.find_by_slug(params[:id_transacao])
        @user.update_attribute(:locked, false) #aqui eu dou permissão para o usuário logar
      end
      render :nothing => true
    end
  end

end

Coloquei o meu, pois assim fica mais fácil você configurar o seu lol.

Arquivo routes.rb:

1
2
3
4
resources :payments do
    get 'checkout', :on => :collection
    post 'confirmation', :on => :collection
end

Você pode verificar tudo que vem no retorno pelo log de produção, lembrando que só ira funcionar se estiver em um servidor web.

Qualquer dúvida só perguntar pelo twitter.

Comments