Paiements en ligne : Intégrez Stripe à votre application Ruby on Rails

Paiements en ligne : Intégrez Stripe à votre application Ruby on Rails

24 juin 2023

Lorsqu'il s'agit de gérer les paiements en ligne, la sécurité est primordiale, quel que soit votre domaine d'activité.

Si vous êtes un développeur Ruby on Rails à la recherche d'une solution simple pour intégrer des paiements en ligne, laissez-moi vous présenter la gem Payify. Avec Payify, vous pouvez mettre en place un système de paiement via Stripe en seulement 5 minutes.

Stripe est un service de paiement en ligne populaire qui permet de simplifier le processus de paiement et de sécuriser les transactions. En l'intégrant dans votre application Rails, vous pouvez offrir à vos utilisateurs une expérience de paiement fluide et sécurisée.

Comment fonctionne un paiement simple avec Stripe ?

  1. Création d’une demande de paiement (payment intent) : Une demande de paiement est créée avec Stripe, générant une clé unique.

  2. Affichage du formulaire de paiement : Utilisez cette clé pour afficher un formulaire de paiement sécurisé fourni par Stripe.

  3. Vérification du paiement : Une fois le formulaire rempli par l’utilisateur, l’API de Stripe est appelée pour vérifier si le paiement a bien été effectué.

La gem Payify a été développée pour faciliter cette intégration dans votre application Ruby on Rails.

Cas pratique

La gem Payify a été spécialement conçue pour Ruby on Rails 7. Si vous utilisez une version antérieure de Ruby on Rails, il est possible que vous rencontriez des problèmes de compatibilité.

Étape 1 : Initialisation d'une application Rails

Commencez par initialiser votre projet Rails avec la commande suivante, en remplaçant YOUR_APP_NAME par le nom de votre application :

rails new YOUR_APP_NAME
cd YOUR_APP_NAME

Étape 2 : Installation de la gem Payify

Ajoutez la gem Payify à votre Gemfile :

gem "payify"

Ensuite, exécutez la commande suivante dans votre terminal :

bundle install

Pour installer les migrations de la gem dans votre application, exécutez la commande suivante :

rails payify_engine:install:migrations

Maintenant, nous allons configurer les routes de la gem Payify :

Pour ce faire, ouvrez le fichier config/routes.rb et ajoutez la ligne suivante :

mount Payify::Engine => '/payify', as: 'payify'

Étape 3 : Tables et migrations

Nous allons créer une table pour le modèle que nous souhaitons rendre payable, dans notre cas une réservation (booking) avec un prix.

Exécutez la commande suivante pour créer la table des réservations :

rails generate migration CreateBookings

Dans le fichier de migration généré, définissez les colonnes de la table :

def change
  create_table :bookings do |t|
    t.date :start_date
    t.date :end_date
    t.decimal :total_ttc, default: 0.0
  end
end

Puis exécutez les migrations de la base de données :

rails db:migrate

Étape 4 : Création du modèle

Créez le modèle correspondant à la table des réservations (bookings) :

# app/models/booking.rb
class Booking < ApplicationRecord
  include ::Payify::HasPaymentConcern

  validates :start_date, :end_date, :presence => true

  after_save :create_payment

  def amount_to_pay
    total_ttc
  end
end

Le modèle Booking utilise le concern HasPaymentConcern fourni par la gem Payify. Il définit également la méthode amount_to_pay qui renvoie le montant total à payer pour la réservation.

Étape 5 : Création d'un compte Stripe

Avant de pouvoir demander des paiements, vous devez créer un compte sur Stripe. Suivez les étapes pour créer un compte et générer les clés d'API nécessaires.

Ensuite, créez un fichier .env à la racine de votre application pour stocker les clés d'API :

STRIPE_API_KEY="VOTRE_CLE_API_SECRETE"
STRIPE_PUBLISHABLE_KEY="VOTRE_CLE_PUBLIQUE"

Étape 6 : Formulaire de paiement

Nous allons créer une route permettant d'accéder au formulaire de paiement pour une réservation spécifique.

Dans le fichier config/routes.rb, ajoutez la route suivante à la ressource bookings :

resources :bookings do
  member do
    post "payment"
  end
end

Dans le contrôleur BookingsController, ajoutez une méthode payment et faites la demande de paiement à Stripe :

# app/controllers/bookings_controller.rb
class BookingsController < ApplicationController
  def payment
    if @booking.payment_pending?
      @booking.payment.stripe_init_intent
    end
  end
end

Dans la vue views/bookings/payment.html.erb, incluez le formulaire de paiement en utilisant la ligne suivante :

<% unless @booking.paid? || @booking.payment.nil? %>
  <%= render "payify/payments/form", payment: @booking.payment %>
<% end %>

Formulaire de paiement Stripe

Étape 7 : Confirmation

Enfin, nous allons personnaliser la vue qui affiche la confirmation après le paiement.

Créez le fichier views/payify/payments/complete.html.erb avec le contenu suivant :

<div class="container py-5">
  <div class="mb-4">
    <h1>Statut de paiement de votre réservation</h1>
  </div>

  <% if @payment.paid? %>
    <div class="alert alert-success" role="alert">
      Paiement réussi !
    </div>
  <% else %>
    <div class="alert alert-danger" role="alert">
      En attente
    </div>
  <% end %>
</div>

Confirmation de paiement Stripe

Avec ces étapes, vous pouvez désormais accepter des paiements en ligne pour vos réservations grâce à Stripe en utilisant la gem Payify.

N'hésitez pas à personnaliser davantage l'intégration en fonction des besoins spécifiques de votre application.

Contribuer

Payify est une gem Ruby que j'ai créée avec soin. Si vous avez des difficultés à l'utiliser ou si vous avez des suggestions d'utilisation supplémentaires, n'hésitez pas à me contacter directement ou à contribuer via les issues et les pull requests sur GitHub. Je prendrai le temps d'examiner vos retours attentivement.

Si cet article vous a plu et vous a été utile, n'hésitez pas à ajouter une étoile au dépôt GitHub de la gem. Votre soutien est grandement apprécié !

Gem Version ruby Rubocop Status MIT license Downloads