API платежей для туризма
API платёжного шлюза для бронирования путешествий: от оплаты до возврата
API платёжного шлюза позволяет сайту бронирования принимать деньги путешественника, не касаясь данных карты. На этой странице разобраны вызовы одного карточного платежа, статусы, через которые проходит платёж, чем платежи в туризме сложнее розничных и как PHPTRAVELS подключает ваш процесс бронирования к выбранному шлюзу.
- Сессия, 3-D Secure, списание
- Все статусы платежа
- Карты, кошельки, банк, кредит
- Данных карты нет на вашем сервере
Как работают вызовы
Один карточный платёж, вызов за вызовом
API платёжного шлюза — это набор веб-сервисов, которые платёжная компания открывает для мерчантов. Ваш сервер просит создать платёж на сумму в нужной валюте, путешественник вводит карту в форме самого шлюза, а шлюз общается с платёжной сетью и банком-эмитентом. Ваш сервер никогда не видит номер карты: он получает ID платежа и статус.
В процессе участвуют четыре стороны. На схеме они показаны колонками, а каждое сообщение — пронумерованной стрелкой. У разных шлюзов названия различаются (payment intent, session, order, charge), но последовательность одна и та же.

Пунктирная стрелка — это вебхук: шлюз сам обращается к вашему серверу, поэтому платёж обновит бронирование, даже если путешественник закрыл браузер. Как каждый шаг связывается с бронированием в PHPTRAVELS, описано на странице «Интеграция платёжных шлюзов».
- Путешественник
- Ваш сайт
- Шлюз
- Платёжная сеть / банк
01ОформлениеПутешественник Ваш сайт
Путешественник проверяет поездку и нажимает «Оплатить». Бронь удерживается у поставщика, но ещё не подтверждена.
02Создание payment intent или сессииВаш сайт Шлюз
Ваш сервер отправляет сумму, валюту, номер брони и ключ идемпотентности вместе с секретным API-ключом. Шлюз возвращает ID платежа.
03Размещённые поля или редиректШлюз Путешественник
Форму карты отдаёт шлюз, внутри вашей страницы или на отдельной, поэтому данные карты уходят прямо к нему.
043-D SecureПлатёжная сеть / банк Путешественник
Если банк-эмитент требует, путешественник подтверждает платёж в банковском приложении или одноразовым кодом.
05АвторизацияШлюз Платёжная сеть / банк
Шлюз через платёжную сеть просит эмитента одобрить сумму.
06Одобрено, средства заблокированыПлатёжная сеть / банк Шлюз
Эмитент резервирует деньги на карте. Фактически ничего ещё не списано.
07Результат на ваш сайтШлюз Ваш сайт
Путешественник возвращается на сайт с ID платежа. Сервер читает статус через API и подтверждает бронь у поставщика.
08СписаниеВаш сайт Шлюз
Когда поставщик подтвердил, сервер списывает всю сумму или меньшую. Многие шлюзы умеют списывать и сразу.
09ВебхукШлюз Ваш сайтШлюз отправляет сам
Шлюз присылает на ваш адрес подписанное событие (платёж списан, возвращён, оспорен). Сервер проверяет подпись и обновляет бронь.
Статусы платежа
Жизнь платежа как конечный автомат
Любой API шлюза сообщает статус каждого платежа. Названия различаются, но все они сводятся к одним и тем же состояниям, и логика бронирования должна реагировать на каждое.
created
Создан
Платёж существует, сумма и валюта заданы, ждём действий путешественника.
failedКонечный
Неуспешен
Отклонён, 3-D Secure не пройден или оплата брошена. Деньги не списаны.
authorized
Авторизован
Эмитент одобрил сумму и удерживает её на карте.
voidedКонечный
Отменён
Блокировка снята до списания, поэтому с путешественника ничего не берётся.
captured
Списан
Деньги списаны и будут переведены на ваш мерчант-счёт.
partially_refundedКонечный
Частично возвращён
Часть списанной суммы возвращена, например после удержания штрафа за отмену.
refundedКонечный
Возвращён
Вся списанная сумма возвращена на карту.
Авторизация действует не вечно: если не списать деньги вовремя, блокировка истечёт и банк освободит средства. Частично возвращённый платёж можно возвращать и дальше, в пределах списанной суммы.
Почему в туризме сложнее
Чем платежи в туризме отличаются
Магазин продаёт то, что есть на складе. Продавец путешествий берёт деньги за бронь, которую поставщик ещё должен подтвердить, часто за месяцы до поездки. Платёжный API должен под это подходить.
01
Сначала авторизация, потом списание
Отели «по запросу», групповые тарифы и туры подтверждаются через часы или дни после заказа. Если сначала авторизовать, а списывать после подтверждения, за несостоявшуюся бронь платить не придётся.
02
Поставщик всё ещё может отказать
Тариф может закончиться между оплатой и выпиской билета. При авторизации деньги освобождает отмена блокировки; после списания это уже возврат.
03
Частичные возвраты после штрафа за отмену
При отмене проживания или билета обычно удерживается штраф. Вызов возврата отправляет меньшую сумму по исходному платежу столько раз, сколько требуют правила.
04
Мультивалютность
Путешественники платят в своей валюте, а поставщики выставляют счета в своей. Шлюз должен поддерживать валюту отображения, а в ваших записях должны храниться обе суммы.
05
Проверки на мошенничество при крупных суммах
Билеты на завтра, для другого человека, оплаченные новой картой, — классическая схема мошенничества. 3-D Secure, скоринг рисков шлюза и очередь ручной проверки защищают дорогие заказы.
06
Чарджбэки спустя месяцы
Споры часто приходят уже после поездки. Храните вместе результат аутентификации, документы по брони и события шлюза, чтобы ответить на спор с доказательствами.
Способы оплаты
Какие способы оплаты охватывает API платёжного шлюза
Карты — лишь один из вариантов. Путешественники и агенты платят по-разному, и возврат в каждом случае устроен по-своему.
| Способ | Что это | Когда поступают деньги | Возвраты |
|---|---|---|---|
| Карты | Дебетовые и кредитные карты через шлюз, с 3-D Secure там, где этого требует эмитент. | Авторизация при оплате; списание сразу или после подтверждения поставщика. | Полный или частичный возврат на ту же карту через API. |
| Цифровые кошельки | Кошельки, которые поддерживает шлюз, например PayPal или мобильный кошелёк с токенизированной картой. | При оплате, после подтверждения путешественником в кошельке. | Возврат в кошелёк или на карту за ним через шлюз. |
| Банковский перевод | Путешественник или агент переводит деньги на ваш банковский счёт, а платёж фиксируется по брони. | Через несколько дней; бронь ждёт, пока ваша команда подтвердит поступление. | Возвращается переводом, вне шлюза. |
| Оплата позже | Бронь оформляется сейчас, а оплачивается позже; ваша команда фиксирует платёж, когда он поступит. | После бронирования, когда путешественник заплатит. | Возвращается только то, что действительно оплачено. |
| Кошелёк или кредит B2B-агента | Субагенты платят с предварительно пополненного баланса или в рамках выданного вами кредитного лимита. | Списывается при бронировании; депозиты и кредит рассчитываются на ваших условиях. | Возвращается на баланс агента. |
Банковский перевод, оплата позже и баланс кошелька — это способы расчёта самой платформы, а не шлюзы. Балансы и кредитные лимиты агентов описаны на странице «B2B-кошелек агента», банковские платежи — на странице «Оплата банковским переводом».
Готово в PHPTRAVELS
Уже подключённые API платёжных шлюзов
Эти шлюзы уже подключены к PHPTRAVELS. Вы открываете мерчант-аккаунт у провайдера, вводите API-ключи в админке, тестируете в его песочнице и запускаетесь. Список актуальный, из нашего каталога интеграций.
StripeРуководство по интеграцииPayPalРуководство по интеграции
xMoney
Fawaterk
Cashfree
Paystack
Flutterwave
Adyen
MyFatoorah
SSLcommerz
Razorpay- Все платёжные интеграции
Комиссии и одобрение мерчанта согласуются с платёжной компанией, а не с PHPTRAVELS. Шлюз, которого здесь нет, можно добавить как Индивидуальная интеграция API, а как настраивается каждый из них, объясняет страница «Интеграция платёжных шлюзов».
Безопасность
Как не пускать данные карт в вашу систему
Самый безопасный номер карты — тот, который ваш сервер никогда не получал. API платёжного шлюза устроен так, чтобы этого и не требовалось.
Не храните номера карт
Данные карты уходят шлюзу, который возвращает токен или ID платежа. В вашей базе лежит только эта ссылка, но не номер карты и не код безопасности.
Размещённые поля и редиректы сокращают область PCI DSS
PCI DSS распространяется на всех, кто обрабатывает данные карт. Если форма карты — страница шлюза или его встроенные поля, в область попадает гораздо меньше вашей системы. Какой вариант самооценки вам подходит, подтвердит ваш эквайер.
Вебхуки проверяются по подписи
Каждый вебхук содержит подпись, созданную на общем секрете. Сервер пересчитывает её и отклоняет любое событие с несовпадением, так что оплаченную бронь подделать нельзя.
Секретные ключи остаются на сервере
Браузер получает только публичный ключ. Секретный ключ, который создаёт платежи и возвраты, хранится в настройках сервера, а каждый запрос несёт ключ идемпотентности, поэтому повтор не спишет деньги дважды.
1$payload = file_get_contents("php://input"); 2$signature = $_SERVER["HTTP_X_SIGNATURE"] ?? ""; 3$expected = hash_hmac("sha256", $payload, $webhookSecret); 4 5if (!hash_equals($expected, $signature)) { 6 http_response_code(400); exit; // reject 7} 8$event = json_decode($payload, true); 9if (alreadyHandled($event["id"])) exit; // repeat delivery10updateBooking($event["data"]["metadata"]["booking_ref"], $event["type"]);
Общий пример. Названия заголовков и способ подписи зависят от выбранного шлюза.
PHPTRAVELS — это ПО для самостоятельного размещения, поэтому соответствие PCI DSS оценивается для вашего бизнеса и вашего сервера, а не только для самого ПО.
Посмотрите, как бронь оплачивается, списывается и возвращается
Забронируйте поездку в живой демо-версии и проследите платёж в админке. В тарифе Enterprise PHPTRAVELS также даёт собственный REST API и вебхуки для ваших приложений и партнёров.
Планируете и авиабилеты? Сторона поставщика описана на странице «API авиабилетов», а все API, которые подключает PHPTRAVELS, перечислены на странице «Travel API».
Это набор веб-сервисов платёжной компании, с помощью которого сайт создаёт платежи, отправляет карту в банк на одобрение, списывает деньги, делает возвраты и получает уведомления о статусах через вебхуки, не храня данные карт у себя.
Шлюз — это часть, с которой общается ваш сайт: он безопасно собирает данные карты и передаёт запрос дальше. Процессор проводит транзакцию через платёжные сети к банку-эмитенту. Многие провайдеры предлагают оба в одном сервисе.
Тот, что одобрит ваш бизнес, поддерживает страны, валюты и способы оплаты ваших клиентов и умеет раздельную авторизацию и списание, а также частичные возвраты. Многие агентства сочетают глобальный карточный шлюз с региональным.
Авторизация резервирует сумму на карте путешественника, списание её забирает. Разделив их, вы берёте деньги только после подтверждения брони поставщиком и снимаете блокировку, если подтверждения нет.
Во многих регионах, включая Европейскую экономическую зону и Великобританию, для большинства онлайн-платежей картой требуется строгая аутентификация клиента, и карты соответствуют ей через 3-D Secure. Проверку выполняет API шлюза, а ваш процесс бронирования ждёт результата.
Само по себе нет. Размещённые поля или платёжная страница шлюза не пускают данные карт на ваш сервер и сокращают область PCI DSS, но оценку, которую требует эквайер, всё равно нужно пройти.
Да, если шлюз поддерживает частичные возвраты, а большинство карточных шлюзов их поддерживают. Вы отправляете возврат на меньшую сумму по исходному платежу, например стоимость за вычетом штрафа за отмену.
Нет. Мерчант-аккаунт вы открываете у выбранного шлюза и с ним же согласуете комиссии. PHPTRAVELS подключает вашу платформу бронирования к этому аккаунту по API-ключам, которые вы вводите в админке.
Да. Любой шлюз с документированным API можно добавить как индивидуальную интеграцию, а поскольку исходный код входит в поставку, ваши разработчики могут расширить и сам платёжный процесс.
Узнайте больше
Ещё о платформе
- Интеграция платёжных шлюзовОплата, 3D Secure, возвраты и вебхуки
- Платежи через StripeОплата картой и кошельком, возвраты и выплаты
- Платежи PayPalОплата через PayPal для авиа, отелей и туров
- B2B-кошелек агентаДепозиты агентов, кредитные лимиты и журнал по каждому агенту
- Travel APIAPI GDS, отелей, туров, авто и платежей
- API авиабилетовAPI авиабилетов от GDS, NDC и консолидаторов на одной платформе
