smartkiosk-server 0.11.2 → 0.11.3

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.
@@ -12,61 +12,32 @@ class PaymentsController < ApplicationController
12
12
  end
13
13
 
14
14
  def create
15
- provider = Provider.find_by_keyword params[:provider]
16
-
17
- if provider.blank?
18
- Payment.plog :info, :web, "Provider #{params[:provider]} not found",
19
- :session_id => params[:payment][:session_id],
20
- :terminal_id => @terminal.id
21
-
22
- render :text => nil, :status => 404
23
- return
24
- end
25
-
26
- payment = Payment.where(
27
- :terminal_id => @terminal.id,
28
- :session_id => params[:payment][:session_id]
29
- ).first
30
-
31
- if payment.blank?
32
- if payment = Payment.build!(@terminal, provider, params[:payment])
33
- payment.plog :info, :transport, "Created"
34
-
35
- payment.plog :info, :transport, "Checked" do
36
- payment.check!
37
- end
38
-
39
- render :json => {
40
- :id => payment.id,
41
- :state => payment.state,
42
- :requires_print => provider.requires_print,
43
- :limits => Limit.for(payment, false).as_json(
44
- :only => [:min, :max], :methods => [:weight]
45
- ),
46
- :commissions => Commission.for(payment, false).as_json(
47
- :only => [:min, :max, :percent_fee, :static_fee, :payment_type],
48
- :methods => [:weight]
49
- ),
50
- :receipt_template => ProviderReceiptTemplate.for(payment).compile(payment)
51
- }
52
- else
53
- Payment.plog :info, :web, "Payment was not created"
54
- render :nothing => true, :status => 406
55
- end
15
+ payment = Payment.build!(@terminal, Provider.find_by_keyword(params[:provider]), params[:payment])
16
+
17
+ if payment
18
+ payment.check!
19
+
20
+ render :json => {
21
+ :id => payment.id,
22
+ :state => payment.state,
23
+ :requires_print => provider.requires_print,
24
+ :limits => Limit.for(payment, false).as_json(
25
+ :only => [:min, :max], :methods => [:weight]
26
+ ),
27
+ :commissions => Commission.for(payment, false).as_json(
28
+ :only => [:min, :max, :percent_fee, :static_fee, :payment_type],
29
+ :methods => [:weight]
30
+ ),
31
+ :receipt_template => ProviderReceiptTemplate.for(payment).compile(payment)
32
+ }
56
33
  else
57
- payment.plog :warn, :transport, "Existing payment found, declining"
58
- render :nothing => true, :status => 406
34
+ render :text => nil, :status => 406
59
35
  end
60
36
  end
61
37
 
62
38
  def pay
63
39
  payment = @terminal.payments.find(params[:id])
64
-
65
- unless payment.queue?
66
- payment.plog :info, :transport, "Sent to queue" do
67
- payment.enqueue!(params[:payment])
68
- end
69
- end
40
+ payment.enqueue!(params[:payment]) unless payment.queue?
70
41
 
71
42
  render :text => nil, :status => 200
72
43
  end
@@ -74,15 +74,17 @@ class Payment < ActiveRecord::Base
74
74
  end
75
75
 
76
76
  def enqueue!(attributes={})
77
- [ :paid_amount, :receipt_number, :card_track1, :card_track2, :meta ].each do |key|
78
- if attributes.include? key
79
- write_attribute key, attributes[key]
77
+ plog :info, :model, "Sent to queue" do
78
+ [ :paid_amount, :receipt_number, :card_track1, :card_track2, :meta ].each do |key|
79
+ if attributes.include? key
80
+ write_attribute key, attributes[key]
81
+ end
80
82
  end
81
- end
82
83
 
83
- enqueue
84
- save!
85
- PayWorker.perform_async(id)
84
+ enqueue
85
+ save!
86
+ PayWorker.perform_async(id)
87
+ end
86
88
  end
87
89
 
88
90
  #
@@ -186,7 +188,7 @@ class Payment < ActiveRecord::Base
186
188
  severity,
187
189
  datetime.iso8601(12),
188
190
  data[:progname],
189
- data[:payment_id],
191
+ "##{data[:payment_id]}",
190
192
  data[:payment_state],
191
193
  data[:session_id],
192
194
  data[:terminal_id],
@@ -245,17 +247,31 @@ class Payment < ActiveRecord::Base
245
247
 
246
248
  def self.build!(terminal, provider, attributes)
247
249
  payment = new(attributes)
250
+
251
+ if provider.blank?
252
+ payment.plog :warn, :model, "Provider not found"
253
+ return false
254
+ end
255
+
248
256
  provider_gateway = provider.provider_gateways.enabled.order(:priority).first
249
257
 
250
- return false if provider_gateway.blank?
258
+ if provider_gateway.blank?
259
+ payment.plog :info, :model, "Provider has no gateways attached"
260
+ return false
261
+ end
251
262
 
252
263
  payment.terminal = terminal
253
264
  payment.provider_gateway = provider_gateway
254
265
  payment.raw_fields = payment.fields
255
266
  payment.fields = provider_gateway.map(payment.account, payment.fields)
256
267
 
257
- payment.save!
258
- payment
268
+ if payment.save
269
+ payment.plog :info, :model, "Payment created"
270
+ payment
271
+ else
272
+ payment.plog :warn, :model, "Payment was invalidated: #{payment.errors.full_messages.join(', ')}"
273
+ false
274
+ end
259
275
  end
260
276
 
261
277
  def provider_gateway=(pg)
@@ -282,11 +298,13 @@ class Payment < ActiveRecord::Base
282
298
  result = self.gateway.librarize.check(self)
283
299
 
284
300
  if result[:success]
301
+ plog :info, :model, "Checked"
285
302
  self.gateway_error = nil
286
303
  self.gateway_payment_id = result[:gateway_payment_id] unless result[:gateway_payment_id].blank?
287
304
  self.save!
288
305
  return :checked
289
306
  else
307
+ plog :info, :model, "Declined: #{result[:error]}"
290
308
  self.update_attribute(:gateway_error, result[:error])
291
309
  return :declined
292
310
  end
@@ -308,7 +326,7 @@ class Payment < ActiveRecord::Base
308
326
 
309
327
  self.save!
310
328
  if !transaction.confirm
311
- self.plog :error, :acquirer, "unable to confirm transaction: #{transaction.error}"
329
+ self.plog :error, :model, "unable to confirm transaction: #{transaction.error}"
312
330
 
313
331
  # TODO: reverse on gateway if possible
314
332
  end
@@ -317,7 +335,7 @@ class Payment < ActiveRecord::Base
317
335
  else
318
336
  self.update_attribute(:gateway_error, result[:error])
319
337
  if !transaction.reverse
320
- self.plog :error, :acquirer, "unable to reverse transaction: #{transaction.error}"
338
+ self.plog :error, :model, "unable to reverse transaction: #{transaction.error}"
321
339
  end
322
340
 
323
341
  return :error
@@ -1,5 +1,5 @@
1
1
  module Smartkiosk
2
2
  module Server
3
- VERSION = '0.11.2'
3
+ VERSION = '0.11.3'
4
4
  end
5
5
  end
@@ -48,6 +48,53 @@ describe PaymentsController do
48
48
  }
49
49
  end
50
50
 
51
+ it "declines empty provider" do
52
+ post :create,
53
+ :terminal => 'test',
54
+ :payment => {
55
+ :session_id => 31337,
56
+ :account => '9261111111',
57
+ :payment_type => Payment::TYPE_CASH
58
+ }
59
+
60
+ response.code.should == "404"
61
+ end
62
+
63
+ it "declines absent provider" do
64
+ post :create,
65
+ :terminal => 'test',
66
+ :provider => 'idontexist',
67
+ :payment => {
68
+ :session_id => 31337,
69
+ :account => '9261111111',
70
+ :payment_type => Payment::TYPE_CASH
71
+ }
72
+
73
+ response.code.should == "404"
74
+ end
75
+
76
+ it "declines duplicating session id" do
77
+ post :create,
78
+ :terminal => 'test',
79
+ :provider => 'test',
80
+ :payment => {
81
+ :session_id => 31337,
82
+ :account => '9261111111',
83
+ :payment_type => Payment::TYPE_CASH
84
+ }
85
+
86
+ post :create,
87
+ :terminal => 'test',
88
+ :provider => 'test',
89
+ :payment => {
90
+ :session_id => 31337,
91
+ :account => '9261111111',
92
+ :payment_type => Payment::TYPE_CASH
93
+ }
94
+
95
+ response.code.should == "406"
96
+ end
97
+
51
98
  it "pays" do
52
99
  post :create,
53
100
  :terminal => 'test',
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartkiosk-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.2
4
+ version: 0.11.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -332,7 +332,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
332
332
  version: '0'
333
333
  segments:
334
334
  - 0
335
- hash: -1222065104892859917
335
+ hash: 2751133508454068460
336
336
  required_rubygems_version: !ruby/object:Gem::Requirement
337
337
  none: false
338
338
  requirements: