adyen_hpp_hmac_calculator 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
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2b1be53b37437d64f8bc5ec0f8db578c8d29fb57
|
4
|
+
data.tar.gz: 50e9d526eab72dadcae12d8306f32fa3b8c472cd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 70f5dd042cfa42531e944f3f426dcfd635f66d706c0ef9bb9f8745b8019a8020f6630695e6f82c0a9bedc1b7771139a0459158b2bc86d50f8f1d37e2f273eb7c
|
7
|
+
data.tar.gz: 31aea3e4151af05e585a5384a491290035c19b99d1251aed531bf8f9ef2223fe4847abfee927f4a1fac7c087893641c38cf6337ad0a80a7796f8c2384c80e416
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'base64'
|
2
|
+
|
3
|
+
# Calculates merchant signature for Adyen payment serivce (http://www.adyen.com).
|
4
|
+
# It is based on documentation from:
|
5
|
+
# https://docs.adyen.com/pages/viewpage.action?pageId=5376964
|
6
|
+
#
|
7
|
+
# @example Calculating merchant signature using AdyenHppHmacCalculator::calculate:
|
8
|
+
# hmac_key = "4468D9782DEF54FCD706C9100C71EC43932B1EBC2ACF6BA0560C05AAA7550C48"
|
9
|
+
# params = {
|
10
|
+
# "merchantAccount" => "TestMerchant",
|
11
|
+
# "currencyCode" => "EUR",
|
12
|
+
# "paymentAmount" => "199",
|
13
|
+
# "sessionValidity" => "2015-06-25T10:31:06Z",
|
14
|
+
# "shipBeforeDate" => "2015-07-01",
|
15
|
+
# "shopperLocale" => "en_GB",
|
16
|
+
# "merchantReference" => "SKINTEST-1435226439255",
|
17
|
+
# "skinCode" => "X7hsNDWp"
|
18
|
+
# }
|
19
|
+
# AdyenHppHmacCalculator.calculate(hamc_key, params) #=> "GJ1asjR5VmkvihDJxCd8yE2DGYOKwWwJCBiV3R51NFg="
|
20
|
+
class AdyenHppHmacCalculator
|
21
|
+
def initialize hmac_key
|
22
|
+
@hmac_key = hmac_key.clone.freeze
|
23
|
+
end
|
24
|
+
|
25
|
+
# Calculates merchant signature for specified params using hmac key specified on initialization
|
26
|
+
#
|
27
|
+
# @param params [Hash] key/value pairs to calculate merchant signature
|
28
|
+
# @return [String] HMAC SHA-256 Base64 signature encoded
|
29
|
+
def calculate params
|
30
|
+
merchant_string = generate_merchant_string params
|
31
|
+
hmac = hmac_calculator.calculate merchant_string
|
32
|
+
base64_encode hmac
|
33
|
+
end
|
34
|
+
|
35
|
+
# Calculates merchant signatre for specified hmac key and params
|
36
|
+
# https://docs.adyen.com/pages/viewpage.action?pageId=5376964
|
37
|
+
#
|
38
|
+
# @param hmac_key [String] key for HMAC algorithm
|
39
|
+
# @param params [Hash] key/value pairs to calculate merchant signature
|
40
|
+
# @return [String] HMAC SHA-256 Base64 signature encoded
|
41
|
+
def self.calculate hmac_key, params
|
42
|
+
self.new(hmac_key).calculate params
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def generate_merchant_string params
|
48
|
+
MerchantStringGenerator.generate params
|
49
|
+
end
|
50
|
+
|
51
|
+
def hmac_calculator
|
52
|
+
@hmac_calculator ||= HmacCalculator.new @hmac_key
|
53
|
+
end
|
54
|
+
|
55
|
+
def base64_encode string
|
56
|
+
Base64.strict_encode64 string
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
require 'adyen_hpp_hmac_calculator/merchant_string_generator'
|
61
|
+
require 'adyen_hpp_hmac_calculator/hmac_calculator'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
|
3
|
+
class AdyenHppHmacCalculator::HmacCalculator
|
4
|
+
DIGEST = OpenSSL::Digest.new('sha256')
|
5
|
+
|
6
|
+
def initialize hmac_key
|
7
|
+
@hmac_key_hex = string_to_hex hmac_key
|
8
|
+
end
|
9
|
+
|
10
|
+
# Calculates HMAC SHA-256 from string
|
11
|
+
#
|
12
|
+
# @param string [String] string to calculate HMAC SHA-256
|
13
|
+
# @return [String] HMAC SHA-256 string
|
14
|
+
def calculate string
|
15
|
+
OpenSSL::HMAC.digest(DIGEST, @hmac_key_hex, string)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def string_to_hex string
|
21
|
+
Array(string).pack('H*')
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module AdyenHppHmacCalculator::MerchantStringGenerator
|
2
|
+
# Generates concatenated key/value paris
|
3
|
+
#
|
4
|
+
# @param params [Hash] key/value pairs to generate the signing string
|
5
|
+
# @return [String] concatenated key/value pairs
|
6
|
+
def self.generate params
|
7
|
+
pairs = create_pairs params
|
8
|
+
remove_unnecessary_keys pairs
|
9
|
+
sort_key_value_pairs_by_key pairs
|
10
|
+
delimit_pairs pairs
|
11
|
+
concatenate_pairs pairs
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def self.create_pairs params
|
17
|
+
params.map{ |key, value| [key.to_s.dup, value.to_s.dup] }
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.remove_unnecessary_keys pairs
|
21
|
+
pairs.reject! { |key, _| ignored_key? key }
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.ignored_key? key
|
25
|
+
key == 'sig' or key == 'merchantSig' or key.start_with? 'ignore.'
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.sort_key_value_pairs_by_key pairs
|
29
|
+
pairs.sort_by!{ |key, _| key }
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.delimit_pairs pairs
|
33
|
+
pairs.each do |key, value|
|
34
|
+
escape! key
|
35
|
+
escape! value
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.escape! string
|
40
|
+
string.gsub!('\\'){ '\\\\' }
|
41
|
+
string.gsub!(':'){ '\:' }
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.concatenate_pairs pairs
|
45
|
+
keys = pairs.collect(&:first)
|
46
|
+
values = pairs.collect(&:last)
|
47
|
+
(keys + values).join(':')
|
48
|
+
end
|
49
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: adyen_hpp_hmac_calculator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Krzysztof Zielonka
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-10-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '10.4'
|
20
|
+
- - "~>"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 10.4.2
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '10.4'
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 10.4.2
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: yard
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 0.8.7
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.8.7.6
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.8.7
|
50
|
+
- - "~>"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 0.8.7.6
|
53
|
+
description: Merchant signature calculator for Adyen (https://www.adyen.com) payments
|
54
|
+
service. It is implementation of HPP HMAC (SHA-256) algorithm from Adyen documentation
|
55
|
+
(https://docs.adyen.com/display/TD/HPP+HMAC+calculation).
|
56
|
+
email: aknolezik@gmail.com
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- lib/adyen_hpp_hmac_calculator.rb
|
62
|
+
- lib/adyen_hpp_hmac_calculator/hmac_calculator.rb
|
63
|
+
- lib/adyen_hpp_hmac_calculator/merchant_string_generator.rb
|
64
|
+
homepage: https://rubygems.org/gems/adyen_hpp_hmac_calculator
|
65
|
+
licenses:
|
66
|
+
- MIT
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.4.5
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: Adyen HPP HMAC calculator
|
88
|
+
test_files: []
|
89
|
+
has_rdoc:
|