# Hotel booking — complete visual guide **Product:** Alya Hotel System `1.1.16-dev` **Site:** https://alyatrip.com **Role:** Public traveler **Date of live walkthrough:** 30 August 2026 **Production changes:** NONE ## Honest status of this audit | Step | Status | |------|--------| | Hotel search | `VERIFIED LIVE` | | Search results | `VERIFIED LIVE` | | Hotel fiche + rates | `VERIFIED LIVE` | | Checkout guest form | `VERIFIED LIVE` | | Prebook | `VERIFIED LIVE` — **Prebook confirmed.** | | Payment UI | `VERIFIED LIVE` — **Payment interface confirmed.** | | Payment submission | **Payment submission not performed.** | | Book / bookingId | **bookingId not generated in this audit.** | | Confirmation | `NOT VERIFIED IN THIS AUDIT` | | Voucher | **Voucher not generated in this audit.** | | Traveler hotel cancel | `NOT FOUND` (staff-only in code) | If a future authorized sandbox booking succeeds, add the real screenshots to this file. Do not invent them. --- # 1. Hotel search (homepage) ## Purpose Enter destination, dates, occupancy from the public site. ## Who Traveler. No WordPress role. ## Where https://alyatrip.com/ — tab **Hôtels**. Also `/hotels/` shortcode `[alya_hotel_search]`. ## Screenshot ![Homepage hotel tab](../screenshots/live/01-homepage-02-hotel-tab.png) ## Fields / buttons (live) Destination autocomplete, Arrivée, Départ, occupation, **Rechercher des hôtels**. ## Workflow 1. Open homepage. 2. Select **Hôtels**. 3. Type destination (live: `Paris` → **Paris — France**). 4. Dates live: 2026-09-20 → 2026-09-22, 2 adults. 5. Search. ## API `GET /wp-json/alya/v1/places` then `place-details`. Place id observed: `ChIJD7fiBh9u5kcRYJSMaMOCCwQ`. ## Limitations Chatbot “concierge” is LiteAPI widget — booking on that widget is **not** the Alya checkout unless separately bridged. `UNKNOWN` if bridged. --- # 2–3. Search parameters and results ## Screenshot ![Hotel results](../screenshots/live/02-hotels-01-search-page.png) ## Result (live) **30 hôtel(s) trouvés.** Buttons: Choisir, Favori, Comparer, Carte. Copy: “Prix = tarif (net + marge agence), sans 2ᵉ markup.” ## API `GET /wp-json/alya/v1/search` (nonce + 40/600s). External: LiteAPI hotels search. ## Data Favori / Comparer: **localStorage** (`alya-frontend.js`), not LiteAPI guest CRM. ## Filters Map toggle present. Full filter panel: **NOT fully exercised** this pass. `PARTIAL` --- # 4–6. Hotel fiche, rates, selection ## Where https://alyatrip.com/hotel-contract-system/?hotel_id=lp1ea94 Shortcode `[alya_hotel_details]` / rates. ## Screenshot ![Hotel fiche](../screenshots/live/03-hotel-01-details.png) ## Visible B&B HOTEL Paris 17 Batignolles. Gallery, amenities, Nuitee reviews. **6 offre(s)**. **Réserver**. Some room types: “Aucune offre pour ces dates.” ## API `GET /alya/v1/hotel-details`, `POST /alya/v1/rates` (20/600s). Margin injected server-side (`PricingEngine`). ## Permissions Public nonce. API key never in the browser. --- # 7–9. Checkout, guest information, prebook ## Where https://alyatrip.com/checkout-hotel/ — `[alya_hotel_checkout]` ## Screenshot — form ![Checkout form](../screenshots/live/04-checkout-01-hotel-form.png) Fields: titulaire prénom/nom/email/téléphone; voyageur chambre 1; Demandes; **Vérifier le tarif**. Copy: `@example.com` refused by Stripe; cards not stored; sandbox 4242; payment by `transactionId`. ## Screenshot — prebook READY ![Prebook payment](../screenshots/live/04-checkout-02-prebook-pay.png) ## Result (live) - Stay: 20–22 sept. 2026, 2 nights, 2 adults - Offer: twin room - **Tarif 213.67 EUR** - NON REMBOURSABLE - Widget: Pay / Google Pay READY **Prebook confirmed.** **Payment interface confirmed.** **Payment submission not performed.** ## API `POST /alya/v1/prebook` → SUCCESS this pass. External: LiteAPI `POST /rates/prebook` with `usePaymentSdk`. ## Database Prebook may create a local CPT/index row **without** `bookingId`. Dashboard labelled some rows **PREBOOK**. A prebook is **not** a confirmed reservation. --- # 10–11. Payment UI and payment preparation `VERIFIED BOTH` (code + live widget) Traveler card → Stripe Payment SDK (`secretKey` from LiteAPI prebook) → `transactionId` → WP `POST /alya/v1/book`. WooCommerce is **not** this checkout. See [woocommerce.md](../technical/woocommerce.md). Google Pay was **visible**. Whether Google Pay completes on this host: **NOT VERIFIED IN THIS AUDIT** (Pay not clicked). --- # 12–15. Booking, confirmation, bookingId, voucher ## Booking `POST /alya/v1/book` (10/600s) → LiteAPI `POST /rates/book` `payment.method=TRANSACTION_ID`. **bookingId not generated in this audit.** `SCREENSHOT REQUIRED` for confirmation page. Expected page (code/pages installer): `[alya_hotel_confirmation]` typically `/resa-confirmation/`. ## Voucher `[alya_hotel_voucher]` / Documents module. PDF if Dompdf present. **Voucher not generated in this audit.** QR: `NOT FOUND` in plugin. --- # 16. Cancellation Hotel cancel: `POST /alya/v1/cancel` — **staff** (`verify_cancel_permission` / `edit_alya_bookings`). Traveler hotel cancel: `NOT FOUND`. `SCREENSHOT REQUIRED` for staff cancel UI. --- ## Related - [payment-architecture.md](../business/payment-architecture.md) - [pricing-markup-commission.md](../business/pricing-markup-commission.md) - [rest-api-reference.md](../technical/rest-api-reference.md) - [live-site/hotel-booking-journey.md](../live-site/hotel-booking-journey.md)