Class: Gateway::AcledaV2

Inherits:
PaymentMethod
  • Object
show all
Defined in:
app/models/spree/gateway/acleda_v2.rb

Constant Summary collapse

MODES =
%w[khqr card deeplink].freeze

Instance Method Summary collapse

Instance Method Details

#auto_capture?Boolean

override: process! -> purchase! immediately (no pre-auth for ACLEDA V2)

Returns:

  • (Boolean)


58
59
60
# File 'app/models/spree/gateway/acleda_v2.rb', line 58

def auto_capture?
  true
end

#available_for_order?(_order) ⇒ Boolean

override

Returns:

  • (Boolean)


53
54
55
# File 'app/models/spree/gateway/acleda_v2.rb', line 53

def available_for_order?(_order)
  true
end

#cancel(_response_code, _payment = nil) ⇒ Object

override



89
90
91
# File 'app/models/spree/gateway/acleda_v2.rb', line 89

def cancel(_response_code, _payment = nil)
  ActiveMerchant::Billing::Response.new(true, 'Acleda V2: Payment has been canceled.')
end

#card?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'app/models/spree/gateway/acleda_v2.rb', line 24

def card?
  preferred_acleda_v2_mode == 'card'
end

#check_transaction(payment) ⇒ Object

Defining check_transaction makes support_check_transaction_api? true, enabling the /vpago_payments/check_transaction poller.



82
83
84
85
86
# File 'app/models/spree/gateway/acleda_v2.rb', line 82

def check_transaction(payment)
  checker = Vpago::AcledaV2::TransactionStatus.new(payment)
  checker.call
  checker
end

#deeplink?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'app/models/spree/gateway/acleda_v2.rb', line 28

def deeplink?
  preferred_acleda_v2_mode == 'deeplink'
end

#khqr?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'app/models/spree/gateway/acleda_v2.rb', line 20

def khqr?
  preferred_acleda_v2_mode == 'khqr'
end

#method_typeObject

override: partial to render in admin



38
39
40
# File 'app/models/spree/gateway/acleda_v2.rb', line 38

def method_type
  'acleda_v2'
end

#payment_card_valueObject

KHQR (Scan with Bank under Bakong) = "0"; Credit/debit card = "1"



33
34
35
# File 'app/models/spree/gateway/acleda_v2.rb', line 33

def payment_card_value
  card? ? '1' : '0'
end

#payment_profiles_supported?Boolean

override

Returns:

  • (Boolean)


48
49
50
# File 'app/models/spree/gateway/acleda_v2.rb', line 48

def payment_profiles_supported?
  false
end

#payment_source_classObject

override



43
44
45
# File 'app/models/spree/gateway/acleda_v2.rb', line 43

def payment_source_class
  Spree::VpagoPaymentSource
end

#purchase(_amount, _source, gateway_options = {}) ⇒ Object

override mirror PayWay V2: gateway_options == "<order_number>-<payment_number>"



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'app/models/spree/gateway/acleda_v2.rb', line 64

def purchase(_amount, _source, gateway_options = {})
  _, payment_number = gateway_options[:order_id].split('-')
  payment = Spree::Payment.find_by(number: payment_number)

  checker = check_transaction(payment)
  payment.update(transaction_response: checker.json_response)

  params = { check: { response: checker.json_response } }

  if checker.success?
    ActiveMerchant::Billing::Response.new(true, 'Acleda V2: Purchased', params)
  else
    ActiveMerchant::Billing::Response.new(false, 'Acleda V2: Purchasing Failed', params)
  end
end