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: '[email protected]', })
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', })