Руководство по платёжному шлюзу
Интеграция Razorpay API для сайтов бронирования путешествий
Razorpay — платёжный шлюз для Индии: он принимает карты, UPI, интернет-банкинг и кошельки в рупиях. В этом руководстве разобрано, как проходит платёж Razorpay при бронировании авиабилета, отеля или тура, и честно описан статус в PHPTRAVELS: Razorpay пока не готовый коннектор, но его можно добавить как индивидуальную интеграцию в принадлежащий вам исходный код.
- Карты, UPI, интернет-банкинг, кошельки
- Заказ, Checkout, списание
- Проверка подписи и вебхуков
- Полные и частичные возвраты
Razorpay вкратце
Что такое Razorpay и какое место он занимает в PHPTRAVELS
Razorpay — индийский платёжный шлюз. Туристический бизнес, продающий клиентам в Индии, использует его, чтобы принимать при оплате привычные для них способы: дебетовые и кредитные карты, UPI, интернет-банкинг и популярные кошельки. Платежи и расчёты идут в индийских рупиях на собственный аккаунт Razorpay мерчанта.
PHPTRAVELS — самостоятельно размещаемая платформа бронирования путешествий с полным исходным кодом. Готовые платёжные шлюзы берутся из живого списка, и вы включаете их со своими данными мерчанта. Razorpay в этом списке сейчас нет, поэтому переключателя для него в админке пока нет.
Это не значит, что им нельзя пользоваться. Поскольку код принадлежит вам, Razorpay можно добавить как Индивидуальная интеграция API, а для Индии уже есть готовый шлюз: Cashfree. Все шлюзы, которые можно включить прямо сейчас, перечислены на странице Интеграция платёжных шлюзов.

Справка по Razorpay
- Что это
- Платёжный шлюз для бизнеса в Индии
- Способы оплаты
- Карты, UPI, интернет-банкинг и кошельки
- Валюта
- Списание и расчёты в INR; суммы передаются в пайсах
- API-ключи
- Key ID и Key Secret, отдельные для тестового и боевого режима
- Статус в PHPTRAVELS
- Не готовый коннектор. Доступен как индивидуальная интеграция в поставляемый исходный код
- Готово для Индии сегодня
- Cashfree, включается в админке с вашим аккаунтом Cashfree
Процесс оплаты
Один платёж Razorpay за бронирование, шаг за шагом
Интеграция Razorpay делит работу между браузером путешественника и вашим сервером. Браузер показывает Checkout; сервер создаёт заказ, проверяет результат и решает, когда бронирование считать подтверждённым.
- 01
Ваш сервер
Создание заказа
Когда путешественник нажимает «Оплатить», ваш сервер вызывает Orders API с суммой в пайсах, валютой и receipt, равным номеру бронирования. Razorpay возвращает order_id.
- 02
Браузер
Открытие Razorpay Checkout
Страница бронирования открывает Checkout с вашим Key ID и этим order_id, поэтому путешественник платит ровно ту сумму, которую зафиксировал сервер.
- 03
Браузер
Оплата путешественником
Путешественник выбирает карту, UPI, интернет-банкинг или кошелёк и проходит все шаги, которые требует его банк. Платёж теперь авторизован.
- 04
Браузер
Checkout возвращает три значения
При успехе Checkout отдаёт razorpay_payment_id, razorpay_order_id и razorpay_signature, а страница отправляет их на ваш сервер.
- 05
Ваш сервер
Проверка подписи
Ваш сервер заново вычисляет подпись по order_id и payment_id с помощью Key Secret. Настоящим платежом считается только платёж с совпавшей подписью.
- 06
Ваш сервер
Списание платежа
При автоматическом списании Razorpay списывает средства сам. При ручном списании ваш сервер списывает их после подтверждения от авиакомпании, отеля или поставщика тура, так что за неудавшееся бронирование никого не заряжают.
- 07
Ваш сервер
Подтверждение бронирования
Бронирование переходит в статус «оплачено», выпускается билет или ваучер, а payment_id Razorpay сохраняется вместе с номером бронирования.
- 08
Ваш серверСервер — сервер
Получение вебхука
Razorpay также отправляет события, например payment.captured, на ваш URL вебхука. Это выручает, если путешественник закрыл вкладку, не дождавшись, пока страница сообщит результат.
Подписи и вебхуки
Две проверки, которые делают интеграцию Razorpay надёжной
Всё, что приходит из браузера или по интернету, можно подделать. Интеграция Razorpay доверяет платежу только после проверки подписи, созданной секретом, который никогда не покидает ваш сервер.
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}
Примерный псевдокод для иллюстрации логики, а не готовый файл. Точные вызовы смотрите в документации и SDK Razorpay.
Подпись платежа
HMAC SHA256 от order_id, символа вертикальной черты и payment_id с ключом Key Secret должен совпадать с razorpay_signature. Сравнивайте функцией с постоянным временем выполнения.
Подпись вебхука
Каждый вебхук содержит заголовок X-Razorpay-Signature: это HMAC SHA256 от необработанного тела запроса с ключом — секретом вебхука, заданным в панели Razorpay.
Повторные доставки
Вебхуки могут приходить повторно или в другом порядке. Фиксируйте идентификаторы событий и платежей и игнорируйте событие, которое уже применено к бронированию.
Секреты остаются на сервере
В браузер уходит только Key ID. Key Secret и секрет вебхука хранятся в конфигурации сервера, но не в исходном коде страницы и не в мобильном приложении.
Возвраты и отмены
Возврат за поездку редко бывает полным
Штрафы за отмену, правила о неявке и частично отменённые маршруты означают, что возврат за поездку часто бывает частичным. Refunds API Razorpay поддерживает оба варианта, а сумму возврата интеграция определяет по вашим правилам бронирования.
Полный возврат
Бесплатная отмена возвращает всю списанную сумму тем способом, которым платил путешественник.
Частичный возврат
После удержания штрафа за отмену сервер возвращает только остаток. Сумма передаётся в пайсах, как и в исходном заказе.
Часть маршрута
Отмените одну ночь в отеле или одного пассажира и верните эту часть; новые частичные возвраты возможны вплоть до списанной суммы.
refund.processed
Вебхук возврата сообщает серверу, когда возврат прошёл, чтобы бронирование и путешественник видели правильный статус.
Хранится вместе с бронированием
Идентификатор каждого возврата сохраняется с номером бронирования и исходным payment_id для вашей бухгалтерии.
Пример: отмена со штрафом
- Списано
- ₹12,500.00 amount: 1250000
- Штраф за отмену
- ₹1,500.00 amount: 150000
- Сумма возврата
- ₹11,000.00 amount: 1100000
Только примерные цифры. Razorpay принимает суммы в минимальной единице валюты, поэтому 100 пайсов — это одна рупия.
Как подключить Razorpay
Три способа принимать платежи — с Razorpay или без него
Выберите вариант, который подходит вашей команде и дате запуска. Во всех трёх деньги остаются на вашем собственном мерчант-аккаунте; PHPTRAVELS не участвует в расчётах.
Вариант 1
Добавляют ваши разработчики
PHPTRAVELS поставляется с полным исходным кодом, поэтому ваши разработчики могут добавить Razorpay как новый шлюз рядом с существующими: создание заказа, Checkout на шаге оплаты, проверка подписи, списание, вебхуки и возвраты.
- Разработка и тесты на тестовых ключах Razorpay
- Номер бронирования используется как receipt заказа
- Переход на боевые ключи после успешных тестовых броней
Вариант 2
Делает PHPTRAVELS
Наши разработчики могут создать для вас коннектор Razorpay как Индивидуальная интеграция API. Вы присылаете требования, до начала работ получаете стоимость и сроки, а в конце — протестированный исходный код.
- Оценка до начала работ
- Разработка в тестовом режиме Razorpay
- Поставка в виде исходного кода, который принадлежит вам
Вариант 3
Готовый шлюз прямо сейчас
Если нужно запуститься в первую очередь, включите шлюз, который уже есть в платформе. Для Индии это Cashfree. Сегодня готовые шлюзы включают:
- CashfreeРуководство по настройке Cashfree
- Stripe
- PayPal
- xMoney
- Fawaterk
- Paystack
Готовые шлюзы
Платёжные шлюзы, которые можно включить сегодня
Этот список подгружается из каталога шлюзов PHPTRAVELS в реальном времени. Каждый включается в админке с вашим аккаунтом и ключами.
Cashfree
StripeРуководство по интеграцииPayPalРуководство по интеграции
xMoney
Fawaterk
Paystack
Flutterwave
Adyen
MyFatoorah
SSLcommerz
Razorpay- Все интеграции
Хотите разобраться, какие вызовы стоят за любым из них? Прочитайте руководство по API платёжного шлюза, сравните руководства по Платежи через Stripe и Платежи PayPal или посмотрите, как агенты платят из B2B-кошелек агента на B2B-портале.
Не как готовый коннектор. Razorpay сейчас нет в списке шлюзов PHPTRAVELS, поэтому включить его в админке нельзя. Так как полный исходный код входит в поставку, его можно добавить как индивидуальную интеграцию платёжного шлюза — силами ваших разработчиков или наших.
Cashfree — готовый шлюз в PHPTRAVELS, руководство по настройке есть на docs.phptravels.com/payments/cashfree. Вы включаете его в админке со своим аккаунтом Cashfree. Другие готовые шлюзы, например Stripe и PayPal, перечислены на странице платёжных шлюзов.
Razorpay принимает карты, UPI, интернет-банкинг и кошельки для платежей в индийских рупиях. Какие способы показываются при оплате, зависит от того, что включено в вашем аккаунте Razorpay.
Razorpay принимает суммы в минимальной единице валюты, поэтому итог бронирования в рупиях умножается на 100 перед созданием заказа. Сумма возврата передаётся так же.
Checkout возвращает идентификатор платежа, идентификатор заказа и подпись. Ваш сервер вычисляет HMAC SHA256 от идентификатора заказа и идентификатора платежа с вашим Key Secret и принимает платёж, только если результат совпадает с подписью.
Автоматическое списание проще. Ручное позволяет списать деньги только после того, как авиакомпания, отель или поставщик тура подтвердит бронирование, так что неудавшуюся бронь можно освободить, а не возвращать. Выбор зависит от ваших продуктов и поставщиков.
Да. Refunds API Razorpay поддерживает полные и частичные возвраты, так что штраф за отмену можно удержать, а остаток вернуть. Вебхук refund.processed сообщает серверу, когда возврат завершён.
Да. Мерчант-аккаунт, его Key ID и Key Secret, а также расчёты принадлежат вам. PHPTRAVELS никогда не предоставляет учётные данные шлюза и не обрабатывает ваши средства. Разрабатывайте на тестовых ключах и переходите на боевые при запуске.
Это зависит от нужного объёма: Checkout, ручное списание, возвраты, платежи агентов. PHPTRAVELS называет цену индивидуальных работ до их начала. Сама платформа — разовая лицензия от.
Узнайте больше
Ещё о платформе
- Интеграция платёжных шлюзовОплата, 3D Secure, возвраты и вебхуки
- API платёжного шлюзаКак работают карточные платежи, 3-D Secure, списание и возвраты через API
- Индивидуальная интеграция APIПодключите любой API поставщика или партнёра к PHPTRAVELS
- Платежи через StripeОплата картой и кошельком, возвраты и выплаты
- Платежи PayPalОплата через PayPal для авиа, отелей и туров
- B2B-кошелек агентаДепозиты агентов, кредитные лимиты и журнал по каждому агенту
