wirecard_checkout_page 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +2 -1
- data/Gemfile +2 -0
- data/README.md +4 -0
- data/Rakefile +1 -2
- data/VERSION +1 -1
- data/lib/wirecard_checkout_page.rb +6 -2
- data/lib/wirecard_checkout_page/errors.rb +2 -0
- data/lib/wirecard_checkout_page/fingerprint.rb +0 -0
- data/lib/wirecard_checkout_page/gateway.rb +26 -12
- data/lib/wirecard_checkout_page/init_request.rb +71 -0
- data/lib/wirecard_checkout_page/init_response.rb +12 -2
- data/lib/wirecard_checkout_page/request.rb +85 -0
- data/lib/wirecard_checkout_page/response_checksum.rb +15 -45
- data/lib/wirecard_checkout_page/toolkit/recur_payment.rb +66 -0
- data/lib/wirecard_checkout_page/toolkit/request.rb +55 -0
- data/lib/wirecard_checkout_page/toolkit/response.rb +50 -0
- data/lib/wirecard_checkout_page/version.rb +1 -1
- data/spec/spec_helper.rb +12 -8
- data/spec/wirecard_checkout_page/gateway_spec.rb +86 -28
- data/spec/wirecard_checkout_page/init_request_spec.rb +62 -0
- data/spec/wirecard_checkout_page/request_spec.rb +88 -0
- data/spec/wirecard_checkout_page/response_checksum_spec.rb +70 -116
- data/spec/wirecard_checkout_page/toolkit/recur_payment_spec.rb +125 -0
- data/spec/wirecard_checkout_page/toolkit/request_spec.rb +79 -0
- data/spec/wirecard_checkout_page/toolkit/response_spec.rb +36 -0
- data/wirecard_checkout_page.gemspec +9 -12
- metadata +40 -45
- data/lib/wirecard_checkout_page/request_checksum.rb +0 -88
- data/lib/wirecard_checkout_page/value_handling.rb +0 -19
- data/lib/wirecard_checkout_page/value_missing.rb +0 -1
- data/spec/wirecard_checkout_page/request_checksum_spec.rb +0 -96
- data/spec/wirecard_checkout_page/response_spec.rb +0 -42
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'wirecard_checkout_page/value_handling'
|
2
|
-
|
3
|
-
module WirecardCheckoutPage
|
4
|
-
class RequestChecksum
|
5
|
-
include WirecardCheckoutPage::Utils
|
6
|
-
include WirecardCheckoutPage::ValueHandling
|
7
|
-
|
8
|
-
FINGERPRINT_KEYS = %w[
|
9
|
-
secret
|
10
|
-
customerId
|
11
|
-
amount
|
12
|
-
paymentType
|
13
|
-
currency
|
14
|
-
language
|
15
|
-
orderDescription
|
16
|
-
serviceURL
|
17
|
-
successURL
|
18
|
-
cancelURL
|
19
|
-
failureURL
|
20
|
-
confirmURL
|
21
|
-
orderReference
|
22
|
-
requestFingerprintOrder
|
23
|
-
].freeze
|
24
|
-
|
25
|
-
def initialize(values = {})
|
26
|
-
@values = stringify_keys(values)
|
27
|
-
@fingerprint_keys = @values.delete('fingerprint_keys') || FINGERPRINT_KEYS
|
28
|
-
@secret = @values.delete('secret') or
|
29
|
-
raise WirecardCheckoutPage::ValueMissing, 'value "secret" is missing'
|
30
|
-
@values = add_some_defaults @values
|
31
|
-
@values.freeze
|
32
|
-
@fingerprint_keys = fingerprint_keys
|
33
|
-
@secret = @secret
|
34
|
-
reset_missing_keys
|
35
|
-
end
|
36
|
-
|
37
|
-
attr_reader :fingerprint_keys
|
38
|
-
|
39
|
-
attr_reader :values
|
40
|
-
|
41
|
-
def request_parameters
|
42
|
-
reset_missing_keys
|
43
|
-
parameters = @values.dup
|
44
|
-
parameters['requestFingerprintOrder'] = requestFingerprintOrder
|
45
|
-
parameters['requestFingerprint'] = fingerprint
|
46
|
-
if missing_keys?
|
47
|
-
raise WirecardCheckoutPage::ValueMissing,
|
48
|
-
"values #{missing_keys * ', ' } are missing"
|
49
|
-
end
|
50
|
-
parameters
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
def fingerprint
|
56
|
-
values = @values.dup
|
57
|
-
values.update(
|
58
|
-
'requestFingerprintOrder' => requestFingerprintOrder,
|
59
|
-
'secret' => @secret,
|
60
|
-
)
|
61
|
-
Digest::MD5.hexdigest requestFingerprintSeed(values)
|
62
|
-
end
|
63
|
-
|
64
|
-
def requestFingerprintSeed(values)
|
65
|
-
seed = fingerprint_keys.map { |k|
|
66
|
-
values.fetch(k) do
|
67
|
-
add_missing_key k
|
68
|
-
next
|
69
|
-
end
|
70
|
-
} * ''
|
71
|
-
end
|
72
|
-
|
73
|
-
def requestFingerprintOrder
|
74
|
-
@requestFingerprintOrder ||= fingerprint_keys.join(',').freeze
|
75
|
-
end
|
76
|
-
|
77
|
-
def add_some_defaults(values)
|
78
|
-
default_values = {
|
79
|
-
'paymentType' => 'SELECT',
|
80
|
-
'currency' => 'EUR',
|
81
|
-
'language' => 'de',
|
82
|
-
}
|
83
|
-
values.update(default_values) do |key,old,new|
|
84
|
-
old.nil? ? new : old
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module WirecardCheckoutPage::ValueHandling
|
2
|
-
def missing_keys
|
3
|
-
@missing_keys ||= []
|
4
|
-
end
|
5
|
-
|
6
|
-
def missing_keys?
|
7
|
-
unless missing_keys.empty?
|
8
|
-
missing_keys
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def add_missing_key(key)
|
13
|
-
missing_keys << key
|
14
|
-
end
|
15
|
-
|
16
|
-
def reset_missing_keys
|
17
|
-
missing_keys.clear
|
18
|
-
end
|
19
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
require 'wirecard_checkout_page/errors'
|
@@ -1,96 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WirecardCheckoutPage::RequestChecksum do
|
4
|
-
let :secret do
|
5
|
-
'SOMESECRET'
|
6
|
-
end
|
7
|
-
|
8
|
-
let :customer_id do
|
9
|
-
'SOMECUSTOMERID'
|
10
|
-
end
|
11
|
-
|
12
|
-
let :shop_id do
|
13
|
-
'someshopid'
|
14
|
-
end
|
15
|
-
|
16
|
-
describe '.new' do
|
17
|
-
it "raises a WirecardCheckoutPage::ValueMissing if no values were passed" do
|
18
|
-
expect {
|
19
|
-
WirecardCheckoutPage::RequestChecksum.new
|
20
|
-
}.to raise_error WirecardCheckoutPage::ValueMissing
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '#request_parameters' do
|
25
|
-
it "raises a WirecardCheckoutPage::ValueMissing if not all required values were passed" do
|
26
|
-
expect {
|
27
|
-
WirecardCheckoutPage::RequestChecksum.new(
|
28
|
-
secret: 'foo',
|
29
|
-
fingerprint_keys: %w[foo bar],
|
30
|
-
foo: 'foo'
|
31
|
-
).request_parameters
|
32
|
-
}.to raise_error WirecardCheckoutPage::ValueMissing
|
33
|
-
end
|
34
|
-
|
35
|
-
it "doesn't an error if all required values were passed" do
|
36
|
-
expect {
|
37
|
-
WirecardCheckoutPage::RequestChecksum.new(
|
38
|
-
secret: 'foo',
|
39
|
-
fingerprint_keys: %w[foo bar],
|
40
|
-
foo: 'foo',
|
41
|
-
bar: 'bar',
|
42
|
-
).request_parameters
|
43
|
-
}.not_to raise_error
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'uses its default parameters and unless they were passed' do
|
47
|
-
parameters = WirecardCheckoutPage::RequestChecksum.new(
|
48
|
-
secret: 'foo',
|
49
|
-
fingerprint_keys: [],
|
50
|
-
currency: 'USD'
|
51
|
-
).request_parameters
|
52
|
-
expect(parameters).to eq(
|
53
|
-
"currency" => "USD",
|
54
|
-
"language" => "de",
|
55
|
-
"paymentType" => "SELECT",
|
56
|
-
"requestFingerprint" => "d41d8cd98f00b204e9800998ecf8427e",
|
57
|
-
"requestFingerprintOrder" => "",
|
58
|
-
)
|
59
|
-
end
|
60
|
-
|
61
|
-
it "computes a checksum" do
|
62
|
-
checksum = WirecardCheckoutPage::RequestChecksum.new(
|
63
|
-
secret: secret,
|
64
|
-
fingerprint_keys: WirecardCheckoutPage::RequestChecksum::FINGERPRINT_KEYS + %w[shopId],
|
65
|
-
customerId: customer_id,
|
66
|
-
shopId: shop_id,
|
67
|
-
amount: '6.66',
|
68
|
-
orderDescription: 'Kauf einer Seele (billig)',
|
69
|
-
successURL: 'http://example.com/success',
|
70
|
-
cancelURL: 'http://example.com/cancel',
|
71
|
-
failureURL: 'http://example.com/failure',
|
72
|
-
serviceURL: 'http://example.com',
|
73
|
-
confirmURL: 'http://example.com/confirm',
|
74
|
-
orderReference: '475ae67f248578b92a701',
|
75
|
-
)
|
76
|
-
expect(checksum.__send__(:fingerprint)).to eq "10feda94a5db9f3e2fc7439d3c4c228b"
|
77
|
-
expect(checksum.request_parameters).to eq(
|
78
|
-
"customerId" => customer_id,
|
79
|
-
"shopId" => shop_id,
|
80
|
-
"paymentType" => "SELECT",
|
81
|
-
"currency" => "EUR",
|
82
|
-
"language" => "de",
|
83
|
-
"amount" => "6.66",
|
84
|
-
"orderDescription" => "Kauf einer Seele (billig)",
|
85
|
-
"successURL" => "http://example.com/success",
|
86
|
-
"cancelURL" => "http://example.com/cancel",
|
87
|
-
"failureURL" => "http://example.com/failure",
|
88
|
-
"serviceURL" => "http://example.com",
|
89
|
-
"confirmURL" => "http://example.com/confirm",
|
90
|
-
"orderReference" => "475ae67f248578b92a701",
|
91
|
-
"requestFingerprintOrder" => checksum.fingerprint_keys * ',',
|
92
|
-
"requestFingerprint" => "10feda94a5db9f3e2fc7439d3c4c228b"
|
93
|
-
)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WirecardCheckoutPage::InitResponse do
|
4
|
-
|
5
|
-
let(:success_response) do
|
6
|
-
http_response = double(headers: { 'Location' => 'payment-url' }, body: '')
|
7
|
-
WirecardCheckoutPage::InitResponse.new(http_response)
|
8
|
-
end
|
9
|
-
|
10
|
-
let(:failure_response) do
|
11
|
-
http_response = double(headers: {}, body: 'Error message')
|
12
|
-
WirecardCheckoutPage::InitResponse.new(http_response)
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '#params' do
|
16
|
-
it 'extracts the payment_url from the headers' do
|
17
|
-
expect(success_response.params).to eq({ payment_url: 'payment-url' })
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'returns nil as payment_url on error' do
|
21
|
-
expect(failure_response.params).to eq({ payment_url: nil })
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '#success?' do
|
26
|
-
it 'returns true if payment_url is present' do
|
27
|
-
expect(success_response).to be_success
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'returns false if payment_url is blank' do
|
31
|
-
expect(failure_response).not_to be_success
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe '#message' do
|
36
|
-
it 'returns the response body' do
|
37
|
-
expect(success_response.message).to eq ''
|
38
|
-
expect(failure_response.message).to eq 'Error message'
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|