Permalink
Browse files

Merge branch 'master' of https://github.com/joaomilho/moip-ruby into …

…joaomilho-master

Conflicts:
	spec/moip_spec.rb
  • Loading branch information...
meiraleal committed Nov 9, 2011
2 parents 0cee70e + 51fed33 commit 2b61a77355cb8c5487ff68be0eef8873696a110e
Showing with 448 additions and 304 deletions.
  1. +2 −2 Gemfile.lock
  2. +14 −0 lib/moip.rb
  3. +29 −3 lib/moip/client.rb
  4. +45 −5 lib/moip/direct_payment.rb
  5. +358 −294 spec/moip_spec.rb
View
@@ -9,12 +9,12 @@ PATH
GEM
remote: http://rubygems.org/
specs:
- activesupport (3.0.7)
+ activesupport (3.0.8)
crack (0.1.8)
diff-lcs (1.1.2)
httparty (0.6.1)
crack (= 0.1.8)
- nokogiri (1.4.4)
+ nokogiri (1.4.6)
rspec (2.1.0)
rspec-core (~> 2.1.0)
rspec-expectations (~> 2.1.0)
View
@@ -4,6 +4,20 @@
require 'active_support/deprecation'
module MoIP
+
+ class ValidationError < StandardError; end
+
+ class MissingPaymentTypeError < ValidationError; end
+ class MissingPayerError < ValidationError; end
+ class MissingBirthdate < ValidationError; end
+
+ class InvalidCellphone < ValidationError; end
+ class InvalidExpiry < ValidationError; end
+ class InvalidInstitution < ValidationError; end
+ class InvalidPhone < ValidationError; end
+ class InvalidReceiving < ValidationError; end
+ class InvalidValue < ValidationError; end
+
autoload :DirectPayment, 'moip/direct_payment'
autoload :Client, 'moip/client'
View
@@ -15,10 +15,34 @@ class Client
class << self
+ # Verifica conta
+ # URL Produção: https://www.moip.com.br/ws/alpha/VerificarConta/{login_moip}
+ # URL SandBox: https://desenvolvedor.moip.com.br/sandbox/ws/alpha/VerificarConta/{login_moip}
+ # XML de Resposta:
+ # <ns1:verificarContaResponse>
+ # <RespostaVerificarConta>
+ # <Status>{status da conta}</Status>
+ # </RespostaVerificarConta>
+ # </ns1:verificarContaResponse>
+ #
+ # Valores Esperados: {status da conta}
+ # Inexistente " Login inexistente no sistema MoIP "
+ # Criado " Login criado, porem não verificado "
+ # Verificado " Login verificado "
+# MoIP::Client.verify 'aaa'
+
+ def verify account
+ full_data = peform_action!(:get, "VerificarConta/#{account}")
+ return full_data["ns1:verificarContaResponse"]["RespostaVerificarConta"]["Status"] == "Verificado"
+ end
+
# Envia uma instrução para pagamento único
def checkout(attributes = {})
- full_data = peform_action!(:post, 'EnviarInstrucao/Unica', :body => DirectPayment.body(attributes))
-
+ body = DirectPayment.body(attributes)
+ puts "************ XML ************"
+ puts body
+ full_data = peform_action!(:post, 'EnviarInstrucao/Unica', :body => body)
+ # raise full_data.inspect
get_response!(full_data["ns1:EnviarInstrucaoUnicaResponse"]["Resposta"])
end
@@ -63,7 +87,9 @@ def peform_action!(action_name, url, options = {})
end
def get_response!(data)
- raise(WebServerResponseError, data["Erro"]) if data["Status"] == "Falha"
+ # raise data.inspect
+ err = data["Erro"].is_a?(Array) ? data["Erro"].join(", ") : data["Erro"]
+ raise(WebServerResponseError, err) if data["Status"] == "Falha"
data
end
end
View
@@ -3,17 +3,57 @@
module MoIP
- class MissingPaymentTypeError < StandardError ; end
- class MissingPayerError < StandardError ; end
+ # Baseado em http://labs.moip.com.br/pdfs/Integra%C3%A7%C3%A3o%20API%20-%20Autorizar%20e%20Cancelar%20Pagamentos.pdf
+ CodigoErro = 0..999
+ CodigoEstado = %w{AC AL AM AP BA CE DF ES GO MA MG MS MT PA PB PE PI PR RJ RN RO RR RS SC SE SP TO}
+ CodigoMoeda = "BRL"
+ CodigoPais = "BRA"
+ Destino = %w{Nenhum MesmoCobranca AInformar PreEstabelecido}
+ InstituicaoPagamento = %w{MoIP Visa AmericanExpress Mastercard Diners BancoDoBrasil Bradesco Itau BancoReal Unibanco Aura Hipercard Paggo Banrisul}
+ FormaPagamento = %w{CarteiraMoIP CartaoCredito CartaoDebito DebitoBancario FinanciamentoBancario BoletoBancario}
+ FormaRestricao = %w{Contador Valor}
+ PapelIndividuo = %w{Integrador Recebedor Comissionado Pagado}
+ OpcaoDisponivel = %w{Sim Não PagadorEscolhe}
+ Parcelador = %w{Nenhum Administradora MoIP Recebedor}
+ StatusLembrete = %w{Enviado Realizado EmAndamento Aguardando Falha}
+ StatusPagamento = %w{Concluido EmAnalise Autorizado Iniciado Cancelado BoletoImpresso Estornado}
+ TipoDias = %w{Corridos Uteis}
+ TipoDuracao = %w{Minutos Horas Dias Semanas Meses Ano}
+ TipoFrete = %w{Proprio Correio}
+ TipoIdentidade = %w{CPF CNPJ}
+ TipoInstrucao = %w{Unico Recorrente PrePago PosPago Remessa}
+ TipoLembrete = %w{Email SMS}
+ TipoPeriodicidade = %w{Anual Mensal Semanal Diaria}
+ TipoRecebimento = %w{AVista Parcelado}
+ TipoRestricao = %w{Autorizacao Pagamento}
+ TipoStatus = %w{Sucesso Falha}
+
+ #
+ TiposComInstituicao = %w{CartaoCredito CartaoCredito DebitoBancario}
class DirectPayment
class << self
# Cria uma instrução de pagamento direto
def body(attributes = {})
+
+#raise "#{attributes[:valor]}--#{attributes[:valor].to_f}"
raise(MissingPaymentTypeError, "É necessário informar a razão do pagamento") if attributes[:razao].nil?
- raise(MissingPayerError, "É obrigatório passar as informações do pagador") if attributes[:pagador].nil?
+ raise(MissingPayerError, "É obrigatório passar as informarções do pagador") if attributes[:pagador].nil?
+
+ raise(InvalidValue, "Valor deve ser maior que zero.") if attributes[:valor].to_f <= 0.0
+ raise(InvalidPhone, "Telefone deve ter o formato (99)9999-9999.") if attributes[:pagador][:tel_fixo] !~ /\(\d{2}\)?\d{4}-\d{4}/
+ raise(InvalidCellphone, "Telefone celular deve ter o formato (99)9999-9999.") if attributes[:pagador][:tel_cel] !~ /\(\d{2}\)?\d{4}-\d{4}/
+
+ raise(MissingBirthdate, "É obrigatório passar as informarções do pagador") if TiposComInstituicao.include?(attributes[:forma]) && attributes[:data_nascimento].nil?
+
+ raise(InvalidExpiry, "Data de expiração deve ter o formato 01-00 até 12-99.") if TiposComInstituicao.include?(attributes[:forma]) && attributes[:expiracao] !~ /(1[0-2]|0\d)\/\d{2}/
+
+
+ raise(InvalidReceiving, "Recebimento é inválido. Escolha um destes: #{TipoRecebimento.join(', ')}") if !TipoRecebimento.include?(attributes[:recebimento]) && TiposComInstituicao.include?(attributes[:forma])
+
+ raise(InvalidInstitution, "A instituição #{attributes[:instituicao]} é inválida. Escolha uma destas: #{InstituicaoPagamento.join(', ')}") if TiposComInstituicao.include?(attributes[:forma]) && !InstituicaoPagamento.include?(attributes[:instituicao])
builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
@@ -41,7 +81,7 @@ def body(attributes = {})
}
# Débito Bancário
- if attributes[:forma] == "DebitoBancario"
+ if ["DebitoBancario"].include?(attributes[:forma])
xml.Instituicao {
xml.text attributes[:instituicao]
}
@@ -95,7 +135,7 @@ def body(attributes = {})
xml.Email { xml.text attributes[:pagador][:email] }
xml.TelefoneCelular { xml.text attributes[:pagador][:tel_cel] }
xml.Apelido { xml.text attributes[:pagador][:apelido] }
- xml.Identidade { xml.text attributes[:pagador][:identidade] }
+ xml.Identidade(:Tipo => "CPF") { xml.text attributes[:pagador][:identidade] }
xml.EnderecoCobranca {
xml.Logradouro { xml.text attributes[:pagador][:logradouro] }
xml.Numero { xml.text attributes[:pagador][:numero] }
Oops, something went wrong.

0 comments on commit 2b61a77

Please sign in to comment.