rmoip 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/moip/instrucao_unica.rb +85 -0
- data/lib/moip/request.rb +104 -0
- data/lib/moip/response_api.rb +32 -0
- data/lib/rmoip.rb +24 -0
- metadata +65 -0
@@ -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
|
data/lib/moip/request.rb
ADDED
@@ -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
|
+
|