datatrans 2.2.2 → 2.3.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/lib/datatrans.rb +8 -3
- data/lib/datatrans/version.rb +1 -1
- data/lib/datatrans/xml/transaction.rb +15 -7
- data/lib/datatrans/xml/transaction/status.rb +85 -0
- data/spec/xml/status_spec.rb +94 -0
- metadata +18 -24
data/lib/datatrans.rb
CHANGED
@@ -6,11 +6,13 @@ module Datatrans
|
|
6
6
|
WEB_AUTHORIZE_URL = "#{BASE_URL}/upp/jsp/upStart.jsp"
|
7
7
|
XML_AUTHORIZE_URL = "#{BASE_URL}/upp/jsp/XML_authorize.jsp"
|
8
8
|
XML_SETTLEMENT_URL = "#{BASE_URL}/upp/jsp/XML_processor.jsp"
|
9
|
+
XML_STATUS_URL = "#{BASE_URL}/upp/jsp/XML_status.jsp"
|
9
10
|
|
10
11
|
TEST_BASE_URL = 'https://pilot.datatrans.biz'
|
11
12
|
TEST_WEB_AUTHORIZE_URL = "#{TEST_BASE_URL}/upp/jsp/upStart.jsp"
|
12
13
|
TEST_XML_AUTHORIZE_URL = "#{TEST_BASE_URL}/upp/jsp/XML_authorize.jsp"
|
13
14
|
TEST_XML_SETTLEMENT_URL = "#{TEST_BASE_URL}/upp/jsp/XML_processor.jsp"
|
15
|
+
TEST_XML_STATUS_URL = "#{TEST_BASE_URL}/upp/jsp/XML_status.jsp"
|
14
16
|
|
15
17
|
mattr_accessor :merchant_id
|
16
18
|
mattr_accessor :sign_key
|
@@ -19,12 +21,13 @@ module Datatrans
|
|
19
21
|
mattr_reader :web_authorize_url
|
20
22
|
mattr_reader :xml_authorize_url
|
21
23
|
mattr_reader :xml_settlement_url
|
22
|
-
|
24
|
+
mattr_reader :xml_status_url
|
25
|
+
|
23
26
|
def self.configure
|
24
27
|
self.environment = :development # default
|
25
28
|
yield self
|
26
29
|
end
|
27
|
-
|
30
|
+
|
28
31
|
def self.environment=(environment)
|
29
32
|
case environment
|
30
33
|
when :development
|
@@ -32,16 +35,18 @@ module Datatrans
|
|
32
35
|
@@web_authorize_url = TEST_WEB_AUTHORIZE_URL
|
33
36
|
@@xml_authorize_url = TEST_XML_AUTHORIZE_URL
|
34
37
|
@@xml_settlement_url = TEST_XML_SETTLEMENT_URL
|
38
|
+
@@xml_status_url = TEST_XML_STATUS_URL
|
35
39
|
when :production
|
36
40
|
@@base_url = BASE_URL
|
37
41
|
@@web_authorize_url = WEB_AUTHORIZE_URL
|
38
42
|
@@xml_authorize_url = XML_AUTHORIZE_URL
|
39
43
|
@@xml_settlement_url = XML_SETTLEMENT_URL
|
44
|
+
@@xml_status_url = XML_STATUS_URL
|
40
45
|
else
|
41
46
|
raise "Unknown environment '#{environment}'. Available: :development, :production."
|
42
47
|
end
|
43
48
|
end
|
44
|
-
|
49
|
+
|
45
50
|
class InvalidSignatureError < StandardError; end
|
46
51
|
end
|
47
52
|
|
data/lib/datatrans/version.rb
CHANGED
@@ -4,32 +4,38 @@ module Datatrans::XML
|
|
4
4
|
class Transaction
|
5
5
|
attr_accessor :request
|
6
6
|
attr_reader :response, :params
|
7
|
-
|
7
|
+
|
8
8
|
def initialize(params)
|
9
9
|
@params = params.symbolize_keys
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def authorize
|
13
13
|
self.request = AuthorizeRequest.new(params)
|
14
14
|
@response = AuthorizeResponse.new(request.process)
|
15
15
|
@response.successful?
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def void
|
19
19
|
self.request = VoidRequest.new(params)
|
20
20
|
@response = VoidResponse.new(request.process)
|
21
21
|
@response.successful?
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
def capture
|
25
25
|
self.request = CaptureRequest.new(params)
|
26
26
|
@response = CaptureResponse.new(request.process)
|
27
27
|
@response.successful?
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
|
+
def status
|
31
|
+
self.request = StatusRequest.new(params)
|
32
|
+
@response = StatusResponse.new(request.process)
|
33
|
+
@response.successful?
|
34
|
+
end
|
35
|
+
|
30
36
|
# TODO: purchase, credit methods
|
31
|
-
|
32
|
-
|
37
|
+
|
38
|
+
|
33
39
|
def method_missing(method, *args, &block)
|
34
40
|
if response.respond_to? method.to_sym
|
35
41
|
response.send(method)
|
@@ -45,3 +51,5 @@ end
|
|
45
51
|
require 'datatrans/xml/transaction/authorize'
|
46
52
|
require 'datatrans/xml/transaction/void'
|
47
53
|
require 'datatrans/xml/transaction/capture'
|
54
|
+
require 'datatrans/xml/transaction/status'
|
55
|
+
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'datatrans/xml/transaction/request'
|
2
|
+
require 'datatrans/xml/transaction/response'
|
3
|
+
|
4
|
+
class Datatrans::XML::Transaction
|
5
|
+
class StatusRequest < Request
|
6
|
+
def process
|
7
|
+
self.class.post(
|
8
|
+
Datatrans.xml_status_url,
|
9
|
+
:headers => {
|
10
|
+
'Content-Type' => 'text/xml'
|
11
|
+
},
|
12
|
+
:body => build_status_request.to_s
|
13
|
+
).parsed_response
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def build_status_request
|
20
|
+
build_xml_request(:status) do |xml|
|
21
|
+
xml.uppTransactionId params[:transaction_id]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class StatusResponse < Response
|
27
|
+
def successful?
|
28
|
+
[
|
29
|
+
'1', # Transaction ready for settlement (trx authorized)
|
30
|
+
'2', # Transaction debit waiting for daily settlement process
|
31
|
+
'3', # Transaction credit waiting for daily settlement process
|
32
|
+
].include?(response_code)
|
33
|
+
end
|
34
|
+
|
35
|
+
def response_code
|
36
|
+
params_root_node['response']['responseCode'] rescue nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def response_message
|
40
|
+
params_root_node['response']['responseMessage'] rescue nil
|
41
|
+
end
|
42
|
+
|
43
|
+
def error_code
|
44
|
+
params_root_node['error']['errorCode'] rescue nil
|
45
|
+
end
|
46
|
+
|
47
|
+
def error_message
|
48
|
+
params_root_node['error']['errorMessage'] rescue nil
|
49
|
+
end
|
50
|
+
|
51
|
+
def error_detail
|
52
|
+
params_root_node['error']['errorDetail'] rescue nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def reference_number
|
56
|
+
params_root_node['response']['refno'] rescue nil
|
57
|
+
end
|
58
|
+
|
59
|
+
def amount
|
60
|
+
params_root_node['response']['amount'] rescue nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def currency
|
64
|
+
params_root_node['response']['currency'] rescue nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def authorization_code
|
68
|
+
params_root_node['response']['authorizationCode'] rescue nil
|
69
|
+
end
|
70
|
+
|
71
|
+
def authorization_code
|
72
|
+
params_root_node['response']['authorizationCode'] rescue nil
|
73
|
+
end
|
74
|
+
|
75
|
+
def payment_method
|
76
|
+
params_root_node['response']['pmethod'] rescue nil
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def params_root_node
|
82
|
+
params['statusService']['body']['transaction']
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Datatrans::XML::Transaction::StatusRequest do
|
4
|
+
before do
|
5
|
+
@successful_response = {
|
6
|
+
"statusService" => {
|
7
|
+
"body" => {
|
8
|
+
"transaction" => {
|
9
|
+
"request" => {
|
10
|
+
"uppTransactionId" => "111013090000394044",
|
11
|
+
"reqtype" => "STA"
|
12
|
+
},
|
13
|
+
"response" => {
|
14
|
+
"responseCode" => "2",
|
15
|
+
"responseMessage" => "Trx debit waiting for daily settlement process",
|
16
|
+
"refno" => "1234567-037",
|
17
|
+
"amount" => "500",
|
18
|
+
"currency" => "CHF",
|
19
|
+
"authorizationCode" => "891104057",
|
20
|
+
"pmethod" => "ECA",
|
21
|
+
},
|
22
|
+
"trxStatus" => "response"
|
23
|
+
},
|
24
|
+
"merchantId" => "1100002276",
|
25
|
+
"status" => "accepted"
|
26
|
+
},
|
27
|
+
"version" => "1"
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
@failed_response = {
|
32
|
+
"statusService" => {
|
33
|
+
"body" => {
|
34
|
+
"transaction" => {
|
35
|
+
"request" => {
|
36
|
+
"uppTransactionId" => "111013090200394044",
|
37
|
+
"reqtype" => "STA"
|
38
|
+
},
|
39
|
+
"response" => {
|
40
|
+
"responseCode" => "20",
|
41
|
+
"responseMessage" => "UPP record not found",
|
42
|
+
"refno" => "",
|
43
|
+
"amount" => "",
|
44
|
+
"currency" => "",
|
45
|
+
"authorizationCode" => "",
|
46
|
+
"pmethod" => "",
|
47
|
+
},
|
48
|
+
"trxStatus" => "response"
|
49
|
+
},
|
50
|
+
"merchantId" => "1100002276",
|
51
|
+
"status" => "accepted"
|
52
|
+
},
|
53
|
+
"version" => "1"
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
@valid_params = {
|
58
|
+
:transaction_id => '111013090000394044',
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
context "successful response" do
|
63
|
+
before do
|
64
|
+
Datatrans::XML::Transaction::StatusRequest.any_instance.stub(:process).and_return(@successful_response)
|
65
|
+
end
|
66
|
+
|
67
|
+
context "build_status_request" do
|
68
|
+
it "generates a valid datatrans status xml" do
|
69
|
+
@request = Datatrans::XML::Transaction::StatusRequest.new(@valid_params)
|
70
|
+
@request.send(:build_status_request).should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?><statusService version=\"1\"><body merchantId=\"1100000000\"><transaction refno=\"\"><request><uppTransactionId>111013090000394044</uppTransactionId></request></transaction></body></statusService>"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "process" do
|
75
|
+
it "handles a valid datatrans status response" do
|
76
|
+
@transaction = Datatrans::XML::Transaction.new(@valid_params)
|
77
|
+
@transaction.status.should be_true
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "failed response" do
|
83
|
+
before do
|
84
|
+
Datatrans::XML::Transaction::StatusRequest.any_instance.stub(:process).and_return(@failed_response)
|
85
|
+
@transaction = Datatrans::XML::Transaction.new(@valid_params)
|
86
|
+
end
|
87
|
+
|
88
|
+
context "process" do
|
89
|
+
it "handles a failed datatrans status response" do
|
90
|
+
@transaction.status.should be_false
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datatrans
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,12 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-10-
|
14
|
-
default_executable:
|
13
|
+
date: 2011-10-25 00:00:00.000000000Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: httparty
|
18
|
-
requirement: &
|
17
|
+
requirement: &9797400 !ruby/object:Gem::Requirement
|
19
18
|
none: false
|
20
19
|
requirements:
|
21
20
|
- - ! '>='
|
@@ -23,10 +22,10 @@ dependencies:
|
|
23
22
|
version: '0'
|
24
23
|
type: :runtime
|
25
24
|
prerelease: false
|
26
|
-
version_requirements: *
|
25
|
+
version_requirements: *9797400
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
27
|
name: activesupport
|
29
|
-
requirement: &
|
28
|
+
requirement: &9796400 !ruby/object:Gem::Requirement
|
30
29
|
none: false
|
31
30
|
requirements:
|
32
31
|
- - ! '>='
|
@@ -34,10 +33,10 @@ dependencies:
|
|
34
33
|
version: 3.0.0
|
35
34
|
type: :runtime
|
36
35
|
prerelease: false
|
37
|
-
version_requirements: *
|
36
|
+
version_requirements: *9796400
|
38
37
|
- !ruby/object:Gem::Dependency
|
39
38
|
name: i18n
|
40
|
-
requirement: &
|
39
|
+
requirement: &9762360 !ruby/object:Gem::Requirement
|
41
40
|
none: false
|
42
41
|
requirements:
|
43
42
|
- - ! '>='
|
@@ -45,10 +44,10 @@ dependencies:
|
|
45
44
|
version: '0'
|
46
45
|
type: :runtime
|
47
46
|
prerelease: false
|
48
|
-
version_requirements: *
|
47
|
+
version_requirements: *9762360
|
49
48
|
- !ruby/object:Gem::Dependency
|
50
49
|
name: builder
|
51
|
-
requirement: &
|
50
|
+
requirement: &9760260 !ruby/object:Gem::Requirement
|
52
51
|
none: false
|
53
52
|
requirements:
|
54
53
|
- - ! '>='
|
@@ -56,10 +55,10 @@ dependencies:
|
|
56
55
|
version: '0'
|
57
56
|
type: :runtime
|
58
57
|
prerelease: false
|
59
|
-
version_requirements: *
|
58
|
+
version_requirements: *9760260
|
60
59
|
- !ruby/object:Gem::Dependency
|
61
60
|
name: rspec
|
62
|
-
requirement: &
|
61
|
+
requirement: &9759480 !ruby/object:Gem::Requirement
|
63
62
|
none: false
|
64
63
|
requirements:
|
65
64
|
- - ! '>='
|
@@ -67,10 +66,10 @@ dependencies:
|
|
67
66
|
version: '0'
|
68
67
|
type: :development
|
69
68
|
prerelease: false
|
70
|
-
version_requirements: *
|
69
|
+
version_requirements: *9759480
|
71
70
|
- !ruby/object:Gem::Dependency
|
72
71
|
name: actionpack
|
73
|
-
requirement: &
|
72
|
+
requirement: &9757700 !ruby/object:Gem::Requirement
|
74
73
|
none: false
|
75
74
|
requirements:
|
76
75
|
- - ! '>='
|
@@ -78,7 +77,7 @@ dependencies:
|
|
78
77
|
version: 3.0.0
|
79
78
|
type: :development
|
80
79
|
prerelease: false
|
81
|
-
version_requirements: *
|
80
|
+
version_requirements: *9757700
|
82
81
|
description: Datatrans Integration for Ruby on Rails
|
83
82
|
email:
|
84
83
|
- tobias.miesel@simplificator.com
|
@@ -103,14 +102,15 @@ files:
|
|
103
102
|
- lib/datatrans/xml/transaction/capture.rb
|
104
103
|
- lib/datatrans/xml/transaction/request.rb
|
105
104
|
- lib/datatrans/xml/transaction/response.rb
|
105
|
+
- lib/datatrans/xml/transaction/status.rb
|
106
106
|
- lib/datatrans/xml/transaction/void.rb
|
107
107
|
- spec/common_spec.rb
|
108
108
|
- spec/spec_helper.rb
|
109
109
|
- spec/web/authorize_spec.rb
|
110
110
|
- spec/xml/authorize_spec.rb
|
111
111
|
- spec/xml/capture_spec.rb
|
112
|
+
- spec/xml/status_spec.rb
|
112
113
|
- spec/xml/void_spec.rb
|
113
|
-
has_rdoc: true
|
114
114
|
homepage: ''
|
115
115
|
licenses: []
|
116
116
|
post_install_message:
|
@@ -131,14 +131,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
131
|
version: '0'
|
132
132
|
requirements: []
|
133
133
|
rubyforge_project: datatrans
|
134
|
-
rubygems_version: 1.
|
134
|
+
rubygems_version: 1.8.10
|
135
135
|
signing_key:
|
136
136
|
specification_version: 3
|
137
137
|
summary: Datatrans Integration for Ruby on Rails
|
138
|
-
test_files:
|
139
|
-
- spec/common_spec.rb
|
140
|
-
- spec/spec_helper.rb
|
141
|
-
- spec/web/authorize_spec.rb
|
142
|
-
- spec/xml/authorize_spec.rb
|
143
|
-
- spec/xml/capture_spec.rb
|
144
|
-
- spec/xml/void_spec.rb
|
138
|
+
test_files: []
|