killbill-orbital 0.1.12 → 0.1.13

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e1ca1d723442e1b944426f5658554ecf5761ce36
4
- data.tar.gz: 27475d69b785ec1300871f4f12df73375a03ff1f
3
+ metadata.gz: 34aa421fcb4e6b2539700ea5eaff7d3ef5c4b96b
4
+ data.tar.gz: a1ad089995e310ea08c257b9cffd1ddbe0876e38
5
5
  SHA512:
6
- metadata.gz: 0fcc71c6114203ec78482a24b9851c532bf972c563b6bcc8b8fa5d5fee99d213de48e4ca9c402399fdb1eaaa88e313dd3e09a195e491b12ccf0388453e2f6ea5
7
- data.tar.gz: 61885168ddb76af0da6764fae6c23ee8233504c4a4dc8073763e210a3970946cc56dc98761548ad3963db0f93c76c9b2e03b57367717fce1d5e5253c53f9134f
6
+ metadata.gz: 0d2bf1c5d2d8cbfc1b006b487e416e6373b9921d75d35fedf1989de4607be8fc47ad1708c457f9ea4226555b558696a414d2da9acb232078ae98c812b8c2d838
7
+ data.tar.gz: d8bda545780a5b4d7ffe25f8c62fe7fa82c38c4f233af54f5593e81d2f33e1045ee9fe4d5f9aee31dec6842d51dd597e456933630b7038e161cd9fa371e2a11b
data/lib/orbital/api.rb CHANGED
@@ -148,29 +148,48 @@ module Killbill #:nodoc:
148
148
 
149
149
  def try_fix_undefined_trxs(plugin_trxs_info, options, context)
150
150
  stale = false
151
+ auth_order_id = find_auth_order_id(plugin_trxs_info)
151
152
  plugin_trxs_info.each do |plugin_trx_info|
152
153
  next unless should_try_to_fix_trx plugin_trx_info, options
153
- stale = true if fix_undefined_trx plugin_trx_info, context, options
154
+ # Resort to auth order id for scenarios like MarkForCapture where Orbital Order Id is not persisted
155
+ # when remote call fails.
156
+ order_id = plugin_trx_info.second_payment_reference_id.nil? ? auth_order_id : plugin_trx_info.second_payment_reference_id
157
+ stale = true if fix_undefined_trx plugin_trx_info, order_id, context, options
154
158
  end
155
159
  stale
156
160
  end
157
161
 
162
+ def find_auth_order_id(plugin_trxs_info)
163
+ auth_plugin_info_with_order_id = plugin_trxs_info.find { |info| info.transaction_type == :AUTHORIZE && !info.second_payment_reference_id.nil? }
164
+ return auth_plugin_info_with_order_id.nil? ? nil : auth_plugin_info_with_order_id.second_payment_reference_id
165
+ end
166
+
158
167
  def should_try_to_fix_trx(plugin_trx_info, options)
159
168
  plugin_trx_info.status == :UNDEFINED && pass_delay_time(plugin_trx_info, options)
160
169
  end
161
170
 
162
- def fix_undefined_trx(plugin_trx_info, context, options)
163
- inquiry_response = inquiry(plugin_trx_info, context)
164
- update_response_if_needed plugin_trx_info, inquiry_response, options
171
+ def fix_undefined_trx(plugin_trx_info, order_id, context, options)
172
+ payment_processor_account_id = find_value_from_properties(plugin_trx_info.properties, 'payment_processor_account_id')
173
+ trace_number = find_value_from_properties(plugin_trx_info.properties, 'trace_number')
174
+ return false if trace_number.nil? || order_id.nil? || payment_processor_account_id.nil?
175
+
176
+ gateway = lookup_gateway(payment_processor_account_id, context.tenant_id)
177
+ if plugin_trx_info.transaction_type == :CAPTURE
178
+ response, amount, currency = retry_capture(plugin_trx_info, order_id, trace_number, context, gateway)
179
+ update_response_if_needed plugin_trx_info, order_id, response, options, amount, currency
180
+ else
181
+ response = inquiry(order_id, trace_number, gateway)
182
+ update_response_if_needed plugin_trx_info, order_id, response, options
183
+ end
165
184
  end
166
185
 
167
- def update_response_if_needed(plugin_trx_info, inquiry_response, options)
186
+ def update_response_if_needed(plugin_trx_info, order_id, inquiry_response, options, amount = nil, currency = nil)
168
187
  response_id = find_value_from_properties(plugin_trx_info.properties, 'orbital_response_id')
169
188
  response = OrbitalResponse.find_by(:id => response_id)
170
189
  updated = false
171
- if should_update_response inquiry_response, plugin_trx_info
190
+ if should_update_response inquiry_response, order_id
172
191
  logger.info("Fixing UNDEFINED kb_transaction_id='#{plugin_trx_info.kb_transaction_payment_id}', success='#{inquiry_response.success?}'")
173
- response.update_and_create_transaction(inquiry_response)
192
+ response.update_and_create_transaction(inquiry_response, amount, currency)
174
193
  updated = true
175
194
  elsif should_cancel_payment plugin_trx_info, options
176
195
  @logger.info("Canceling UNDEFINED kb_transaction_id='#{plugin_trx_info.kb_transaction_payment_id}'")
@@ -180,8 +199,8 @@ module Killbill #:nodoc:
180
199
  updated
181
200
  end
182
201
 
183
- def should_update_response(inquiry_response, plugin_trx_info)
184
- !inquiry_response.nil? && !inquiry_response.params.nil? && inquiry_response.params['order_id'] == plugin_trx_info.second_payment_reference_id
202
+ def should_update_response(inquiry_response, order_id)
203
+ !inquiry_response.nil? && !inquiry_response.params.nil? && inquiry_response.params['order_id'] == order_id
185
204
  end
186
205
 
187
206
  def should_cancel_payment(plugin_trx_info, options)
@@ -203,15 +222,23 @@ module Killbill #:nodoc:
203
222
  Time.parse(@clock.get_clock.get_utc_now.to_s)
204
223
  end
205
224
 
206
- def inquiry(plugin_trx_info, context)
207
- payment_processor_account_id = find_value_from_properties(plugin_trx_info.properties, 'payment_processor_account_id')
208
- trace_number = find_value_from_properties(plugin_trx_info.properties, 'trace_number')
209
- orbital_order_id = plugin_trx_info.second_payment_reference_id
225
+ def inquiry(order_id, trace_number, gateway)
226
+ gateway.inquiry(order_id, trace_number)
227
+ end
210
228
 
211
- return nil if trace_number.nil? || orbital_order_id.nil? || payment_processor_account_id.nil?
229
+ def retry_capture(plugin_trx_info, order_id, trace_number, context, gateway)
230
+ options = {:trace_number => trace_number, :order_id => order_id}
231
+ kb_payment = @kb_apis.payment_api.get_payment(plugin_trx_info.kb_payment_id, false, false, [], nil)
232
+ kb_transaction = kb_payment.transactions.detect {|trx| trx.id == plugin_trx_info.kb_transaction_payment_id}
233
+ linked_trx = @transaction_model.authorizations_from_kb_payment_id(plugin_trx_info.kb_payment_id, context.tenant_id).last
212
234
 
213
- gateway = lookup_gateway(payment_processor_account_id, context.tenant_id)
214
- gateway.inquiry(orbital_order_id, trace_number)
235
+ amount = kb_transaction.amount
236
+ currency = kb_transaction.currency
237
+ return [gateway.capture(to_cents(amount, currency),
238
+ linked_trx.txn_id,
239
+ options),
240
+ amount,
241
+ currency]
215
242
  end
216
243
 
217
244
  def with_trace_num_and_order_id(properties)
@@ -133,7 +133,7 @@ module ActiveMerchant
133
133
 
134
134
  # MFC - Mark For Capture or Force capture
135
135
  def capture(money, authorization, options = {})
136
- commit(build_mark_for_capture_xml(money, authorization, options), :capture)
136
+ commit(build_mark_for_capture_xml(money, authorization, options), :capture, options[:trace_number])
137
137
  end
138
138
 
139
139
  def credit(money, creditcard, options= {})
@@ -110,9 +110,9 @@ module Killbill #:nodoc:
110
110
  update!(updated_attributes)
111
111
  end
112
112
 
113
- def update_and_create_transaction(gw_response)
113
+ def update_and_create_transaction(gw_response, amount = nil, currency = nil)
114
114
  updated_attributes = {
115
- :message => gw_response.message,
115
+ :message => (gw_response.success? && gw_response.message.nil?) ? "" : gw_response.message,
116
116
  :authorization => gw_response.authorization,
117
117
  :fraud_review => gw_response.fraud_review?,
118
118
  :test => gw_response.test?,
@@ -127,15 +127,15 @@ module Killbill #:nodoc:
127
127
  }.merge(OrbitalResponse.orbital_response_params(gw_response))
128
128
 
129
129
  # Keep original values as much as possible
130
- updated_attributes.delete_if { |k, v| v.blank? }
130
+ updated_attributes.delete_if { |k, v| v.blank? && k != :message}
131
131
 
132
132
  # Update the response row
133
133
  update!(updated_attributes)
134
134
 
135
135
  # Create the transaction row if needed (cannot have been created before or the state wouldn't have been UNDEFINED)
136
136
  if gw_response.success?
137
- amount = gw_response.params['amount']
138
- currency = gw_response.params['currency']
137
+ amount = amount.nil? ? gw_response.params['amount'] : amount
138
+ currency = currency.nil? ? gw_response.params['currency'] : currency
139
139
  amount_in_cents = amount.nil? ? nil : ::Monetize.from_numeric(amount.to_f, currency).cents.to_i
140
140
  build_orbital_transaction(:kb_account_id => kb_account_id,
141
141
  :kb_tenant_id => kb_tenant_id,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: killbill-orbital
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kill Bill core team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-20 00:00:00.000000000 Z
11
+ date: 2018-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement