paylane 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -1
- data/README.md +1 -1
- data/lib/paylane/api.rb +18 -11
- data/lib/paylane/payment.rb +2 -2
- data/lib/paylane/recurring_payment.rb +2 -2
- data/lib/paylane/response.rb +8 -14
- data/lib/paylane/version.rb +1 -1
- data/spec/helpers.rb +1 -1
- data/spec/paylane/api_spec.rb +39 -18
- metadata +19 -9
- checksums.yaml +0 -15
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -14,7 +14,7 @@ or
|
|
14
14
|
|
15
15
|
Start from create a client for API.
|
16
16
|
|
17
|
-
gateway = PayLane::Gateway.new('login, 'password')
|
17
|
+
gateway = PayLane::Gateway.new('login', 'password')
|
18
18
|
client = PayLane::API.new(gateway.connect)
|
19
19
|
|
20
20
|
Now all methods from [original API](http://devzone.paylane.com/wp-content/uploads/2012/05/paylane_direct_system.pdf) are available in the client object.
|
data/lib/paylane/api.rb
CHANGED
@@ -8,42 +8,49 @@ module PayLane
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def multi_sale(params)
|
11
|
-
request(:multiSale, params, 'multi_sale_params')
|
11
|
+
response = request(:multiSale, params, 'multi_sale_params')
|
12
|
+
Response.new(response[:multi_sale_response][:response])
|
12
13
|
end
|
13
14
|
|
14
15
|
def capture_sale(params)
|
15
|
-
request(:captureSale, params)
|
16
|
+
response = request(:captureSale, params)
|
17
|
+
Response.new(response[:capture_sale_response][:response])
|
16
18
|
end
|
17
19
|
|
18
20
|
def close_sale_authorization(params)
|
19
|
-
request(:closeSaleAuthorization, params)
|
21
|
+
response = request(:closeSaleAuthorization, params)
|
22
|
+
Response.new(response[:close_sale_authorization_response][:response])
|
20
23
|
end
|
21
24
|
|
22
25
|
def refund(params)
|
23
|
-
request(:refund, params)
|
26
|
+
response = request(:refund, params)
|
27
|
+
Response.new(response[:refund_response][:response])
|
24
28
|
end
|
25
29
|
|
26
30
|
def resale(params)
|
27
|
-
request(:resale, params)
|
31
|
+
response = request(:resale, params)
|
32
|
+
Response.new(response[:resale_response][:response])
|
28
33
|
end
|
29
34
|
|
30
35
|
def get_sale_result(params)
|
31
|
-
request(:getSaleResult, params)
|
36
|
+
response = request(:getSaleResult, params)
|
37
|
+
Response.new(response[:get_sale_result_response][:response])
|
32
38
|
end
|
33
39
|
|
34
40
|
def check_sales(params)
|
35
|
-
request(:checkSales, params, 'check_sales_params')
|
41
|
+
response = request(:checkSales, params, 'check_sales_params')
|
42
|
+
Response.new(response[:check_sales_response][:check_sales_response])
|
36
43
|
end
|
37
44
|
|
38
45
|
private
|
39
46
|
|
40
47
|
def request(method, params, params_prefix = nil)
|
41
48
|
begin
|
42
|
-
|
43
|
-
|
44
|
-
|
49
|
+
@client.request(method) do
|
50
|
+
soap.body = (params_prefix ? {params_prefix => params} : params)
|
51
|
+
end.to_hash
|
45
52
|
rescue Savon::Error => e
|
46
|
-
err =
|
53
|
+
err = ConnectionError.new(e)
|
47
54
|
PayLane.logger.error("[PayLane][Savon] #{err.to_hash}")
|
48
55
|
raise err
|
49
56
|
end
|
data/lib/paylane/payment.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module PayLane
|
2
2
|
class Payment
|
3
3
|
def initialize(options = {})
|
4
|
-
gateway =
|
5
|
-
@api =
|
4
|
+
gateway = Gateway.new(PayLane.login, PayLane.password)
|
5
|
+
@api = API.new(gateway.connect)
|
6
6
|
@options = options
|
7
7
|
end
|
8
8
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module PayLane
|
2
2
|
class RecurringPayment
|
3
3
|
def initialize(previous_sale_id, options = {})
|
4
|
-
gateway =
|
5
|
-
@api =
|
4
|
+
gateway = Gateway.new(PayLane.login, PayLane.password)
|
5
|
+
@api = API.new(gateway.connect)
|
6
6
|
@previous_sale_id = previous_sale_id
|
7
7
|
@options = options
|
8
8
|
end
|
data/lib/paylane/response.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
module PayLane
|
2
2
|
class Response < Hash
|
3
|
-
|
4
|
-
@response = response
|
5
|
-
end
|
3
|
+
attr_reader :body
|
6
4
|
|
7
|
-
def
|
8
|
-
@
|
5
|
+
def initialize(body)
|
6
|
+
@body = body
|
9
7
|
end
|
10
8
|
|
11
9
|
def has_ok?
|
12
|
-
@
|
10
|
+
@body.include?(:ok)
|
13
11
|
end
|
14
12
|
|
15
13
|
def has_error?
|
@@ -17,20 +15,16 @@ module PayLane
|
|
17
15
|
end
|
18
16
|
|
19
17
|
def has_data?
|
20
|
-
@
|
18
|
+
@body.include?(:data)
|
21
19
|
end
|
22
20
|
|
23
21
|
def error_description
|
24
|
-
@
|
22
|
+
@body[:error][:error_description] if has_error?
|
25
23
|
end
|
26
24
|
|
27
25
|
def attributes
|
28
|
-
hash = (@
|
29
|
-
has_data? ? hash.merge(@
|
30
|
-
end
|
31
|
-
|
32
|
-
def to_s
|
33
|
-
@response.to_s
|
26
|
+
hash = (@body[:ok] || @body[:error])
|
27
|
+
has_data? ? hash.merge(@body[:data]) : hash
|
34
28
|
end
|
35
29
|
end
|
36
30
|
end
|
data/lib/paylane/version.rb
CHANGED
data/spec/helpers.rb
CHANGED
data/spec/paylane/api_spec.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe PayLane::API do
|
4
|
-
let(:connection)
|
4
|
+
let(:connection) do
|
5
5
|
gateway = PayLane::Gateway.new(PublicTestAccount::LOGIN, PublicTestAccount::PASSWORD)
|
6
6
|
gateway.connect
|
7
|
-
|
7
|
+
end
|
8
8
|
let(:api) { PayLane::API.new(connection) }
|
9
9
|
|
10
10
|
describe '#multi_sale' do
|
@@ -31,7 +31,8 @@ describe PayLane::API do
|
|
31
31
|
|
32
32
|
it "returns id_sale on successful card charge" do
|
33
33
|
mock_api_method(connection, :multiSale) do
|
34
|
-
{multi_sale_response: {response: {ok: {id_sale: "2772323"},
|
34
|
+
{multi_sale_response: {response: {ok: {id_sale: "2772323"},
|
35
|
+
data: {fraud_score: "8.76"}}}}
|
35
36
|
end
|
36
37
|
|
37
38
|
params.merge({
|
@@ -44,12 +45,13 @@ describe PayLane::API do
|
|
44
45
|
'name_on_card' => 'John Smith'
|
45
46
|
}}})
|
46
47
|
|
47
|
-
api.multi_sale(params).should include({ok: {id_sale: "2772323"}})
|
48
|
+
api.multi_sale(params).body.should include({ok: {id_sale: "2772323"}})
|
48
49
|
end
|
49
50
|
|
50
51
|
it "returns id_sale on successful direct debit" do
|
51
52
|
mock_api_method(connection, :multiSale) do
|
52
|
-
{multi_sale_response: {response: {ok: {id_sale: "2772323"},
|
53
|
+
{multi_sale_response: {response: {ok: {id_sale: "2772323"},
|
54
|
+
data: {fraud_score: "8.76"}}}}
|
53
55
|
end
|
54
56
|
|
55
57
|
params.merge({
|
@@ -61,12 +63,13 @@ describe PayLane::API do
|
|
61
63
|
'account_holder' => 'John Smith'
|
62
64
|
}}})
|
63
65
|
|
64
|
-
api.multi_sale(params).should include({ok: {id_sale: "2772323"}})
|
66
|
+
api.multi_sale(params).body.should include({ok: {id_sale: "2772323"}})
|
65
67
|
end
|
66
68
|
|
67
69
|
it "returns id_sale_authorization for sales marked by 'capture_later'" do
|
68
70
|
mock_api_method(connection, :multiSale) do
|
69
|
-
{multi_sale_response: {response: {ok: {id_sale_authorization: "2772323"},
|
71
|
+
{multi_sale_response: {response: {ok: {id_sale_authorization: "2772323"},
|
72
|
+
data: {fraud_score: "8.76"}}}}
|
70
73
|
end
|
71
74
|
|
72
75
|
params.merge({
|
@@ -82,7 +85,16 @@ describe PayLane::API do
|
|
82
85
|
'capture_later' => true
|
83
86
|
})
|
84
87
|
|
85
|
-
api.multi_sale(params).should include({ok: {id_sale_authorization: "2772323"}})
|
88
|
+
api.multi_sale(params).body.should include({ok: {id_sale_authorization: "2772323"}})
|
89
|
+
end
|
90
|
+
|
91
|
+
it "returns instance of PayLane::Response class" do
|
92
|
+
mock_api_method(connection, :multiSale) do
|
93
|
+
{multi_sale_response: {response: {ok: {id_sale: "2772323"},
|
94
|
+
data: {fraud_score: "8.76"}}}}
|
95
|
+
end
|
96
|
+
|
97
|
+
api.multi_sale(params).class.should == PayLane::Response
|
86
98
|
end
|
87
99
|
end
|
88
100
|
|
@@ -97,7 +109,7 @@ describe PayLane::API do
|
|
97
109
|
'amount' => 9.99
|
98
110
|
}
|
99
111
|
|
100
|
-
api.capture_sale(params).should include({ok: {id_sale: "2772323"}})
|
112
|
+
api.capture_sale(params).body.should include({ok: {id_sale: "2772323"}})
|
101
113
|
end
|
102
114
|
end
|
103
115
|
|
@@ -109,7 +121,7 @@ describe PayLane::API do
|
|
109
121
|
|
110
122
|
params = {'id_sale_authorization' => '119225'}
|
111
123
|
|
112
|
-
api.close_sale_authorization(params).should include({ok: {is_closed: true}})
|
124
|
+
api.close_sale_authorization(params).body.should include({ok: {is_closed: true}})
|
113
125
|
end
|
114
126
|
end
|
115
127
|
|
@@ -125,7 +137,7 @@ describe PayLane::API do
|
|
125
137
|
'reason' => 'test_refund_method'
|
126
138
|
}
|
127
139
|
|
128
|
-
api.refund(params).should include({ok: {id_refund: "213871"}})
|
140
|
+
api.refund(params).body.should include({ok: {id_refund: "213871"}})
|
129
141
|
end
|
130
142
|
end
|
131
143
|
|
@@ -142,7 +154,7 @@ describe PayLane::API do
|
|
142
154
|
'description' => 'paylane_api_test_resale'
|
143
155
|
}
|
144
156
|
|
145
|
-
api.resale(params).should include({ok: {id_sale: "2773239"}})
|
157
|
+
api.resale(params).body.should include({ok: {id_sale: "2773239"}})
|
146
158
|
end
|
147
159
|
end
|
148
160
|
|
@@ -157,7 +169,7 @@ describe PayLane::API do
|
|
157
169
|
'description' => 'paylane_api_test'
|
158
170
|
}
|
159
171
|
|
160
|
-
api.get_sale_result(params).should include({ok: {id_sale: "2772323"}})
|
172
|
+
api.get_sale_result(params).body.should include({ok: {id_sale: "2772323"}})
|
161
173
|
end
|
162
174
|
|
163
175
|
it "returns id_sale_error if find processed sale with error" do
|
@@ -170,21 +182,30 @@ describe PayLane::API do
|
|
170
182
|
'description' => 'paylane_api_test'
|
171
183
|
}
|
172
184
|
|
173
|
-
api.get_sale_result(params).should include({ok: {id_sale_error: "831072"}})
|
185
|
+
api.get_sale_result(params).body.should include({ok: {id_sale_error: "831072"}})
|
174
186
|
end
|
175
187
|
end
|
176
188
|
|
177
189
|
describe '#check_sales' do
|
178
190
|
it 'returns details for requested sale ids' do
|
179
191
|
mock_api_method(connection, :checkSales) do
|
180
|
-
{check_sales_response: {check_sales_response: {ok: {sale_status: [
|
192
|
+
{check_sales_response: {check_sales_response: {ok: {sale_status: [
|
193
|
+
{id_sale: "1", status: "NOT_FOUND", is_refund: false,
|
194
|
+
is_chargeback: false, is_reversal: false},
|
195
|
+
{id_sale: "2772323", status: "PERFORMED", is_refund: false,
|
196
|
+
is_chargeback: false, is_reversal: false}
|
197
|
+
]}}}}
|
181
198
|
end
|
182
199
|
|
183
200
|
params = {'id_sale_list' => [2772323, 1]}
|
184
201
|
|
185
|
-
sales = api.check_sales(params)[:ok][:sale_status]
|
186
|
-
sales.should include({id_sale: "1", status: "NOT_FOUND",
|
187
|
-
|
202
|
+
sales = api.check_sales(params).body[:ok][:sale_status]
|
203
|
+
sales.should include({id_sale: "1", status: "NOT_FOUND",
|
204
|
+
is_refund: false, is_chargeback: false,
|
205
|
+
is_reversal: false})
|
206
|
+
sales.should include({id_sale: "2772323", status: "PERFORMED",
|
207
|
+
is_refund: false, is_chargeback: false,
|
208
|
+
is_reversal: false})
|
188
209
|
end
|
189
210
|
end
|
190
211
|
end
|
metadata
CHANGED
@@ -1,67 +1,76 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paylane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease:
|
5
|
+
version: 1.1.0
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Bartlomiej Kozal
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-
|
12
|
+
date: 2013-04-26 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: savon
|
16
|
+
type: :runtime
|
15
17
|
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
16
19
|
requirements:
|
17
20
|
- - '='
|
18
21
|
- !ruby/object:Gem::Version
|
19
22
|
version: 1.2.0
|
20
|
-
type: :runtime
|
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
|
26
29
|
version: 1.2.0
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
32
|
+
type: :development
|
29
33
|
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
30
35
|
requirements:
|
31
36
|
- - ! '>='
|
32
37
|
- !ruby/object:Gem::Version
|
33
38
|
version: '0'
|
34
|
-
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
|
48
|
+
type: :development
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
44
51
|
requirements:
|
45
52
|
- - ! '>='
|
46
53
|
- !ruby/object:Gem::Version
|
47
54
|
version: '0'
|
48
|
-
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: fakeweb
|
64
|
+
type: :development
|
57
65
|
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
58
67
|
requirements:
|
59
68
|
- - ! '>='
|
60
69
|
- !ruby/object:Gem::Version
|
61
70
|
version: '0'
|
62
|
-
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
75
|
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
@@ -99,26 +108,27 @@ files:
|
|
99
108
|
- spec/spec_helper.rb
|
100
109
|
homepage: ''
|
101
110
|
licenses: []
|
102
|
-
metadata: {}
|
103
111
|
post_install_message:
|
104
112
|
rdoc_options: []
|
105
113
|
require_paths:
|
106
114
|
- lib
|
107
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
108
117
|
requirements:
|
109
118
|
- - ! '>='
|
110
119
|
- !ruby/object:Gem::Version
|
111
120
|
version: '0'
|
112
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
113
123
|
requirements:
|
114
124
|
- - ! '>='
|
115
125
|
- !ruby/object:Gem::Version
|
116
126
|
version: '0'
|
117
127
|
requirements: []
|
118
128
|
rubyforge_project:
|
119
|
-
rubygems_version:
|
129
|
+
rubygems_version: 1.8.23
|
120
130
|
signing_key:
|
121
|
-
specification_version:
|
131
|
+
specification_version: 3
|
122
132
|
summary: Ruby client for PayLane service.
|
123
133
|
test_files:
|
124
134
|
- spec/helpers.rb
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
ZDQ0NWIxMmQwZmRjMDg5ZjE5ZjhkNzQ0MWFjOWI5OWNjZmI1ZTQ2MA==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MGU2MTFiMzJhOGVhMzhiZmMzZmQ2NWI4ODA2OTE3OTljZjhhYTA2ZA==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
NzY5MTRkNTgzMDBlZTAwNWY0N2YyZWYxNjNhMTEzODFmN2Y2YzgxNmMxZmIz
|
10
|
-
MDBlNTQwODM0Yjg2ZjRlYWU3MGQ5MWVkZGRkMWJiNTU1YTU1Nzk0MTJjYTBk
|
11
|
-
ODgxZmJkNDJmM2FlMzQ0MzA0NWFlYzY0NDIyNGJmMTQ5ZmYxYzk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZGY2MWNjMDkyZjBiMjgwZjI2MjkzZDQyYmE0MGJkNGIzMzI4ZjM4M2QwOWEz
|
14
|
-
ZGUyODdkYjI4YzM5OTJkNzE4MjZkMWZjMmMyNDExNzJjNmMyZTkyODIyYTg2
|
15
|
-
ZTYzODVkNWFjMDNhZWM2NTNjNGE5NjNjNjEzZTVlMmVkZGUyOGE=
|