vaulted_billing-termcap 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,6 +2,7 @@ require 'vaulted_billing'
2
2
  require 'vaulted_billing/termcap/gateway'
3
3
  require 'vaulted_billing/termcap/gateways/bogus'
4
4
  require 'vaulted_billing/termcap/gateways/ipcommerce'
5
+ require 'vaulted_billing/termcap/transactions/ipcommerce'
5
6
 
6
7
  module VaultedBilling
7
8
  module Termcap
@@ -1,7 +1,7 @@
1
1
  require 'vaulted_billing/gateways/ipcommerce'
2
+ require 'vaulted_billing/termcap/transactions/ipcommerce'
2
3
 
3
4
  VaultedBilling::Gateways::Ipcommerce.class_eval do
4
-
5
5
  ##
6
6
  # Captures the passed in transaction ids.
7
7
  # Optionally specify difference amounts for each transaction.
@@ -17,7 +17,7 @@ VaultedBilling::Gateways::Ipcommerce.class_eval do
17
17
  :DifferenceData => (differences || []).collect { |difference| capture_difference(difference) }
18
18
  }
19
19
 
20
- response = http(options[:workflow_id] || @service_id).put(data, { :on_success => :decode_with_termcap })
20
+ response = http("Txn", options[:workflow_id] || @service_id).put(data, { :on_success => :decode_with_termcap })
21
21
  transaction = new_transaction_from_response(response)
22
22
  respond_with(transaction,
23
23
  response,
@@ -32,7 +32,7 @@ VaultedBilling::Gateways::Ipcommerce.class_eval do
32
32
  :MerchantProfileId => options[:merchant_profile_id]
33
33
  }
34
34
 
35
- response = http(options[:workflow_id] || @service_id).put(data, { :on_success => :decode_with_termcap })
35
+ response = http("Txn", options[:workflow_id] || @service_id).put(data, { :on_success => :decode_with_termcap })
36
36
  transaction = new_transaction_from_response(response)
37
37
  respond_with(transaction,
38
38
  response,
@@ -62,13 +62,94 @@ VaultedBilling::Gateways::Ipcommerce.class_eval do
62
62
  }
63
63
  }
64
64
 
65
- response = http(options[:workflow_id] || @service_id).post(data)
65
+ response = http("Txn", options[:workflow_id] || @service_id).post(data)
66
66
  transaction = new_transaction_from_response(response)
67
67
  respond_with(transaction,
68
68
  response,
69
69
  :success => (transaction.code == 1))
70
70
  end
71
71
 
72
+ def query_transaction_details(options={})
73
+ data = {
74
+ :"__type" => "QueryTransactionsDetail:http://schemas.ipcommerce.com/CWS/v2.0/DataServices/TMS/Rest",
75
+ :PagingParameters => paging_parameters(options[:page], options[:per_page]),
76
+ :IncludeRelated => options[:include_related] || 1,
77
+ :QueryTransactionsParameters => {
78
+ :"__type" => "QueryTransactionsParameters:http://schemas.ipcommerce.com/CWS/v2.0/DataServices/TMS",
79
+ :IsAcknowledged => options[:is_acknowledged] || 0,
80
+ :QueryType => options[:query_type] || 0,
81
+ :TransactionIds => options[:transaction_ids] || nil
82
+ }.merge(date_range("TransactionDateRange", options[:start_date], options[:end_date])),
83
+ :TransactionDetailFormat => 2
84
+ }
85
+
86
+ if options[:end_date] && options[:start_date]
87
+ data[:QueryTransactionsParameters].merge!(date_range(ptions[:start_date], options[:end_date]))
88
+ end
89
+
90
+ response = http("DataServices", "TMS", "transactionsDetail").post(data, { :on_success => :decode_query_response } )
91
+ transactions = decode_query(response.body)
92
+ respond_with(transactions,
93
+ response,
94
+ :success => response.success?)
95
+ end
96
+
97
+ def query_transactions_families(options={})
98
+ data = {
99
+ :"__type" => "QueryTransactionsFamilies:http://schemas.ipcommerce.com/CWS/v2.0/DataServices/TMS/Rest",
100
+ :PagingParameters => paging_parameters(options[:page], options[:per_page]),
101
+ :QueryTransactionsParameters => {
102
+ :"__type" => "QueryTransactionsParameters:http://schemas.ipcommerce.com/CWS/v2.0/DataServices/TMS",
103
+ :IsAcknowledged => options[:is_acknowledged] || 0,
104
+ :QueryType => options[:query_type] || 0,
105
+ :TransactionIds => options[:transaction_ids] || nil
106
+ }.merge(date_range("TransactionDateRange", options[:start_date], options[:end_date]))
107
+ }
108
+
109
+ response = http("DataServices", "TMS", "transactionsFamily").post(data, { :on_success => :decode_query_response } )
110
+ transactions = response.body
111
+ respond_with(transactions,
112
+ response,
113
+ :success => response.success?)
114
+ end
115
+
116
+ def query_batch(options={})
117
+ data = {
118
+ :"__type" => "QueryBatch:http://schemas.ipcommerce.com/CWS/v2.0/DataServices/TMS/Rest",
119
+ :PagingParameters => paging_parameters(options[:page], options[:per_page]),
120
+ :QueryBatchParameters => {
121
+ :"__type" => "QueryBatchParameters:http://schemas.ipcommerce.com/CWS/v2.0/DataServices/TMS",
122
+ :IsAcknowledged => options[:is_acknowledged] || 0,
123
+ :QueryType => options[:query_type] || 0
124
+ }.merge(date_range("BatchDateRange", options[:start_date], options[:end_date]))
125
+ }
126
+
127
+ response = http("DataServices", "TMS", "batch").post(data, { :on_success => :decode_query_response } )
128
+ transactions = response.body
129
+ respond_with(transactions,
130
+ response,
131
+ :success => response.success?)
132
+ end
133
+
134
+ def query_transactions_summary(options={})
135
+ data = {
136
+ :"__type" => "QueryTransactionsSummary:http://schemas.ipcommerce.com/CWS/v2.0/DataServices/TMS/Rest",
137
+ :PagingParameters => paging_parameters(options[:page], options[:per_page]),
138
+ :QueryTransactionsParameters => {
139
+ :"__type" => "QueryTransactionsParameters:http://schemas.ipcommerce.com/CWS/v2.0/DataServices/TMS",
140
+ :IsAcknowledged => options[:is_acknowledged] || 0,
141
+ :QueryType => options[:query_type] || 0,
142
+ :TransactionIds => options[:transaction_ids] || nil
143
+ }.merge(date_range("TransactionDateRange", options[:start_date], options[:end_date]))
144
+ }
145
+
146
+ response = http("DataServices", "TMS", "transactionsSummary").post(data, { :on_success => :decode_query_response } )
147
+ transactions = response.body
148
+ respond_with(transactions,
149
+ response,
150
+ :success => response.success?)
151
+ end
152
+
72
153
  private
73
154
 
74
155
  def decode_with_termcap(response)
@@ -77,6 +158,17 @@ VaultedBilling::Gateways::Ipcommerce.class_eval do
77
158
  response.success = [1, 2].include?(response.body['Status'])
78
159
  end
79
160
 
161
+ def decode_query_response(response)
162
+ response.body = decode_body(response.body) || {}
163
+ response.success = response.body.is_a?(Array)
164
+ end
165
+
166
+ def decode_query(transactions)
167
+ transactions.collect do |transaction|
168
+ VaultedBilling::Transactions::Ipcommerce.new(transaction)
169
+ end
170
+ end
171
+
80
172
  def capture_difference(difference)
81
173
  {
82
174
  :"__type" => "BankcardCapture:http://schemas.ipcommerce.com/CWS/v2.0/Transactions/Bankcard",
@@ -85,4 +177,22 @@ VaultedBilling::Gateways::Ipcommerce.class_eval do
85
177
  :Amount => "%.2f" % difference[:amount]
86
178
  }
87
179
  end
180
+
181
+ def date_range(key, start_date, end_date)
182
+ return {} unless start_date && end_date
183
+ {
184
+ "#{key}" => {
185
+ :EndDateTime => "Date(#{end_date.to_int*1000})",
186
+ :StartDateTime => "Date(#{start_date.to_int*1000})"
187
+ }
188
+ }
189
+ end
190
+
191
+ def paging_parameters(page, per_page)
192
+ {
193
+ :"__type" => "PagingParameters:http://schemas.ipcommerce.com/CWS/v2.0/DataServices",
194
+ :Page => page || 0,
195
+ :PageSize => per_page || 50
196
+ }
197
+ end
88
198
  end
@@ -0,0 +1,60 @@
1
+ module VaultedBilling
2
+ module Transactions
3
+ class Ipcommerce < VaultedBilling::Transaction
4
+ CaptureStates = %w(
5
+ !! NotSet CannotCapture ReadyForCapture CapturePending Captured
6
+ CaptureDeclined InProcess CapturedUndoPermitted CapturePendingUndoPermitted CaptureError
7
+ CaptureUnknown BatchSent BatchSentUndoPermitted
8
+ ).freeze
9
+
10
+ TransactionStates = %w(
11
+ !! NotSet Declined Verified Authorized Adjusted
12
+ Captured CaptureDeclined PartiallyCaptured Undone ReturnRequested
13
+ PartialReturnRequested ReturnUndone Returned PartiallyReturned InProcess
14
+ ErrorValidation ErrorUnknown ErrorConnecting
15
+ ).freeze
16
+
17
+ attr_accessor :raw_result
18
+ attr_accessor :id
19
+ attr_accessor :amount
20
+ attr_accessor :approval_code
21
+ attr_accessor :captured_amount
22
+ attr_accessor :captured_state
23
+ attr_accessor :captured_state_id
24
+ attr_accessor :captured_status_message
25
+ attr_accessor :transaction_state_id
26
+ attr_accessor :transaction_state
27
+ attr_accessor :batch_id
28
+
29
+ def captured?
30
+ %w(Captured).include?(captured_state)
31
+ end
32
+
33
+ def capture_failed?
34
+ %w(CaptureDeclined CaptureError).include?(captured_state)
35
+ end
36
+
37
+ def capture_pending?
38
+ %w(BatchSent InProcess).include?(captured_state)
39
+ end
40
+
41
+ def failed?
42
+ %w(Declined CaptureDeclined ErrorValidation ErrorUnknown).include?(transaction_state)
43
+ end
44
+
45
+ def initialize(input)
46
+ self.raw_result = input.to_s
47
+ self.id = input['TransactionInformation']['TransactionId']
48
+ self.amount = input['TransactionInformation']['Amount']
49
+ self.approval_code = input['TransactionInformation']['ApprovalCode']
50
+ self.captured_amount = input['TransactionInformation']['CapturedAmount']
51
+ self.captured_state = CaptureStates[input['TransactionInformation']['CaptureState']]
52
+ self.captured_state_id = input['TransactionInformation']['CaptureState']
53
+ self.captured_status_message = input['TransactionInformation']['CaptureStatusMessage']
54
+ self.transaction_state_id = input['TransactionInformation']['TransactionState']
55
+ self.transaction_state =TransactionStates[input['TransactionInformation']['TransactionState']]
56
+ self.batch_id = input['TransactionInformation']['BatchId']
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,5 +1,5 @@
1
1
  module VaultedBilling
2
2
  module Termcap
3
- Version = '0.0.3'
3
+ Version = '0.0.4'
4
4
  end
5
5
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: vaulted_billing-termcap
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.3
5
+ version: 0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Adam Fortuna
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-30 00:00:00 -04:00
13
+ date: 2011-08-31 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -21,7 +21,7 @@ dependencies:
21
21
  requirements:
22
22
  - - ~>
23
23
  - !ruby/object:Gem::Version
24
- version: 1.1.1
24
+ version: 1.1.3
25
25
  type: :runtime
26
26
  version_requirements: *id001
27
27
  - !ruby/object:Gem::Dependency
@@ -125,6 +125,7 @@ files:
125
125
  - lib/vaulted_billing/termcap/gateway.rb
126
126
  - lib/vaulted_billing/termcap/gateways/bogus.rb
127
127
  - lib/vaulted_billing/termcap/gateways/ipcommerce.rb
128
+ - lib/vaulted_billing/termcap/transactions/ipcommerce.rb
128
129
  - lib/vaulted_billing/termcap/version.rb
129
130
  - lib/vaulted_billing/termcap.rb
130
131
  - lib/vaulted_billing-termcap.rb