Set up a Stripe webhook:
In the app/controllers/webhooks_controller.rb file, create an action to handle the webhook events:
To send email to user after purchase:
1. In the webhooks controller, you can send an email to the user after a checkout is completed. To obtain the user’s email address for sending the email, you can retrieve it from the event object.
class WebhooksController < ApplicationController
skip_before_action :verify_authenticity_token
def create
payload = request.body.read
sig_header = request.env['HTTP_STRIPE_SIGNATURE']
event = nil
begin
event = Stripe::Webhook.construct_event(
payload, sig_header,Rails.application.credentials[:stripe][:webhook]
)
rescue JSON::ParserError => e
status 400
return
rescue Stripe::SignatureVerificationError => e
# Invalid signature
puts "Signature error"
return
end
# Handle the event
case event.type
when 'checkout.session.completed'
session = event.data.object
session_with_expand = Stripe::Checkout::Session.retrieve({id: session.id, expand: ["line_items"] })
session_with_expand.line_items.data.each do |line_item|
product = Product.find_by(stripe_product_id: line_item.price.product)
product.increment!(:sales_count)
end
#Send email to user after successful payment
user_id = event.data.object.client_reference_id
User = User.find_by(id: user_id)
if user
UserMailer.payment_success_email(user).deliver_now
end
end
render json: { message: 'success' }
end
end
2. If you are creating the payment intent with the Ruby SDK you can add the receipt_email field to add a customers email.
Stripe.api_key = 'API_KEY'
intent = Stripe::PaymentIntent.create({
amount: 1099,
currency: 'cad',
payment_method_types: ['card'],
receipt_email: 'recipient_email@example.com',
})
3. If you are creating the checkout session server side you can preconfigure the properties/settings like for the checkout page.
require 'stripe'
Stripe.api_key ='API_KEY'
Stripe::Checkout::Session.create({
success_url: 'https://example.com/success',
cancel_url: 'https://example.com/cancel',
customer_email:'email',
line_items: [
{price: 'price_H5ggYwtDq4fbrJ', quantity: 2},
],
mode: 'payment',
})
Work with our skilled Ruby on Rails developers to accelerate your project and boost its performance.
Hire Ruby on Rails Developer