datatrans 2.4.0 → 3.0.0

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