Class: Gateway::RazorpayGateway

Inherits:
Gateway
  • Object
show all
Defined in:
app/models/spree/gateway/razorpay_gateway.rb

Instance Method Summary collapse

Instance Method Details

#actionsObject



71
72
73
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 71

def actions
  %w[capture void]
end

#auto_capture?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 63

def auto_capture?
  true
end

#can_capture?(payment) ⇒ Boolean

Returns:

  • (Boolean)


75
76
77
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 75

def can_capture?(payment)
  %w[checkout pending].include?(payment.state)
end

#can_void?(payment) ⇒ Boolean

Returns:

  • (Boolean)


79
80
81
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 79

def can_void?(payment)
  payment.state != 'void'
end

#cancel(payment, _options = {}) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 100

def cancel(payment, _options = {})
 # If `payment` is a Spree::Payment, use its source
    source = if payment.respond_to?(:source)
     payment.source else payment end
     payment.void! if payment.respond_to?(:void!)
 if source.respond_to?(:razorpay_payment_id)
  # Uncomment if you want to actually trigger refund
  # Razorpay::Payment.fetch(source.razorpay_payment_id).refund
  OpenStruct.new(success?: true, authorization: source.razorpay_payment_id)
 else
  # fallback for string/unknown source
  OpenStruct.new(success?: true, authorization: nil)
 end
 rescue => e
  Rails.logger.error("Razorpay cancel failed: #{e.message}")
  OpenStruct.new(success?: false, message: e.message)
end

#capture(*args) ⇒ Object



88
89
90
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 88

def capture(*args)
  simulated_successful_billing_response
end

#configuration_guide_partial_nameObject



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

def configuration_guide_partial_name
  'razorpay'
end

#credit(_credit_cents, _payment_id, _options) ⇒ Object



96
97
98
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 96

def credit(_credit_cents, _payment_id, _options)
  ActiveMerchant::Billing::Response.new(true, 'Refund successful')
end

#current_key_idObject



55
56
57
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 55

def current_key_id
  preferred_test_mode ? preferred_test_key_id : preferred_key_id
end

#current_key_secretObject



59
60
61
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 59

def current_key_secret
  preferred_test_mode ? preferred_test_key_secret : preferred_key_secret
end

#description_partial_nameObject



39
40
41
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 39

def description_partial_name
  'razorpay'
end

#method_typeObject



27
28
29
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 27

def method_type
  'razorpay'
end

#nameObject



23
24
25
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 23

def name
  'Razorpay Secure (UPI, Wallets, Cards & Netbanking)'
end

#payment_icon_nameObject



35
36
37
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 35

def payment_icon_name
  'razorpay'
end

#payment_source_classObject



31
32
33
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 31

def payment_source_class
  'razorpay'
end

#providerObject



51
52
53
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 51

def provider
  Razorpay.setup(current_key_id, current_key_secret)
end

#provider_classObject



47
48
49
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 47

def provider_class
  self
end

#purchase(_amount, _transaction_details, _gateway_options = {}) ⇒ Object

Not used directly (we use custom flow), but kept it for compatibility



84
85
86
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 84

def purchase(_amount, _transaction_details, _gateway_options = {})
  ActiveMerchant::Billing::Response.new(true, 'Razorpay success')
end

#request_typeObject



67
68
69
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 67

def request_type
  'DEFAULT'
end

#source_required?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 19

def source_required?
  false
end

#supports?(_source) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 15

def supports?(_source)
  true
end

#verify_and_capture_razorpay_payment(order, razorpay_payment_id) ⇒ Object

Verify signature, fetch payment and capture if required. Returns Razorpay::Payment object.



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 119

def verify_and_capture_razorpay_payment(order, razorpay_payment_id)
  Razorpay.setup(current_key_id, current_key_secret)

  begin
    payment = Razorpay::Payment.fetch(razorpay_payment_id)
    # If payment is not captured and auto_capture set true, capture it
    if payment.status == 'authorized'
      amount = order.inr_amt_in_paise
      payment = payment.capture(amount: amount)
    end

    payment
  rescue Razorpay::Error => e
    raise Spree::Core::GatewayError, "Razorpay error: #{e.message}"
  end
end

#voidObject



92
93
94
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 92

def void(*)
  simulated_successful_billing_response
end