wirecardmapper 0.0.1 → 0.2.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.
- data/README.rdoc +4 -0
- data/Rakefile +1 -7
- data/lib/wirecardmapper/config.rb +7 -3
- data/lib/wirecardmapper/model.rb +52 -8
- data/lib/wirecardmapper/net_http_monkeypatch.rb +8 -0
- data/lib/wirecardmapper/request.rb +5 -0
- data/lib/wirecardmapper/response.rb +29 -0
- data/lib/wirecardmapper/version.rb +1 -1
- data/lib/wirecardmapper.rb +7 -1
- data/spec/fixtures/create_card.xml +35 -0
- data/spec/functional/model.rb +47 -0
- data/spec/spec_helper.rb +8 -1
- data/spec/unit/model.rb +55 -0
- data/spec/unit/response.rb +28 -0
- data/templates/create_card.xml +8 -0
- data/templates/get_card_info.xml +6 -0
- data/templates/get_payment_info.xml +11 -0
- data/templates/main.xml +7 -0
- data/templates/submit_payment.xml +10 -0
- data/templates/update_card_info.xml +6 -0
- metadata +17 -5
- data/spec/unit/new_main.rb +0 -29
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
@@ -18,10 +18,8 @@ spec = Gem::Specification.new do |s|
|
|
18
18
|
s.description = s.summary
|
19
19
|
s.author = 'Alexander Klaiber'
|
20
20
|
s.email = 'alex.klaiber@gmail.com'
|
21
|
-
|
22
|
-
s.files = %w(LICENSE README.rdoc Rakefile) + Dir.glob("{lib,spec}/**/*")
|
21
|
+
s.files = %w(LICENSE README.rdoc Rakefile) + Dir.glob("{lib,spec,templates}/**/*")
|
23
22
|
s.require_path = "lib"
|
24
|
-
# s.bindir = "bin"
|
25
23
|
|
26
24
|
s.add_dependency 'nokogiri', '>= 1.4.2'
|
27
25
|
s.add_dependency 'uuid', '>= 2.3.1'
|
@@ -42,10 +40,6 @@ Rake::RDocTask.new do |rdoc|
|
|
42
40
|
rdoc.options << '--line-numbers'
|
43
41
|
end
|
44
42
|
|
45
|
-
#Rake::TestTask.new do |t|
|
46
|
-
# t.test_files = FileList['test/**/*.rb']
|
47
|
-
#end
|
48
|
-
|
49
43
|
Spec::Rake::SpecTask.new do |t|
|
50
44
|
t.spec_files = FileList['spec/**/*.rb']
|
51
45
|
t.libs << Dir["lib"]
|
@@ -2,12 +2,16 @@ module WirecardMapper
|
|
2
2
|
module Config
|
3
3
|
|
4
4
|
class << self
|
5
|
-
attr_accessor :mode, :entity_id
|
6
|
-
attr_writer :templates_path
|
5
|
+
attr_accessor :mode, :entity_id, :server_uri, :login, :password
|
6
|
+
attr_writer :templates_path, :server_port
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.templates_path
|
10
|
-
@templates_path ||= "templates/"
|
10
|
+
@templates_path ||= "#{File.dirname(__FILE__)}/../../templates/"
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.server_port
|
14
|
+
@server_port ||= 443
|
11
15
|
end
|
12
16
|
|
13
17
|
end
|
data/lib/wirecardmapper/model.rb
CHANGED
@@ -1,6 +1,30 @@
|
|
1
1
|
module WirecardMapper
|
2
2
|
module Model
|
3
3
|
|
4
|
+
def self.xml_request_method(*args)
|
5
|
+
args.each do |arg|
|
6
|
+
define_method(arg) do
|
7
|
+
request(self.send("#{arg}_xml").to_s)
|
8
|
+
end
|
9
|
+
|
10
|
+
define_method("#{arg}_xml") do
|
11
|
+
main_xml = self.main_xml
|
12
|
+
if main_xml
|
13
|
+
xml = open_xml("#{arg}.xml")
|
14
|
+
if xml
|
15
|
+
xml.at_css("card-id").content = self.card_id if xml.at_css("card-id")
|
16
|
+
xml.at_css("product-id").content = self.number if xml.at_css("product-id")
|
17
|
+
xml.at_css("amount").content = self.amount if xml.at_css("amount")
|
18
|
+
main_xml.at_css('issuer-request').add_child(xml.at(arg.to_s.gsub(/_/,'-')))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
return main_xml
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
xml_request_method :get_card_info, :create_card, :submit_payment, :update_card_info, :get_payment_info
|
27
|
+
|
4
28
|
def request_id
|
5
29
|
UUID.generate
|
6
30
|
end
|
@@ -22,16 +46,36 @@ module WirecardMapper
|
|
22
46
|
return xml
|
23
47
|
end
|
24
48
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
if
|
30
|
-
|
31
|
-
|
49
|
+
def request(xml)
|
50
|
+
uri = URI.parse(Config.server_uri)
|
51
|
+
unless uri.nil?
|
52
|
+
http = Net::HTTP.new(uri.host, Config.server_port)
|
53
|
+
if http
|
54
|
+
http.use_ssl = true
|
55
|
+
request = Net::HTTP::Post.new(uri.path)
|
56
|
+
if request
|
57
|
+
request.content_type = "text/xml"
|
58
|
+
request.content_length = xml.size
|
59
|
+
request.basic_auth(Config.login, Config.password)
|
60
|
+
request.body = xml
|
61
|
+
response = http.request(request)
|
62
|
+
if response
|
63
|
+
return WirecardMapper::Response.new(response.body)
|
64
|
+
end
|
65
|
+
end
|
32
66
|
end
|
33
67
|
end
|
34
|
-
|
68
|
+
end
|
69
|
+
|
70
|
+
def respone(xml)
|
71
|
+
return WirecardMapper::Response.new(xml)
|
72
|
+
end
|
73
|
+
|
74
|
+
def print_request(request)
|
75
|
+
request.each_header do |key, value|
|
76
|
+
puts "#{key} : #{value}"
|
77
|
+
end
|
78
|
+
puts request.body
|
35
79
|
end
|
36
80
|
|
37
81
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module WirecardMapper
|
2
|
+
class Response
|
3
|
+
|
4
|
+
def self.node_reader(*args)
|
5
|
+
args.each do |arg|
|
6
|
+
define_method(arg) do
|
7
|
+
return @doc.at_css(arg.to_s.gsub(/_/,'-')).content
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
public
|
13
|
+
|
14
|
+
node_reader :card_id, :card_number, :return_code, :return_message,
|
15
|
+
:status_code, :status_message, :expiration_month, :expiration_year,
|
16
|
+
:card_security_code, :card_level, :card_comment, :issuing_date,
|
17
|
+
:bank_code, :account_number, :currency, :first_name, :last_name,
|
18
|
+
:issuer_consumer_id
|
19
|
+
|
20
|
+
def initialize(xml)
|
21
|
+
@doc = Nokogiri::XML(xml)
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_s
|
25
|
+
@doc.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
data/lib/wirecardmapper.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
+
require 'net/https'
|
2
|
+
require "base64"
|
1
3
|
require 'nokogiri'
|
2
4
|
require 'uuid'
|
3
5
|
|
6
|
+
require 'wirecardmapper/net_http_monkeypatch'
|
7
|
+
|
4
8
|
module WirecardMapper
|
5
9
|
autoload :Config, 'wirecardmapper/config'
|
10
|
+
autoload :Response, 'wirecardmapper/response'
|
11
|
+
autoload :Request, 'wirecardmapper/request'
|
6
12
|
autoload :Model, 'wirecardmapper/model'
|
7
|
-
end
|
13
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
2
|
+
<issuer-response>
|
3
|
+
<application>
|
4
|
+
<request-id>4711-20040712120000</request-id>
|
5
|
+
<response-id>47ae06350a010018157db660f8b85d8d</response-id>
|
6
|
+
</application>
|
7
|
+
<create-card>
|
8
|
+
<return-code>0</return-code>
|
9
|
+
<return-message>Successful system entry.</return-message>
|
10
|
+
<account-card-data>
|
11
|
+
<card-status>
|
12
|
+
<status-code>activated</status-code>
|
13
|
+
<status-message>Active card</status-message>
|
14
|
+
</card-status>
|
15
|
+
<card-data>
|
16
|
+
<card-id>47ae07020a010018157db66065da6e5c</card-id>
|
17
|
+
<card-number>5274569796581777</card-number>
|
18
|
+
<expiration-month>08</expiration-month>
|
19
|
+
<expiration-year>2011</expiration-year>
|
20
|
+
<card-security-code>618</card-security-code>
|
21
|
+
<card-level>P</card-level>
|
22
|
+
<card-comment>This is a test card</card-comment>
|
23
|
+
<issuing-date>2010-08-06</issuing-date>
|
24
|
+
</card-data>
|
25
|
+
<account-data>
|
26
|
+
<bank-code>51230800</bank-code>
|
27
|
+
<account-number>2345</account-number>
|
28
|
+
<currency>EUR</currency>
|
29
|
+
<first-name>WD SCP Test</first-name>
|
30
|
+
<last-name>WD SCP Test</last-name>
|
31
|
+
<issuer-consumer-id>2345</issuer-consumer-id>
|
32
|
+
</account-data>
|
33
|
+
</account-card-data>
|
34
|
+
</create-card>
|
35
|
+
</issuer-response>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Model" do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@card = Model do
|
7
|
+
class << self
|
8
|
+
def card_id
|
9
|
+
'47ae07020a010018157db66065da6e5c'
|
10
|
+
end
|
11
|
+
|
12
|
+
def number
|
13
|
+
11
|
14
|
+
end
|
15
|
+
|
16
|
+
def amount
|
17
|
+
10
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should get cardinfo" do
|
24
|
+
response = @card.get_card_info
|
25
|
+
response.card_id.should eql('47ae07020a010018157db66065da6e5c')
|
26
|
+
response.card_number.should eql('5274569796581777')
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should create card" do
|
30
|
+
response = @card.create_card
|
31
|
+
response.card_id.should_not be_empty
|
32
|
+
response.card_number.should_not be_empty
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should update card info" do
|
36
|
+
response = @card.update_card_info
|
37
|
+
response.return_code.to_i.should eql(0)
|
38
|
+
response.return_message.should eql('Successful system entry.')
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should submit payment" do
|
42
|
+
response = @card.submit_payment
|
43
|
+
response.return_code.to_i.should eql(0)
|
44
|
+
response.return_message.should eql('Successful system entry.')
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,6 +3,8 @@ require 'rubygems'
|
|
3
3
|
$:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
|
4
4
|
require 'wirecardmapper'
|
5
5
|
|
6
|
+
FIXTURES_PATH = "#{File.dirname(__FILE__)}/fixtures"
|
7
|
+
|
6
8
|
def Model(name=nil, &block)
|
7
9
|
klass = Class.new do
|
8
10
|
extend WirecardMapper::Model
|
@@ -12,5 +14,10 @@ def Model(name=nil, &block)
|
|
12
14
|
klass
|
13
15
|
end
|
14
16
|
|
17
|
+
#WirecardMapper::Config.server_uri = "https://c3-test.wirecard.com/issuer/client"
|
18
|
+
WirecardMapper::Config.server_uri = "http://localhost/issuer/client"
|
19
|
+
WirecardMapper::Config.server_port = 8080
|
20
|
+
WirecardMapper::Config.login = "000000315ED21E8A";
|
21
|
+
WirecardMapper::Config.password = "FDJqLhoRX";
|
15
22
|
WirecardMapper::Config.mode = "test"
|
16
|
-
WirecardMapper::Config.entity_id = "
|
23
|
+
WirecardMapper::Config.entity_id = "000000315ED21F74"
|
data/spec/unit/model.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Model" do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@card = Model do
|
7
|
+
class << self
|
8
|
+
def card_id
|
9
|
+
'47ae07020a010018157db66065da6e5c'
|
10
|
+
end
|
11
|
+
|
12
|
+
def number
|
13
|
+
5274569796581777
|
14
|
+
end
|
15
|
+
|
16
|
+
def amount
|
17
|
+
10.10
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should get main xml" do
|
24
|
+
xml = @card.main_xml
|
25
|
+
xml.at_css("issuer-request")['mode'].should eql(WirecardMapper::Config.mode)
|
26
|
+
xml.at_css("entity-id").content.to_s.should eql(WirecardMapper::Config.entity_id)
|
27
|
+
xml.at_css("request-id").content.to_s.should_not be_empty
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should get cardinfo xml" do
|
31
|
+
xml = @card.get_card_info_xml
|
32
|
+
xml.at_css("card-id").content.should eql(@card.card_id)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should get create card xml" do
|
36
|
+
xml = @card.create_card_xml
|
37
|
+
xml.at_css("product-id").content.to_i.should eql(@card.number)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should get submit payment xml" do
|
41
|
+
xml = @card.submit_payment_xml
|
42
|
+
xml.at_css("card-id").content.should eql(@card.card_id)
|
43
|
+
xml.at_css("amount").content.to_f.should eql(@card.amount)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should get update card xml" do
|
47
|
+
xml = @card.update_card_info_xml
|
48
|
+
xml.at_css("card-id").content.should eql(@card.card_id)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should get payment info xml" do
|
52
|
+
xml = @card.get_payment_info_xml
|
53
|
+
xml.at_css("card-id").content.should eql(@card.card_id)
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Response" do
|
4
|
+
|
5
|
+
it "should get card status" do
|
6
|
+
File.open("#{FIXTURES_PATH}/create_card.xml") do |file|
|
7
|
+
response = WirecardMapper::Response.new(file)
|
8
|
+
response.card_id.should eql('47ae07020a010018157db66065da6e5c')
|
9
|
+
response.card_number.should eql('5274569796581777')
|
10
|
+
response.status_code.should eql('activated')
|
11
|
+
response.status_message.should eql('Active card')
|
12
|
+
response.expiration_month.should eql('08')
|
13
|
+
response.expiration_year.should eql('2011')
|
14
|
+
response.card_security_code.should eql('618')
|
15
|
+
response.card_level.should eql('P')
|
16
|
+
response.card_comment.should eql('This is a test card')
|
17
|
+
response.issuing_date.should eql('2010-08-06')
|
18
|
+
response.bank_code.should eql('51230800')
|
19
|
+
response.account_number.should eql('2345')
|
20
|
+
response.currency.should eql('EUR')
|
21
|
+
response.first_name.should eql('WD SCP Test')
|
22
|
+
response.last_name.should eql('WD SCP Test')
|
23
|
+
response.issuer_consumer_id.should eql('2345')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
data/templates/main.xml
ADDED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wirecardmapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 2
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.1
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Alexander Klaiber
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-08-09 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -64,11 +64,23 @@ files:
|
|
64
64
|
- README.rdoc
|
65
65
|
- Rakefile
|
66
66
|
- lib/wirecardmapper/model.rb
|
67
|
+
- lib/wirecardmapper/response.rb
|
68
|
+
- lib/wirecardmapper/request.rb
|
69
|
+
- lib/wirecardmapper/net_http_monkeypatch.rb
|
67
70
|
- lib/wirecardmapper/version.rb
|
68
71
|
- lib/wirecardmapper/config.rb
|
69
72
|
- lib/wirecardmapper.rb
|
70
73
|
- spec/spec_helper.rb
|
71
|
-
- spec/
|
74
|
+
- spec/fixtures/create_card.xml
|
75
|
+
- spec/unit/model.rb
|
76
|
+
- spec/unit/response.rb
|
77
|
+
- spec/functional/model.rb
|
78
|
+
- templates/create_card.xml
|
79
|
+
- templates/main.xml
|
80
|
+
- templates/submit_payment.xml
|
81
|
+
- templates/get_payment_info.xml
|
82
|
+
- templates/update_card_info.xml
|
83
|
+
- templates/get_card_info.xml
|
72
84
|
has_rdoc: true
|
73
85
|
homepage: http://github.com/aklaiber/wirecardmapper
|
74
86
|
licenses: []
|
data/spec/unit/new_main.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "RSpec Greeter" do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@model = Model do
|
7
|
-
class << self
|
8
|
-
def card_id
|
9
|
-
1234
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
it "should get main xml" do
|
16
|
-
xml = @model.main_xml
|
17
|
-
xml.at_css("issuer-request")['mode'].should eql('test')
|
18
|
-
xml.at_css("entity-id").content.to_s.should eql('Test entity id')
|
19
|
-
xml.at_css("request-id").content.to_s.should_not be_empty
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should get get_cardinfo xml" do
|
23
|
-
xml = @model.get_cardinfo_xml
|
24
|
-
xml.at_css("issuer-request")['mode'].should eql('test')
|
25
|
-
xml.at_css("entity-id").content.to_s.should eql('Test entity id')
|
26
|
-
xml.at_css("request-id").content.to_s.should_not be_empty
|
27
|
-
xml.at_css("card-id").content.to_i.should eql(@model.card_id)
|
28
|
-
end
|
29
|
-
end
|