Files
Hotel Raxa Dev 5b1e2453c7 Hotel Raxa - Advanced Booking System Implementation
🏨 Hotel Booking Enhancements:
- Implemented Eagle Booking Advanced Pricing add-on
- Added Booking.com-style rate management system
- Created professional calendar interface for pricing
- Integrated deals and discounts functionality

💰 Advanced Pricing Features:
- Dynamic pricing models (per room, per person, per adult)
- Base rates, adult rates, and child rates management
- Length of stay discounts and early bird deals
- Mobile rates and secret deals implementation
- Seasonal promotions and flash sales

📅 Availability Management:
- Real-time availability tracking
- Stop sell and restriction controls
- Closed to arrival/departure functionality
- Minimum/maximum stay requirements
- Automatic sold-out management

💳 Payment Integration:
- Maintained Redsys payment gateway integration
- Seamless integration with existing Eagle Booking
- No modifications to core Eagle Booking plugin

🛠️ Technical Implementation:
- Custom database tables for advanced pricing
- WordPress hooks and filters integration
- AJAX-powered admin interface
- Data migration from existing Eagle Booking
- Professional calendar view for revenue management

📊 Admin Interface:
- Booking.com-style management dashboard
- Visual rate and availability calendar
- Bulk operations for date ranges
- Statistics and analytics dashboard
- Modal dialogs for quick editing

🔧 Code Quality:
- WordPress coding standards compliance
- Secure database operations with prepared statements
- Proper input validation and sanitization
- Error handling and logging
- Responsive admin interface

🤖 Generated with Claude Code (https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-11 07:43:22 +02:00

237 lines
12 KiB
PHP

<?php
if(!class_exists('RESTConstants')){
class RESTConstants {
// Environments
public static $INICIA = "0";
public static $TRATA = "1";
public static $ENV_SANDBOX = "0";
// Endpoints TEST
public static $SANDBOX_JS = "https://sis-t.redsys.es:25443/sis/NC/sandbox/redsysV3.js";
public static $SANDBOX_ENDPOINT = "https://sis-t.redsys.es:25443/sis/rest/trataPeticionREST";
public static $SANDBOX_ENDPOINT_INICIA = "https://sis-t.redsys.es:25443/sis/rest/iniciaPeticionREST";
public static $ENV_PRODUCTION = "1";
public static $PRODUCTION_JS = "https://sis.redsys.es/sis/NC/redsysV3.js";
public static $PRODUCTION_ENDPOINT = "https://sis.redsys.es/sis/rest/trataPeticionREST";
public static $PRODUCTION_ENDPOINT_INICIA = "https://sis.redsys.es/sis/rest/iniciaPeticionREST";
public static $CONNECTION_TIMEOUT_VALUE = 10;
public static $READ_TIMEOUT_VALUE = 120;
public static $SSL_TLSv12 = 6;
public static $TARGET = "http://webservice.sis.sermepa.es";
public static $SERVICE_NAME = "SerClsWSEntradaService";
public static $PORT_NAME = "SerClsWSEntrada";
// Request message constants
public static $REQUEST_SIGNATURE = "DS_SIGNATURE";
public static $REQUEST_SIGNATUREVERSION_VALUE = "HMAC_SHA256_V1";
public static $REQUEST_MERCHANT_ORDER = "DS_MERCHANT_ORDER";
public static $REQUEST_MERCHANT_MERCHANTCODE = "DS_MERCHANT_MERCHANTCODE";
public static $REQUEST_MERCHANT_TERMINAL = "DS_MERCHANT_TERMINAL";
public static $REQUEST_MERCHANT_TRANSACTIONTYPE = "DS_MERCHANT_TRANSACTIONTYPE";
public static $REQUEST_MERCHANT_IDOPER = "DS_MERCHANT_IDOPER";
public static $REQUEST_MERCHANT_CURRENCY = "DS_MERCHANT_CURRENCY";
public static $REQUEST_MERCHANT_AMOUNT = "DS_MERCHANT_AMOUNT";
public static $REQUEST_MERCHANT_IDENTIFIER = "DS_MERCHANT_IDENTIFIER";
public static $REQUEST_MERCHANT_IDENTIFIER_REQUIRED = "REQUIRED";
public static $REQUEST_MERCHANT_DIRECTPAYMENT = "DS_MERCHANT_DIRECTPAYMENT";
public static $REQUEST_MERCHANT_DIRECTPAYMENT_TRUE = "true";
//Nuevos para API REST-IS respecto a API IS
public static $REQUEST_MERCHANT_DIRECTPAYMENT_MOTO = "MOTO";
public static $REQUEST_MERCHANT_CVV2 = "DS_MERCHANT_CVV2";
public static $REQUEST_MERCHANT_PAN = "DS_MERCHANT_PAN";
public static $REQUEST_MERCHANT_EXPIRYDATE = "DS_MERCHANT_EXPIRYDATE";
public static $REQUEST_MERCHANT_COF_INI = "DS_MERCHANT_COF_INI";
public static $REQUEST_MERCHANT_COF_INI_TRUE = "S";
public static $REQUEST_MERCHANT_COF_TYPE = "DS_MERCHANT_COF_TYPE";
public static $REQUEST_MERCHANT_COF_TYPE_INSTALLMENTS = "I";
public static $REQUEST_MERCHANT_COF_TYPE_RECURRING = "R";
public static $REQUEST_MERCHANT_COF_TYPE_REAUTHORIZATION = "H";
public static $REQUEST_MERCHANT_COF_TYPE_RESUBMISSION = "E";
public static $REQUEST_MERCHANT_COF_TYPE_DELAYED = "D";
public static $REQUEST_MERCHANT_COF_TYPE_INCREMENTAL = "M";
public static $REQUEST_MERCHANT_COF_TYPE_NOSHOW = "N";
public static $REQUEST_MERCHANT_COF_TYPE_OTRAS = "C";
public static $REQUEST_MERCHANT_COF_TXNID = "DS_MERCHANT_COF_TXNID";
//No se usan
//public static $REQUEST_REQUEST_TAG = "REQUEST";
//public static $REQUEST_DATOSENTRADA_TAG = "DATOSENTRADA";
//public static $REQUEST_SIGNATUREVERSION_TAG = "DS_SIGNATUREVERSION";
//public static $REQUEST_MERCHANT_SIS_CURRENCY_TAG = "Sis_Divisa";
//public static $REQUEST_MERCHANT_SESSION_TAG = "DS_MERCHANT_SESION";
//public static $REQUEST_MERCHANT_DIRECTPAYMENT_3DS = "3DS";
//Request EMV3DS constants
public static $REQUEST_MERCHANT_EMV3DS = "DS_MERCHANT_EMV3DS";
public static $REQUEST_MERCHANT_EMV3DS_THREEDSINFO = "threeDSInfo";
public static $REQUEST_MERCHANT_EMV3DS_CARDDATA = "CardData";
public static $REQUEST_MERCHANT_EMV3DS_AUTHENTICACIONDATA = "AuthenticationData";
public static $REQUEST_MERCHANT_EMV3DS_CHALLENGEREQUEST = "ChallengeRequest";
public static $REQUEST_MERCHANT_EMV3DS_CHALLENGEREQUESTRESPONSE = "ChallengeResponse";
public static $REQUEST_MERCHANT_EMV3DS_PROTOCOLVERSION = "protocolVersion";
public static $REQUEST_MERCHANT_EMV3DS_PROTOCOLVERSION_102 = "1.0.2";
public static $REQUEST_MERCHANT_EMV3DS_PROTOCOLVERSION_210 = "2.1.0";
public static $REQUEST_MERCHANT_EMV3DS_PROTOCOLVERSION_220 = "2.2.0";
public static $REQUEST_MERCHANT_EMV3DS_BROWSER_ACCEPT_HEADER = "browserAcceptHeader";
public static $REQUEST_MERCHANT_EMV3DS_BROWSER_ACCEPT_HEADER_VALUE = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json";
public static $REQUEST_MERCHANT_EMV3DS_BROWSER_USER_AGENT = "browserUserAgent";
public static $REQUEST_MERCHANT_EMV3DS_BROWSER_USER_AGENT_VALUE = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36";
public static $REQUEST_MERCHANT_EMV3DS_BROWSER_JAVA_ENABLE = "browserJavaEnabled";
public static $REQUEST_MERCHANT_EMV3DS_BROWSER_JAVASCRIPT_ENABLE = "browserJavascriptEnabled";
public static $REQUEST_MERCHANT_EMV3DS_BROWSER_LANGUAGE = "browserLanguage";
public static $REQUEST_MERCHANT_EMV3DS_BROWSER_COLORDEPTH = "browserColorDepth";
public static $REQUEST_MERCHANT_EMV3DS_BROWSER_SCREEN_HEIGHT = "browserScreenHeight";
public static $REQUEST_MERCHANT_EMV3DS_BROWSER_SCREEN_WIDTH = "browserScreenWidth";
public static $REQUEST_MERCHANT_EMV3DS_BROWSER_TZ = "browserTZ";
public static $REQUEST_MERCHANT_EMV3DS_THREEDSSERVERTRANSID = "threeDSServerTransID";
public static $REQUEST_MERCHANT_EMV3DS_NOTIFICATIONURL= "notificationURL";
public static $REQUEST_MERCHANT_EMV3DS_THREEDSCOMPIND = "threeDSCompInd";
public static $REQUEST_MERCHANT_EMV3DS_PARES = "PARes";
public static $REQUEST_MERCHANT_EMV3DS_MD = "MD";
public static $REQUEST_MERCHANT_EMV3DS_CRES = "cres";
public static $REQUEST_MERCHANT_EXEMPTION = "DS_MERCHANT_EXCEP_SCA";
public static $REQUEST_MERCHANT_EXEMPTION_VALUE_YES = "Y";
public static $REQUEST_MERCHANT_EXEMPTION_VALUE_LWV = "LWV";
public static $REQUEST_MERCHANT_EXEMPTION_VALUE_TRA = "TRA";
public static $REQUEST_MERCHANT_EXEMPTION_VALUE_MIT = "MIT";
public static $REQUEST_MERCHANT_EXEMPTION_VALUE_COR = "COR";
public static $REQUEST_MERCHANT_EXEMPTION_VALUE_ATD = "ATD";
public static $REQUEST_MERCHANT_EXEMPTION_VALUE_NDF = "NDF";
// Response message constants
public static $RESPONSE_AMOUNT = "Ds_Amount";
public static $RESPONSE_CURRENCY = "Ds_Currency";
public static $RESPONSE_ORDER = "Ds_Order";
public static $RESPONSE_SIGNATURE = "Ds_Signature";
public static $RESPONSE_MERCHANT = "Ds_MerchantCode";
public static $RESPONSE_TERMINAL = "Ds_Terminal";
public static $RESPONSE_DS_RESPONSE = "Ds_Response";
public static $RESPONSE_AUTHORIZATION_CODE = "Ds_AuthorisationCode";
public static $RESPONSE_TRANSACTION_TYPE = "Ds_TransactionType";
public static $RESPONSE_SECURE_PAYMENT = "Ds_SecurePayment";
public static $RESPONSE_LANGUAGE = "Ds_Language";
public static $RESPONSE_MERCHANT_DATA = "Ds_MerchantData";
public static $RESPONSE_CARD_COUNTRY = "Ds_Card_Country";
public static $RESPONSE_CARD_NUMBER = "Ds_CardNumber";
public static $RESPONSE_EXPIRY_DATE = "Ds_ExpiryDate";
public static $RESPONSE_MERCHANT_IDENTIFIER = "Ds_CardNumber";
public static $RESPONSE_AUTHENTICATION_REQUIRED = "authenticationRequired";
public static $RESPONSE_AUTHENTICATION_NOT_REQUIRED = "authenticationNotRequired";
//No viene en Java y no se usa
//public static $RESPONSE_CODE = "CODIGO";
// Response message DCC
public static $REQUEST_DS_MERCHANT_DCC = "DS_MERCHANT_DCC";
public static $REQUEST_DS_MERCHANT_DCC_TRUE = "Y";
public static $REQUEST_DS_MERCHANT_DCC_MONEDA = "monedaDCC";
public static $REQUEST_DS_MERCHANT_DCC_IMPORTE = "importeDCC";
public static $RESPONSE_DCC_CURRENCY_TAG = "moneda";
public static $RESPONSE_DCC_CURRENCY_STRING_TAG = "litMoneda";
public static $RESPONSE_DCC_CURRENCY_CODE_TAG = "litMonedaR";
public static $RESPONSE_DCC_CHANGE_RATE_TAG = "cambio";
public static $RESPONSE_DCC_CHANGE_DATE_TAG = "fechaCambio";
public static $RESPONSE_DCC_CHECKED_TAG = "checked";
public static $RESPONSE_DCC_AMOUNT_TAG = "importe";
public static $RESPONSE_DCC_MARGIN_TAG = "margenDCC";
public static $RESPONSE_DCC_BANK_NAME_TAG = "nombreEntidad";
//No vienen en JAVA:
public static $RESPONSE_DCC_TAG = "DCC";
public static $RESPONSE_ACS_URL_TAG = "Ds_AcsUrl";
public static $RESPONSE_JSON_ACS_ENTRY="acsURL";
public static $RESPONSE_JSON_PAREQ_ENTRY="PAReq";
public static $RESPONSE_JSON_PARES_ENTRY="PARes"; //No se usa
public static $RESPONSE_JSON_MD_ENTRY="MD";
public static $RESPONSE_JSON_PROTOCOL_VERSION_ENTRY="protocolVersion";
public static $RESPONSE_JSON_THREEDSINFO_ENTRY="threeDSInfo";
public static $RESPONSE_3DS_CHALLENGE_REQUEST="ChallengeRequest";
public static $RESPONSE_3DS_CHALLENGE_RESPONSE="ChallengeResponse"; //No se usa
public static $RESPONSE_3DS_VERSION_1="1.0.2";
public static $RESPONSE_3DS_VERSION_2_PREFIX="2.";
//Response 3DSecure
public static $RESPONSE_MERCHANT_EMV3DS_PROTOCOLVERSION = "protocolVersion";
public static $RESPONSE_MERCHANT_EMV3DS_PROTOCOLVERSION_102 = "NO_3DS_v2";
public static $RESPONSE_MERCHANT_EMV3DS_PROTOCOLVERSION_210 = "2.1.0";
public static $RESPONSE_MERCHANT_EMV3DS_PROTOCOLVERSION_220 = "2.2.0";
public static $RESPONSE_PSD2_TRUE = "Y";
public static $RESPONSE_PSD2_FALSE = "N";
public static $RESPONSE_MERCHANT_EMV3DS_THREEDSMETHODURL = "threeDSMethodURL";
public static $RESPONSE_MERCHANT_EMV3DS_THREEDSINFO = "threeDSInfo";
public static $RESPONSE_MERCHANT_EMV3DS_THREEDSSERVERTRANSID = "threeDSServerTransID";
public static $RESPONSE_MERCHANT_EMV3DS_ACSURL = "acsURL";
public static $RESPONSE_MERCHANT_EMV3DS_CREQ = "creq";
public static $RESPONSE_MERCHANT_EMV3DS_MD = "MD";
public static $RESPONSE_MERCHANT_EMV3DS_PAREQ = "PAReq";
//No viene en Java:
public static $RESPONSE_MERCHANT_EMV3DS_CRES = "cres";
// Response codes
public static $RESP_CODE_OK = "0";
public static $RESP_LITERAL_OK = "OK";
public static $RESP_LITERAL_KO = "KO";
public static $RESP_LITERAL_AUT = "AUT";
//No vienen en Java
public static $AUTHORIZATION_OK = 0000;
public static $CONFIRMATION_OK = 900;
public static $CANCELLATION_OK = 400;
public static $UNFINISHED = 9998;
public static $AUTHORIZATION = "0";
public static $REFUND = "3";
public static $PREAUTHORIZATION = "1";
public static $CONFIRMATION = "2";
public static $CANCELLATION = "9";
public static $VALIDATION = "7";
public static $VALIDATION_CONFIRMATION = "8";
public static $DELETE_REFERENCE = "44";
public static $PAYMENT_CANCELLATION = "45";
public static $PAYGOLD_REQUEST = "F";
public static $REFUND_WITHOUT_ORIGINAL = "Y";
public static $NULL = "NULL";
//Get the JavaScript path depending on the environment we are in, production or test (sandbox)
public static function getJSPath($env){
if($env==RESTConstants::$ENV_PRODUCTION){
return RESTConstants::$PRODUCTION_JS;
}
else{
return RESTConstants::$SANDBOX_JS;
}
}
//Get the endpoint path depending on the environment and the operation we are in, production/test(sandbox) and inicia/trata
public static function getEnviromentEndpoint($env, $operation){
if($env == RESTConstants::$ENV_PRODUCTION){
if($operation == RESTConstants::$INICIA){
return RESTConstants::$PRODUCTION_ENDPOINT_INICIA;
}
else{return RESTConstants::$PRODUCTION_ENDPOINT;}
}
else{
if($operation == RESTConstants::$INICIA){
return RESTConstants::$SANDBOX_ENDPOINT_INICIA;
}
else{return RESTConstants::$SANDBOX_ENDPOINT;}
}
}
}
}