rmoip 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
+