var.rb
2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
require 'var/version'
require 'conekta'
require 'paypal-sdk-rest'
require 'acts_as_chargeable'
require 'conekta_handler'
require 'conekta_oxxo_handler'
require 'conekta_card_handler'
require 'conekta_spei_handler'
require 'conekta_payout_handler'
# Main Module
module Var
VALID_SERVICES = [:conekta].freeze
@@var_classes = []
class << self
def var_classes
@@var_classes
end
def add_var_class(class_name)
@@var_classes << class_name unless @@var_classes.include? class_name
end
def create_charge(service, object, options = {})
raise 'Service is not supported' unless supported_service? service
raise "#{object.class} doesn't support charges" unless object.respond_to? :charge_with
object.charge_with(service, options)
end
def conekta_webhook(event)
raise "Hash expected, received #{event.class}" unless event.class == Hash
raise 'Malformed hash received' unless event[:data] &&
event[:data][:object]
payment_type = event[:data][:object][:object]
if payment_type == "transfer"
ConektaPayoutHandler.analyze(event)
else
payment_type = event[:data][:object][:payment_method][:object]
case payment_type
when 'cash_payment'
ConektaOxxoHandler.analyze(event)
when 'card_payment'
ConektaCardHandler.analyze(event)
when 'bank_transfer_payment'
ConektaSpeiHandler.analyze(event)
end
end
# payment = event[:data][:object]
# object = Var.find_charge payment[:id]
# # object.handle_conekta_event
# update_object_var_data(object, payment)
# object
end
def update_object_var_data(object, data)
payment = data
object.update_columns(var_status: payment[:status])
return object unless object.var_payed?
time = Time.strptime payment[:paid_at].to_s, '%s'
amount = payment[:amount].to_f / 100.0
fee = payment[:fee].to_f / 100.0
object.update(var_fee: fee, var_paid_amount: amount,
var_payment_method: payment[:payment_method][:object],
var_payment_at: time)
end
def find_charge(id)
# Rails.application.eager_load! if Rails.env.development?
@@var_classes.map do |class_name|
class_name.where(var_id: id)
end.flatten.first
end
private
def supported_service?(service)
VALID_SERVICES.include? service
end
end
end
if defined? ActiveRecord::Base
ActiveRecord::Base.send(:include, ActsAsChargeable)
end