Live-Demo

Leitfaden Zahlungsgateway

Razorpay-API-Integration für Reisebuchungs-Websites

Razorpay ist ein Zahlungsgateway für Indien, das Karten, UPI, Netbanking und Wallets in Rupien akzeptiert. Dieser Leitfaden erklärt, wie eine Razorpay-Zahlung bei einer Flug-, Hotel- oder Tourbuchung abläuft, und nennt den ehrlichen Stand in PHPTRAVELS: Razorpay ist heute kein fertiger Connector, lässt sich aber als individuelle Integration auf dem Quellcode ergänzen, der Ihnen gehört.

  • Karten, UPI, Netbanking, Wallets
  • Order, Checkout, Capture
  • Signatur- und Webhook-Prüfung
  • Volle und teilweise Erstattungen

Razorpay auf einen Blick

Was Razorpay ist und wo es in PHPTRAVELS steht

Razorpay ist ein indisches Zahlungsgateway. Reiseunternehmen mit Kunden in Indien nutzen es, um die erwarteten Zahlungsarten anzubieten: Debit- und Kreditkarten, UPI, Netbanking und gängige Wallets, abgerechnet und ausgezahlt in Indischen Rupien auf das eigene Razorpay-Konto des Händlers.

PHPTRAVELS ist eine selbst gehostete Reisebuchungsplattform mit komplettem Quellcode. Die fertigen Zahlungsgateways stammen aus einer Live-Liste und werden mit Ihren eigenen Händlerzugangsdaten aktiviert. Razorpay steht heute nicht in dieser Liste, daher gibt es im Admin noch keinen Schalter dafür.

Das heißt nicht, dass Sie es nicht nutzen können. Da der Code Ihnen gehört, lässt sich Razorpay als Individuelle API-Integration ergänzen, und für Indien gibt es bereits ein fertiges Gateway: Cashfree. Die Seite Zahlungs-Gateway-Integration listet alle Gateways, die Sie sofort aktivieren können.

Illustration einer Online-Reisezahlung: Ein Buchungs-Checkout reicht eine Kartenzahlung an ein Zahlungsgateway und zurück an das Buchungssystem

Razorpay-Datenblatt

Was es ist
Ein Zahlungsgateway für Unternehmen in Indien
Zahlungsarten
Karten, UPI, Netbanking und Wallets
Währung
Abrechnung und Auszahlung in INR; Beträge werden in Paise gesendet
API-Schlüssel
Key ID und Key Secret, getrennt für Testmodus und Livemodus
Status in PHPTRAVELS
Kein fertiger Connector. Als individuelle Integration auf dem mitgelieferten Quellcode möglich
Heute fertig für Indien
Cashfree, im Admin mit Ihrem eigenen Cashfree-Konto aktiviert
Cashfree-Einrichtungsanleitung

Zahlungsablauf

Eine Razorpay-Zahlung für eine Reisebuchung, Schritt für Schritt

Eine Razorpay-Integration teilt die Arbeit zwischen dem Browser des Reisenden und Ihrem Server. Der Browser zeigt den Checkout; der Server legt die Order an, prüft das Ergebnis und entscheidet, wann die Buchung bestätigt wird.

  1. 01

    Ihr Server

    Order anlegen

    Sobald der Reisende auf Bezahlen klickt, ruft Ihr Server die Orders API mit dem Betrag in Paise, der Währung und der Buchungsreferenz als Receipt auf. Razorpay liefert eine order_id zurück.

  2. 02

    Browser

    Razorpay Checkout öffnen

    Die Buchungsseite öffnet den Checkout mit Ihrer Key ID und dieser order_id, sodass der Reisende genau den Betrag zahlt, den Ihr Server festgelegt hat.

  3. 03

    Browser

    Reisender zahlt

    Der Reisende wählt Karte, UPI, Netbanking oder Wallet und erledigt jeden Schritt, den seine Bank verlangt. Die Zahlung ist nun autorisiert.

  4. 04

    Browser

    Checkout liefert drei Werte

    Bei Erfolg gibt der Checkout razorpay_payment_id, razorpay_order_id und razorpay_signature zurück, und die Seite sendet sie an Ihren Server.

  5. 05

    Ihr Server

    Signatur prüfen

    Ihr Server berechnet die Signatur aus order_id und payment_id mit dem Key Secret neu. Nur eine übereinstimmende Signatur gilt als echte Zahlung.

  6. 06

    Ihr Server

    Zahlung einziehen

    Bei automatischem Capture zieht Razorpay selbst ein. Bei manuellem Capture zieht Ihr Server erst ein, wenn Airline, Hotel oder Touranbieter bestätigt hat, sodass niemand für eine gescheiterte Buchung belastet wird.

  7. 07

    Ihr Server

    Buchung bestätigen

    Die Buchung wechselt auf bezahlt, Ticket oder Voucher werden ausgestellt und die Razorpay-payment_id wird zur Buchungsreferenz gespeichert.

  8. 08

    Ihr ServerServer zu Server

    Webhook empfangen

    Razorpay sendet außerdem Ereignisse wie payment.captured an Ihre Webhook-URL. Das deckt den Reisenden ab, der den Tab schließt, bevor die Seite zurückmelden konnte.

Signaturen und Webhooks

Zwei Prüfungen, die eine Razorpay-Integration verlässlich machen

Alles, was vom Browser oder über das Internet eintrifft, kann gefälscht sein. Eine Razorpay-Integration vertraut einer Zahlung erst, nachdem sie eine Signatur geprüft hat, die mit einem Geheimnis erstellt wurde, das Ihren Server nie verlässt.

verify-razorpay.php · illustrativ
 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}

Illustrativer Pseudocode zur Veranschaulichung der Logik, keine einsatzfertige Datei. Für die genauen Aufrufe gelten die Dokumentation und SDKs von Razorpay.

  • Zahlungssignatur

    Der HMAC SHA256 aus order_id, einem Pipe-Zeichen und payment_id, mit Ihrem Key Secret als Schlüssel, muss razorpay_signature entsprechen. Vergleichen Sie mit einer zeitkonstanten Funktion.

  • Webhook-Signatur

    Jeder Webhook trägt einen X-Razorpay-Signature-Header: ein HMAC SHA256 des rohen Request-Body, mit dem Webhook-Secret als Schlüssel, das Sie im Razorpay-Dashboard festlegen.

  • Mehrfache Zustellung

    Webhooks können mehrfach oder in falscher Reihenfolge eintreffen. Speichern Sie Ereignis- und Zahlungs-IDs und ignorieren Sie ein Ereignis, das Sie bereits auf die Buchung angewendet haben.

  • Geheimnisse bleiben serverseitig

    Nur die Key ID geht an den Browser. Key Secret und Webhook-Secret liegen in der Serverkonfiguration, nie im Seitenquelltext oder in einer mobilen App.

Erstattungen und Stornierungen

Reiseerstattungen sind selten der volle Betrag

Stornogebühren, No-Show-Regeln und teilweise stornierte Reisen führen oft zu Teilerstattungen. Die Refunds API von Razorpay deckt beides ab, und die Integration bestimmt den Betrag nach Ihren Buchungsregeln.

  • Volle Erstattung

    Eine kostenlose Stornierung erstattet den gesamten eingezogenen Betrag auf die Zahlungsart, mit der der Reisende bezahlt hat.

  • Teilerstattung

    Nach Abzug einer Stornogebühr erstattet der Server nur den Restbetrag. Der Betrag wird wie die ursprüngliche Order in Paise gesendet.

  • Teil einer Reise

    Eine Hotelnacht oder einen Passagier stornieren und diesen Teil erstatten; weitere Teilerstattungen sind bis zur Höhe des eingezogenen Gesamtbetrags möglich.

  • refund.processed

    Der Erstattungs-Webhook meldet Ihrem Server, wann die Erstattung durch ist, damit Buchung und Reisender den richtigen Status sehen.

  • Zur Buchung gespeichert

    Jede Erstattungs-ID wird mit der Buchungsreferenz und der ursprünglichen payment_id für Ihre Buchhaltung aufbewahrt.

  • Beispiel: Stornierung mit Gebühr

    Eingezogen
    ₹12,500.00 amount: 1250000
    Stornogebühr
    ₹1,500.00 amount: 150000
    Erstattungsbetrag
    ₹11,000.00 amount: 1100000

    Nur Beispielzahlen. Razorpay nimmt Beträge in der kleinsten Währungseinheit, 100 Paise entsprechen also einer Rupie.

So verbinden Sie Razorpay

Drei Wege, Zahlungen mit oder ohne Razorpay anzunehmen

Wählen Sie den Weg, der zu Ihrem Team und Ihrem Starttermin passt. Bei allen dreien bleibt das Geld auf Ihrem eigenen Händlerkonto; PHPTRAVELS ist nie Teil der Abwicklung.

  1. Option 1

    Ihre Entwickler ergänzen es

    PHPTRAVELS wird mit komplettem Quellcode geliefert, daher können Ihre eigenen Entwickler Razorpay als neues Gateway neben den bestehenden ergänzen: Order-Anlage, Checkout im Zahlungsschritt, Signaturprüfung, Capture, Webhooks und Erstattungen.

    • Entwickeln und testen mit Razorpay-Testmodus-Schlüsseln
    • Buchungsreferenz als Order-Receipt wiederverwenden
    • Auf Live-Schlüssel wechseln, sobald Testbuchungen bestehen
  2. Option 2

    PHPTRAVELS baut es

    Unsere Entwickler können den Razorpay-Connector als Individuelle API-Integration für Sie bauen. Sie senden die Anforderungen, erhalten Kosten und Zeitplan vor Arbeitsbeginn und bekommen am Ende den getesteten Quellcode.

    • Angebot vor Arbeitsbeginn
    • Gegen den Razorpay-Testmodus entwickelt
    • Als Quellcode geliefert, der Ihnen gehört
  3. Option 3

    Jetzt ein fertiges Gateway nutzen

    Wenn Sie zuerst starten müssen, aktivieren Sie ein Gateway, das bereits in der Plattform enthalten ist. Für Indien ist das Cashfree. Zu den heute fertigen Gateways gehören:

Fertige Gateways

Zahlungsgateways, die Sie heute aktivieren können

Diese Liste stammt live aus dem PHPTRAVELS-Gateway-Verzeichnis. Jedes Gateway wird im Admin mit Ihrem eigenen Konto und Ihren Schlüsseln aktiviert.

Sie möchten die Aufrufe hinter einem dieser Gateways verstehen? Lesen Sie den Leitfaden Payment-Gateway-API, vergleichen Sie die Leitfäden Stripe-Zahlungen und PayPal-Zahlungen oder sehen Sie, wie Agenten im B2B-Portal aus einem B2B-Agenten-Wallet zahlen.

Fragen zu Razorpay

Razorpay und PHPTRAVELS, beantwortet

Vertrieb kontaktieren

Nicht als fertigen Connector. Razorpay steht heute nicht in der Gateway-Liste von PHPTRAVELS, daher können Sie es im Admin nicht aktivieren. Da der komplette Quellcode enthalten ist, lässt es sich als individuelle Zahlungsgateway-Integration ergänzen, von Ihren oder unseren Entwicklern.

Cashfree ist ein fertiges Gateway in PHPTRAVELS und hat eine Einrichtungsanleitung unter docs.phptravels.com/payments/cashfree. Sie aktivieren es im Admin mit Ihrem eigenen Cashfree-Konto. Weitere fertige Gateways wie Stripe und PayPal stehen auf der Seite der Zahlungsgateways.

Razorpay akzeptiert Karten, UPI, Netbanking und Wallets für Zahlungen in Indischen Rupien. Welche Arten im Checkout erscheinen, hängt davon ab, was in Ihrem eigenen Razorpay-Konto aktiviert ist.

Razorpay nimmt Beträge in der kleinsten Währungseinheit, daher wird ein Buchungsbetrag in Rupien vor der Order-Anlage mit 100 multipliziert. Ein Erstattungsbetrag wird genauso gesendet.

Der Checkout liefert eine Zahlungs-ID, die Order-ID und eine Signatur. Ihr Server berechnet mit Ihrem Key Secret einen HMAC SHA256 aus Order-ID und Zahlungs-ID und akzeptiert die Zahlung nur, wenn das Ergebnis der Signatur entspricht.

Automatisches Capture ist einfacher. Manuelles Capture erlaubt den Einzug erst nach Bestätigung durch Airline, Hotel oder Touranbieter, sodass eine gescheiterte Buchung freigegeben statt erstattet werden kann. Die Wahl hängt von Ihren Produkten und Anbietern ab.

Ja. Die Refunds API von Razorpay unterstützt volle und teilweise Erstattungen, sodass eine Stornogebühr einbehalten und der Rest zurückgezahlt werden kann. Der Webhook refund.processed meldet Ihrem Server, wann die Erstattung abgeschlossen ist.

Ja. Das Händlerkonto, seine Key ID und sein Key Secret sowie die Auszahlung gehören Ihnen. PHPTRAVELS stellt nie Gateway-Zugangsdaten bereit und verwaltet nie Ihr Geld. Entwickeln Sie mit Testmodus-Schlüsseln und wechseln Sie beim Livegang auf Live-Schlüssel.

Das hängt vom gewünschten Umfang, etwa Checkout, manuelles Capture, Erstattungen und Agentenzahlungen. PHPTRAVELS nennt individuelle Arbeiten vor Beginn ein Angebot. Die Plattform selbst ist eine einmalige Lizenz.