Class: Gateway::RazorpayGateway
- Inherits:
-
Gateway
- Object
- Gateway
- Gateway::RazorpayGateway
- Defined in:
- app/models/spree/gateway/razorpay_gateway.rb
Instance Method Summary collapse
- #actions ⇒ Object
- #auto_capture? ⇒ Boolean
- #can_capture?(payment) ⇒ Boolean
- #can_void?(payment) ⇒ Boolean
- #cancel(payment, _options = {}) ⇒ Object
- #capture(*args) ⇒ Object
- #configuration_guide_partial_name ⇒ Object
- #credit(_credit_cents, _payment_id, _options) ⇒ Object
- #current_key_id ⇒ Object
- #current_key_secret ⇒ Object
- #description_partial_name ⇒ Object
- #method_type ⇒ Object
- #name ⇒ Object
- #payment_icon_name ⇒ Object
- #payment_source_class ⇒ Object
- #provider ⇒ Object
- #provider_class ⇒ Object
-
#purchase(_amount, _transaction_details, _gateway_options = {}) ⇒ Object
Not used directly (we use custom flow), but kept it for compatibility.
- #request_type ⇒ Object
- #source_required? ⇒ Boolean
- #supports?(_source) ⇒ Boolean
-
#verify_and_capture_razorpay_payment(order, razorpay_payment_id) ⇒ Object
Verify signature, fetch payment and capture if required.
- #void ⇒ Object
Instance Method Details
#actions ⇒ Object
71 72 73 |
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 71 def actions %w[capture void] end |
#auto_capture? ⇒ Boolean
63 64 65 |
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 63 def auto_capture? true end |
#can_capture?(payment) ⇒ 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
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, = {}) # 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.}") OpenStruct.new(success?: false, message: e.) 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_name ⇒ Object
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, ) ActiveMerchant::Billing::Response.new(true, 'Refund successful') end |
#current_key_id ⇒ Object
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_secret ⇒ Object
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_name ⇒ Object
39 40 41 |
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 39 def description_partial_name 'razorpay' end |
#method_type ⇒ Object
27 28 29 |
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 27 def method_type 'razorpay' end |
#name ⇒ Object
23 24 25 |
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 23 def name 'Razorpay Secure (UPI, Wallets, Cards & Netbanking)' end |
#payment_icon_name ⇒ Object
35 36 37 |
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 35 def payment_icon_name 'razorpay' end |
#payment_source_class ⇒ Object
31 32 33 |
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 31 def payment_source_class 'razorpay' end |
#provider ⇒ Object
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_class ⇒ Object
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, = {}) ActiveMerchant::Billing::Response.new(true, 'Razorpay success') end |
#request_type ⇒ Object
67 68 69 |
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 67 def request_type 'DEFAULT' end |
#source_required? ⇒ Boolean
19 20 21 |
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 19 def source_required? false end |
#supports?(_source) ⇒ 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.}" end end |
#void ⇒ Object
92 93 94 |
# File 'app/models/spree/gateway/razorpay_gateway.rb', line 92 def void(*) simulated_successful_billing_response end |