wirecard 0.0.1 → 0.0.2
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 +2 -1
- data/README.md +2 -0
- data/README.rdoc +3 -0
- data/circle.yml +7 -0
- data/lib/wirecard.rb +22 -0
- data/lib/wirecard/backend/approve_reversal.rb +9 -0
- data/lib/wirecard/backend/base.rb +20 -0
- data/lib/wirecard/backend/deposit.rb +9 -0
- data/lib/wirecard/backend/deposit_reversal.rb +9 -0
- data/lib/wirecard/backend/generate_order_number.rb +12 -0
- data/lib/wirecard/backend/get_order_details.rb +9 -0
- data/lib/wirecard/backend/recur_payment.rb +9 -0
- data/lib/wirecard/backend/refund.rb +9 -0
- data/lib/wirecard/backend/refund_reversal.rb +9 -0
- data/lib/wirecard/backend/transfer_fund/base.rb +15 -0
- data/lib/wirecard/backend/transfer_fund/existing_order.rb +11 -0
- data/lib/wirecard/base.rb +26 -11
- data/lib/wirecard/callback.rb +3 -8
- data/lib/wirecard/configuration.rb +4 -0
- data/lib/wirecard/data_storage/init.rb +1 -3
- data/lib/wirecard/fingerprint/base.rb +13 -2
- data/lib/wirecard/payment_process/init.rb +11 -0
- data/lib/wirecard/request.rb +2 -6
- data/lib/wirecard/response.rb +0 -4
- data/lib/wirecard/version.rb +1 -1
- data/spec/spec_helper.rb +10 -1
- data/spec/unit_tests/backend/approve_reversal_spec.rb +54 -0
- data/spec/unit_tests/backend/deposit_reversal_spec.rb +91 -0
- data/spec/unit_tests/backend/deposit_spec.rb +79 -0
- data/spec/unit_tests/backend/generate_order_number_spec.rb +37 -0
- data/spec/unit_tests/backend/get_order_details_spec.rb +233 -0
- data/spec/unit_tests/backend/recur_payment_spec.rb +86 -0
- data/spec/unit_tests/backend/refund_reversal.rb +60 -0
- data/spec/unit_tests/backend/refund_spec.rb +66 -0
- data/spec/unit_tests/backend/transfer_fund/existing_order_spec.rb +88 -0
- data/spec/unit_tests/callback_spec.rb +101 -0
- data/spec/unit_tests/data_storage/init_spec.rb +39 -25
- data/spec/unit_tests/data_storage/read_spec.rb +47 -0
- data/spec/unit_tests/fingerprint/sha_512_spec.rb +69 -0
- data/spec/unit_tests/payment_process/init_spec.rb +94 -0
- data/spec/unit_tests/support/shared_context.rb +235 -0
- data/spec/unit_tests/support/shared_examples.rb +7 -33
- data/spec/unit_tests/support/webserver.rb +29 -0
- data/spec/wirecard_spec.rb +133 -133
- data/wirecard.gemspec +5 -0
- metadata +115 -4
- data/spec/unit_tests/base_shared.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c845b18d84b8d4a271d8a7b2a68db4dfc59cea6
|
4
|
+
data.tar.gz: b0d00c34a64556a0b9c512d63f485156a29fae8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3b7c5ba7ec269ce9a18f7b86686b71504458e76008a3a4cdbc736162b50a297a910f301fc0b1b269371df3c66a34a75c0aba4a917c555a6949be1c1f0fa412b
|
7
|
+
data.tar.gz: 4f6e36a4082cb7232197752aeefa3515850899530f8c362dbae7775ed177313d9596be7ca958487639162975e863a61181512f5175dee2b5bebff204252701fc
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Wirecard
|
2
2
|
|
3
|
+
[](https://circleci.com/gh/HitFox/wirecard)
|
3
4
|
[](https://codeclimate.com/github/DominicBreuker/wirecard)
|
5
|
+
[](https://codeclimate.com/github/DominicBreuker/wirecard/coverage)
|
4
6
|
|
5
7
|
Implements wirecard API
|
6
8
|
|
data/README.rdoc
ADDED
data/circle.yml
ADDED
data/lib/wirecard.rb
CHANGED
@@ -4,6 +4,17 @@ require 'wirecard/configuration'
|
|
4
4
|
require 'wirecard/request'
|
5
5
|
require 'wirecard/response'
|
6
6
|
require 'wirecard/callback'
|
7
|
+
require 'wirecard/backend/base'
|
8
|
+
require 'wirecard/backend/approve_reversal'
|
9
|
+
require 'wirecard/backend/deposit_reversal'
|
10
|
+
require 'wirecard/backend/deposit'
|
11
|
+
require 'wirecard/backend/generate_order_number'
|
12
|
+
require 'wirecard/backend/get_order_details'
|
13
|
+
require 'wirecard/backend/recur_payment'
|
14
|
+
require 'wirecard/backend/refund'
|
15
|
+
require 'wirecard/backend/refund_reversal'
|
16
|
+
require 'wirecard/backend/transfer_fund/base'
|
17
|
+
require 'wirecard/backend/transfer_fund/existing_order'
|
7
18
|
require 'wirecard/data_storage/base'
|
8
19
|
require 'wirecard/data_storage/init'
|
9
20
|
require 'wirecard/data_storage/read'
|
@@ -16,6 +27,17 @@ module Wirecard
|
|
16
27
|
autoload :Request, 'wirecard/request'
|
17
28
|
autoload :Response, 'wirecard/response'
|
18
29
|
autoload :Callback, 'wirecard/callback'
|
30
|
+
autoload :Base, 'wirecard/backend/base'
|
31
|
+
autoload :ApproveReversal, 'wirecard/backend/approve_reversal'
|
32
|
+
autoload :DepositReversal, 'wirecard/backend/deposit_reversal'
|
33
|
+
autoload :Deposit, 'wirecard/backend/deposit'
|
34
|
+
autoload :GenerateOrderNumber, 'wirecard/backend/generate_order_number'
|
35
|
+
autoload :GetOrderDetails, 'wirecard/backend/get_order_details'
|
36
|
+
autoload :RecurPayment, 'wirecard/backend/recur_payment'
|
37
|
+
autoload :Refund, 'wirecard/backend/refund'
|
38
|
+
autoload :RefundReversal, 'wirecard/backend/refund_reversal'
|
39
|
+
autoload :Base, 'wirecard/backend/transfer_fund/base'
|
40
|
+
autoload :ExistingOrder, 'wirecard/backend/transfer_fund/existing_order'
|
19
41
|
autoload :Base, 'wirecard/data_storage/base'
|
20
42
|
autoload :Init, 'wirecard/data_storage/init'
|
21
43
|
autoload :Read, 'wirecard/data_storage/read'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Wirecard
|
2
|
+
module Backend
|
3
|
+
class Base < Wirecard::Base
|
4
|
+
def url
|
5
|
+
@url ||= [Wirecard.config.endpoint, :backend, self.class.to_s.split('::').last.downcase].join('/')
|
6
|
+
end
|
7
|
+
|
8
|
+
def implicit_fingerprint_order
|
9
|
+
@implicit_fingerprint_order ||= [:customer_id, :shop_id, :password, :secret, :language]
|
10
|
+
end
|
11
|
+
|
12
|
+
def defaults
|
13
|
+
super.merge(
|
14
|
+
password: Wirecard.config.password,
|
15
|
+
language: Wirecard.config.language
|
16
|
+
)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module Wirecard
|
2
|
+
module Backend
|
3
|
+
class RecurPayment < Base
|
4
|
+
def implicit_fingerprint_order
|
5
|
+
@implicit_fingerprint_order ||= super + [:order_number, :source_order_number, :auto_deposit, :order_description, :amount, :currency, :order_reference, :customer_statement]
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Wirecard
|
2
|
+
module Backend
|
3
|
+
module TransferFund
|
4
|
+
class Base < Wirecard::Backend::Base
|
5
|
+
def url
|
6
|
+
@url ||= [Wirecard.config.endpoint, :backend, :transferfund].join('/')
|
7
|
+
end
|
8
|
+
|
9
|
+
def implicit_fingerprint_order
|
10
|
+
@implicit_fingerprint_order ||= super + [:order_number, :credit_number, :order_description, :amount, :currency, :order_reference, :customer_statement, :fund_transfer_type]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/wirecard/base.rb
CHANGED
@@ -3,6 +3,8 @@ module Wirecard
|
|
3
3
|
|
4
4
|
attr_reader :request
|
5
5
|
|
6
|
+
attr_accessor :response, :params
|
7
|
+
|
6
8
|
def defaults
|
7
9
|
@defaults ||= {
|
8
10
|
customer_id: Wirecard.config.customer_id,
|
@@ -18,31 +20,44 @@ module Wirecard
|
|
18
20
|
)
|
19
21
|
end
|
20
22
|
|
21
|
-
### ------------------------------------------ ###
|
22
|
-
### -------------- API request --------------- ###
|
23
|
-
### ------------------------------------------ ###
|
24
|
-
|
25
23
|
def post
|
26
24
|
http = Net::HTTP.new(uri.host, uri.port)
|
27
25
|
http.use_ssl = true
|
28
26
|
|
29
|
-
Wirecard::Response.new(http.request(request.to_post)).to_hash
|
27
|
+
self.response = Wirecard::Response.new(http.request(request.to_post)).to_hash
|
28
|
+
self
|
30
29
|
end
|
31
30
|
|
32
|
-
|
33
|
-
### ---------------- Helpers ----------------- ###
|
34
|
-
### ------------------------------------------ ###
|
31
|
+
alias_method :save, :post
|
35
32
|
|
36
|
-
|
33
|
+
def method_missing(method_name, *args, &block)
|
34
|
+
if response && (response.key?(method_name.to_sym) || response.key?(method_name))
|
35
|
+
response[method_name.to_sym] || response[method_name]
|
36
|
+
else
|
37
|
+
super
|
38
|
+
end
|
39
|
+
end
|
37
40
|
|
38
|
-
def
|
39
|
-
|
41
|
+
def respond_to_missing?(method_name, include_private = false)
|
42
|
+
response && (response.key?(method_name.to_sym) || response.key?(method_name)) || super
|
40
43
|
end
|
41
44
|
|
42
45
|
def implicit_fingerprint_order
|
43
46
|
nil
|
44
47
|
end
|
45
48
|
|
49
|
+
def self.create(attributes = {})
|
50
|
+
object = new(attributes)
|
51
|
+
object.save
|
52
|
+
object
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def uri
|
58
|
+
@uri ||= URI.parse(url)
|
59
|
+
end
|
60
|
+
|
46
61
|
def url
|
47
62
|
raise NotImplementedError, 'A URL must be given to make a call'
|
48
63
|
end
|
data/lib/wirecard/callback.rb
CHANGED
@@ -5,11 +5,6 @@ module Wirecard
|
|
5
5
|
|
6
6
|
def initialize(params)
|
7
7
|
@params = params
|
8
|
-
|
9
|
-
raise ArgumentError, 'fingerprint order and fingerprint must both be set' unless response_fingerprint && response_fingerprint_order
|
10
|
-
raise ArgumentError, 'parameter hash contain parameters not covered in the fingerprint: ' + unfingerprinted_params.join(',') if unfingerprinted_params.size > 0
|
11
|
-
|
12
|
-
truncate_params!
|
13
8
|
end
|
14
9
|
|
15
10
|
def to_hash
|
@@ -17,7 +12,7 @@ module Wirecard
|
|
17
12
|
end
|
18
13
|
|
19
14
|
def fingerprint_valid?
|
20
|
-
computed_fingerprint == response_fingerprint
|
15
|
+
!!response_fingerprint && !!response_fingerprint_order && !unfingerprinted_params? && (computed_fingerprint == response_fingerprint)
|
21
16
|
end
|
22
17
|
|
23
18
|
private
|
@@ -38,8 +33,8 @@ module Wirecard
|
|
38
33
|
@unfingerprinted_params ||= params.keys - fingerprinted_params - ['responseFingerprint']
|
39
34
|
end
|
40
35
|
|
41
|
-
def
|
42
|
-
|
36
|
+
def unfingerprinted_params?
|
37
|
+
unfingerprinted_params.size > 0
|
43
38
|
end
|
44
39
|
|
45
40
|
def underscore(s)
|
@@ -5,6 +5,8 @@ module Wirecard
|
|
5
5
|
|
6
6
|
attr_accessor :shop_id
|
7
7
|
|
8
|
+
attr_accessor :password
|
9
|
+
|
8
10
|
attr_accessor :host
|
9
11
|
|
10
12
|
attr_accessor :user_agent
|
@@ -32,6 +34,8 @@ module Wirecard
|
|
32
34
|
def initialize
|
33
35
|
@user_agent = '### User Agent ###'
|
34
36
|
@endpoint = 'https://checkout.wirecard.com/seamless'
|
37
|
+
@host = 'checkout.wirecard.com'
|
38
|
+
@language = defined?(I18n) ? I18n.default_locale[0..1] : 'en'
|
35
39
|
end
|
36
40
|
|
37
41
|
end
|
@@ -9,9 +9,7 @@ module Wirecard
|
|
9
9
|
super.merge(
|
10
10
|
javascript_script_version: 'pci3',
|
11
11
|
language: Wirecard.config.language,
|
12
|
-
return_url: Wirecard.config.return_url
|
13
|
-
# don't forget to add custom styles for the iFrame
|
14
|
-
# post_params['iframeCssUrl'] ActionController::Base.helpers.asset_url('credit_card_form.css')
|
12
|
+
return_url: Wirecard.config.return_url
|
15
13
|
)
|
16
14
|
end
|
17
15
|
end
|
@@ -30,13 +30,24 @@ module Wirecard
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def fingerprint_string
|
33
|
-
|
34
|
-
|
33
|
+
raise NoFingerprintOrderGivenError unless fingerprint_order = fingerprint_order_from_params
|
34
|
+
|
35
|
+
fingerprint_order.split(',').map{ |key| key == 'secret' ? Wirecard.config.secret : params[key] }.compact.join
|
36
|
+
end
|
37
|
+
|
38
|
+
def fingerprint_order_from_params
|
39
|
+
if implicit_fingerprint_order
|
40
|
+
implicit_fingerprint_order.join(',')
|
41
|
+
else
|
42
|
+
params['requestFingerprintOrder'] || params['responseFingerprintOrder']
|
43
|
+
end
|
35
44
|
end
|
36
45
|
|
37
46
|
def fingerprint
|
38
47
|
raise NotImplementedError, 'Choose a subclass that specifies the method for digest (MD5/SHA512)'
|
39
48
|
end
|
40
49
|
end
|
50
|
+
|
51
|
+
class NoFingerprintOrderGivenError < StandardError; end
|
41
52
|
end
|
42
53
|
end
|
@@ -1,12 +1,22 @@
|
|
1
1
|
module Wirecard
|
2
2
|
module PaymentProcess
|
3
3
|
class Init < Wirecard::Base
|
4
|
+
|
5
|
+
def order_number
|
6
|
+
@order_number ||= Wirecard::Backend::GenerateOrderNumber.create
|
7
|
+
end
|
8
|
+
|
4
9
|
def url
|
5
10
|
@url ||= [Wirecard.config.endpoint, :frontend, :init].join('/')
|
6
11
|
end
|
7
12
|
|
13
|
+
def redirect_url
|
14
|
+
response[:redirect_url]
|
15
|
+
end
|
16
|
+
|
8
17
|
def defaults
|
9
18
|
super.merge(
|
19
|
+
order_number: order_number,
|
10
20
|
language: Wirecard.config.language,
|
11
21
|
currency: Wirecard.config.currency,
|
12
22
|
success_url: Wirecard.config.success_url,
|
@@ -16,6 +26,7 @@ module Wirecard
|
|
16
26
|
confirm_url: Wirecard.config.confirm_url
|
17
27
|
)
|
18
28
|
end
|
29
|
+
|
19
30
|
end
|
20
31
|
end
|
21
32
|
end
|
data/lib/wirecard/request.rb
CHANGED
@@ -12,8 +12,8 @@ module Wirecard
|
|
12
12
|
|
13
13
|
def initialize(options)
|
14
14
|
options = defaults.merge(options)
|
15
|
-
raise ArgumentError 'Options must contain
|
16
|
-
raise ArgumentError 'Options must contain uri:
|
15
|
+
raise ArgumentError 'Options must contain params: <parameters hash>' unless options[:params]
|
16
|
+
raise ArgumentError 'Options must contain uri: <wirecard API uri>' unless options[:uri]
|
17
17
|
|
18
18
|
@params = params_to_wirecard(options[:params])
|
19
19
|
@implicit_fingerprint_order = keys_to_wirecard(options[:implicit_fingerprint_order])
|
@@ -34,10 +34,6 @@ module Wirecard
|
|
34
34
|
post
|
35
35
|
end
|
36
36
|
|
37
|
-
### ------------------------------------------ ###
|
38
|
-
### ---------------- Helpers ----------------- ###
|
39
|
-
### ------------------------------------------ ###
|
40
|
-
|
41
37
|
private
|
42
38
|
|
43
39
|
def params_to_wirecard(params)
|
data/lib/wirecard/response.rb
CHANGED
@@ -10,10 +10,6 @@ module Wirecard
|
|
10
10
|
Hash[CGI.parse(body).map{ |param| extract_key_value(param) }]
|
11
11
|
end
|
12
12
|
|
13
|
-
### ------------------------------------------ ###
|
14
|
-
### ---------------- Helpers ----------------- ###
|
15
|
-
### ------------------------------------------ ###
|
16
|
-
|
17
13
|
private
|
18
14
|
|
19
15
|
def underscore(s)
|
data/lib/wirecard/version.rb
CHANGED