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.
- 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
|
+
|