datatrans 2.2.2 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []