wirecard_checkout_page 0.0.1 → 0.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.
- 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
|