Setting Up the Environment
- Ensure you have Ruby and Bundler installed. It's essential for managing dependencies in your Ruby project.
- Add the Stripe gem to your Gemfile to enable integration. You can do this by adding the line: `gem 'stripe'`
bundle install
Initialize Stripe Client
- In your application, configure the Stripe client with your secret API key. This key should be kept secure at all times.
# config/initializers/stripe.rb
Stripe.api_key = ENV['STRIPE_SECRET_KEY']
Creating a Customer
- You'll need a Stripe Customer to associate with a subscription. You can create a customer using Stripe's API:
customer = Stripe::Customer.create({
email: 'customer@example.com',
source: 'tok_mastercard', # Use a token from Stripe.js in production
})
Creating a Subscription
- Once the customer is created, you can create a subscription for them. You must specify the plan you want the customer to subscribe to:
subscription = Stripe::Subscription.create({
customer: customer.id,
items: [{ plan: 'plan_id' }],
})
Handling Webhooks
- Stripe sends events to your server when certain subscription events occur, like when a payment succeeds. These are called webhooks:
- You'll need to create an endpoint in your application to receive these Stripe events and update your records accordingly.
post '/webhook' do
payload = request.body.read
sig_header = request.env['HTTP_STRIPE_SIGNATURE']
event = nil
begin
event = Stripe::Webhook.construct_event(
payload, sig_header, ENV['STRIPE_ENDPOINT_SECRET']
)
rescue JSON::ParserError => e
status 400
return
rescue Stripe::SignatureVerificationError => e
status 400
return
end
# Handle the event
case event['type']
when 'invoice.payment_succeeded'
# Define and call a method to handle successful payment
end
status 200
end
Testing Your Integration
- Use Stripe's test mode to simulate various events and errors. You can use the test API keys and cards provided by Stripe.
- Ensure that your webhook endpoint correctly logs and responds to events, especially critical ones like 'invoice.payment\_failed'.
Handling Subscription Lifecycle Events
- Implement logic to handle lifecycle events such as subscription cancellations, upgrades, or downgrades to ensure your application reflects the current subscription state.
- Consider integrating Stripe's customer portal if you wish to give users the ability to manage their subscriptions directly through Stripe.