alectrico-tbk 0.1.9.pre.beta.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.
- checksums.yaml +7 -0
- data/README.md +124 -0
- data/Rakefile +3 -0
- data/lib/alectrico/tbk/core_ext.rb +31 -0
- data/lib/alectrico/tbk/middleware.rb +14 -0
- data/lib/alectrico/tbk/pago.rb +52 -0
- data/lib/alectrico/tbk/payable.rb +59 -0
- data/lib/alectrico/tbk/version.rb +5 -0
- data/lib/alectrico/tbk.rb +16 -0
- data/lib/alectrico.rb +4 -0
- data/lib/middleware.rb +11 -0
- data/lib/tasks/alectrico/tbk_tasks.rake +5 -0
- data/lib/tasks/alectrico_tasks.rake +7 -0
- metadata +100 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0a860e90e2860113918c6fd3263d86a4ef25f11e5856bab9a3f8eb15f62a1743
|
4
|
+
data.tar.gz: 0beba8de35ddc579e50b858eee39991fb3acdcf8ff35b8ca6423ef47f815c8b7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7faf4c1135e4dd7e867ab47fe1fabc82bfb4dd0836f7452f1b0a47ae96fe5672e405b62a1c132ebdc1d6fdbda54e59aaf342f50aeea1b9c7d6e1cfbc0095fb94
|
7
|
+
data.tar.gz: 9fd478790ab129bff06bdd6e8306eae6467f854e809c6d8f4c12d4c4d1ef6f79f9f0d1b7c962d8f32321f29a68b505db9670fdc9d4430f9ca4cb3922f7c2a22b
|
data/README.md
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+

|
2
|
+
# Alectrico::Tbk
|
3
|
+
Genera un link de pago en tbk para un modelo.
|
4
|
+
Tbk® es marca registrada de Transbank S.A..
|
5
|
+
|
6
|
+
## Uso
|
7
|
+
Inserte el hook 'payable'.
|
8
|
+
Si el modelo fuese Reporte, se vería así.
|
9
|
+
|
10
|
+
Ejemplo:
|
11
|
+
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
|
15
|
+
#db/migrate/######AddColumnLinkDePagoTbkToReportes.rb
|
16
|
+
class AddColumnLinkDePagoTbkToReportes < ActiveRecord::Migration[8.0]
|
17
|
+
def change
|
18
|
+
add_column :reportes, :link_de_pago_tbk, :string
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
#app/models/reporte.rb
|
23
|
+
class Reporte
|
24
|
+
#link_de_pago_tbk es el nombre
|
25
|
+
#del campo en la base de datos
|
26
|
+
#que almacenará la url de pago
|
27
|
+
#que más adelante Ud.
|
28
|
+
#generará con el método tokeniza
|
29
|
+
payable url: :link_de_pago_tbk
|
30
|
+
end
|
31
|
+
|
32
|
+
#en su flujo de trabajo
|
33
|
+
reporte = Reporte.create!
|
34
|
+
|
35
|
+
#tokeniza usa el id de la instancia para generar un token
|
36
|
+
#link_de_pago_tbk_reporte_url es una método de url_helper
|
37
|
+
#de ruby. tokeniza se lo envíará con :send a url_helper
|
38
|
+
#para que genere una url para el momdelo que Ud.
|
39
|
+
#escoja
|
40
|
+
#Debe crear un controlador que responda a ese modelo
|
41
|
+
reporte.tokeniza( 'link_de_pago_tbk_reporte_url', host ) }
|
42
|
+
#host es el host del servidor donde recibirá el pago
|
43
|
+
|
44
|
+
|
45
|
+
#app/controlers/reportes_controller.rb
|
46
|
+
#La acción link_de_pago_tbk debe
|
47
|
+
#verificar que el modelo existe
|
48
|
+
#Luego debe usar el código de Transbank
|
49
|
+
#para generar un pago en la pasarela
|
50
|
+
#de transbank
|
51
|
+
class ReportesController < ApplicationController
|
52
|
+
def link_de_pago_tbk
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
#actualice las rutas para
|
57
|
+
#config/routes.rb
|
58
|
+
Rails.application.routes.draw do
|
59
|
+
resources :reportes do
|
60
|
+
member do
|
61
|
+
get :link_de_pago_tbk
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
```
|
66
|
+
|
67
|
+
Puede elegir un link de pago para un controlador distinto:
|
68
|
+
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
|
72
|
+
reporte.tokeniza( 'mi_link_venta_url', host ) }
|
73
|
+
#host es el host del servidor donde recibirá el pago
|
74
|
+
|
75
|
+
|
76
|
+
#app/controlers/ventas_controller.rb
|
77
|
+
class VentasController < ApplicationController
|
78
|
+
def mi_link
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
#config/routes.rb
|
84
|
+
Rails.application.routes.draw do
|
85
|
+
resources :reportes do
|
86
|
+
member do
|
87
|
+
get :mi_link
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
```
|
93
|
+
|
94
|
+
Envíe el link de pago al usuario de su aplicación para que efectúe el pago.
|
95
|
+
|
96
|
+
Cuando el usuario siga el link, el sitio web de Transbank le pedirá los datos de pago al usuario y
|
97
|
+
le cobrará a este lo que UD. haya establecido.
|
98
|
+
|
99
|
+
Al final, la pasarela redigirá al usuario a su servidor. Su aplicación debe haber proporcionado antes una url para ello.
|
100
|
+
En esa url debe confirmar el pago y entregar una boleta al usuario.
|
101
|
+
|
102
|
+
|
103
|
+
## Instalación
|
104
|
+
Agregue esta línea al Gemfile de su Aplicación:
|
105
|
+
|
106
|
+
```ruby
|
107
|
+
gem "alectrico-tbk"
|
108
|
+
```
|
109
|
+
|
110
|
+
Y ejecute:
|
111
|
+
```bash
|
112
|
+
$ bundle
|
113
|
+
```
|
114
|
+
|
115
|
+
O haga una instalacioń manual
|
116
|
+
```bash
|
117
|
+
$ gem install alectrico-tbk
|
118
|
+
```
|
119
|
+
|
120
|
+
## Contribuyó
|
121
|
+
Alexander Espinosa
|
122
|
+
|
123
|
+
## Licencia
|
124
|
+
Está gema está disponible como código abierto, 'open source', bajos los términos [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'base64'
|
2
|
+
class String
|
3
|
+
|
4
|
+
#Esto es una sobrecarga de la clase String que agrega
|
5
|
+
#un método de instancia to_squawk
|
6
|
+
|
7
|
+
def to_squawk
|
8
|
+
"squawk! #{self}".strip
|
9
|
+
end
|
10
|
+
|
11
|
+
#self es el id de un modelo
|
12
|
+
def tokeniza( action_url, host )
|
13
|
+
puts "en tokeniza de String"
|
14
|
+
puts "action_url: "
|
15
|
+
puts action_url
|
16
|
+
id = self.to_i
|
17
|
+
puts "id: "
|
18
|
+
puts id
|
19
|
+
token = Base64::encode64( id.to_s )
|
20
|
+
begin
|
21
|
+
Rails.application.routes.url_helpers.send( action_url.to_sym, token, :only_path => false, :host => host )
|
22
|
+
rescue NoMethodError => e
|
23
|
+
puts "Hay un error, #{action_url} no se puede usar en su modelo"
|
24
|
+
puts "Debe usar este hook en su modelo:"
|
25
|
+
puts "payable alectrico_text_field: #{action_url.to_sym}"
|
26
|
+
puts "O usar otro argumento en tokeniza"
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#Aquí empieza la programación
|
2
|
+
#Si desde el hospedero de la gema
|
3
|
+
#Se instala la gema con bundle install
|
4
|
+
#Aprece el mensaje en puts
|
5
|
+
#Tambíen cuando se llama a rake tasks
|
6
|
+
#desde el hospedero
|
7
|
+
#require "alectrico/tbk/version"
|
8
|
+
#require "alectrico/tbk/core_ext"
|
9
|
+
#require "alectrico/tbk/payable"
|
10
|
+
|
11
|
+
|
12
|
+
module Alectrico
|
13
|
+
module Tbk
|
14
|
+
#las url, exceptp la de imagen, deben ser generadas por el url_helper de Rails
|
15
|
+
class Pago
|
16
|
+
|
17
|
+
#las url, exceptp la de imagen, deben ser generadas por el url_helper de Rails
|
18
|
+
# email,
|
19
|
+
# servicio,
|
20
|
+
# presupuesto,
|
21
|
+
# repositorio,
|
22
|
+
# imagen_url,
|
23
|
+
# listener_url,
|
24
|
+
# return_url,
|
25
|
+
# cancel_url,
|
26
|
+
# notify_url
|
27
|
+
def initialize(
|
28
|
+
email,
|
29
|
+
servicio,
|
30
|
+
presupuesto,
|
31
|
+
repositorio,
|
32
|
+
imagen_url,
|
33
|
+
listener_url,
|
34
|
+
return_url,
|
35
|
+
cancel_url,
|
36
|
+
notify_url )
|
37
|
+
puts "En Alectrico::Tbk::Pago"
|
38
|
+
end
|
39
|
+
#caso = ::Comercio::Compra::Unitaria::Webpay::Nominativo::Manual.new(
|
40
|
+
# repositorio,
|
41
|
+
# listener_url,
|
42
|
+
# return_url,
|
43
|
+
# cancel_url,
|
44
|
+
# image_url,
|
45
|
+
# notify_url
|
46
|
+
#)
|
47
|
+
#aso.crea {:id => servicio.id,
|
48
|
+
# :amp_cliente_id => email,
|
49
|
+
# :presupuesto_id => presupuesto.id }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Alectrico
|
2
|
+
module Tbk
|
3
|
+
module Payable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
class_methods do
|
6
|
+
#class_methods es un hook proporcionado por extend ActiveSupport::Concern
|
7
|
+
#que permite definir métodos de clases on the fly
|
8
|
+
#En este caso el método acts_as_alectrico se puede usar como hook al comienzo
|
9
|
+
#de las clases que lo quieran usar
|
10
|
+
#El método en sí define un atribute de clase llamado alectrico_text_field
|
11
|
+
#El cual tendrá como valor por defecto lo que se suministre como argumento
|
12
|
+
#Si se llama acts_as_alectrico sin argumentos se usará como default el valor
|
13
|
+
#que tenga el valor por defecto que proporciona el método last_squack
|
14
|
+
#Pero si en opciones se ya colocado alectrico_test_field entonces se usará
|
15
|
+
#el valor devuelo por el hash de optinoes con key alectrico_text_field
|
16
|
+
def payable(options = {} )
|
17
|
+
cattr_accessor :url, default: (options[:url] || :last_squawk).to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
included do
|
21
|
+
#Estos son métodos de instancia incorporados
|
22
|
+
#Es equivalente a usar include Module.
|
23
|
+
#Pero al usar ActiveSupport::Concern es más fácil
|
24
|
+
#Porque el do espera un módulo
|
25
|
+
#En este caso el módulo sin nombre solo aporte el método squawk
|
26
|
+
#Este método squawk solo estará accesible como método de instancia
|
27
|
+
#por virtude del uso del hook inluded.
|
28
|
+
def squawk( string )
|
29
|
+
#escribe el valor string.to_squawk al atributo devuelto por self.class.alectrico_text_field
|
30
|
+
#pero string.to_squawn ha sido sobrecargado (monkey patching en lib)
|
31
|
+
#y class_alectrico_text_field responde de acuerdo a cómo se le llame
|
32
|
+
write_attribute(self.class.alectrico_text_field, string.to_squawk)
|
33
|
+
end
|
34
|
+
|
35
|
+
# prepara un link de pago tbk para cobrar
|
36
|
+
# un servicio en la clase que lo llame
|
37
|
+
# la clase de fijar el campo que lo va a
|
38
|
+
# recibir eso se hace
|
39
|
+
# colocando el hook acts_as_alectrico y colocando el nombre del
|
40
|
+
# campo que guardará el link en la tabla de ActiveRecord
|
41
|
+
# debe existir ese campo para que esto funcione
|
42
|
+
# debe existe el campo
|
43
|
+
# cuando el usario siga el link obtenido, se tomará el precio
|
44
|
+
# de la visita del colaborador para generar el link que vaya
|
45
|
+
# a transbank.cl
|
46
|
+
# @param [String] url args to url_helpers
|
47
|
+
# @param [Numeric] id id of model
|
48
|
+
# url has to be :tbk_api_v1_electrico_reporte_url
|
49
|
+
#
|
50
|
+
def tokeniza( action_url, host )
|
51
|
+
# url = Rails.application.routes.url_helpers.send( url.to_sym, self.id, :only_path => true )
|
52
|
+
#rite_attribute(self.class.alectrico_text_field, url.post_tokeniza(self.id))
|
53
|
+
write_attribute(self.class.url, self.id.to_s.tokeniza( action_url, host ))
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#Estos requires los usa el hospedero
|
2
|
+
#Todas las clases de lib/alectrico/tbk
|
3
|
+
#Deben estar aquí
|
4
|
+
require 'alectrico/tbk/pago'
|
5
|
+
require 'alectrico/tbk/payable'
|
6
|
+
require 'alectrico/tbk/core_ext'
|
7
|
+
require 'alectrico/tbk/middleware'
|
8
|
+
|
9
|
+
|
10
|
+
module Alectrico
|
11
|
+
module Tbk
|
12
|
+
class Hola
|
13
|
+
puts "alectrico® lo saluda :)"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/alectrico.rb
ADDED
data/lib/middleware.rb
ADDED
metadata
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: alectrico-tbk
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.9.pre.beta.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- alectrico®
|
8
|
+
bindir: bin
|
9
|
+
cert_chain: []
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
|
+
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: rails
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - ">="
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: 5.0.0
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: 5.0.0
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: jwt
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.2.0
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 1.2.0
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: rspec
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.0'
|
47
|
+
type: :development
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.0'
|
54
|
+
description: " Clases simples para interactuar con la pasarela Transbank (Tbk®). Tbk®
|
55
|
+
es marca registrada en Chile de Transbank S.A.. \n"
|
56
|
+
email:
|
57
|
+
- alectrico@outlook.cl
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- README.md
|
63
|
+
- Rakefile
|
64
|
+
- lib/alectrico.rb
|
65
|
+
- lib/alectrico/tbk.rb
|
66
|
+
- lib/alectrico/tbk/core_ext.rb
|
67
|
+
- lib/alectrico/tbk/middleware.rb
|
68
|
+
- lib/alectrico/tbk/pago.rb
|
69
|
+
- lib/alectrico/tbk/payable.rb
|
70
|
+
- lib/alectrico/tbk/version.rb
|
71
|
+
- lib/middleware.rb
|
72
|
+
- lib/tasks/alectrico/tbk_tasks.rake
|
73
|
+
- lib/tasks/alectrico_tasks.rake
|
74
|
+
homepage: https://www.alectrico.cl
|
75
|
+
licenses:
|
76
|
+
- MIT
|
77
|
+
metadata:
|
78
|
+
allowed_push_host: https://www.rubygems.org
|
79
|
+
changelog_uri: https://github.com/alectrico-pro/alectrico-tbk/blob/master/CHANGELOG.md
|
80
|
+
documentation_uri: https://www.rubydoc.info/gems/alectrico-tbk
|
81
|
+
homepage_uri: https://www.alectrico.cl
|
82
|
+
source_code_uri: https://github.com/alectrico-pro/alectrico-tbk
|
83
|
+
rdoc_options: []
|
84
|
+
require_paths:
|
85
|
+
- lib
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
requirements: []
|
97
|
+
rubygems_version: 3.6.9
|
98
|
+
specification_version: 4
|
99
|
+
summary: Genera un link de pago.
|
100
|
+
test_files: []
|