rmoip 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,85 @@
1
+ module Rmoip
2
+ class InstrucaoUnica
3
+
4
+ def self.make_xml(parameters)
5
+ builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
6
+ xml.EnviarInstrucao {
7
+ xml.InstrucaoUnica {
8
+ xml.Razao {
9
+ xml.text parameters[:razao]
10
+ }
11
+ xml.Valores {
12
+ xml.Valor(:moeda => "BRL") {
13
+ xml.text parameters[:valor]
14
+ }
15
+ }
16
+ xml.IdProprio {
17
+ xml.text parameters[:id_proprio]
18
+ }
19
+
20
+ xml.Pagador {
21
+ xml.Nome { xml.text parameters[:pagador][:nome] }
22
+ xml.LoginMoIP { xml.text parameters[:pagador][:login_moip] }
23
+ xml.Email { xml.text parameters[:pagador][:email] }
24
+ xml.TelefoneCelular { xml.text parameters[:pagador][:tel_cel] }
25
+ xml.Apelido { xml.text parameters[:pagador][:apelido] }
26
+ xml.Identidade(:Tipo => "CPF") { xml.text parameters[:pagador][:identidade] }
27
+ xml.EnderecoCobranca {
28
+ xml.Logradouro { xml.text parameters[:pagador][:logradouro] }
29
+ xml.Numero { xml.text parameters[:pagador][:numero] }
30
+ xml.Complemento { xml.text parameters[:pagador][:complemento] }
31
+ xml.Bairro { xml.text parameters[:pagador][:bairro] }
32
+ xml.Cidade { xml.text parameters[:pagador][:cidade] }
33
+ xml.Estado { xml.text parameters[:pagador][:estado] }
34
+ xml.Pais { xml.text parameters[:pagador][:pais] }
35
+ xml.CEP { xml.text parameters[:pagador][:cep] }
36
+ xml.TelefoneFixo { xml.text parameters[:pagador][:tel_fixo] }
37
+ }
38
+ }
39
+
40
+ if parameters[:url_retorno]
41
+ # URL de retorno
42
+ xml.URLRetorno {
43
+ xml.text parameters[:url_retorno]
44
+ }
45
+ end
46
+
47
+ if !parameters[:comissoes].nil?
48
+ xml.Comissoes {
49
+ parameters[:comissoes].each do |split|
50
+ xml.Comissionamento {
51
+ xml.Razao { xml.text split[:razao] }
52
+ xml.ValorPercentual { xml.text split[:valor_percentual] }
53
+ xml.ValorFixo { xml.text split[:valor_fixo] }
54
+ xml.MostrarParaPagador { xml.text split[:mostrar_para_pagador] }
55
+ xml.Parcelada { xml.text split[:parcelada] }
56
+ xml.Comissionado {
57
+ xml.LoginMoIP { xml.text split[:login_moip] }
58
+ }
59
+ }
60
+ end
61
+ }
62
+ end
63
+
64
+ if !parameters[:parcelamentos].nil?
65
+ xml.Parcelamentos {
66
+ parameters[:parcelamentos].each do |parcel|
67
+ xml.Parcelamento {
68
+ xml.MinimoParcelas { xml.text parcel[:min] }
69
+ xml.MaximoParcelas { xml.text parcel[:max] }
70
+ xml.Juros { xml.text parcel[:juros] }
71
+ xml.Repassar { xml.text parcel[:repassar] }
72
+
73
+ }
74
+ end
75
+ }
76
+ end
77
+
78
+ } #xml.InstrucaoUnica
79
+ } #xml.EnviarInstrucao
80
+ end
81
+ builder.to_xml
82
+ end
83
+
84
+ end
85
+ end
@@ -0,0 +1,104 @@
1
+ # encoding: utf-8
2
+ module Rmoip
3
+ class Request
4
+ include HTTParty
5
+
6
+ attr_accessor :token, :key, :env
7
+
8
+ def initialize(token, key, env)
9
+ @token = token
10
+ @key = key
11
+ @env = env
12
+ @parcels = Array.new
13
+ @splits = Array.new
14
+ @is_to_validate = false
15
+ end
16
+
17
+ def send(parameters)
18
+ raise MissingIdProprioError, "É obrigatório informar um Id Proprio" if parameters[:id_proprio].nil?
19
+ raise MissingRazaoError, "É obrigatório informar uma Razao" if parameters[:razao].nil?
20
+ raise InvalidBillValue, "O valor deve ser maior que 0" if Float(parameters[:valor]) <= 0
21
+ response = request_moip parameters
22
+ response
23
+ end
24
+
25
+ def add_split(split)
26
+ raise MissingLoginMoip, "É obrigatório informar o LoginMoip" if split[:login_moip].nil?
27
+ raise InvalidComissionValue, "Informe um valor percentual ou fixo" if split[:valor_fixo].nil? && split[:valor_percentual].nil?
28
+ @splits.push split
29
+ return self
30
+ end
31
+
32
+ def add_parcel(parcel)
33
+ raise InvalidMinValue, "O valor mínimo deve ser superior a 1" if parcel[:min] <= 0
34
+ raise InvalidMaxValue, "Este valor não parece ser um valor válido" if parcel[:max] >= 18
35
+ raise MissingJurosError, "É obrigatorio informar o Juros" if parcel[:juros].nil?
36
+ @parcels.push parcel
37
+ return self
38
+ end
39
+
40
+ def validate
41
+ @is_to_validate = true
42
+ self
43
+ end
44
+
45
+ def get_url
46
+ return uri << "/Instrucao.do?token=" << @response.token
47
+ end
48
+
49
+ private
50
+ def request_moip(parameters)
51
+ xml = prepare_hash(parameters)
52
+ options = { :base_uri => uri, :basic_auth => { :username => @token, :password => @key }, :body => xml }
53
+ request = self.class.post "/ws/alpha/EnviarInstrucao/Unica", options
54
+ response = Rmoip::ResponseApi.build request['EnviarInstrucaoUnicaResponse']['Resposta']
55
+ response.base_uri = uri
56
+ response
57
+ end
58
+
59
+ def prepare_hash(parameters)
60
+ parameters[:parcelamentos] = @parcels
61
+ parameters[:comissoes] = @splits
62
+ parameters[:validate] - @is_to_validate
63
+ xml = Rmoip::InstrucaoUnica.make_xml parameters
64
+ end
65
+
66
+ def uri
67
+ case @env
68
+ when :SANDBOX
69
+ "https://desenvolvedor.moip.com.br/sandbox"
70
+ when :PRODUCTION
71
+ "https://www.moip.com.br"
72
+ else
73
+ raise InvalidEnvironmentErro, "É obrigatório informar o ENV"
74
+ end
75
+ end
76
+ end
77
+
78
+ class MissingIdProprioError < Exception
79
+ end
80
+
81
+ class InvalidEnvironmentErro < Exception
82
+ end
83
+
84
+ class InvalidBillValue < Exception
85
+ end
86
+
87
+ class MissingRazaoError < Exception
88
+ end
89
+
90
+ class InvalidMinValue < Exception
91
+ end
92
+
93
+ class InvalidMaxValue < Exception
94
+ end
95
+
96
+ class MissingLoginMoip < Exception
97
+ end
98
+
99
+ class MissingJurosError < Exception
100
+ end
101
+
102
+ class InvalidComissionValue < Exception
103
+ end
104
+ end
@@ -0,0 +1,32 @@
1
+ module Rmoip
2
+ class ResponseApi
3
+
4
+ attr_accessor :token, :status, :errors, :base_uri
5
+
6
+ def initialize
7
+ @errors = Array.new
8
+ end
9
+
10
+ def self.build(params)
11
+ response = self.new
12
+ response.token = params["Token"]
13
+ response.status = params["Status"]
14
+ params["Erro"].each do |erro|
15
+ response.errors.push erro
16
+ end
17
+ response
18
+ end
19
+
20
+ def is_successful
21
+ self.status == "Sucesso"
22
+ end
23
+
24
+ def url
25
+ @base_uri << "/Instrucao.do?token=" << token
26
+ end
27
+
28
+ def to_s
29
+ "token #{token}, status: #{status}, Total de error: #{errors}"
30
+ end
31
+ end
32
+ end
data/lib/rmoip.rb ADDED
@@ -0,0 +1,24 @@
1
+ require "rubygems"
2
+ require "httparty"
3
+ require "nokogiri"
4
+ require "moip/request"
5
+ require "moip/instrucao_unica"
6
+ require "moip/response_api"
7
+
8
+ module Rmoip
9
+
10
+ def self.sandbox(token, key)
11
+ self.request token, key, :SANDBOX
12
+ end
13
+
14
+ def self.production(token, key)
15
+ self.request token, key, :PRODUCAO
16
+ end
17
+
18
+ private
19
+ def self.request(token, key, env)
20
+ env = :PRODUCAO if env.nil? || env != :SANDBOX
21
+ Request.new(token, key, env)
22
+ end
23
+
24
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rmoip
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Breno Oliveira
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2012-07-18 00:00:00 -03:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: "Rmoip \xC3\xA9 uma maneira simples de utilizar o moip como forma de pagamento essa lib permite integra\xC3\xA7\xC3\xA3o com o Moip Transparente"
22
+ email: breno26@gmail.com
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/moip/instrucao_unica.rb
31
+ - lib/moip/request.rb
32
+ - lib/moip/response_api.rb
33
+ - lib/rmoip.rb
34
+ has_rdoc: true
35
+ homepage: http://rubygems.org/gems/rmoip
36
+ licenses: []
37
+
38
+ post_install_message:
39
+ rdoc_options: []
40
+
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ segments:
48
+ - 0
49
+ version: "0"
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ requirements: []
58
+
59
+ rubyforge_project:
60
+ rubygems_version: 1.3.6
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: "Rmoip \xC3\xA9 uma maneira simples de utilizar o moip como forma de pagamento"
64
+ test_files: []
65
+