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.
@@ -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
 
@@ -1,3 +1,3 @@
1
1
  module Datatrans
2
- VERSION = "2.2.2"
2
+ VERSION = "2.3.0"
3
3
  end
@@ -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.2.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-11 00:00:00.000000000 +02:00
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: &70124632684580 !ruby/object:Gem::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: *70124632684580
25
+ version_requirements: *9797400
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: activesupport
29
- requirement: &70124632684020 !ruby/object:Gem::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: *70124632684020
36
+ version_requirements: *9796400
38
37
  - !ruby/object:Gem::Dependency
39
38
  name: i18n
40
- requirement: &70124632683320 !ruby/object:Gem::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: *70124632683320
47
+ version_requirements: *9762360
49
48
  - !ruby/object:Gem::Dependency
50
49
  name: builder
51
- requirement: &70124632682440 !ruby/object:Gem::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: *70124632682440
58
+ version_requirements: *9760260
60
59
  - !ruby/object:Gem::Dependency
61
60
  name: rspec
62
- requirement: &70124632681860 !ruby/object:Gem::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: *70124632681860
69
+ version_requirements: *9759480
71
70
  - !ruby/object:Gem::Dependency
72
71
  name: actionpack
73
- requirement: &70124632681360 !ruby/object:Gem::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: *70124632681360
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.6.2
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: []