ideal-payment 1.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 +7 -0
- data/.gitignore +36 -0
- data/.travis.yml +14 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +67 -0
- data/LICENSE +21 -0
- data/README.md +148 -0
- data/Vagrantfile +35 -0
- data/certs/bestandsnaam.cer +25 -0
- data/certs/bestandsnaam.key +30 -0
- data/certs/ideal.cer +18 -0
- data/ideal.gemspec +31 -0
- data/init.rb +1 -0
- data/lib/ideal.rb +21 -0
- data/lib/ideal/acquirers.rb +18 -0
- data/lib/ideal/gateway.rb +377 -0
- data/lib/ideal/response.rb +274 -0
- data/lib/ideal/version.rb +5 -0
- data/provision.sh +24 -0
- data/spec/expectation_xml/directory_request.xml +25 -0
- data/spec/expectation_xml/status_request.xml +28 -0
- data/spec/expectation_xml/transaction_request.xml +38 -0
- data/spec/fixtures.yml +7 -0
- data/spec/remote_spec.rb +205 -0
- data/spec/spec.rb +500 -0
- data/spec/test_xml/error_response.xml +12 -0
- data/spec/test_xml/large_directory_response.xml +36 -0
- data/spec/test_xml/small_directory_response.xml +17 -0
- data/spec/test_xml/status_response_succeeded.xml +20 -0
- data/spec/test_xml/status_response_succeeded_incorrect.xml +18 -0
- data/spec/test_xml/transaction_response.xml +15 -0
- metadata +157 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 791dece43bd2a6262423bf51dbfc2309f0e57c7a
|
4
|
+
data.tar.gz: 855f6ac01553de8843419729bb5fca4389bff89e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cb7da22944b39e4328dbef573fb0d61fe3d876959aeae4dd31e91daad9c97b7811fbf144262151c22633dbc55a3a1096fd81b83083f4af86b9f17b204756bd49
|
7
|
+
data.tar.gz: f2535f1fb276fb7a6f488dcf354d371d55dfad52479e263caf5d8e0fdcae82c3f0494aa655c640811cd92c758f5feeceea6d365954dc3d79f5e0f25899fe7f89
|
data/.gitignore
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/test/tmp/
|
9
|
+
/test/version_tmp/
|
10
|
+
/tmp/
|
11
|
+
|
12
|
+
## Specific to RubyMotion:
|
13
|
+
.dat*
|
14
|
+
.repl_history
|
15
|
+
build/
|
16
|
+
|
17
|
+
## Documentation cache and generated files:
|
18
|
+
/.yardoc/
|
19
|
+
/_yardoc/
|
20
|
+
/doc/
|
21
|
+
/rdoc/
|
22
|
+
|
23
|
+
## Environment normalisation:
|
24
|
+
/.bundle/
|
25
|
+
/lib/bundler/man/
|
26
|
+
|
27
|
+
# for a library or gem, you might want to ignore these files since the code is
|
28
|
+
# intended to run in multiple environments; otherwise, check them in:
|
29
|
+
# Gemfile.lock
|
30
|
+
# .ruby-version
|
31
|
+
# .ruby-gemset
|
32
|
+
|
33
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
34
|
+
.rvmrc
|
35
|
+
|
36
|
+
.vagrant/
|
data/.travis.yml
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
language: ruby
|
2
|
+
cache: bundler
|
3
|
+
rvm:
|
4
|
+
- 2.1.2
|
5
|
+
- 2.1.0
|
6
|
+
- 2.0.0
|
7
|
+
script: bundle exec rspec spec/spec.rb spec/remote_spec.rb
|
8
|
+
notifications:
|
9
|
+
email: false
|
10
|
+
hipchat:
|
11
|
+
rooms:
|
12
|
+
secure: Ux4YUNvJarbFRjJ3wMUHYhgRkDNzZP1s7Tc5eccf9DYkbZyodgFN4etcDwm5DdIEQbD9ORpsjfcr08D7Ggn7zEw8Ka+RcuE2IH3Ym8dkEHKEfxdJ0sw2FboJwiFeb184UZNFIbREygnzsr/9KvTN+oCgFiB1y7kDZRhX5CFBsUg=
|
13
|
+
template:
|
14
|
+
- '%{repository}#%{build_number} (%{branch} - %{commit} - %{commit_message} : %{author}): %{message}'
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
ideal-payment (1.0.2)
|
5
|
+
nap
|
6
|
+
nokogiri
|
7
|
+
xmldsig
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: http://rubygems.org/
|
11
|
+
specs:
|
12
|
+
coveralls (0.7.1)
|
13
|
+
multi_json (~> 1.3)
|
14
|
+
rest-client
|
15
|
+
simplecov (>= 0.7)
|
16
|
+
term-ansicolor
|
17
|
+
thor
|
18
|
+
diff-lcs (1.2.5)
|
19
|
+
docile (1.1.5)
|
20
|
+
metaclass (0.0.4)
|
21
|
+
mime-types (2.4.1)
|
22
|
+
mini_portile (0.6.0)
|
23
|
+
mocha (1.1.0)
|
24
|
+
metaclass (~> 0.0.1)
|
25
|
+
multi_json (1.10.1)
|
26
|
+
nap (0.8.0)
|
27
|
+
netrc (0.7.7)
|
28
|
+
nokogiri (1.6.3.1)
|
29
|
+
mini_portile (= 0.6.0)
|
30
|
+
rake (10.3.2)
|
31
|
+
rest-client (1.7.2)
|
32
|
+
mime-types (>= 1.16, < 3.0)
|
33
|
+
netrc (~> 0.7)
|
34
|
+
rspec (3.1.0)
|
35
|
+
rspec-core (~> 3.1.0)
|
36
|
+
rspec-expectations (~> 3.1.0)
|
37
|
+
rspec-mocks (~> 3.1.0)
|
38
|
+
rspec-core (3.1.5)
|
39
|
+
rspec-support (~> 3.1.0)
|
40
|
+
rspec-expectations (3.1.2)
|
41
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
42
|
+
rspec-support (~> 3.1.0)
|
43
|
+
rspec-mocks (3.1.2)
|
44
|
+
rspec-support (~> 3.1.0)
|
45
|
+
rspec-support (3.1.1)
|
46
|
+
simplecov (0.9.1)
|
47
|
+
docile (~> 1.1.0)
|
48
|
+
multi_json (~> 1.0)
|
49
|
+
simplecov-html (~> 0.8.0)
|
50
|
+
simplecov-html (0.8.0)
|
51
|
+
term-ansicolor (1.3.0)
|
52
|
+
tins (~> 1.0)
|
53
|
+
thor (0.19.1)
|
54
|
+
tins (1.3.3)
|
55
|
+
xmldsig (0.2.5)
|
56
|
+
nokogiri
|
57
|
+
|
58
|
+
PLATFORMS
|
59
|
+
ruby
|
60
|
+
|
61
|
+
DEPENDENCIES
|
62
|
+
coveralls
|
63
|
+
ideal-payment!
|
64
|
+
mocha
|
65
|
+
rake
|
66
|
+
rspec
|
67
|
+
xmldsig
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014 inventid
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
[](http://opensource.inventid.nl)
|
2
|
+
|
3
|
+
[](http://badge.fury.io/rb/ideal-payment)
|
4
|
+
|
5
|
+
# Ideal
|
6
|
+
| Branch | Build status | Code coverage |
|
7
|
+
|---|---|---|
|
8
|
+
| Master |[](https://travis-ci.org/inventid/ideal)|[](https://coveralls.io/r/inventid/ideal?branch=master)|
|
9
|
+
| Develop |[](https://travis-ci.org/inventid/ideal)|[](https://coveralls.io/r/inventid/ideal?branch=develop)|
|
10
|
+
|
11
|
+
## What is it?
|
12
|
+
|
13
|
+
Ideal is a simple Ruby 2.1 compliant gateway to contact any banks using the Dutch iDeal protocol.
|
14
|
+
Since there was no decent one available, we decided to develop our own.
|
15
|
+
And now you can use it too!
|
16
|
+
|
17
|
+
## How to use it?
|
18
|
+
|
19
|
+
Using it is quite simple, you can simply clone the code and then require it (_we plan to release a gem later_).
|
20
|
+
|
21
|
+
### Preparing certificates
|
22
|
+
|
23
|
+
iDeal requires client certificates.
|
24
|
+
You have to generate these yourself (or buy one from a Certificate Authority, but that's just wasting money in this case).
|
25
|
+
Additionally you need the certificate from your acquirer, which is supplied through their dashboard.
|
26
|
+
|
27
|
+
The following code generates the certificate and key.
|
28
|
+
Replace _PASSWORD_ with your actual password.
|
29
|
+
|
30
|
+
````bash
|
31
|
+
openssl genrsa -aes128 -out private.key -passout pass:PASSWORD 2048
|
32
|
+
openssl req -x509 -new -key private.key -passin pass:PASSWORD -days 1825 -out certificate.cer
|
33
|
+
````
|
34
|
+
|
35
|
+
### Using a fixture
|
36
|
+
|
37
|
+
Fixtures are a great way not to have all these constants in your code, a server administrator may even override them with tools as Puppet.
|
38
|
+
|
39
|
+
The fixture is equal to the one in the test.
|
40
|
+
|
41
|
+
````yaml
|
42
|
+
default:
|
43
|
+
acquirer: rabobank
|
44
|
+
merchant_id: '002054205'
|
45
|
+
passphrase: wachtwoord
|
46
|
+
private_key_file: ../certs/bestandsnaam.key
|
47
|
+
private_certificate_file: ../certs/bestandsnaam.cer
|
48
|
+
ideal_certificate_file: ../certs/ideal.cer
|
49
|
+
````
|
50
|
+
|
51
|
+
which can be later loaded with the following code
|
52
|
+
|
53
|
+
````ruby
|
54
|
+
file = File.join(File.dirname(__FILE__), 'fixtures.yml')
|
55
|
+
fixtures ||= YAML.load(File.read(file))
|
56
|
+
fixture = fixtures[key] || raise(StandardError, "No fixture data was found for key '#{key}'")
|
57
|
+
if passphrase = fixture.delete('passphrase')
|
58
|
+
Ideal::Gateway.passphrase = passphrase
|
59
|
+
end
|
60
|
+
fixture.each { |key, value| Ideal::Gateway.send("#{key}=", value) }
|
61
|
+
````
|
62
|
+
|
63
|
+
### Not using a fixture
|
64
|
+
|
65
|
+
Well, also an option.
|
66
|
+
Codewise it might even be a bit cleaner :wink: although deployment is harder
|
67
|
+
|
68
|
+
````ruby
|
69
|
+
# Other banks preloaded are :abnamro and :rabobank
|
70
|
+
Ideal::Gateway.acquirer = :ing
|
71
|
+
Ideal::Gateway.merchant_id = '00123456789'
|
72
|
+
|
73
|
+
# Maybe you'd like another location
|
74
|
+
ideal_directory = Rails.root + 'config/ideal'
|
75
|
+
Ideal::Gateway.passphrase = 'the_passphrase'
|
76
|
+
Ideal::Gateway.private_key_file = ideal_directory + 'private_key.pem'
|
77
|
+
Ideal::Gateway.private_certificate_file = ideal_directory + 'private_certificate.cer'
|
78
|
+
Ideal::Gateway.ideal_certificate_file = ideal_directory + 'ideal.cer'
|
79
|
+
````
|
80
|
+
|
81
|
+
### Getting a list of issuers
|
82
|
+
|
83
|
+
This does the explicit call to your acquirer.
|
84
|
+
Since the list of issuers hardly ever changes, you could better (performance-wise) cache the result for 48 hours.
|
85
|
+
|
86
|
+
````ruby
|
87
|
+
Ideal::Gateway.new.issuers.list
|
88
|
+
````
|
89
|
+
|
90
|
+
### Requesting a payment
|
91
|
+
|
92
|
+
For this we need to send a Transaction Request to our acquirer with the following code
|
93
|
+
|
94
|
+
````ruby
|
95
|
+
attributes = {
|
96
|
+
# The customer has 30 minutes to complete the iDeal transaction (ISO 8601)
|
97
|
+
:expiration_period => "PT30M",
|
98
|
+
:issuer_id => issuer_id,
|
99
|
+
:return_url => return_url,
|
100
|
+
:order_id => '14',
|
101
|
+
:description => 'Probably awesomeness',
|
102
|
+
:entrance_code => 'secretCode'
|
103
|
+
}
|
104
|
+
response = ideal.setup_purchase(5.00 , ideal_attributes)
|
105
|
+
if response.success?
|
106
|
+
# Save the data, then redirect
|
107
|
+
redirect_to response.service_url
|
108
|
+
else
|
109
|
+
# Log something
|
110
|
+
end
|
111
|
+
````
|
112
|
+
|
113
|
+
### Requesting the payment status
|
114
|
+
|
115
|
+
The merchant has the obligation to request a final status once the timeout has expired.
|
116
|
+
|
117
|
+
````ruby
|
118
|
+
status = ideal.capture(transaction_id)
|
119
|
+
if status.success?
|
120
|
+
# Save the data as paid
|
121
|
+
end
|
122
|
+
````
|
123
|
+
|
124
|
+
## How to suggest improvements?
|
125
|
+
|
126
|
+
We are still actively developing Ideal for our internal use, but we would already love to hear your feedback. In case you have some great ideas, you may just [open an issue](https://github.com/inventid/ideal/issues/new). Be sure to check beforehand whether the same issue does not already exist.
|
127
|
+
|
128
|
+
## How can I contribute?
|
129
|
+
|
130
|
+
We feel contributions from the community are extremely worthwhile. If you use Ideal in production and make some modification, please share it back to the community. You can simply [fork the repository](https://github.com/inventid/ideal/fork), commit your changes to your code and create a pull request back to this repository.
|
131
|
+
|
132
|
+
If there are any issues related to your changes, be sure to reference to those. Additionally we use the `develop` branch, so create a pull request to that branch and not to `master`.
|
133
|
+
|
134
|
+
Additionally we always use [vagrant](http://www.vagrantup.com) for our development. To do the same, you can do the following:
|
135
|
+
|
136
|
+
1. Make sure to have [vagrant](http://www.vagrantup.com) installed.
|
137
|
+
1. Clone the repository
|
138
|
+
1. Open a terminal / shell script and nagivate to the place where you cloned the repository
|
139
|
+
1. Simply enter `vagrant up`
|
140
|
+
1. Provisioning takes around 5 minutes on my PC. If you want it to be faster you can use the `userConfig.json` file in the root and override the specific settings for memory and CPU.
|
141
|
+
1. The Vagrant machine provisions and you can easily work with us. Enter `vagrant ssh` to get shell access to the machine. In case you are done with it, simply enter `vagrant destroy`. You won't lose any changes to your git repository when this happens.
|
142
|
+
|
143
|
+
## Collaborators
|
144
|
+
|
145
|
+
We would like to thank the developers which contributed to Ideal, both big and small.
|
146
|
+
|
147
|
+
- [rogierslag](https://github.com/rogierslag) (Lead developer of Ideal @ [inventid](https://www.inventid.nl))
|
148
|
+
- [joostverdoorn](https://github.com/joostverdoorn) (Developer of Ideal @ [inventid](https://www.inventid.nl))
|
data/Vagrantfile
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
|
7
|
+
VAGRANTFILE_API_VERSION = "2"
|
8
|
+
|
9
|
+
vagrantConfigFile = "vagrantConfig.json"
|
10
|
+
|
11
|
+
if File.exists?(vagrantConfigFile)
|
12
|
+
userConfig = JSON.parse(File.read(vagrantConfigFile))
|
13
|
+
else
|
14
|
+
userConfig = {}
|
15
|
+
end
|
16
|
+
|
17
|
+
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
18
|
+
config.vm.box = "trusty64"
|
19
|
+
config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
|
20
|
+
config.vm.provider :virtualbox do |vb|
|
21
|
+
vb.name = "ideal-local.inventid.net"
|
22
|
+
end
|
23
|
+
|
24
|
+
memory = userConfig["memory"] || 1024
|
25
|
+
cpus = userConfig["cpus"] || 1
|
26
|
+
|
27
|
+
config.vm.provider :virtualbox do |vb|
|
28
|
+
vb.customize ["modifyvm", :id, "--memory", memory, "--cpus", cpus]
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
config.vm.hostname = "ideal-local.inventid.net"
|
33
|
+
config.vm.provision :shell, :path => "provision.sh"
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEHzCCAwegAwIBAgIJAL7sbjWexzOlMA0GCSqGSIb3DQEBCwUAMIGlMQswCQYD
|
3
|
+
VQQGEwJOTDEVMBMGA1UECAwMWnVpZC1Ib2xsYW5kMQ4wDAYDVQQHDAVEZWxmdDER
|
4
|
+
MA8GA1UECgwIaW52ZW50aWQxCzAJBgNVBAsMAklUMSwwKgYDVQQDDCNpZGVhbC5y
|
5
|
+
YWJvYmFuay5wYXltZW50LmludmVudGlkLm5ldDEhMB8GCSqGSIb3DQEJARYScm9n
|
6
|
+
aWVyQGludmVudGlkLm5sMB4XDTE0MDgxNDE5MzUwOFoXDTE5MDgxMzE5MzUwOFow
|
7
|
+
gaUxCzAJBgNVBAYTAk5MMRUwEwYDVQQIDAxadWlkLUhvbGxhbmQxDjAMBgNVBAcM
|
8
|
+
BURlbGZ0MREwDwYDVQQKDAhpbnZlbnRpZDELMAkGA1UECwwCSVQxLDAqBgNVBAMM
|
9
|
+
I2lkZWFsLnJhYm9iYW5rLnBheW1lbnQuaW52ZW50aWQubmV0MSEwHwYJKoZIhvcN
|
10
|
+
AQkBFhJyb2dpZXJAaW52ZW50aWQubmwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
11
|
+
ggEKAoIBAQDETnZLBHrOq9g1GRefyhB1Ap2gn4YUvgM8N5KAB1i/VWUiZUIQB4pC
|
12
|
+
V3N+WAKQ1uXDVW15jwa+Tik1zRsjm2sTgFnB7fKhx+QKj113L7JegtfM9JUul1YI
|
13
|
+
0YNtidpYPZHqe4qfS7Hf6iG9Louzn6Hpsow6WRIJcj2rzF39dbJWStqjlKrKZ4Hv
|
14
|
+
dC2CMfKNqCddiXzfUPPNsMvqshRJ/au5zyBiPVVr944TQpbi/soM79JHd8CNZBnN
|
15
|
+
JrmS7NqwyDr8fbC72S4PPJ+xWBbXaClXSBC5sR38Hxy2OYca57mWE8d8fkiTcHtg
|
16
|
+
scZfpSNXDOxFVZHjcVYcOaTbpoJX5JDtAgMBAAGjUDBOMB0GA1UdDgQWBBQhbbgu
|
17
|
+
1XyUZAV/OXg4OZN4CfrCLTAfBgNVHSMEGDAWgBQhbbgu1XyUZAV/OXg4OZN4CfrC
|
18
|
+
LTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQClQuGgi3ygRD83ClBR
|
19
|
+
ly0yWC807M1Orp4D35u/RBUEHzmgvzaLKfz4KBqGrnZAheZ/6TjZAcB/Tt3g6nMa
|
20
|
+
s/ICwWFvo3jQRbNsHVwwdmx3RJNFpG+5RFnZv4kZTT9XfHPZbtsxKUEF4xr21VJP
|
21
|
+
bRAZ2MIBWhhUr9fRd2ZNkUYRqsauzARKgyceMkO+STb/ZlCGvrU9NEgP8Tp7kcZk
|
22
|
+
uNiUbY+dlw5Q1+miKg+j8tXUQp237GvPvWu0s3lnRyCid6KZAzLopeqafZAs1axy
|
23
|
+
p3JWGHHXjnjTmFOyCcDLLNVZPIj8K7XW4qKSC4hETSMFE0yTw5vr39X50YN9GwwS
|
24
|
+
i37z
|
25
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,30 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
Proc-Type: 4,ENCRYPTED
|
3
|
+
DEK-Info: AES-128-CBC,13741A03A0A2F5AFD56F33B9106AF9AE
|
4
|
+
|
5
|
+
EIgH374thI+coZr2xWrrCVTZt0yUNlnSUVLAmodBHMTpUi04gzst6tJ+CceTITw7
|
6
|
+
04npFLL4w5GQlvv6lZGkf29pWIZfr1HlsPISOBJMsqOfshz/W5XIkJxFy0e3+1cj
|
7
|
+
UhPKzJaj8Gpzn92XPVGh/F819yfKF9xdeIiB5APvNXKkXGOPkwBonqeHU61h2IC9
|
8
|
+
FsCAQ4Yk4GF4W1FNAzsXDbpX4XwJA4KXLrP0AwhmUv4kgss80CxXVaLUmuqLBtWE
|
9
|
+
8mgBG9INK+y9EAd6eJZJM8uUoHjImlvVGIb2UF7vX0C1AK/QsuCh3BSBLFKYAC0I
|
10
|
+
ImEBDztl3vElFLq6SuicuWp10HHxDxIsk1IfegnNBWEoN3KjksQB2r/Duvd8sinl
|
11
|
+
QFsNqK5UElvEiym9eRrmOyalcST/mO+EOdhI062NPnB9MEH746IG3DgnEwJMdc7+
|
12
|
+
Umixn6Ut5RVbyEk6uW42tOqaAeoWMlzhhOYB04VSWm05yZ7P3e6a+ZvImS3Iav39
|
13
|
+
eo+FptSQ75d7lO6Yl9e0E3dAobY8BPbELuwyp/Qnuw1tmM6dzN2jOn6gpHYK5KBN
|
14
|
+
Bi9T/Pkur9q5Grt9Qhr+kI9srJC7A7ZwBdF9/lyBmuoyrNQ5x1S1ZFVynjujkYbl
|
15
|
+
TSucl/jg6juLWuKHtN84yMNDJStMRthml68W5+DVE5jH0Xy99w32VuwbKBvC3USd
|
16
|
+
AfCb+qxV5K7k7w1YgW9jKosXyw5GD6SuVKjEhY7NpZ3U7skMhs6JfcP2NWFrCCGG
|
17
|
+
Dwr3mZqhvEcy44RsTvO1kmOO84Z+1SPKb1w2Lg8E825y/ZPxAsmPERjSa27Et3Cg
|
18
|
+
14LgvT/GBMa8Hwhsm07X+9QMW4eZLLkX8En+aKKmOs3t6RDMLkb9wZqI109jY66d
|
19
|
+
FVnm1kZ6ExthcBXvq1D31EwQ3tBbkkfjxIN6Av4wJjQhrpnx4wWIBNEmD/b4hkFI
|
20
|
+
P88yv/kqaaGX0qhGjuCd3HKr5pBYz1rOtrE+rBHn1fbWN300/sfZH3bRpYW5K+0N
|
21
|
+
ePPzdzLpGLmTotcn9GgZYi4ROgMsDX4ho7OXmrNvvrET/rlQgnx4+oCfPc+D3dkq
|
22
|
+
KSfTykKjpozeUX8FR6hLo7HdfcHJLBNJwH6X0vpUYSTUcmdJ8eGPyySCzRL4TgH0
|
23
|
+
50H+AfQ291fNl5Au+Goad5jnpAkLBaVOvRi2/AWX5BFc6j/W0AIlvYIWp3seW5F9
|
24
|
+
jJvSX5wLPewH9xwFFLJqIZUn/FHCZTW76Vdy1Q/m2bDClP1f+lHXm5w7QMxwwx2+
|
25
|
+
9x9nIiJTgEc6KAUo/uc1P0RGKO+QFyKQXrCpvK5z6jkhGnmN3h4Wnu3NXeZ+oRON
|
26
|
+
dYayMSmIb8dYjvkuwL7TQBlVJW4/YFrLSCXKjTOJV/iKSgrSdmyNp23Vlq2+ySXs
|
27
|
+
HpETuGXu34oufANH3HKJ+Fuz6ffpra0Cy6brHJWgRvx5K11/SbIIyHjEaW+L5qRB
|
28
|
+
PW2YTdbXhzowu/bTrrHA7dYwI+VFNAkelfhrs12DtbfAejxvMfBDd+GyacSRKIox
|
29
|
+
gQeUzBxPwvRhJlmnmJFRR7fp/p7q5Jrnj3mSfYZKvbfPYy9bJZC1xn4oae7cLoHI
|
30
|
+
-----END RSA PRIVATE KEY-----
|
data/certs/ideal.cer
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDhzCCAm8CBgE4cUAd7DANBgkqhkiG9w0BAQsFADCBhjELMAkGA1UEBhMCREUxDzANBgNVBAgT
|
3
|
+
Bkhlc3NlbjEaMBgGA1UEBxMRRnJhbmtmdXJ0IGFtIE1haW4xDTALBgNVBAoTBFJBQk8xHTAbBgNV
|
4
|
+
BAsTFE1lcmNoYW50IFhNTCBTaWduaW5nMRwwGgYDVQQDExNBdG9zIFdvcmxkbGluZSBHbWJIMB4X
|
5
|
+
DTEyMDYzMDIyMDAwMFoXDTE3MDcwMTEwMDAwMFowgYYxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIEwZI
|
6
|
+
ZXNzZW4xGjAYBgNVBAcTEUZyYW5rZnVydCBhbSBNYWluMQ0wCwYDVQQKEwRSQUJPMR0wGwYDVQQL
|
7
|
+
ExRNZXJjaGFudCBYTUwgU2lnbmluZzEcMBoGA1UEAxMTQXRvcyBXb3JsZGxpbmUgR21iSDCCASIw
|
8
|
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL+hIul8xb811QmqLg9mzkoHh+0BdnQJZCqyHyFM
|
9
|
+
eY7tkFOW8vwi13OxSMGLFzNnehjitMievsx2s5yQW/3NrjG3xLw/18PJrSIgulngs6Cjw9mmIRSn
|
10
|
+
FZp3ViZR5aEmjP3aHGxIT7MTqt/AzU6TVaOYur55WmiOFJSA15AN+Onf3U+H06y/kbZlj9+QwKxe
|
11
|
+
6jEZnaMlfSyhct5elswqEKjencUUU6qdRmsH8nSXmyrFJstXKlZsygDBJQSWxHqNE4r6lnYmpflC
|
12
|
+
76KMNcW1xsp58Qa8axlpZ3UjL+nVtBKw4t+R2ebQcz12N+vv/8TBJd8ckZ+YwW4Cm2fGGcc2CcEC
|
13
|
+
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAaLXoT+EezVl4YFcFTWI58Zg7C7WujRn+pTSFGN8MLFtx
|
14
|
+
MKfujLAMRh3YPVzXr2yE1kdMiMbq7IKtsKpb3PPgD3rb6YrP7zcwzDRxkXs802BgVxCPmdYrsa1i
|
15
|
+
PdJReq2VVTKoBHXSiKWowwBQFPOOc1XjFHcJ3Nq5WgssGEjk+puRW+i8GLaIv1KdwVlWLyHNArTs
|
16
|
+
W5JCcdtBhnMDz/g3/fRMu4EAnVFVmM75KNztVvgqkt+mZVuXfHfTCSv2RVFbrJvm/xrCmGk1VxDE
|
17
|
+
t4zSMdFEi98xh8DOC1oIhMf6JDImL1JyHqTljOIjBCo2uE5TFqQ/QZiOk0IC8Rb9y3lb2g==
|
18
|
+
-----END CERTIFICATE-----
|
data/ideal.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "ideal/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = %q{ideal-payment}
|
7
|
+
s.version = Ideal::VERSION
|
8
|
+
s.authors = ["Rogier Slag"]
|
9
|
+
s.description = %q{iDEALv3 payment gateway (see http://www.ideal.nl)}
|
10
|
+
s.summary = %q{iDEALv3 payment gateway}
|
11
|
+
s.email = %q{rogier@inventid.nl}
|
12
|
+
s.licenses = ['MIT']
|
13
|
+
s.homepage = %q{http://opensource.inventid.nl/ideal}
|
14
|
+
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
|
20
|
+
s.files = `git ls-files`.split("\n")
|
21
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
22
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
23
|
+
s.require_paths = ["lib"]
|
24
|
+
|
25
|
+
s.add_dependency "nokogiri"
|
26
|
+
s.add_dependency "nap"
|
27
|
+
s.add_dependency "xmldsig"
|
28
|
+
s.add_development_dependency "mocha"
|
29
|
+
s.add_development_dependency "rspec"
|
30
|
+
|
31
|
+
end
|