puntopagos 0.0.2 → 0.1.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/.gitignore +1 -0
- data/lib/puntopagos/authorization.rb +14 -0
- data/lib/puntopagos/config.rb +3 -3
- data/lib/puntopagos/executioner.rb +32 -0
- data/lib/puntopagos/notification.rb +22 -0
- data/lib/puntopagos/request.rb +44 -48
- data/lib/puntopagos/response.rb +6 -6
- data/lib/puntopagos/version.rb +1 -1
- data/lib/puntopagos.rb +2 -0
- data/test/unit/create_request_test.rb +21 -20
- metadata +6 -4
- data/config/puntopagos.yml +0 -4
data/.gitignore
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'openssl'
|
3
|
+
|
4
|
+
module PuntoPagos
|
5
|
+
class Authorization
|
6
|
+
def initialize env = nil
|
7
|
+
@@config ||= PuntoPagos::Config.new(env)
|
8
|
+
end
|
9
|
+
|
10
|
+
def sign(string)
|
11
|
+
"PP "+@@config.puntopagos_key+":"+ Base64.encode64(OpenSSL::HMAC.digest('sha1',@@config.puntopagos_secret, string)).chomp
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/puntopagos/config.rb
CHANGED
@@ -3,13 +3,13 @@ require 'yaml'
|
|
3
3
|
module PuntoPagos
|
4
4
|
class Config
|
5
5
|
PUNTOPAGOS_BASE_URL = {
|
6
|
-
:production => "https://www.puntopagos.com",
|
7
|
-
:sandbox => "https://sandbox.puntopagos.com"
|
6
|
+
:production => "https://www.puntopagos.com/",
|
7
|
+
:sandbox => "https://sandbox.puntopagos.com/"
|
8
8
|
}
|
9
9
|
|
10
10
|
attr_accessor :config_filepath, :puntopagos_base_url, :puntopagos_key, :puntopagos_secret
|
11
11
|
|
12
|
-
def initialize
|
12
|
+
def initialize env = nil, config_override = nil
|
13
13
|
if env
|
14
14
|
# For non-rails apps
|
15
15
|
@config_filepath = File.join(File.dirname(__FILE__), "..", "..", "config", "puntopagos.yml")
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'rest_client'
|
3
|
+
|
4
|
+
module PuntoPagos
|
5
|
+
class Executioner
|
6
|
+
def initialize env = nil
|
7
|
+
@@config ||= PuntoPagos::Config.new(env)
|
8
|
+
@@puntopagos_base_url ||= @@config.puntopagos_base_url
|
9
|
+
end
|
10
|
+
|
11
|
+
def call_api data, path, method, signature, timestamp
|
12
|
+
#hack fix: JSON.unparse doesn't work in Rails 2.3.5; only {}.to_json does..
|
13
|
+
headers = set_headers(signature, timestamp)
|
14
|
+
api_request_data = JSON.unparse(data) rescue data.to_json
|
15
|
+
resp = RestClient.method(method).call(@@puntopagos_base_url+path, data.to_json, headers)
|
16
|
+
JSON.parse(resp)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def set_headers signature, timestamp
|
22
|
+
headers = {
|
23
|
+
'User-Agent' => "puntopagos-ruby-#{PuntoPagos::VERSION}",
|
24
|
+
'Accept' => 'application/json',
|
25
|
+
'Accept-Charset' => 'utf-8',
|
26
|
+
'Content-Type' => 'application/json; charset=utf-8',
|
27
|
+
'Fecha' => timestamp,
|
28
|
+
'Autorizacion' => signature
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module PuntoPagos
|
2
|
+
class Notification
|
3
|
+
def initialize env = nil
|
4
|
+
@env = env
|
5
|
+
@@config ||= PuntoPagos::Config.new(@env)
|
6
|
+
@@function = "transaccion/notificar"
|
7
|
+
end
|
8
|
+
|
9
|
+
def correct? token, trx_id, amount, timestamp, pp_signature
|
10
|
+
message = create_message token, trx_id, amount, timestamp
|
11
|
+
authorization = Authorization.new(@env)
|
12
|
+
signature = authorization.sign(message)
|
13
|
+
signature == pp_signature
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def create_message token, trx_id, amount, timestamp
|
19
|
+
@@function + "\n" + token + "\n" + trx_id + "\n" + amount + "\n" + timestamp
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/puntopagos/request.rb
CHANGED
@@ -5,59 +5,55 @@ require 'rest_client'
|
|
5
5
|
|
6
6
|
|
7
7
|
module PuntoPagos
|
8
|
-
|
8
|
+
|
9
9
|
class NoDataError < Exception
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
class Request
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
13
|
+
def initialize env = nil
|
14
|
+
@env = env
|
15
|
+
@@config ||= PuntoPagos::Config.new(@env)
|
16
|
+
@@puntopagos_base_url ||= @@config.puntopagos_base_url
|
17
|
+
@@function = "transaccion/crear"
|
18
|
+
end
|
19
|
+
|
20
|
+
def validate
|
21
|
+
#TODO validate JSON must have monto and trx_id
|
22
|
+
end
|
23
|
+
|
24
|
+
def create trx_id, amount, payment_type = nil
|
25
|
+
raise NoDataError unless trx_id and amount
|
26
|
+
data = create_data trx_id, amount, payment_type
|
27
|
+
|
28
|
+
timestamp = get_timestamp
|
29
|
+
|
30
|
+
message = create_message(data['trx_id'], data['monto'], timestamp)
|
31
|
+
authorization = PuntoPagos::Authorization.new(@env)
|
32
|
+
signature = authorization.sign(message)
|
33
|
+
executioner = PuntoPagos::Executioner.new(@env)
|
34
|
+
|
35
|
+
response_data = executioner.call_api(data, @@function, :post, signature, timestamp)
|
36
|
+
PuntoPagos::Response.new(response_data, @env)
|
37
|
+
end
|
38
|
+
|
32
39
|
|
33
40
|
private
|
34
41
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
'Content-Type' => 'application/json; charset=utf-8',
|
46
|
-
'Fecha' => timestamp,
|
47
|
-
'Autorizacion' => signature
|
48
|
-
}
|
49
|
-
end
|
50
|
-
|
51
|
-
def call_api(data, path, method)
|
52
|
-
#hack fix: JSON.unparse doesn't work in Rails 2.3.5; only {}.to_json does..
|
53
|
-
api_request_data = JSON.unparse(data) rescue data.to_json
|
54
|
-
resp = RestClient.method(method).call(@@puntopagos_base_url+path, data.to_json, @@headers)
|
55
|
-
|
56
|
-
JSON.parse(resp)
|
57
|
-
end
|
58
|
-
|
59
|
-
def sign(string)
|
60
|
-
Base64.encode64(OpenSSL::HMAC.digest('sha1',@@config.puntopagos_secret, string))
|
61
|
-
end
|
42
|
+
def create_message trx_id, amount, timestamp
|
43
|
+
@@function + "\n" + trx_id + "\n" + amount + "\n" + timestamp
|
44
|
+
end
|
45
|
+
|
46
|
+
def create_data trx_id, amount, payment_type = nil
|
47
|
+
data = {}
|
48
|
+
data['trx_id'] = trx_id
|
49
|
+
data['monto'] = amount
|
50
|
+
data['medio_pago'] = payment_type if payment_type
|
51
|
+
data
|
62
52
|
end
|
53
|
+
|
54
|
+
def get_timestamp
|
55
|
+
Time.now.strftime("%a, %d %b %Y %H:%M:%S GMT")
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
63
59
|
end
|
data/lib/puntopagos/response.rb
CHANGED
@@ -4,25 +4,25 @@ module PuntoPagos
|
|
4
4
|
@@config ||= PuntoPagos::Config.new(env)
|
5
5
|
@@puntopagos_base_url ||= @@config.puntopagos_base_url
|
6
6
|
@@response = response
|
7
|
-
|
7
|
+
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
# TODO validate JSON
|
11
11
|
def success?
|
12
12
|
@@response["respuesta"] == "00"
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
def get_token
|
16
16
|
@@response["token"]
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
def get_error
|
20
20
|
@@response["error"]
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
def payment_process_url
|
24
24
|
@@puntopagos_base_url + "/transaccion/procesar/"+get_token
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
end
|
28
28
|
end
|
data/lib/puntopagos/version.rb
CHANGED
data/lib/puntopagos.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__),"puntopagos/config")
|
2
|
+
require File.join(File.dirname(__FILE__),"puntopagos/authorization")
|
3
|
+
require File.join(File.dirname(__FILE__),"puntopagos/executioner")
|
2
4
|
require File.join(File.dirname(__FILE__),"puntopagos/request")
|
3
5
|
require File.join(File.dirname(__FILE__),"puntopagos/response")
|
4
6
|
require File.join(File.dirname(__FILE__),"puntopagos/version")
|
@@ -2,36 +2,37 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
|
4
4
|
class CreateRequestTest < Test::Unit::TestCase
|
5
|
-
|
6
|
-
def setup
|
7
|
-
@req = PuntoPagos::Request.new('
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@req = PuntoPagos::Request.new('production')
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
def test_valid_create
|
11
11
|
puts "-------"
|
12
12
|
puts "webpay valid"
|
13
|
-
|
14
|
-
data = {
|
13
|
+
|
14
|
+
data = {
|
15
15
|
"trx_id" => "#{Time.now.to_i}",
|
16
|
-
"monto" => "100.00"
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
16
|
+
"monto" => "100.00",
|
17
|
+
"medio_pago" => "3"
|
18
|
+
}
|
19
|
+
resp = @req.create("#{Time.now.to_i}", "100.00")
|
20
|
+
puts "RESP: #{resp.success?}"
|
21
|
+
assert resp.success? == true, "Pass"
|
22
|
+
|
22
23
|
# payload = YAML.load_file(File.join(File.dirname(__FILE__),"..", "data","webpay_paylaod.yml"))
|
23
24
|
end
|
24
|
-
|
25
|
+
|
25
26
|
def test_invalid_webpay_pay
|
26
27
|
puts "webpay invalid"
|
27
|
-
|
28
|
-
data = {
|
28
|
+
|
29
|
+
data = {
|
29
30
|
'trx_id' => "#{Time.now.to_i}"
|
30
|
-
}
|
31
|
-
resp = @req.create(
|
32
|
-
|
33
|
-
assert resp.success? == false
|
34
|
-
|
31
|
+
}
|
32
|
+
resp = @req.create("#{Time.now.to_i}","10")
|
33
|
+
|
34
|
+
assert resp.success? == false
|
35
|
+
|
35
36
|
end
|
36
37
|
|
37
38
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puntopagos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ date: 2012-06-15 00:00:00.000000000Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rest-client
|
17
|
-
requirement: &
|
17
|
+
requirement: &2156966000 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
version: 1.6.7
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2156966000
|
26
26
|
description: Ruby wrapper for PuntoPagos Payment API
|
27
27
|
email:
|
28
28
|
- imella@acid.cl
|
@@ -35,10 +35,12 @@ files:
|
|
35
35
|
- LICENSE
|
36
36
|
- README.textile
|
37
37
|
- Rakefile
|
38
|
-
- config/puntopagos.yml
|
39
38
|
- init.rb
|
40
39
|
- lib/puntopagos.rb
|
40
|
+
- lib/puntopagos/authorization.rb
|
41
41
|
- lib/puntopagos/config.rb
|
42
|
+
- lib/puntopagos/executioner.rb
|
43
|
+
- lib/puntopagos/notification.rb
|
42
44
|
- lib/puntopagos/request.rb
|
43
45
|
- lib/puntopagos/response.rb
|
44
46
|
- lib/puntopagos/version.rb
|
data/config/puntopagos.yml
DELETED