Skip to content
This repository was archived by the owner on Jan 12, 2024. It is now read-only.

Commit dc06044

Browse files
committed
added moip_transparente to our codebase, still need to move the specs
1 parent 2520326 commit dc06044

File tree

6 files changed

+256
-13
lines changed

6 files changed

+256
-13
lines changed

Gemfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ source 'http://gems.github.com'
99

1010
gem 'rails', '3.2.7'
1111
gem 'rake', '0.9.2.2'
12-
gem 'moip-transparente', path: '~/store/code/moip-transparente', require: 'moip'
12+
#gem 'moip-transparente', require: 'moip'
1313

1414
# Database and data related [Putting pg to the end because of a weird bug with Lion, pg and openssl]
1515
gem 'pg'
@@ -18,7 +18,7 @@ gem 'activerecord-postgresql-adapter'
1818

1919
gem 'catarse_paypal_express', '~> 0.0.2'
2020
#gem 'catarse_moip', '~> 0.1.1'
21-
#gem 'moip_catarse', '~> 1.0.6', require: 'moip'
21+
gem 'moip_catarse', '~> 1.0.6', require: 'moip'
2222

2323
gem 'maxim-sexy_pg_constraints'
2424
gem 'dalli'

Gemfile.lock

+5-8
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,6 @@ PATH
2727
catarse_moip (0.1.1)
2828
rails (~> 3.2.6)
2929

30-
PATH
31-
remote: ~/store/code/moip-transparente
32-
specs:
33-
moip-transparente (0.0.2)
34-
libxml-ruby (~> 2.3.3)
35-
3630
GEM
3731
remote: http://rubygems.org/
3832
remote: http://rubygems.org/
@@ -217,7 +211,6 @@ GEM
217211
addressable (~> 2.3)
218212
libwebsocket (0.1.5)
219213
addressable
220-
libxml-ruby (2.3.3)
221214
linecache19 (0.5.12)
222215
ruby_core_source (>= 0.1.4)
223216
loofah (1.0.0)
@@ -247,6 +240,10 @@ GEM
247240
mime-types (1.19)
248241
mocha (0.10.4)
249242
metaclass (~> 0.0.1)
243+
moip_catarse (1.0.6)
244+
activesupport (>= 2.3.2)
245+
httparty (~> 0.6.1)
246+
nokogiri (~> 1.4.2)
250247
multi_json (1.3.6)
251248
multipart-post (1.1.5)
252249
net-scp (1.0.4)
@@ -491,7 +488,7 @@ DEPENDENCIES
491488
maxim-sexy_pg_constraints
492489
meta_search (= 1.1.3)
493490
mocha (= 0.10.4)
494-
moip-transparente!
491+
moip_catarse (~> 1.0.6)
495492
omniauth (~> 1.1.0)
496493
omniauth-facebook (~> 1.2.0)
497494
omniauth-linkedin (~> 0.0.6)

app/controllers/catarse_moip/payment/moip_controller.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ def review
99
def get_moip_token
1010
@backer = current_user.backs.not_confirmed.find params[:id]
1111

12-
::Moip::Config.access_token = ::Configuration[:moip_token]
13-
::Moip::Config.access_key = ::Configuration[:moip_key]
12+
::MoipTransparente::Config.access_token = ::Configuration[:moip_token]
13+
::MoipTransparente::Config.access_key = ::Configuration[:moip_key]
1414

15-
@moip = ::Moip::Checkout.new
15+
@moip = ::MoipTransparente::Checkout.new
1616

1717
invoice = {
1818
razao: "Apoio para o projeto '#{@backer.project.name}'",

lib/moip_transparente.rb

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
require "net/https"
2+
require "uri"
3+
require "moip_transparente/version"
4+
require "moip_transparente/checkout"
5+
6+
module MoipTransparente
7+
class Config
8+
def self.access_token
9+
@access_token
10+
end
11+
12+
def self.access_token=(value)
13+
@access_token = value
14+
end
15+
16+
def self.access_key
17+
@access_key
18+
end
19+
20+
def self.access_key=(value)
21+
@access_key = value
22+
end
23+
24+
def self.test?
25+
@test || false
26+
end
27+
28+
def self.test=(test)
29+
@test = test
30+
end
31+
end
32+
end

lib/moip_transparente/checkout.rb

+211
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
require 'xml'
2+
require 'base64'
3+
4+
class MoipTransparente::Checkout
5+
6+
def javascript_tag
7+
"<script type='text/javascript' src='#{get_javascript_url}' charset='ISO-8859-1'></script>"
8+
end
9+
10+
def widget_tag(success, fail)
11+
"<div id='MoipWidget'
12+
data-token='#{@token}'
13+
callback-method-success='#{success}'
14+
callback-method-error='#{fail}'>
15+
</div>"
16+
end
17+
18+
def get_token(invoice)
19+
doc = XML::Document.new
20+
doc.root = XML::Node.new('EnviarInstrucao')
21+
22+
unica = XML::Node.new('InstrucaoUnica')
23+
unica['TipoValidacao'] = 'Transparente'
24+
25+
26+
description = XML::Node.new('Razao')
27+
description << invoice[:razao]
28+
unica << description
29+
30+
id_invoice = XML::Node.new('IdProprio')
31+
id_invoice << invoice[:id]
32+
unica << id_invoice
33+
34+
valores = XML::Node.new('Valores')
35+
36+
valor = XML::Node.new('Valor')
37+
valor['moeda'] = 'BRL'
38+
valor << invoice[:total]
39+
40+
valores << valor
41+
42+
43+
valor = XML::Node.new('Acrescimo')
44+
valor['moeda'] = 'BRL'
45+
valores << invoice[:acrescimo] || '0.00'
46+
47+
48+
valor = XML::Node.new('Deducao')
49+
valor['moeda'] = 'BRL'
50+
valores << invoice[:desconto] || '0.00'
51+
52+
unica << valores
53+
54+
pagador = XML::Node.new('Pagador')
55+
nome = XML::Node.new('Nome')
56+
nome << invoice[:cliente][:nome]
57+
pagador << nome
58+
59+
email = XML::Node.new('Email')
60+
email << invoice[:cliente][:email]
61+
pagador << email
62+
63+
id = XML::Node.new('IdPagador')
64+
id << invoice[:cliente][:id]
65+
pagador << id
66+
67+
endereco = XML::Node.new('EnderecoCobranca')
68+
69+
logradouro = XML::Node.new('Logradouro')
70+
logradouro << invoice[:cliente][:logradouro]
71+
endereco << logradouro
72+
73+
numero = XML::Node.new('Numero')
74+
numero_or_default = invoice[:cliente][:numero] || '0'
75+
numero << numero_or_default
76+
endereco << numero
77+
78+
complemento = XML::Node.new('Complemento')
79+
complemento << invoice[:cliente][:complemento]
80+
endereco << complemento
81+
82+
bairro = XML::Node.new('Bairro')
83+
bairro << invoice[:cliente][:bairro]
84+
endereco << bairro
85+
86+
cidade = XML::Node.new('Cidade')
87+
cidade << invoice[:cliente][:cidade]
88+
endereco << cidade
89+
90+
estado = XML::Node.new('Estado')
91+
estado << invoice[:cliente][:uf]
92+
endereco << estado
93+
94+
pais = XML::Node.new('Pais')
95+
pais_or_default = invoice[:cliente][:pais] || 'BRA'
96+
pais << pais_or_default
97+
endereco << pais
98+
99+
cep = XML::Node.new('CEP')
100+
cep << invoice[:cliente][:cep]
101+
endereco << cep
102+
103+
telefone = XML::Node.new('TelefoneFixo')
104+
telefone << invoice[:cliente][:telefone]
105+
endereco << telefone
106+
107+
pagador << endereco
108+
unica << pagador
109+
110+
parcelamentos = XML::Node.new('Parcelamentos')
111+
invoice[:parcelamentos].each do |parcelamento_item|
112+
parcelamento = XML::Node.new('Parcelamento')
113+
minimo = XML::Node.new('MinimoParcelas')
114+
minimo << parcelamento_item[:minimo]
115+
parcelamento << minimo
116+
117+
maximo = XML::Node.new('MaximoParcelas')
118+
maximo << parcelamento_item[:maximo]
119+
parcelamento << maximo
120+
121+
if parcelamento_item[:repassar]
122+
repassar = XML::Node.new('Repassar')
123+
repassar << '1'
124+
parcelamento << repassar
125+
else
126+
juros = XML::Node.new('Juros')
127+
juros << parcelamento_item[:juros]
128+
parcelamento << juros
129+
end
130+
parcelamentos << parcelamento
131+
end
132+
133+
unica << parcelamentos
134+
135+
comissoes = XML::Node.new('Comissoes')
136+
if invoice[:comissoes]
137+
invoice[:comissoes].each do |comissao_item|
138+
comissionamento = XML::Node.new('Comissionamento')
139+
razao = XML::Node.new('Razao')
140+
razao << comissao_item[:razao] || invoice[:razao]
141+
comissionamento << razao
142+
143+
comissionado = XML::Node.new("Comissionado")
144+
login_moip = XML::Node.new("LoginMoIP")
145+
login_moip << comissao_item[:login_moip]
146+
comissionado << login_moip
147+
comissionamento << comissionado
148+
149+
valor = XML::Node.new("ValorFixo")
150+
valor << comissao_item[:valor]
151+
comissionamento << valor
152+
comissoes << comissionamento
153+
end
154+
end
155+
156+
if invoice[:pagador_taxas]
157+
taxas = XML::Node.new('PagadorTaxa')
158+
login_moip = XML::Node.new("LoginMoIP")
159+
login_moip << invoice[:pagador_taxas]
160+
taxas << login_moip
161+
comissoes << taxas
162+
end
163+
164+
unica << comissoes
165+
166+
doc.root << unica
167+
168+
parser = XML::Parser.string(post_data(doc.to_s))
169+
dom = parser.parse
170+
resposta = dom.find('./Resposta').first
171+
if resposta.find('Status')[0].content == 'Sucesso'
172+
@token = resposta.find('Token')[0].content
173+
return {:status => :ok, :token => resposta.find('Token')[0].content, :id => resposta.find('ID')[0].content}
174+
elsif resposta.find('Status')[0].content == 'Falha'
175+
return {:status => :fail, :code => resposta.find('Erro')[0]['Codigo'], :message => resposta.find('Erro')[0].content, :id => resposta.find('ID')[0].content }
176+
end
177+
end
178+
179+
private
180+
181+
def get_token_url
182+
if Moip::Config.test?
183+
return "https://desenvolvedor.moip.com.br/sandbox/ws/alpha/EnviarInstrucao/Unica"
184+
else
185+
return "https://www.moip.com.br/ws/alpha/EnviarInstrucao/Unica"
186+
end
187+
end
188+
189+
def get_javascript_url
190+
if Moip::Config.test?
191+
return "https://desenvolvedor.moip.com.br/sandbox/transparente/MoipWidget-v2.js"
192+
else
193+
return "https://www.moip.com.br/transparente/MoipWidget-v2.js"
194+
end
195+
end
196+
197+
def post_data(xml)
198+
uri = URI.parse(get_token_url)
199+
http = Net::HTTP.new(uri.host, uri.port)
200+
http.use_ssl = true
201+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
202+
#http.set_debug_output $stderr if Moip::Config.test?
203+
204+
request = Net::HTTP::Post.new(uri.path)
205+
request.basic_auth Moip::Config.access_token, Moip::Config.access_key
206+
207+
request.body = xml
208+
response = http.start {|r| r.request request }
209+
response.body
210+
end
211+
end

lib/moip_transparente/version.rb

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module MoipTransparente
2+
VERSION = "0.0.2"
3+
end

0 commit comments

Comments
 (0)