|

|  How to Integrate Stripe Payment Intent API in Ruby

How to Integrate Stripe Payment Intent API in Ruby

October 31, 2024

Discover step-by-step instructions to seamlessly integrate Stripe Payment Intent API in Ruby, enhancing your application's payment processing capabilities today.

How to Integrate Stripe Payment Intent API in Ruby

 

Integrate Stripe Payment Intent API in Ruby

 

  • Ensure you have installed the Stripe gem in your Ruby application. You can add this to your Gemfile:

 

gem 'stripe'

 

  • Configure your Stripe API keys. This is typically done in an initializer file, where you set your Stripe secret key:

 

Stripe.api_key = 'your_secret_key'

 

  • To create a Payment Intent, initiate a request to Stripe's API. Payment Intents represent a payment lifecycle:

 

intent = Stripe::PaymentIntent.create(
  amount: 1099,  # Amount in cents
  currency: 'usd',
  payment_method_types: ['card'],
)

 

  • Send the client secret to your front-end application to complete the payment process client-side:

 

intent.client_secret

 

  • In your client-side application, use the Stripe.js library to confirm the payment, using the client secret:

 

const stripe = Stripe('your_publishable_key');

stripe.confirmCardPayment(clientSecret, {
  payment_method: {
    card: cardElement,
    billing_details: {
      name: 'customer name',
    },
  }
}).then(function(result) {
  if (result.error) {
    // Display error.message in your UI.
  } else {
    // The payment has been processed!
    if (result.paymentIntent.status === 'succeeded') {
      // Show success message or handle post-payment logic
    }
  }
});

 

  • After receiving a successful payment confirmation, handle post-payment actions (e.g., updating order status, sending confirmation emails) in your server-side Ruby application.

 

  • For security, implement Stripe webhooks to confirm the payment's completion server-side. You receive an event when a Payment Intent changes state:

 

require 'sinatra'
require 'stripe'

Stripe.api_key = 'your_secret_key'

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, YOUR_ENDPOINT_SECRET
    )
  rescue JSON::ParserError => e
    status 400
    return
  rescue Stripe::SignatureVerificationError => e
    status 400
    return
  end

  # Handle the event
  case event.type
  when 'payment_intent.succeeded'
    payment_intent = event.data.object
    # Fulfill the purchase, update your database etc.
  end

  content_type 'application/json'
  {status: 'success'}.to_json
end

 

  • Test the integration thoroughly with Stripe's test mode to ensure payment workflows function smoothly, before switching to live keys.