Démo en ligne

Guide de passerelle de paiement

Intégration API Razorpay pour les sites de réservation de voyages

Razorpay est une passerelle de paiement indienne qui accepte les cartes, l'UPI, le netbanking et les portefeuilles en roupies. Ce guide explique comment fonctionne un paiement Razorpay pour une réservation de vol, d'hôtel ou de circuit, et la situation réelle dans PHPTRAVELS : Razorpay n'est pas un connecteur prêt à l'emploi aujourd'hui, mais il peut être ajouté comme intégration personnalisée sur le code source dont vous êtes propriétaire.

  • Cartes, UPI, netbanking, portefeuilles
  • Commande, Checkout, capture
  • Contrôles de signature et de webhook
  • Remboursements totaux et partiels

Razorpay en bref

Ce qu'est Razorpay et sa place dans PHPTRAVELS

Razorpay est une passerelle de paiement indienne. Une entreprise de voyage qui vend à des clients en Inde l'utilise pour proposer à la caisse les moyens de paiement attendus : cartes de débit et de crédit, UPI, netbanking et portefeuilles courants, le tout débité et réglé en roupies sur le compte Razorpay du marchand.

PHPTRAVELS est une plateforme de réservation de voyages auto-hébergée, livrée avec son code source complet. Ses passerelles de paiement prêtes à l'emploi proviennent d'une liste en direct que vous activez avec vos propres identifiants marchand. Razorpay n'est pas dans cette liste aujourd'hui, il n'existe donc pas encore de bouton pour l'activer dans l'administration.

Cela ne veut pas dire que vous ne pouvez pas l'utiliser. Comme le code vous appartient, Razorpay peut être ajouté comme Intégration d'API sur mesure, et pour l'Inde une passerelle prête existe déjà : Cashfree. La page Intégration de passerelles de paiement liste toutes les passerelles que vous pouvez activer dès maintenant.

Illustration d'un paiement de voyage en ligne : le paiement d'une réservation transmet un paiement par carte à une passerelle de paiement puis revient au système de réservation

Fiche technique de Razorpay

Ce que c'est
Une passerelle de paiement pour les entreprises en Inde
Moyens de paiement
Cartes, UPI, netbanking et portefeuilles
Devise
Débite et règle en INR ; les montants sont envoyés en paise
Clés API
Key ID et Key Secret, distinctes pour le mode test et le mode production
Statut dans PHPTRAVELS
Pas un connecteur prêt à l'emploi. Disponible comme intégration personnalisée sur le code source inclus
Prêt en Inde aujourd'hui
Cashfree, activé dans l'administration avec votre propre compte Cashfree
Guide de configuration de Cashfree

Flux de paiement

Un paiement Razorpay pour une réservation de voyage, étape par étape

Une intégration Razorpay répartit le travail entre le navigateur du voyageur et votre serveur. Le navigateur affiche le Checkout ; le serveur crée la commande, vérifie le résultat et décide quand la réservation est confirmée.

  1. 01

    Votre serveur

    Créer une commande

    Quand le voyageur clique sur Payer, votre serveur appelle l'Orders API avec le montant en paise, la devise et un receipt égal à la référence de réservation. Razorpay renvoie un order_id.

  2. 02

    Navigateur

    Ouvrir Razorpay Checkout

    La page de réservation ouvre le Checkout avec votre Key ID et cet order_id, de sorte que le voyageur paie exactement le montant fixé par votre serveur.

  3. 03

    Navigateur

    Le voyageur paie

    Le voyageur choisit une carte, l'UPI, le netbanking ou un portefeuille et effectue l'étape éventuellement demandée par sa banque. Le paiement est alors autorisé.

  4. 04

    Navigateur

    Le Checkout renvoie trois valeurs

    En cas de succès, le Checkout renvoie razorpay_payment_id, razorpay_order_id et razorpay_signature, et la page les transmet à votre serveur.

  5. 05

    Votre serveur

    Vérifier la signature

    Votre serveur recalcule la signature à partir de order_id et payment_id avec la Key Secret. Seule une signature identique est considérée comme un vrai paiement.

  6. 06

    Votre serveur

    Capturer le paiement

    Avec la capture automatique, Razorpay capture pour vous. Avec la capture manuelle, votre serveur capture une fois que la compagnie aérienne, l'hôtel ou le fournisseur de circuit a confirmé, afin que personne ne soit débité pour une réservation échouée.

  7. 07

    Votre serveur

    Confirmer la réservation

    La réservation passe à payée, le billet ou le bon d'échange est émis et le payment_id Razorpay est enregistré avec la référence de réservation.

  8. 08

    Votre serveurDe serveur à serveur

    Recevoir le webhook

    Razorpay envoie aussi des événements comme payment.captured à l'URL de votre webhook. Cela couvre le voyageur qui ferme l'onglet avant que la page puisse rendre compte.

Signatures et webhooks

Deux contrôles qui rendent une intégration Razorpay fiable

Tout ce qui arrive du navigateur ou d'internet peut être falsifié. Une intégration Razorpay ne fait confiance à un paiement qu'après avoir vérifié une signature créée avec un secret qui ne quitte jamais votre serveur.

verify-razorpay.php · à titre d'illustration
 1// 1. After Checkout: verify the payment signature 2$orderId   = $booking["razorpay_order_id"];  // from your own record 3$paymentId = $_POST["razorpay_payment_id"]; 4$signature = $_POST["razorpay_signature"]; 5$expected  = hash_hmac("sha256", $orderId . "|" . $paymentId, $keySecret); 6if (!hash_equals($expected, $signature)) { rejectPayment(); } 7markPaid($booking["ref"], $paymentId); 8 9// 2. Webhook: verify X-Razorpay-Signature over the raw body10$body    = file_get_contents("php://input");11$header  = $_SERVER["HTTP_X_RAZORPAY_SIGNATURE"] ?? "";12$expect  = hash_hmac("sha256", $body, $webhookSecret);13if (!hash_equals($expect, $header)) { http_response_code(400); exit; }14$event = json_decode($body, true);15if (alreadyHandled($event)) exit;          // repeat delivery16switch ($event["event"]) {17  case "payment.captured": confirmBooking($event); break;18  case "refund.processed": markRefunded($event);   break;19}

Pseudo-code illustratif pour montrer la logique, pas un fichier prêt à l'emploi. Suivez la documentation et les SDK de Razorpay pour les appels exacts.

  • Signature du paiement

    Le HMAC SHA256 de order_id, d'une barre verticale et de payment_id, avec votre Key Secret comme clé, doit être égal à razorpay_signature. Comparez avec une fonction à temps constant.

  • Signature du webhook

    Chaque webhook porte un en-tête X-Razorpay-Signature : un HMAC SHA256 du corps brut de la requête, avec pour clé le secret de webhook défini dans le tableau de bord Razorpay.

  • Livraisons répétées

    Les webhooks peuvent arriver plusieurs fois ou dans le désordre. Enregistrez les identifiants d'événement et de paiement et ignorez un événement déjà appliqué à la réservation.

  • Les secrets restent côté serveur

    Seul le Key ID va au navigateur. La Key Secret et le secret du webhook restent dans la configuration du serveur, jamais dans le code de la page ni dans une application mobile.

Remboursements et annulations

Les remboursements de voyage couvrent rarement le montant total

Frais d'annulation, règles de non-présentation et itinéraires partiellement annulés font qu'un remboursement de voyage est souvent partiel. La Refunds API de Razorpay gère les deux cas, et l'intégration détermine le montant selon vos règles de réservation.

  • Remboursement total

    Une annulation gratuite restitue la totalité du montant capturé au moyen de paiement utilisé par le voyageur.

  • Remboursement partiel

    Après des frais d'annulation, le serveur ne rembourse que le solde. Le montant est envoyé en paise, comme la commande d'origine.

  • Une partie d'un itinéraire

    Annulez une nuit d'hôtel ou un passager et remboursez cette part ; d'autres remboursements partiels peuvent suivre jusqu'au total capturé.

  • refund.processed

    Le webhook de remboursement prévient votre serveur quand le remboursement est effectué, pour que la réservation et le voyageur voient le bon statut.

  • Enregistré avec la réservation

    Chaque identifiant de remboursement est conservé avec la référence de réservation et le payment_id d'origine pour votre service comptable.

  • Exemple : annulation avec frais

    Capturé
    ₹12,500.00 amount: 1250000
    Frais d'annulation
    ₹1,500.00 amount: 150000
    Montant remboursé
    ₹11,000.00 amount: 1100000

    Chiffres donnés à titre d'exemple. Razorpay prend les montants dans la plus petite unité de la devise : 100 paise font une roupie.

Comment connecter Razorpay

Trois façons d'encaisser avec ou sans Razorpay

Choisissez la voie qui convient à votre équipe et à votre date de lancement. Les trois laissent l'argent sur votre propre compte marchand ; PHPTRAVELS n'intervient jamais dans le règlement.

  1. Option 1

    Vos développeurs l'ajoutent

    PHPTRAVELS est livré avec le code source complet : vos propres développeurs peuvent ajouter Razorpay comme nouvelle passerelle à côté des existantes : création de commande, Checkout à l'étape de paiement, contrôle de signature, capture, webhooks et remboursements.

    • Développez et testez avec les clés du mode test de Razorpay
    • Réutilisez la référence de réservation comme receipt de la commande
    • Passez aux clés de production quand les réservations de test réussissent
  2. Option 2

    PHPTRAVELS le développe

    Nos développeurs peuvent construire pour vous le connecteur Razorpay comme Intégration d'API sur mesure. Vous envoyez vos besoins, recevez le coût et le calendrier avant le début des travaux, puis le code source testé à la livraison.

    • Devis avant le début des travaux
    • Développé sur le mode test de Razorpay
    • Livré sous forme de code source qui vous appartient
  3. Option 3

    Utiliser dès maintenant une passerelle prête

    Si vous devez d'abord lancer, activez une passerelle déjà présente dans la plateforme. Pour l'Inde, c'est Cashfree. Les passerelles prêtes à l'emploi aujourd'hui comprennent :

Passerelles prêtes

Passerelles de paiement que vous pouvez activer aujourd'hui

Cette liste provient en direct du répertoire des passerelles PHPTRAVELS. Chacune s'active dans l'administration avec votre propre compte et vos clés.

Envie de comprendre les appels derrière chacune ? Lisez le guide API de passerelle de paiement, comparez les guides Paiements Stripe et Paiements PayPal, ou voyez comment les agents paient depuis un Portefeuille agent B2B sur le portail B2B.

Questions sur Razorpay

Razorpay et PHPTRAVELS, les réponses

Parler à un conseiller

Pas comme connecteur prêt à l'emploi. Razorpay n'est pas dans la liste des passerelles PHPTRAVELS aujourd'hui, vous ne pouvez donc pas l'activer dans l'administration. Comme le code source complet est inclus, il peut être ajouté comme intégration de passerelle de paiement personnalisée, par vos développeurs ou par les nôtres.

Cashfree est une passerelle prête dans PHPTRAVELS, avec un guide de configuration sur docs.phptravels.com/payments/cashfree. Vous l'activez dans l'administration avec votre propre compte Cashfree. D'autres passerelles prêtes, comme Stripe et PayPal, figurent sur la page des passerelles de paiement.

Razorpay accepte les cartes, l'UPI, le netbanking et les portefeuilles pour des paiements en roupies indiennes. Les moyens affichés à la caisse dépendent de ce qui est activé sur votre propre compte Razorpay.

Razorpay prend les montants dans la plus petite unité de la devise : le total de la réservation en roupies est donc multiplié par 100 avant la création de la commande. Le montant d'un remboursement est envoyé de la même façon.

Le Checkout renvoie un identifiant de paiement, l'identifiant de commande et une signature. Votre serveur calcule un HMAC SHA256 de l'identifiant de commande et de l'identifiant de paiement avec votre Key Secret, et n'accepte le paiement que si le résultat correspond à la signature.

La capture automatique est plus simple. La capture manuelle permet de ne capturer qu'une fois la réservation confirmée par la compagnie aérienne, l'hôtel ou le fournisseur de circuit : une réservation échouée peut alors être libérée plutôt que remboursée. Le choix dépend de vos produits et de vos fournisseurs.

Oui. La Refunds API de Razorpay prend en charge les remboursements totaux et partiels : des frais d'annulation peuvent être retenus et le solde restitué. Le webhook refund.processed prévient votre serveur quand le remboursement est terminé.

Oui. Le compte marchand, son Key ID et sa Key Secret ainsi que son règlement vous appartiennent. PHPTRAVELS ne fournit jamais d'identifiants de passerelle et ne manipule jamais vos fonds. Développez avec les clés du mode test et passez aux clés de production lors du lancement.

Cela dépend du périmètre nécessaire: paiement, capture manuelle, remboursements, paiements d'agents. PHPTRAVELS établit un devis avant de commencer un travail personnalisé. La plateforme elle-même est une licence unique à partir .