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 CHANGED
@@ -16,3 +16,4 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  .idea/*
19
+ .ruby-version
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
+ ```
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "rspec"
26
+ spec.add_development_dependency "webmock"
26
27
  end
@@ -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] = 'htps://s3.amazonaws.com/static.khipu.com/buttons/' + v; h }
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
@@ -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(Khipu::API_URL + endpoint)
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::Digest.new('sha256'), secret, data).unpack('H*').first
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
@@ -1,3 +1,3 @@
1
1
  module Khipu
2
- VERSION = "1.3.0"
2
+ VERSION = "1.3.3"
3
3
  end
@@ -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
@@ -1,17 +1,57 @@
1
1
  require "spec_helper"
2
2
 
3
- describe 'KhipuService' do
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
- end
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
@@ -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.0
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-04-29 00:00:00.000000000 Z
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: 2.0.7
122
+ rubygems_version: 1.8.23
98
123
  signing_key:
99
- specification_version: 4
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