Permalink
Browse files

Extraída classe Client que contem os métodos de acesso a API do MoIP

  • Loading branch information...
1 parent 08d88c3 commit 2981ebd183620f64309d20b7edea2073b125cc1b @rafaelfranca rafaelfranca committed Nov 11, 2010
Showing with 87 additions and 82 deletions.
  1. +2 −2 README.markdown
  2. +1 −57 lib/moip.rb
  3. +59 −0 lib/moip/client.rb
  4. +2 −0 lib/moip/direct_payment.rb
  5. +23 −23 spec/moip_spec.rb
View
4 README.markdown
@@ -65,10 +65,10 @@ Após realizar os testes na SandBox, você poderá fazer a mudança para o ambie
###Checkout
def checkout
- response = MoIP.checkout(boleto)
+ response = MoIP::Client.checkout(boleto)
# exibe o boleto para impressão
- redirect_to MoIP.moip_page(response["Token"])
+ redirect_to MoIP::Client.moip_page(response["Token"])
end
### Futuras implementações
View
58 lib/moip.rb
@@ -1,13 +1,10 @@
# encoding: utf-8
require "rubygems"
require 'active_support/core_ext/module/attribute_accessors'
-require 'httparty'
-require "nokogiri"
module MoIP
autoload :DirectPayment, 'moip/direct_payment'
-
- include HTTParty
+ autoload :Client, 'moip/client'
# URI para acessar o serviço
mattr_accessor :uri
@@ -24,57 +21,4 @@ def self.setup
end
STATUS = {1 => "authorized", 2 => "started", 3 => "printed", 4 => "completed", 5 => "canceled", 6 => "analysing"}
-
- base_uri "#{self.uri}/ws/alpha"
- basic_auth self.token, self.key
-
- class << self
-
- # Envia uma instrução para pagamento único
- def checkout(attributes = {})
- full_data = peform_action!(:post, 'EnviarInstrucao/Unica', :body => DirectPayment.body(attributes))
-
- get_response!(full_data["ns1:EnviarInstrucaoUnicaResponse"]["Resposta"])
- end
-
- # Consulta dos dados das autorizações e pagamentos associados à Instrução
- def query(token)
- full_data = peform_action!(:get, "ConsultarInstrucao/#{token}")
-
- get_response!(full_data["ns1:ConsultarTokenResponse"]["RespostaConsultar"])
- end
-
- # Retorna a URL de acesso ao MoIP
- def moip_page(token)
- raise(StandardError, "É necessário informar um token para retornar os dados da transação") if token.nil?
- "#{self.uri}/Instrucao.do?token=#{token}"
- end
-
- # Monta o NASP
- def notification(params)
- notification = {}
- notification[:transaction_id] = params["id_transacao"]
- notification[:amount] = params["valor"]
- notification[:status] = STATUS[params["status_pagamento"].to_i]
- notification[:code] = params["cod_moip"]
- notification[:payment_type] = params["tipo_pagamento"]
- notification[:email] = params["email_consumidor"]
- notification
- end
-
- private
-
- def peform_action!(action_name, url, options = {})
- response = self.send(action_name, url, options)
- raise(StandardError, "Ocorreu um erro ao chamar o webservice") if response.nil?
- response
- end
-
- def get_response!(data)
- raise(StandardError, data["Erro"]) if data["Status"] == "Falha"
- data
- end
-
- end
-
end
View
59 lib/moip/client.rb
@@ -0,0 +1,59 @@
+# encoding: utf-8
+require 'httparty'
+
+module MoIP
+ class Client
+ include HTTParty
+
+ base_uri "#{MoIP.uri}/ws/alpha"
+ basic_auth MoIP.token, MoIP.key
+
+ class << self
+
+ # Envia uma instrução para pagamento único
+ def checkout(attributes = {})
+ full_data = peform_action!(:post, 'EnviarInstrucao/Unica', :body => DirectPayment.body(attributes))
+
+ get_response!(full_data["ns1:EnviarInstrucaoUnicaResponse"]["Resposta"])
+ end
+
+ # Consulta dos dados das autorizações e pagamentos associados à Instrução
+ def query(token)
+ full_data = peform_action!(:get, "ConsultarInstrucao/#{token}")
+
+ get_response!(full_data["ns1:ConsultarTokenResponse"]["RespostaConsultar"])
+ end
+
+ # Retorna a URL de acesso ao MoIP
+ def moip_page(token)
+ raise(StandardError, "É necessário informar um token para retornar os dados da transação") if token.nil?
+ "#{MoIP.uri}/Instrucao.do?token=#{token}"
+ end
+
+ # Monta o NASP
+ def notification(params)
+ notification = {}
+ notification[:transaction_id] = params["id_transacao"]
+ notification[:amount] = params["valor"]
+ notification[:status] = MoIP::STATUS[params["status_pagamento"].to_i]
+ notification[:code] = params["cod_moip"]
+ notification[:payment_type] = params["tipo_pagamento"]
+ notification[:email] = params["email_consumidor"]
+ notification
+ end
+
+ private
+
+ def peform_action!(action_name, url, options = {})
+ response = self.send(action_name, url, options)
+ raise(StandardError, "Ocorreu um erro ao chamar o webservice") if response.nil?
+ response
+ end
+
+ def get_response!(data)
+ raise(StandardError, data["Erro"]) if data["Status"] == "Falha"
+ data
+ end
+ end
+ end
+end
View
2 lib/moip/direct_payment.rb
@@ -1,4 +1,6 @@
# encoding: utf-8
+require "nokogiri"
+
module MoIP
class DirectPayment
View
46 spec/moip_spec.rb
@@ -33,89 +33,89 @@
context "make a billet checkout" do
it "should have status Sucesso" do
- MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{ "ID"=>Time.now.strftime("%y%m%d%H%M%S"), "Status"=>"Sucesso", "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2" }})
- response = MoIP.checkout(@billet)
+ MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{ "ID"=>Time.now.strftime("%y%m%d%H%M%S"), "Status"=>"Sucesso", "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2" }})
+ response = MoIP::Client.checkout(@billet)
response["Status"].should == "Sucesso"
end
end
context "make a debit checkout" do
it "should have status Sucesso" do
- MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{ "ID"=>Time.now.strftime("%y%m%d%H%M%S"), "Status"=>"Sucesso", "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2" }})
- response = MoIP.checkout(@debit)
+ MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{ "ID"=>Time.now.strftime("%y%m%d%H%M%S"), "Status"=>"Sucesso", "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2" }})
+ response = MoIP::Client.checkout(@debit)
response["Status"].should == "Sucesso"
end
end
context "make a debit checkout without pass a institution" do
it "should have status Falha" do
@incorrect_debit = { :value => "37.90", :id_proprio => id, :forma => "DebitoBancario", :pagador => @pagador }
- MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{"Status"=>"Falha", "Erro"=>"Pagamento direto não é possível com a instituição de pagamento enviada" }})
- lambda { MoIP.checkout(@incorrect_debit) }.should raise_error(StandardError, "Pagamento direto não é possível com a instituição de pagamento enviada")
+ MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{"Status"=>"Falha", "Erro"=>"Pagamento direto não é possível com a instituição de pagamento enviada" }})
+ lambda { MoIP::Client.checkout(@incorrect_debit) }.should raise_error(StandardError, "Pagamento direto não é possível com a instituição de pagamento enviada")
end
end
context "make a debit checkout without pass the payer informations" do
it "should raise an exception" do
@incorrect_debit = { :value => "37.90", :id_proprio => id, :forma => "DebitoBancario", :instituicao => "BancoDoBrasil" }
- lambda { MoIP.checkout(@incorrect_debit) }.should raise_error(StandardError, "É obrigatório passar as informações do pagador")
+ lambda { MoIP::Client.checkout(@incorrect_debit) }.should raise_error(StandardError, "É obrigatório passar as informações do pagador")
end
end
context "make a credit card checkout" do
it "should have status Sucesso" do
- MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{ "ID"=>Time.now.strftime("%y%m%d%H%M%S"), "Status"=>"Sucesso", "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2" }})
- response = MoIP.checkout(@credit)
+ MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{ "ID"=>Time.now.strftime("%y%m%d%H%M%S"), "Status"=>"Sucesso", "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2" }})
+ response = MoIP::Client.checkout(@credit)
response["Status"].should == "Sucesso"
end
end
context "make a credit card checkout without pass card informations" do
it "should have status Falha" do
@incorrect_credit = { :value => "8.90", :id_proprio => id, :forma => "CartaoCredito", :pagador => @pagador }
- MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{"Status"=>"Falha", "Erro"=>"Pagamento direto não é possível com a instituição de pagamento enviada" }})
- lambda { MoIP.checkout(@incorrect_credit) }.should raise_error(StandardError, "Pagamento direto não é possível com a instituição de pagamento enviada")
+ MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{"Status"=>"Falha", "Erro"=>"Pagamento direto não é possível com a instituição de pagamento enviada" }})
+ lambda { MoIP::Client.checkout(@incorrect_credit) }.should raise_error(StandardError, "Pagamento direto não é possível com a instituição de pagamento enviada")
end
end
context "in error scenario" do
it "should raise an exception if response is nil" do
- MoIP.stub!(:post).and_return(nil)
- lambda { MoIP.checkout(@billet) }.should raise_error(StandardError, "Ocorreu um erro ao chamar o webservice")
+ MoIP::Client.stub!(:post).and_return(nil)
+ lambda { MoIP::Client.checkout(@billet) }.should raise_error(StandardError, "Ocorreu um erro ao chamar o webservice")
end
it "should raise an exception if status is fail" do
- MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{"Status"=>"Falha", "Erro"=>"O status da resposta é Falha" }})
- lambda { MoIP.checkout(@billet) }.should raise_error(StandardError, "O status da resposta é Falha")
+ MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{"Status"=>"Falha", "Erro"=>"O status da resposta é Falha" }})
+ lambda { MoIP::Client.checkout(@billet) }.should raise_error(StandardError, "O status da resposta é Falha")
end
end
context "query a transaction token" do
it "should retrieve the transaction" do
- MoIP.stub!(:get).and_return("ns1:ConsultarTokenResponse"=>{ "RespostaConsultar"=>{"Status"=>"Sucesso", "ID"=>"201010291031001210000000046760" }})
- response = MoIP.query(token)
+ MoIP::Client.stub!(:get).and_return("ns1:ConsultarTokenResponse"=>{ "RespostaConsultar"=>{"Status"=>"Sucesso", "ID"=>"201010291031001210000000046760" }})
+ response = MoIP::Client.query(token)
response["Status"].should == "Sucesso"
end
end
context "query a transaction token in a error scenario" do
it "should retrieve status Falha" do
- MoIP.stub!(:get).and_return("ns1:ConsultarTokenResponse"=>{ "RespostaConsultar"=>{"Status"=>"Falha", "Erro"=>"Instrução não encontrada", "ID"=>"201010291102522860000000046768"}})
- lambda { MoIP.query("000000000000000000000000000000000000000000000000000000000000") }.should raise_error(StandardError, "Instrução não encontrada")
+ MoIP::Client.stub!(:get).and_return("ns1:ConsultarTokenResponse"=>{ "RespostaConsultar"=>{"Status"=>"Falha", "Erro"=>"Instrução não encontrada", "ID"=>"201010291102522860000000046768"}})
+ lambda { MoIP::Client.query("000000000000000000000000000000000000000000000000000000000000") }.should raise_error(StandardError, "Instrução não encontrada")
end
end
context "build the MoIP URL" do
it "should build the correct URL" do
- MoIP.moip_page(token).should == "https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token=#{token}"
+ MoIP::Client.moip_page(token).should == "https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token=#{token}"
end
it "should raise an error if the token is not informed" do
- lambda { MoIP.moip_page("").should raise_error(ArgumentError, "É necessário informar um token para retornar os dados da transação") }
+ lambda { MoIP::Client.moip_page("").should raise_error(ArgumentError, "É necessário informar um token para retornar os dados da transação") }
end
it "should raise an error if nil is passed as the token" do
- lambda { MoIP.moip_page(nil).should raise_error(ArgumentError, "É necessário informar um token para retornar os dados da transação") }
+ lambda { MoIP::Client.moip_page(nil).should raise_error(ArgumentError, "É necessário informar um token para retornar os dados da transação") }
end
end
@@ -126,7 +126,7 @@
it "should return a hash with the params extracted from NASP" do
response = { :transaction_id => "Pag62", :amount => "8.90", :status => "printed", :code => "001", :payment_type => "BoletoBancario", :email => "presidente@planalto.gov.br" }
- MoIP.notification(@params).should == response
+ MoIP::Client.notification(@params).should == response
end
it "should return valid status based on status code" do

0 comments on commit 2981ebd

Please sign in to comment.