paylane 1.0.2 → 1.1.0
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/.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=
|