pagamento_digital 0.1.2beta
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/Gemfile.lock +94 -0
- data/README.markdown +267 -0
- data/Rakefile +5 -0
- data/app/views/pagamento_digital/_form.erb +68 -0
- data/lib/pagamento_digital.rb +16 -0
- data/lib/pagamento_digital/action_controller.rb +11 -0
- data/lib/pagamento_digital/base.rb +123 -0
- data/lib/pagamento_digital/cacert.pem +3987 -0
- data/lib/pagamento_digital/developer_controller.rb +29 -0
- data/lib/pagamento_digital/engine.rb +4 -0
- data/lib/pagamento_digital/faker.rb +172 -0
- data/lib/pagamento_digital/generator.rb +12 -0
- data/lib/pagamento_digital/helper.rb +6 -0
- data/lib/pagamento_digital/notification.rb +247 -0
- data/lib/pagamento_digital/order.rb +106 -0
- data/lib/pagamento_digital/railtie.rb +26 -0
- data/lib/pagamento_digital/rake.rb +134 -0
- data/lib/pagamento_digital/routes.rb +4 -0
- data/lib/pagamento_digital/utils.rb +13 -0
- data/lib/pagamento_digital/version.rb +8 -0
- data/lib/tasks/pagamento_digital.rake +6 -0
- data/nbproject/private/config.properties +0 -0
- data/nbproject/private/private.properties +3 -0
- data/nbproject/private/rake-d.txt +0 -0
- data/nbproject/project.properties +9 -0
- data/nbproject/project.xml +15 -0
- data/pagamento_digital.gemspec +26 -0
- data/templates/config.rb +43 -0
- metadata +126 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
pagamento_digital (0.1.1.6alpha)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
actionmailer (3.1.1)
|
10
|
+
actionpack (= 3.1.1)
|
11
|
+
mail (~> 2.3.0)
|
12
|
+
actionpack (3.1.1)
|
13
|
+
activemodel (= 3.1.1)
|
14
|
+
activesupport (= 3.1.1)
|
15
|
+
builder (~> 3.0.0)
|
16
|
+
erubis (~> 2.7.0)
|
17
|
+
i18n (~> 0.6)
|
18
|
+
rack (~> 1.3.2)
|
19
|
+
rack-cache (~> 1.1)
|
20
|
+
rack-mount (~> 0.8.2)
|
21
|
+
rack-test (~> 0.6.1)
|
22
|
+
sprockets (~> 2.0.2)
|
23
|
+
activemodel (3.1.1)
|
24
|
+
activesupport (= 3.1.1)
|
25
|
+
builder (~> 3.0.0)
|
26
|
+
i18n (~> 0.6)
|
27
|
+
activerecord (3.1.1)
|
28
|
+
activemodel (= 3.1.1)
|
29
|
+
activesupport (= 3.1.1)
|
30
|
+
arel (~> 2.2.1)
|
31
|
+
tzinfo (~> 0.3.29)
|
32
|
+
activeresource (3.1.1)
|
33
|
+
activemodel (= 3.1.1)
|
34
|
+
activesupport (= 3.1.1)
|
35
|
+
activesupport (3.1.1)
|
36
|
+
multi_json (~> 1.0)
|
37
|
+
arel (2.2.1)
|
38
|
+
builder (3.0.0)
|
39
|
+
erubis (2.7.0)
|
40
|
+
hike (1.2.1)
|
41
|
+
i18n (0.6.0)
|
42
|
+
json (1.6.1)
|
43
|
+
mail (2.3.0)
|
44
|
+
i18n (>= 0.4.0)
|
45
|
+
mime-types (~> 1.16)
|
46
|
+
treetop (~> 1.4.8)
|
47
|
+
mime-types (1.17.2)
|
48
|
+
multi_json (1.0.3)
|
49
|
+
polyglot (0.3.3)
|
50
|
+
rack (1.3.5)
|
51
|
+
rack-cache (1.1)
|
52
|
+
rack (>= 0.4)
|
53
|
+
rack-mount (0.8.3)
|
54
|
+
rack (>= 1.0.0)
|
55
|
+
rack-ssl (1.3.2)
|
56
|
+
rack
|
57
|
+
rack-test (0.6.1)
|
58
|
+
rack (>= 1.0)
|
59
|
+
rails (3.1.1)
|
60
|
+
actionmailer (= 3.1.1)
|
61
|
+
actionpack (= 3.1.1)
|
62
|
+
activerecord (= 3.1.1)
|
63
|
+
activeresource (= 3.1.1)
|
64
|
+
activesupport (= 3.1.1)
|
65
|
+
bundler (~> 1.0)
|
66
|
+
railties (= 3.1.1)
|
67
|
+
railties (3.1.1)
|
68
|
+
actionpack (= 3.1.1)
|
69
|
+
activesupport (= 3.1.1)
|
70
|
+
rack-ssl (~> 1.3.2)
|
71
|
+
rake (>= 0.8.7)
|
72
|
+
rdoc (~> 3.4)
|
73
|
+
thor (~> 0.14.6)
|
74
|
+
rake (0.9.2.2)
|
75
|
+
rdoc (3.11)
|
76
|
+
json (~> 1.4)
|
77
|
+
sprockets (2.0.3)
|
78
|
+
hike (~> 1.2)
|
79
|
+
rack (~> 1.0)
|
80
|
+
tilt (~> 1.1, != 1.3.0)
|
81
|
+
thor (0.14.6)
|
82
|
+
tilt (1.3.3)
|
83
|
+
treetop (1.4.10)
|
84
|
+
polyglot
|
85
|
+
polyglot (>= 0.3.1)
|
86
|
+
tzinfo (0.3.31)
|
87
|
+
|
88
|
+
PLATFORMS
|
89
|
+
ruby
|
90
|
+
|
91
|
+
DEPENDENCIES
|
92
|
+
pagamento_digital!
|
93
|
+
rails (~> 3.1)
|
94
|
+
rake (~> 0.9)
|
data/README.markdown
ADDED
@@ -0,0 +1,267 @@
|
|
1
|
+
# PagamentoDigital
|
2
|
+
|
3
|
+
## Atenção esta gem é ALPHA utilize por sua CONTA e RISCO
|
4
|
+
### Não dou suporte para esta gem, faça um fork e modifique o quanto quiser
|
5
|
+
|
6
|
+
|
7
|
+
Este é um plugin do Ruby on Rails que permite utilizar o [PagamentoDigital](www.pagamentodigital.com.br).
|
8
|
+
|
9
|
+
## SOBRE O PAGAMENTO DIGITAL
|
10
|
+
|
11
|
+
### Retorno Automático
|
12
|
+
|
13
|
+
Após o processo de compra e pagamento, o usuário é enviado de volta a seu site. Para isso, você deve configurar uma [URL de retorno](https://www.pagamentodigital.com.br/site/Integracao/RetornoAutomatico).
|
14
|
+
|
15
|
+
Antes de enviar o usuário para essa URL, o robô do PagamentoDigital faz um POST para ela, em segundo plano, com os dados e status da transação. Lendo esse POST, você pode obter o status do pedido. Se o pagamento entrou em análise, ou se o usuário pagou usando boleto bancário, o status será "Aguardando Pagamento" ou "Em Análise". Nesses casos, quando a transação for confirmada (o que pode acontecer alguns dias depois) a loja receberá outro POST, informando o novo status. **Cada vez que a transação muda de status, um POST é enviado.**
|
16
|
+
|
17
|
+
## REQUISITOS
|
18
|
+
|
19
|
+
A versão atual que está sendo mantida suporta Rails 3.0.0 ou superior.
|
20
|
+
|
21
|
+
|
22
|
+
### Configuração
|
23
|
+
|
24
|
+
O primeiro passo é instalar a biblioteca. Para isso, basta executar o comando
|
25
|
+
|
26
|
+
gem install PagamentoDigital
|
27
|
+
|
28
|
+
Adicione a biblioteca ao arquivo Gemfile:
|
29
|
+
|
30
|
+
~~~.ruby
|
31
|
+
gem "pagamento_digital"
|
32
|
+
~~~
|
33
|
+
|
34
|
+
Lembre-se de utilizar a versão que você acabou de instalar.
|
35
|
+
|
36
|
+
Depois de instalar a biblioteca, você precisará executar gerar o arquivo de configuração, que deve residir em `config/PagamentoDigital.yml`. Para gerar um arquivo de modelo execute
|
37
|
+
|
38
|
+
rails generate PagamentoDigital:install
|
39
|
+
|
40
|
+
O arquivo de configuração gerado será parecido com isto:
|
41
|
+
|
42
|
+
~~~.rb
|
43
|
+
#...
|
44
|
+
lambda_retorno = lambda{Rails.application.routes.url_helpers.send :pagamento_digital_retorno_url }
|
45
|
+
|
46
|
+
#redirect após pagamento
|
47
|
+
return_to lambda_retorno
|
48
|
+
#notificaçoes retorno automático
|
49
|
+
url_aviso lambda_retorno
|
50
|
+
#email da loja
|
51
|
+
email lambda{_pagamento.config[:email]}
|
52
|
+
#token gerado para sua conta
|
53
|
+
authenticity_token lambda{_pagamento.config[:token]}
|
54
|
+
|
55
|
+
|
56
|
+
development do
|
57
|
+
developer true #modo de desenvolvimento
|
58
|
+
base "http://localhost:3000" #url base do servidor só necessário para developer
|
59
|
+
end
|
60
|
+
~~~
|
61
|
+
|
62
|
+
Esta gem possui um modo de desenvolvimento que permite simular a realização de pedidos e envio de notificações; basta utilizar a opção `developer`. Ela é ativada por padrão nos ambientes de desenvolvimento e teste. Você deve configurar as opções `base`, que deverá apontar para o seu servidor e a URL de retorno, que deverá ser configurada no próprio [PagamentoDigital](https://PagamentoDigital.uol.com.br/?ind=689659), na página <https://PagamentoDigital.uol.com.br/Security/ConfiguracoesWeb/RetornoAutomatico.aspx>.
|
63
|
+
|
64
|
+
Para o ambiente de produção, que irá efetivamente enviar os dados para o [PagamentoDigital](https://PagamentoDigital.uol.com.br/?ind=689659), você precisará adicionar o e-mail cadastrado como vendedor e o `authenticity_token`, que é o Token para Conferência de Segurança, que pode ser conseguido na página <https://PagamentoDigital.uol.com.br/Security/ConfiguracoesWeb/RetornoAutomatico.aspx>.
|
65
|
+
|
66
|
+
### Montando o formulário
|
67
|
+
|
68
|
+
Para montar o seu formulário, você deverá utilizar a classe `PagamentoDigital::Order`. Esta classe deverá ser instanciada recebendo um identificador único do pedido. Este identificador permitirá identificar o pedido quando o [PagamentoDigital](https://PagamentoDigital.uol.com.br/?ind=689659) notificar seu site sobre uma alteração no status do pedido.
|
69
|
+
|
70
|
+
~~~.ruby
|
71
|
+
class CartController < ApplicationController
|
72
|
+
def checkout
|
73
|
+
# Busca o pedido associado ao usuario; esta logica deve
|
74
|
+
# ser implementada por voce, da maneira que achar melhor
|
75
|
+
@invoice = current_user.invoices.last
|
76
|
+
|
77
|
+
# Instanciando o objeto para geracao do formulario
|
78
|
+
@order = PagamentoDigital::Order.new(@invoice.id)
|
79
|
+
|
80
|
+
# adicionando os produtos do pedido ao objeto do formulario
|
81
|
+
@invoice.products.each do |product|
|
82
|
+
# Estes sao os atributos necessarios. Por padrao, peso (:weight) eh definido para 0,
|
83
|
+
# quantidade eh definido como 1 e frete (:shipping) eh definido como 0.
|
84
|
+
@order.add :id => product.id, :preco => product.price, :descricao => product.title, :qtde => 1
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
~~~
|
89
|
+
|
90
|
+
Se você precisar, pode definir os dados de cobrança com o método `billing`.
|
91
|
+
|
92
|
+
~~~.ruby
|
93
|
+
@order.billing = {
|
94
|
+
:nome => "nome",
|
95
|
+
:cpf => "cpf",
|
96
|
+
:sexo => "sexo",
|
97
|
+
:data_nasc => 'data_nascimento',
|
98
|
+
:email => "email",
|
99
|
+
:telefone => "telefone",
|
100
|
+
:celular => "celular",
|
101
|
+
:endereco => "endereco",
|
102
|
+
:complemento => "complemento",
|
103
|
+
:bairro => "bairro",
|
104
|
+
:cidade => "cidade",
|
105
|
+
:estado => "estado",
|
106
|
+
:cep => "cep",
|
107
|
+
:free => "free",
|
108
|
+
:tipo_frete => "tipo_frete",
|
109
|
+
:desconto => "desconto",
|
110
|
+
:acrescimo => "acrescimo",
|
111
|
+
:razao_social => 'cliente_razao_social',
|
112
|
+
:cnpj => "cliente_cnpj",
|
113
|
+
:rg => 'rg',
|
114
|
+
:hash => "hash",
|
115
|
+
}
|
116
|
+
~~~
|
117
|
+
|
118
|
+
Depois que você definiu os produtos do pedido, você pode exibir o formulário.
|
119
|
+
|
120
|
+
~~~.erb
|
121
|
+
<!-- app/views/cart/checkout.html.erb -->
|
122
|
+
<%= pagamento_digital_form @order, :submit => "Efetuar pagamento!" %>
|
123
|
+
~~~
|
124
|
+
|
125
|
+
Por padrão, o formulário é enviado para o email no arquivo de configuração. Você pode mudar o email com a opção `:email`.
|
126
|
+
|
127
|
+
~~~.erb
|
128
|
+
<%= PagamentoDigital_form @order, :submit => "Efetuar pagamento!", :email => @account.email %>
|
129
|
+
~~~
|
130
|
+
|
131
|
+
### Recebendo notificações
|
132
|
+
|
133
|
+
Toda vez que o status de pagamento for alterado, o [PagamentoDigital](http://www.pagamentodigital.com.br) irá notificar sua URL de retorno com diversos dados. Você pode interceptar estas notificações com o método `PagamentoDigital_notification`. O bloco receberá um objeto da classe `PagamentoDigital::Notification` e só será executado se for uma notificação verificada junto ao [PagamentoDigital](http://www.pagamentodigital.com.br).
|
134
|
+
|
135
|
+
~~~.ruby
|
136
|
+
class CartController < ApplicationController
|
137
|
+
skip_before_filter :verify_authenticity_token
|
138
|
+
|
139
|
+
def confirm
|
140
|
+
return unless request.post?
|
141
|
+
|
142
|
+
pagamento_digital_notification do |notification|
|
143
|
+
# Aqui voce deve verificar se o pedido possui os mesmos produtos
|
144
|
+
# que voce cadastrou. O produto soh deve ser liberado caso o status
|
145
|
+
# do pedido seja "completed" ou "approved"
|
146
|
+
#exemplo abaixo#
|
147
|
+
valor_notify = notification.valor_original.to_f.round(2) #valor que veio do pagamento digital
|
148
|
+
valor_loja = @pedido.preco_final.to_f.round(2) #valor que está em sua loja
|
149
|
+
raise "valor retornado pelo pagamento digital é diferente que preço da loja
|
150
|
+
p. digital=#{valor_notify} loja=#{valor_loja}" if valor_notify != valor_loja
|
151
|
+
if notification.valid?#valida a notificação antes de prosseguir
|
152
|
+
if notification.aprovada? #status aprovada
|
153
|
+
@pedido.status_financeiro = Pedido::StatusFinanceiro::PAGO
|
154
|
+
elsif notification.cancelada? #cancelada
|
155
|
+
@pedido.status_financeiro = Pedido::StatusFinanceiro::CANCELADO
|
156
|
+
@pedido.status_processo = Pedido::StatusProcesso::CANCELADO #cancela faz estorno ect...
|
157
|
+
else
|
158
|
+
#//pendente não faz nada
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
render :nothing => true
|
164
|
+
end
|
165
|
+
end
|
166
|
+
~~~
|
167
|
+
O método `pagamento_digital_notification` também pode receber como parâmetro o `authenticity_token` que será usado pra verificar a autenticação.
|
168
|
+
|
169
|
+
~~~.ruby
|
170
|
+
class CartController < ApplicationController
|
171
|
+
skip_before_filter :verify_authenticity_token
|
172
|
+
|
173
|
+
def confirm
|
174
|
+
return unless request.post?
|
175
|
+
# Se voce receber pagamentos de contas diferentes, pode passar o
|
176
|
+
# authenticity_token adequado como parametro para PagamentoDigital_notification
|
177
|
+
account = Account.find(params[:seller_id])
|
178
|
+
pagamento_digital_notification(account.authenticity_token) do |notification|
|
179
|
+
|
180
|
+
end
|
181
|
+
|
182
|
+
render :nothing => true
|
183
|
+
end
|
184
|
+
end
|
185
|
+
~~~
|
186
|
+
|
187
|
+
O objeto `notification` possui os seguintes métodos:
|
188
|
+
|
189
|
+
* `PagamentoDigital::Notification#products`: Lista de produtos enviados na notificação.
|
190
|
+
* `PagamentoDigital::Notification#frete`: Valor do frete
|
191
|
+
* `PagamentoDigital::Notification#status`: Status do pedido
|
192
|
+
* `PagamentoDigital::Notification#payment_method`: Tipo de pagamento
|
193
|
+
* `PagamentoDigital::Notification#processed_at`: Data e hora da transação
|
194
|
+
* `PagamentoDigital::Notification#cliente`: Dados do comprador
|
195
|
+
* `PagamentoDigital::Notification#valid?(force=false)`: Verifica se a notificação é válida, confirmando-a junto ao PagamentoDigital. A resposta é jogada em cache e pode ser forçada com `PagamentoDigital::Notification#valid?(:force)`
|
196
|
+
|
197
|
+
**ATENÇÃO:** Não se esqueça de adicionar `skip_before_filter :verify_authenticity_token` ao controller que receberá a notificação; caso contrário, uma exceção será lançada.
|
198
|
+
|
199
|
+
### Utilizando modo de desenvolvimento
|
200
|
+
|
201
|
+
Toda vez que você enviar o formulário no modo de desenvolvimento, um arquivo YAML será criado em `tmp/PagamentoDigital-#{Rails.env}.yml`. Esse arquivo conterá todos os pedidos enviados.
|
202
|
+
|
203
|
+
Depois, você será redirecionado para a URL de retorno que você configurou no arquivo `config/PagamentoDigital.yml`. Para simular o envio de notificações, você deve utilizar a rake `PagamentoDigital:notify`.
|
204
|
+
|
205
|
+
$ rake PagamentoDigital:notify ID=<id do pedido>
|
206
|
+
|
207
|
+
O ID do pedido deve ser o mesmo que foi informado quando você instanciou a class `PagamentoDigital::Order`. Por padrão, o status do pedido será `completed` e o tipo de pagamento `credit_card`. Você pode especificar esses parâmetros como no exemplo abaixo.
|
208
|
+
|
209
|
+
$ rake PagamentoDigital:notify ID=1 PAYMENT_METHOD=boleto STATUS=canceled NOTE="Enviar por motoboy" NAME="José da Silva" EMAIL="jose@dasilva.com"
|
210
|
+
|
211
|
+
#### PAYMENT_METHOD
|
212
|
+
|
213
|
+
* `credicard_visa`: Cartão de crédito visa
|
214
|
+
* `credicard_mastercard`: Cartão de crédito mastercard
|
215
|
+
* `credicard_amex`: Cartão de crédito amex
|
216
|
+
* `credicard_diners`: Cartão de crédito diners
|
217
|
+
* `credicard_aura`: Cartão de crédito Aura
|
218
|
+
* `credicard_hiper`: Cartão de crédito HiperCard
|
219
|
+
* `boleto`: Boleto
|
220
|
+
* `trans_bb`: Transferencia online Banco do Brasil
|
221
|
+
* `trans_bradesco`: Transferenciaonline Bradesco
|
222
|
+
* `trans_itau`: Transferencia online Itau
|
223
|
+
* `trans_banrisul`: Transferencia online Banrisul
|
224
|
+
* `trans_hsbc`: Transferencia online HSBC
|
225
|
+
|
226
|
+
|
227
|
+
#### STATUS
|
228
|
+
|
229
|
+
* `aprovada`: aprovada
|
230
|
+
* `pendente`: Aguardando pagamento
|
231
|
+
* `cancelada`: Cancelada
|
232
|
+
|
233
|
+
|
234
|
+
### Codificação (Encoding)
|
235
|
+
|
236
|
+
Esta biblioteca assume que você está usando UTF-8 como codificação de seu projeto. Neste caso, o único ponto onde os dados são convertidos para UTF-8 é quando uma notificação é enviada do UOL em ISO-8859-1.
|
237
|
+
|
238
|
+
Se você usa sua aplicação como ISO-8859-1, esta biblioteca NÃO IRÁ FUNCIONAR. Nenhum patch dando suporte ao ISO-8859-1 será aplicado; você sempre pode manter o seu próprio fork, caso precise.
|
239
|
+
|
240
|
+
|
241
|
+
## AUTOR:
|
242
|
+
|
243
|
+
Reinaldo Mendes (http://reinaldo-mendes.blogspot.com/) baseado em https://github.com/fnando/pagseguro
|
244
|
+
|
245
|
+
|
246
|
+
## LICENÇA:
|
247
|
+
|
248
|
+
(The MIT License)
|
249
|
+
|
250
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
251
|
+
a copy of this software and associated documentation files (the
|
252
|
+
'Software'), to deal in the Software without restriction, including
|
253
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
254
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
255
|
+
permit persons to whom the Software is furnished to do so, subject to
|
256
|
+
the following conditions:
|
257
|
+
|
258
|
+
The above copyright notice and this permission notice shall be
|
259
|
+
included in all copies or substantial portions of the Software.
|
260
|
+
|
261
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
262
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
263
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
264
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
265
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
266
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
267
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
<%
|
2
|
+
hash_fields = {}
|
3
|
+
|
4
|
+
options[:url_retorno] = options.fetch(:url_retorno, PagamentoDigital.config["return_to"])
|
5
|
+
if options[:url_retorno].present?
|
6
|
+
#URL completa para onde seu cliente será direcionado depois da finalização do pedido no Pagamento Digital.
|
7
|
+
hash_fields = hash_fields.merge! (
|
8
|
+
{
|
9
|
+
"url_retorno" => options[:url_retorno],
|
10
|
+
"redirect" => 'true',
|
11
|
+
"redirect_time" => options.fetch(:redirect_time, PagamentoDigital.config["redirect_time"])
|
12
|
+
}
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
options[:url_aviso] = options.fetch(:url_aviso, PagamentoDigital.config["url_aviso"])
|
18
|
+
options[:url_aviso] ||= options[:url_retorno]
|
19
|
+
if options[:url_aviso].present?
|
20
|
+
hash_fields = hash_fields.merge! "url_aviso" => options[:url_aviso]
|
21
|
+
end
|
22
|
+
|
23
|
+
hash_fields = hash_fields.merge! ({
|
24
|
+
#"encoding" => 'UTF-8',
|
25
|
+
'email_loja' => options.fetch(:email, PagamentoDigital.config["email"]),
|
26
|
+
'tipo_integracao' => 'PAD',
|
27
|
+
'id_pedido' => order.id,
|
28
|
+
'frete' => order.frete
|
29
|
+
} )
|
30
|
+
|
31
|
+
|
32
|
+
order.products.each_with_index do |product, i|
|
33
|
+
i+=1
|
34
|
+
hash_fields = hash_fields.merge! ({
|
35
|
+
:"produto_qtde_#{i}" => product[:qtde],
|
36
|
+
:"produto_codigo_#{i}" => product[:id],
|
37
|
+
:"produto_descricao_#{i}" => product[:descricao],
|
38
|
+
:"produto_valor_#{i}" => product[:preco],
|
39
|
+
|
40
|
+
})
|
41
|
+
end
|
42
|
+
|
43
|
+
order.billing.each do |name, value|
|
44
|
+
key = PagamentoDigital::Order::BILLING_MAPPING[name.to_sym]
|
45
|
+
value = number_with_precision value, :precision => 2, :separator => '.', :delimiter => ' ' if ['desconto'].include? name.to_s
|
46
|
+
hash_fields[key] = value
|
47
|
+
end
|
48
|
+
|
49
|
+
to_gen_md5 = hash_fields.sort {|a,b| a[0].to_s <=> b[0].to_s }.map{|key,value|
|
50
|
+
"#{key}=#{URI.escape(value.to_s)}"
|
51
|
+
}.join('&')+PagamentoDigital.config[:authenticity_token]
|
52
|
+
|
53
|
+
#hash_fields[:hash] = Digest::MD5.hexdigest(to_gen_md5)
|
54
|
+
|
55
|
+
|
56
|
+
%>
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
<form action="<%=PagamentoDigital.gateway_url%>" method='post' style="display:none">
|
62
|
+
<%= hash_fields.map{ |k,v| label_tag{text_field_tag(k,v)+k} }.join("\n<br/>").html_safe %>
|
63
|
+
<%= submit_tag options[:submit] %>
|
64
|
+
</form>
|
65
|
+
|
66
|
+
<%#*<script>%>
|
67
|
+
<%#*document.getElementById('pagamento_digital_form').style.display='';%>
|
68
|
+
<%#*</script>%>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "net/https"
|
2
|
+
require "uri"
|
3
|
+
require "time"
|
4
|
+
require 'digest/md5'
|
5
|
+
|
6
|
+
|
7
|
+
require "pagamento_digital/base"
|
8
|
+
require "pagamento_digital/engine"
|
9
|
+
require "pagamento_digital/faker"
|
10
|
+
require "pagamento_digital/rake"
|
11
|
+
require "pagamento_digital/railtie"
|
12
|
+
require "pagamento_digital/notification"
|
13
|
+
require "pagamento_digital/order"
|
14
|
+
require "pagamento_digital/action_controller"
|
15
|
+
require "pagamento_digital/helper"
|
16
|
+
require "pagamento_digital/utils"
|