khipu 1.3.0 → 1.3.3
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/README.md +1 -3
- data/khipu.gemspec +1 -0
- data/lib/khipu.rb +2 -1
- data/lib/khipu/khipu_api_endpoint.rb +24 -2
- data/lib/khipu/khipu_service.rb +4 -4
- data/lib/khipu/version.rb +1 -1
- data/spec/khipu_api_endpoint_spec.rb +42 -0
- data/spec/khipu_service_spec.rb +44 -4
- data/spec/spec_helper.rb +2 -1
- metadata +37 -11
- checksums.yaml +0 -7
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -4,8 +4,6 @@
|
|
4
4
|
|
5
5
|
Gema Ruby para utilizar los servicios de Khipu.com
|
6
6
|
|
7
|
-
Versión Biblioteca: 1.3.0
|
8
|
-
|
9
7
|
Versión API Khipu: 1.3
|
10
8
|
Versión API de notificación: 1.2
|
11
9
|
|
@@ -226,4 +224,4 @@ saldar este pago:
|
|
226
224
|
puts error.type
|
227
225
|
puts error.message
|
228
226
|
end
|
229
|
-
```
|
227
|
+
```
|
data/khipu.gemspec
CHANGED
data/lib/khipu.rb
CHANGED
@@ -8,6 +8,7 @@ require 'khipu/const'
|
|
8
8
|
module Khipu
|
9
9
|
|
10
10
|
API_URL = 'https://khipu.com/api/1.3/'
|
11
|
+
INTEGRATOR_API_URL = 'https://khipu.com/integratorApi/1.3/'
|
11
12
|
DEBUG = ENV['KHIPU_DEBUG'] || false
|
12
13
|
FORM_BUTTONS = {
|
13
14
|
'50x25' => '50x25.png',
|
@@ -25,7 +26,7 @@ module Khipu
|
|
25
26
|
'200x50white' => '200x50-w.png',
|
26
27
|
'200x75' => '200x75.png',
|
27
28
|
'200x75white' => '200x75-w.png',
|
28
|
-
}.inject({}) { |h, (k, v)| h[k] = '
|
29
|
+
}.inject({}) { |h, (k, v)| h[k] = 'https://s3.amazonaws.com/static.khipu.com/buttons/' + v; h }
|
29
30
|
|
30
31
|
def self.create_khipu_api(receiver_id, secret = '')
|
31
32
|
KhipuApiEndpoint.new(receiver_id, secret)
|
@@ -7,12 +7,12 @@ module Khipu
|
|
7
7
|
super(receiver_id, secret)
|
8
8
|
end
|
9
9
|
|
10
|
-
def execute(endpoint, params, add_hash = true, json_response = true)
|
10
|
+
def execute(endpoint, params, add_hash = true, json_response = true, base_url = Khipu::API_URL)
|
11
11
|
post_params = params.clone
|
12
12
|
if add_hash
|
13
13
|
post_params['hash'] = hmac_sha256(@secret, concatenated(params))
|
14
14
|
end
|
15
|
-
post(endpoint, post_params, json_response)
|
15
|
+
post(endpoint, post_params, json_response, base_url)
|
16
16
|
end
|
17
17
|
|
18
18
|
def payment_status(args)
|
@@ -178,7 +178,29 @@ module Khipu
|
|
178
178
|
verify_signature(params, args[:notification_signature])
|
179
179
|
end
|
180
180
|
|
181
|
+
# Integrator API
|
181
182
|
|
183
|
+
def create_receiver(args)
|
184
|
+
endpoint = 'createReceiver'
|
185
|
+
check_arguments(args, [:email, :first_name, :last_name, :notify_url, :identifier, :bussiness_category, :bussiness_name,
|
186
|
+
:phone, :address_line_1, :address_line_2, :address_line_3, :country_code])
|
187
|
+
params = {
|
188
|
+
receiver_id: @receiver_id,
|
189
|
+
email: args[:email],
|
190
|
+
first_name: args[:first_name],
|
191
|
+
last_name: args[:last_name],
|
192
|
+
notify_url: args[:notify_url],
|
193
|
+
identifier: args[:identifier],
|
194
|
+
bussiness_category: args[:bussiness_category],
|
195
|
+
bussiness_name: args[:bussiness_name],
|
196
|
+
phone: args[:phone],
|
197
|
+
address_line_1: args[:address_line_1],
|
198
|
+
address_line_2: args[:address_line_2],
|
199
|
+
address_line_3: args[:address_line_3],
|
200
|
+
country_code: args[:country_code]
|
201
|
+
}
|
202
|
+
execute(endpoint, params, true, true, Khipu::INTEGRATOR_API_URL)
|
203
|
+
end
|
182
204
|
|
183
205
|
end
|
184
206
|
end
|
data/lib/khipu/khipu_service.rb
CHANGED
@@ -12,8 +12,8 @@ module Khipu
|
|
12
12
|
@secret = secret
|
13
13
|
end
|
14
14
|
|
15
|
-
def post(endpoint, params, json_response = true)
|
16
|
-
uri = URI(
|
15
|
+
def post(endpoint, params, json_response = true, base_url = Khipu::API_URL)
|
16
|
+
uri = URI(base_url + endpoint)
|
17
17
|
http = Net::HTTP.new(uri.host, uri.port)
|
18
18
|
http.use_ssl = true
|
19
19
|
if Khipu::DEBUG
|
@@ -58,7 +58,7 @@ module Khipu
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def hmac_sha256(secret, data)
|
61
|
-
OpenSSL::HMAC.digest(OpenSSL::Digest
|
61
|
+
OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), secret, data).unpack('H*').first
|
62
62
|
end
|
63
63
|
|
64
64
|
def concatenated(params)
|
@@ -73,4 +73,4 @@ module Khipu
|
|
73
73
|
end
|
74
74
|
|
75
75
|
end
|
76
|
-
end
|
76
|
+
end
|
data/lib/khipu/version.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Khipu::KhipuApiEndpoint do
|
4
|
+
let(:api) { Khipu.create_khipu_api(1234, '1234') }
|
5
|
+
|
6
|
+
describe ".create_receiver" do
|
7
|
+
let(:receiver_params) do
|
8
|
+
{
|
9
|
+
first_name: 'First Name',
|
10
|
+
last_name: 'Last Name',
|
11
|
+
email: 'email@domain.com',
|
12
|
+
notify_url: 'https://example.com/notify_url',
|
13
|
+
identifier: '12345678-5',
|
14
|
+
bussiness_category: 'Business Category',
|
15
|
+
bussiness_name: 'Business Name',
|
16
|
+
phone: '56221234567',
|
17
|
+
address_line_1: 'Address Line 1',
|
18
|
+
address_line_2: 'Address Line 2',
|
19
|
+
address_line_3: 'Address Line 3',
|
20
|
+
country_code: 'cl'
|
21
|
+
}
|
22
|
+
end
|
23
|
+
let(:return_params) do
|
24
|
+
{
|
25
|
+
receiver_id: 1369,
|
26
|
+
secret: "392d15ea0a92b83b1b54ddda165efd146ff81804"
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
subject { api.create_receiver(receiver_params) }
|
31
|
+
|
32
|
+
before do
|
33
|
+
stub_request(:post, "https://khipu.com/integratorApi/1.3/createReceiver")
|
34
|
+
.to_return(body: return_params.to_json)
|
35
|
+
end
|
36
|
+
|
37
|
+
it { should include('receiver_id') }
|
38
|
+
it { should include('secret') }
|
39
|
+
it { expect(subject['receiver_id']).to eq 1369 }
|
40
|
+
it { expect(subject['secret']).to eq "392d15ea0a92b83b1b54ddda165efd146ff81804" }
|
41
|
+
end
|
42
|
+
end
|
data/spec/khipu_service_spec.rb
CHANGED
@@ -1,17 +1,57 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe Khipu::KhipuService do
|
4
|
+
let(:service) { Khipu::KhipuService.new(1234, '1234') }
|
4
5
|
|
5
6
|
it 'should calculate hmac' do
|
6
|
-
service = Khipu::KhipuService.new(1234, '1234')
|
7
7
|
hex_hmac = service.hmac_sha256('abcd', '1234')
|
8
8
|
expect(hex_hmac).to eq('d219a3dd877f943be0ee65ef6a34129778d2fd0568ce2d9a8f37fea9d7fcaca3')
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'should concatenate parameters' do
|
12
|
-
service = Khipu::KhipuService.new(1234, '1234')
|
13
12
|
params = service.concatenated(a: 1, b: 'foo', c: nil)
|
14
13
|
expect(params).to eq('a=1&b=foo&c=')
|
15
14
|
end
|
16
15
|
|
17
|
-
|
16
|
+
describe '.post' do
|
17
|
+
it 'should return body if response is not json' do
|
18
|
+
stub_request(:post, 'https://khipu.com/api/1.3/endpoint').
|
19
|
+
to_return(status: 200, body: 'Hello World')
|
20
|
+
expect(service.post('endpoint', {}, false)).to eq('Hello World')
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should return json if response is json' do
|
24
|
+
stub_request(:post, 'https://khipu.com/api/1.3/endpoint').
|
25
|
+
to_return(status: 200, body: {text: 'Hello World'}.to_json)
|
26
|
+
expect(service.post('endpoint', {})).to eq({'text' => 'Hello World'})
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should raise error with invalid json response' do
|
30
|
+
stub_request(:post, 'https://khipu.com/api/1.3/endpoint').
|
31
|
+
to_return(status: 200, body: '{"text":}')
|
32
|
+
expect{service.post('endpoint', {})}.to raise_error /invalid response from endpoint/i
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should raise error with status code different from 200 and 400' do
|
36
|
+
stub_request(:post, 'https://khipu.com/api/1.3/endpoint').
|
37
|
+
to_return(status: 500)
|
38
|
+
expect{service.post('endpoint', {})}.to raise_error /invalid response code/i
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should raise error with status code 400 and invalid json' do
|
42
|
+
stub_request(:post, 'https://khipu.com/api/1.3/endpoint').
|
43
|
+
to_return(status: 400, body: '{"error":}')
|
44
|
+
expect{service.post('endpoint', {})}.to raise_error /invalid response from endpoint/i
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should raise Khipu::ApiError with status code 400' do
|
48
|
+
stub_request(:post, 'https://khipu.com/api/1.3/endpoint').
|
49
|
+
to_return(status: 400, body: {error: {type:'Type', message: 'Message'}}.to_json)
|
50
|
+
expect{service.post('endpoint', {})}.to raise_error do |error|
|
51
|
+
expect(error).to be_a(Khipu::ApiError)
|
52
|
+
expect(error.type).to eq('Type')
|
53
|
+
expect(error.message).to eq('Message')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
require "khipu"
|
1
|
+
require "khipu"
|
2
|
+
require "webmock/rspec"
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: khipu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.3
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Alex Lorca
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
+
date: 2014-12-22 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,29 +30,49 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- - '>='
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- - '>='
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: rspec
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- - '>='
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- - '>='
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: webmock
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
53
76
|
- !ruby/object:Gem::Version
|
54
77
|
version: '0'
|
55
78
|
description: A wrapper for khipu's web API
|
@@ -72,32 +95,35 @@ files:
|
|
72
95
|
- lib/khipu/khipu_api_endpoint.rb
|
73
96
|
- lib/khipu/khipu_service.rb
|
74
97
|
- lib/khipu/version.rb
|
98
|
+
- spec/khipu_api_endpoint_spec.rb
|
75
99
|
- spec/khipu_service_spec.rb
|
76
100
|
- spec/spec_helper.rb
|
77
101
|
homepage: https://github.com/khipu/lib-ruby
|
78
102
|
licenses:
|
79
103
|
- BSD
|
80
|
-
metadata: {}
|
81
104
|
post_install_message:
|
82
105
|
rdoc_options: []
|
83
106
|
require_paths:
|
84
107
|
- lib
|
85
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
86
110
|
requirements:
|
87
|
-
- - '>='
|
111
|
+
- - ! '>='
|
88
112
|
- !ruby/object:Gem::Version
|
89
113
|
version: '1.9'
|
90
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
none: false
|
91
116
|
requirements:
|
92
|
-
- - '>='
|
117
|
+
- - ! '>='
|
93
118
|
- !ruby/object:Gem::Version
|
94
119
|
version: '0'
|
95
120
|
requirements: []
|
96
121
|
rubyforge_project:
|
97
|
-
rubygems_version:
|
122
|
+
rubygems_version: 1.8.23
|
98
123
|
signing_key:
|
99
|
-
specification_version:
|
124
|
+
specification_version: 3
|
100
125
|
summary: A wrapper for khipu's web API
|
101
126
|
test_files:
|
127
|
+
- spec/khipu_api_endpoint_spec.rb
|
102
128
|
- spec/khipu_service_spec.rb
|
103
129
|
- spec/spec_helper.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: bbdd3f10aea423ebab6c1e4801ae8cd3dd0da2f1
|
4
|
-
data.tar.gz: ee8f254750eef7c4e1beb041adc251a872bbd0c2
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: d4da9dff3275f4eca53ff9d835d166b26672a0dc65b5f7f71b1b35c2cf50e0774b1ea905d3c494e57dd7d2733d40a3eb71207f16f71438f060f1c801ca8a3f21
|
7
|
-
data.tar.gz: e8aeca81768df4f5519c30f466349ba3cd25d4d97dd0b084754ab6bf372712eb4b58ebe08c55f2b1ff050f55db033a0a23e77f1143fbfdf50ae11a53d567c6da
|