datatrans 2.4.0 → 3.0.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.
@@ -0,0 +1,25 @@
1
+ module Datatrans::Web
2
+ module ViewHelper
3
+ def datatrans_notification_request_hidden_fields(datatrans, transaction)
4
+ fields = [
5
+ hidden_field_tag(:merchantId, datatrans.merchant_id),
6
+ hidden_field_tag(:hiddenMode, transaction.params[:hiddenMode]),
7
+ hidden_field_tag(:reqtype, transaction.params[:reqtype]),
8
+ hidden_field_tag(:amount, transaction.params[:amount]),
9
+ hidden_field_tag(:currency, transaction.params[:currency]),
10
+ hidden_field_tag(:useAlias, transaction.params[:useAlias]),
11
+ hidden_field_tag(:sign, transaction.signature),
12
+ hidden_field_tag(:refno, transaction.params[:refno]),
13
+ hidden_field_tag(:uppCustomerDetails, transaction.params[:uppCustomerDetails]),
14
+ ]
15
+
16
+ [:uppCustomerName, :uppCustomerEmail].each do |field_name|
17
+ if transaction.params[field_name].present?
18
+ fields << hidden_field_tag(field_name, transaction.params[field_name])
19
+ end
20
+ end
21
+
22
+ fields.join.html_safe
23
+ end
24
+ end
25
+ end
@@ -3,33 +3,34 @@ require 'active_support/core_ext/hash'
3
3
  module Datatrans::XML
4
4
  class Transaction
5
5
  attr_accessor :request
6
- attr_reader :response, :params
6
+ attr_reader :response, :params, :datatrans
7
7
 
8
- def initialize(params)
8
+ def initialize(datatrans, params)
9
+ @datatrans = datatrans
9
10
  @params = params.symbolize_keys
10
11
  end
11
12
 
12
13
  def authorize
13
- self.request = AuthorizeRequest.new(params)
14
- @response = AuthorizeResponse.new(request.process)
14
+ self.request = AuthorizeRequest.new(self.datatrans, params)
15
+ @response = AuthorizeResponse.new(self.datatrans, request.process)
15
16
  @response.successful?
16
17
  end
17
18
 
18
19
  def void
19
- self.request = VoidRequest.new(params)
20
- @response = VoidResponse.new(request.process)
20
+ self.request = VoidRequest.new(self.datatrans, params)
21
+ @response = VoidResponse.new(self.datatrans, request.process)
21
22
  @response.successful?
22
23
  end
23
24
 
24
25
  def capture
25
- self.request = CaptureRequest.new(params)
26
- @response = CaptureResponse.new(request.process)
26
+ self.request = CaptureRequest.new(self.datatrans, params)
27
+ @response = CaptureResponse.new(self.datatrans, request.process)
27
28
  @response.successful?
28
29
  end
29
30
 
30
31
  def status
31
- self.request = StatusRequest.new(params)
32
- @response = StatusResponse.new(request.process)
32
+ self.request = StatusRequest.new(self.datatrans, params)
33
+ @response = StatusResponse.new(self.datatrans, request.process)
33
34
  @response.successful?
34
35
  end
35
36
 
@@ -4,7 +4,7 @@ require 'datatrans/xml/transaction/response'
4
4
  class Datatrans::XML::Transaction
5
5
  class AuthorizeRequest < Request
6
6
  def process
7
- self.class.post(Datatrans.xml_authorize_url,
7
+ post(self.datatrans.url(:xml_authorize_url),
8
8
  :headers => { 'Content-Type' => 'text/xml' },
9
9
  :body => build_authorize_request.to_s).parsed_response
10
10
  end
@@ -18,7 +18,7 @@ class Datatrans::XML::Transaction
18
18
  xml.aliasCC params[:aliasCC]
19
19
  xml.expm params[:expm]
20
20
  xml.expy params[:expy]
21
- xml.sign sign(Datatrans.merchant_id, params[:amount], params[:currency], params[:refno])
21
+ xml.sign sign(self.datatrans.merchant_id, params[:amount], params[:currency], params[:refno])
22
22
  end
23
23
  end
24
24
  end
@@ -4,7 +4,7 @@ require 'datatrans/xml/transaction/response'
4
4
  class Datatrans::XML::Transaction
5
5
  class CaptureRequest < Request
6
6
  def process
7
- self.class.post(Datatrans.xml_settlement_url,
7
+ post(self.datatrans.url(:xml_settlement_url),
8
8
  :headers => { 'Content-Type' => 'text/xml' },
9
9
  :body => build_capture_request.to_s).parsed_response
10
10
  end
@@ -3,25 +3,16 @@ require 'builder'
3
3
 
4
4
  class Datatrans::XML::Transaction
5
5
  class Request
6
- include HTTParty
7
6
 
8
- attr_accessor :params
7
+ attr_accessor :params, :datatrans
9
8
 
10
- def self.set_default_options
11
- if Datatrans.proxy
12
- proxy = Datatrans.proxy.symbolize_keys
13
- http_proxy(proxy[:host], proxy[:port], proxy[:user], proxy[:password])
14
- else
15
- http_proxy(nil, nil, nil, nil)
16
- end
17
- end
18
-
19
- def self.perform_request(*args, &block)
20
- set_default_options
21
- super
9
+ def post(url, options = {})
10
+ options = options.merge(self.datatrans.proxy)
11
+ HTTParty.post(url, options)
22
12
  end
23
13
 
24
- def initialize(params)
14
+ def initialize(datatrans, params)
15
+ @datatrans = datatrans
25
16
  @params = params
26
17
  end
27
18
 
@@ -37,7 +28,7 @@ class Datatrans::XML::Transaction
37
28
  xml = Builder::XmlMarkup.new
38
29
  xml.instruct!
39
30
  xml.tag! "#{service}Service", :version => 1 do
40
- xml.body :merchantId => Datatrans.merchant_id do |body|
31
+ xml.body :merchantId => self.datatrans.merchant_id do |body|
41
32
  xml.transaction :refno => params[:refno] do
42
33
  xml.request do
43
34
  yield body
@@ -1,8 +1,9 @@
1
1
  class Datatrans::XML::Transaction
2
2
  class Response
3
- attr_reader :params
3
+ attr_reader :params, :datatrans
4
4
 
5
- def initialize(params)
5
+ def initialize(datatrans, params)
6
+ @datatrans = datatrans
6
7
  @params = params
7
8
  end
8
9
 
@@ -4,8 +4,8 @@ require 'datatrans/xml/transaction/response'
4
4
  class Datatrans::XML::Transaction
5
5
  class StatusRequest < Request
6
6
  def process
7
- self.class.post(
8
- Datatrans.xml_status_url,
7
+ post(
8
+ self.datatrans.url(:xml_status_url),
9
9
  :headers => {
10
10
  'Content-Type' => 'text/xml'
11
11
  },
@@ -4,7 +4,7 @@ require 'datatrans/xml/transaction/response'
4
4
  class Datatrans::XML::Transaction
5
5
  class VoidRequest < Request
6
6
  def process
7
- self.class.post(Datatrans.xml_settlement_url,
7
+ post(self.datatrans.url(:xml_settlement_url),
8
8
  :headers => { 'Content-Type' => 'text/xml' },
9
9
  :body => build_void_request.to_s).parsed_response
10
10
  end
@@ -3,8 +3,10 @@ require 'spec_helper'
3
3
  describe Datatrans::Common do
4
4
  context "sign" do
5
5
  before do
6
- class Request; include Datatrans::Common; end
7
- @request = Request.new
6
+ #class Request
7
+ # include Datatrans::Common
8
+ #end
9
+ @request = Datatrans::XML::Transaction::Request.new(@datatrans, {})
8
10
  end
9
11
 
10
12
  it "generates the correct sign" do
@@ -12,7 +14,7 @@ describe Datatrans::Common do
12
14
  currency = 'CHF'
13
15
  reference_number = 'ABCEDF'
14
16
 
15
- @request.sign(Datatrans.merchant_id, amount, currency, reference_number).should == '4e7d4d5bbde548c586f3b7f109635ffc'
17
+ @request.sign(@datatrans.merchant_id, amount, currency, reference_number).should == '4e7d4d5bbde548c586f3b7f109635ffc'
16
18
  end
17
19
  end
18
20
  end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Datatrans::Config do
4
+ describe "Instance Methods" do
5
+ before do
6
+ @datatrans = Datatrans::Config.new(:merchant_id => "xxx")
7
+ end
8
+
9
+ describe "web_transaction" do
10
+ it "builds a new web transaction object" do
11
+ @datatrans.web_transaction({}).class.should eq(Datatrans::Web::Transaction)
12
+ end
13
+ end
14
+
15
+ describe "xml_transaction" do
16
+ it "builds a new xml transaction object" do
17
+ @datatrans.xml_transaction({}).class.should eq(Datatrans::XML::Transaction)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -10,10 +10,10 @@ RSpec.configure do |config|
10
10
  config.run_all_when_everything_filtered = true
11
11
 
12
12
  config.before(:each) do
13
- Datatrans.configure do |config|
14
- config.merchant_id = '1100000000'
15
- config.sign_key = 'd777c17ba2010282c2d2350a68b441ca07a799d294bfaa630b7c8442207c0b69703cc55775b0ca5a4e455b818a9bb10a43669c0c20ce31f4a43f10e0cabb9525'
16
- config.environment = :development
17
- end
13
+ @datatrans = Datatrans::Config.new(
14
+ :merchant_id => '1100000000',
15
+ :sign_key => 'd777c17ba2010282c2d2350a68b441ca07a799d294bfaa630b7c8442207c0b69703cc55775b0ca5a4e455b818a9bb10a43669c0c20ce31f4a43f10e0cabb9525',
16
+ :environment => :development
17
+ )
18
18
  end
19
19
  end
@@ -69,12 +69,12 @@ describe Datatrans::Web::Transaction do
69
69
 
70
70
  context "rails form helper" do
71
71
  before do
72
- @transaction = Datatrans::Web::Transaction.new(@valid_params)
72
+ @transaction = Datatrans::Web::Transaction.new(@datatrans, @valid_params)
73
73
  @view = ActionView::Base.new
74
74
  end
75
75
 
76
76
  it "should generate valid form field string" do
77
- @view.datatrans_notification_request_hidden_fields(@transaction).should == "<input id=\"merchantId\" name=\"merchantId\" type=\"hidden\" value=\"1100000000\" /><input id=\"hiddenMode\" name=\"hiddenMode\" type=\"hidden\" value=\"yes\" /><input id=\"reqtype\" name=\"reqtype\" type=\"hidden\" value=\"NOA\" /><input id=\"amount\" name=\"amount\" type=\"hidden\" value=\"1000\" /><input id=\"currency\" name=\"currency\" type=\"hidden\" value=\"CHF\" /><input id=\"useAlias\" name=\"useAlias\" type=\"hidden\" value=\"yes\" /><input id=\"sign\" name=\"sign\" type=\"hidden\" value=\"0402fb3fba8c6fcb40df9b7756e7e637\" /><input id=\"refno\" name=\"refno\" type=\"hidden\" value=\"ABCDEF\" /><input id=\"uppCustomerDetails\" name=\"uppCustomerDetails\" type=\"hidden\" /><input id=\"uppCustomerEmail\" name=\"uppCustomerEmail\" type=\"hidden\" value=\"customer@email.com\" />"
77
+ @view.datatrans_notification_request_hidden_fields(@datatrans, @transaction).should == "<input id=\"merchantId\" name=\"merchantId\" type=\"hidden\" value=\"1100000000\" /><input id=\"hiddenMode\" name=\"hiddenMode\" type=\"hidden\" value=\"yes\" /><input id=\"reqtype\" name=\"reqtype\" type=\"hidden\" value=\"NOA\" /><input id=\"amount\" name=\"amount\" type=\"hidden\" value=\"1000\" /><input id=\"currency\" name=\"currency\" type=\"hidden\" value=\"CHF\" /><input id=\"useAlias\" name=\"useAlias\" type=\"hidden\" value=\"yes\" /><input id=\"sign\" name=\"sign\" type=\"hidden\" value=\"0402fb3fba8c6fcb40df9b7756e7e637\" /><input id=\"refno\" name=\"refno\" type=\"hidden\" value=\"ABCDEF\" /><input id=\"uppCustomerDetails\" name=\"uppCustomerDetails\" type=\"hidden\" /><input id=\"uppCustomerEmail\" name=\"uppCustomerEmail\" type=\"hidden\" value=\"customer@email.com\" />"
78
78
  end
79
79
  end
80
80
 
@@ -85,7 +85,7 @@ describe Datatrans::Web::Transaction do
85
85
 
86
86
  context "process" do
87
87
  it "handles a valid datatrans authorize response" do
88
- @transaction = Datatrans::Web::Transaction.new(@valid_params)
88
+ @transaction = Datatrans::Web::Transaction.new(@datatrans, @valid_params)
89
89
  @transaction.authorize.should be_true
90
90
  end
91
91
  end
@@ -96,7 +96,7 @@ describe Datatrans::Web::Transaction do
96
96
  fake_response = @successful_response
97
97
  fake_response[:sign2] = 'invalid'
98
98
  Datatrans::Web::Transaction::AuthorizeResponse.any_instance.stub(:params).and_return(fake_response)
99
- @transaction = Datatrans::Web::Transaction.new(@valid_params)
99
+ @transaction = Datatrans::Web::Transaction.new(@datatrans, @valid_params)
100
100
  end
101
101
 
102
102
  it "raises an exception if sign2 is invalid" do
@@ -109,7 +109,7 @@ describe Datatrans::Web::Transaction do
109
109
  context "failed response" do
110
110
  before do
111
111
  Datatrans::Web::Transaction::AuthorizeResponse.any_instance.stub(:params).and_return(@failed_response)
112
- @transaction = Datatrans::Web::Transaction.new(@valid_params)
112
+ @transaction = Datatrans::Web::Transaction.new(@datatrans, @valid_params)
113
113
  end
114
114
 
115
115
  context "process" do
@@ -7,61 +7,61 @@ describe Datatrans::XML::Transaction::AuthorizeRequest do
7
7
  "body" => {
8
8
  "transaction" => {
9
9
  "request" => {
10
- "amount" => "1000",
11
- "currency" => "CHF",
12
- "aliasCC" => "70323122544311173",
13
- "expm" => "12",
14
- "expy" => "15",
15
- "sign" => "1d236349b97fac15b267becb0792d185",
10
+ "amount" => "1000",
11
+ "currency" => "CHF",
12
+ "aliasCC" => "70323122544311173",
13
+ "expm" => "12",
14
+ "expy" => "15",
15
+ "sign" => "1d236349b97fac15b267becb0792d185",
16
16
  "reqtype" => "NOA"
17
- },
17
+ },
18
18
  "response" => {
19
- "responseCode" => "01",
20
- "responseMessage" => "Authorized",
21
- "uppTransactionId" => "110808142256858007",
22
- "authorizationCode" => "257128012",
23
- "acqAuthorizationCode" => "142257",
24
- "maskedCC" => "520000xxxxxx0007",
19
+ "responseCode" => "01",
20
+ "responseMessage" => "Authorized",
21
+ "uppTransactionId" => "110808142256858007",
22
+ "authorizationCode" => "257128012",
23
+ "acqAuthorizationCode" => "142257",
24
+ "maskedCC" => "520000xxxxxx0007",
25
25
  "returnCustomerCountry" => "CHE"
26
- },
27
- "refno" => "ABCDEF",
26
+ },
27
+ "refno" => "ABCDEF",
28
28
  "trxStatus" => "response"
29
- },
30
- "merchantId" => "1100001872",
29
+ },
30
+ "merchantId" => "1100001872",
31
31
  "status" => "accepted"
32
- },
32
+ },
33
33
  "version" => "1"
34
34
  }
35
35
  }
36
-
36
+
37
37
  @failed_response = {
38
38
  "authorizationService" => {
39
39
  "body" => {
40
40
  "transaction" => {
41
41
  "request" => {
42
- "amount" => "1000",
43
- "currency" => "CHF",
44
- "aliasCC" => "70323122544311173",
45
- "expm" => "12",
46
- "expy" => "15",
47
- "sign" => "1d236349b97fac15b267becb0792d185",
42
+ "amount" => "1000",
43
+ "currency" => "CHF",
44
+ "aliasCC" => "70323122544311173",
45
+ "expm" => "12",
46
+ "expy" => "15",
47
+ "sign" => "1d236349b97fac15b267becb0792d185",
48
48
  "reqtype" => "NOA"
49
- },
49
+ },
50
50
  "error" => {
51
- "errorCode" => "2021",
52
- "errorMessage" => "missing value",
51
+ "errorCode" => "2021",
52
+ "errorMessage" => "missing value",
53
53
  "errorDetail" => "CC-alias"
54
- },
55
- "refno" => "ABCDEF",
54
+ },
55
+ "refno" => "ABCDEF",
56
56
  "trxStatus" => "response"
57
- },
58
- "merchantId" => "1100001872",
57
+ },
58
+ "merchantId" => "1100001872",
59
59
  "status" => "accepted"
60
- },
60
+ },
61
61
  "version" => "1"
62
62
  }
63
63
  }
64
-
64
+
65
65
  @valid_params = {
66
66
  :refno => 'ABCDEF',
67
67
  :amount => 1000,
@@ -71,38 +71,38 @@ describe Datatrans::XML::Transaction::AuthorizeRequest do
71
71
  :expy => 15
72
72
  }
73
73
  end
74
-
74
+
75
75
  context "successful response" do
76
76
  before do
77
77
  Datatrans::XML::Transaction::AuthorizeRequest.any_instance.stub(:process).and_return(@successful_response)
78
78
  end
79
-
79
+
80
80
  context "build_authorize_request" do
81
81
  it "generates a valid datatrans authorize xml" do
82
- @request = Datatrans::XML::Transaction::AuthorizeRequest.new(@valid_params)
82
+ @request = Datatrans::XML::Transaction::AuthorizeRequest.new(@datatrans, @valid_params)
83
83
  @request.send(:build_authorize_request).should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?><authorizationService version=\"1\"><body merchantId=\"1100000000\"><transaction refno=\"ABCDEF\"><request><amount>1000</amount><currency>CHF</currency><aliasCC>3784982984234</aliasCC><expm>12</expm><expy>15</expy><sign>0402fb3fba8c6fcb40df9b7756e7e637</sign></request></transaction></body></authorizationService>"
84
84
  end
85
85
  end
86
-
86
+
87
87
  context "process" do
88
88
  it "handles a valid datatrans authorize response" do
89
- @transaction = Datatrans::XML::Transaction.new(@valid_params)
89
+ @transaction = Datatrans::XML::Transaction.new(@datatrans, @valid_params)
90
90
  @transaction.authorize.should be_true
91
91
  end
92
92
  end
93
93
  end
94
-
94
+
95
95
  context "failed response" do
96
96
  before do
97
97
  Datatrans::XML::Transaction::AuthorizeRequest.any_instance.stub(:process).and_return(@failed_response)
98
- @transaction = Datatrans::XML::Transaction.new(@valid_params)
98
+ @transaction = Datatrans::XML::Transaction.new(@datatrans, @valid_params)
99
99
  end
100
-
100
+
101
101
  context "process" do
102
102
  it "handles a failed datatrans authorize response" do
103
103
  @transaction.authorize.should be_false
104
104
  end
105
-
105
+
106
106
  it "returns error details" do
107
107
  @transaction.authorize
108
108
  @transaction.error_code.length.should > 0
@@ -68,14 +68,14 @@ describe Datatrans::XML::Transaction::CaptureRequest do
68
68
 
69
69
  context "build_capture_request" do
70
70
  it "generates a valid datatrans capture xml" do
71
- @request = Datatrans::XML::Transaction::CaptureRequest.new(@valid_params)
71
+ @request = Datatrans::XML::Transaction::CaptureRequest.new(@datatrans, @valid_params)
72
72
  @request.send(:build_capture_request).should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?><paymentService version=\"1\"><body merchantId=\"1100000000\"><transaction refno=\"ABCDEF\"><request><amount>1000</amount><currency>CHF</currency><uppTransactionId>110808142256858007</uppTransactionId></request></transaction></body></paymentService>"
73
73
  end
74
74
  end
75
75
 
76
76
  context "process" do
77
77
  it "handles a valid datatrans capture response" do
78
- @transaction = Datatrans::XML::Transaction.new(@valid_params)
78
+ @transaction = Datatrans::XML::Transaction.new(@datatrans, @valid_params)
79
79
  @transaction.capture.should be_true
80
80
  end
81
81
  end
@@ -84,7 +84,7 @@ describe Datatrans::XML::Transaction::CaptureRequest do
84
84
  context "failed response" do
85
85
  before do
86
86
  Datatrans::XML::Transaction::CaptureRequest.any_instance.stub(:process).and_return(@failed_response)
87
- @transaction = Datatrans::XML::Transaction.new(@valid_params)
87
+ @transaction = Datatrans::XML::Transaction.new(@datatrans, @valid_params)
88
88
  end
89
89
 
90
90
  context "process" do