id} - Redsys does not support payment status queries via API"); } /** * Obtiene los datos de Redsys formateados para mostrar */ public function getRedsysDataFormattedAttribute() { // Ejecutar check (aunque no haga nada) para consistencia $this->checkRedsysPaymentStatus(); $settings = $this->settings; if (!isset($settings['redsys'])) { return '
No Redsys data available
'; } $message = "
"; // Mostrar aviso sobre limitaciones de Redsys $message .= "
"; $message .= "Note: Redsys does not provide API to check payment status. Status updates only through callbacks."; $message .= "
"; // Datos de las variables de Redsys if (isset($settings['redsys']['vars'])) { $vars = $settings['redsys']['vars']; $message .= "

Redsys Transaction Information

"; // Información básica de la transacción if (isset($vars['DS_MERCHANT_ORDER'])) { $message .= "
Order Number: {$vars['DS_MERCHANT_ORDER']}
"; } if (isset($vars['DS_MERCHANT_AMOUNT'])) { $amount = $vars['DS_MERCHANT_AMOUNT'] / 100; $message .= "
Amount: " . number_format($amount, 2) . "
"; } if (isset($vars['DS_MERCHANT_CURRENCY'])) { $currency_code = $vars['DS_MERCHANT_CURRENCY']; $currency_name = $this->getCurrencyName($currency_code); $message .= "
Currency: {$currency_name} ({$currency_code})
"; } if (isset($vars['DS_MERCHANT_MERCHANTCODE'])) { $message .= "
Merchant Code: {$vars['DS_MERCHANT_MERCHANTCODE']}
"; } if (isset($vars['DS_MERCHANT_TERMINAL'])) { $message .= "
Terminal: {$vars['DS_MERCHANT_TERMINAL']}
"; } if (isset($vars['DS_MERCHANT_TRANSACTIONTYPE'])) { $transType = $vars['DS_MERCHANT_TRANSACTIONTYPE']; $transTypeName = $this->getTransactionTypeName($transType); $message .= "
Transaction Type: {$transTypeName} ({$transType})
"; } // Información del comercio $message .= "

Merchant Information

"; if (isset($vars['DS_MERCHANT_MERCHANTNAME'])) { $message .= "
Merchant Name: {$vars['DS_MERCHANT_MERCHANTNAME']}
"; } if (isset($vars['DS_MERCHANT_TITULAR'])) { $message .= "
Cardholder: {$vars['DS_MERCHANT_TITULAR']}
"; } if (isset($vars['DS_MERCHANT_PRODUCTDESCRIPTION'])) { $message .= "
Product Description: {$vars['DS_MERCHANT_PRODUCTDESCRIPTION']}
"; } // Configuración del pago $message .= "

Payment Configuration

"; if (isset($vars['DS_MERCHANT_CONSUMERLANGUAGE'])) { $langCode = $vars['DS_MERCHANT_CONSUMERLANGUAGE']; $langName = $this->getLanguageName($langCode); $message .= "
Language: {$langName} ({$langCode})
"; } if (isset($vars['DS_MERCHANT_PAYMETHODS'])) { $payMethods = trim($vars['DS_MERCHANT_PAYMETHODS']); $payMethodsName = $this->getPaymentMethodsName($payMethods); $message .= "
Payment Methods: {$payMethodsName}
"; } // Información técnica $message .= "

Technical Information

"; if (isset($vars['DS_MERCHANT_MODULE'])) { $message .= "
Module: {$vars['DS_MERCHANT_MODULE']}
"; } // URLs de callback (sin mostrar por seguridad, solo indicar que existen) if (isset($vars['DS_MERCHANT_URLOK'])) { $message .= "
Success URL: Configured ✓
"; } if (isset($vars['DS_MERCHANT_URLKO'])) { $message .= "
Error URL: Configured ✓
"; } if (isset($vars['DS_MERCHANT_MERCHANTURL'])) { $message .= "
Notification URL: Configured ✓
"; } } // Información de los parámetros de Redsys if (isset($settings['redsys']['params'])) { $params = $settings['redsys']['params']; $message .= "

Redsys Parameters

"; if (isset($params['Ds_SignatureVersion'])) { $message .= "
Signature Version: {$params['Ds_SignatureVersion']}
"; } if (isset($params['Ds_MerchantParameters'])) { $message .= "
Merchant Parameters: [Encoded Data]
"; } if (isset($params['Ds_Signature'])) { $signature = substr($params['Ds_Signature'], 0, 20) . '...'; $message .= "
Signature: {$signature}
"; } } // URL de acción de Redsys if (isset($settings['redsys']['action'])) { $action = $settings['redsys']['action']; $isTestMode = strpos($action, 'sis-t.redsys.es') !== false; $mode = $isTestMode ? 'TEST' : 'LIVE'; $modeColor = $isTestMode ? 'orange' : 'green'; $message .= "

Payment Gateway

"; $message .= "
Action URL: Redsys Payment Gateway
"; $message .= "
Mode: {$mode}
"; } // Información de confirmación de pago (si existe) if (isset($settings['redsys_confirm'])) { $confirm = $settings['redsys_confirm']; $message .= "

Payment Confirmation

"; if (isset($confirm['request'])) { $message .= "
Confirmation Request: Sent to Redsys ✓
"; } if (isset($confirm['response'])) { $response = $confirm['response']; if (isset($response['DS_RESPONSE'])) { $responseCode = $response['DS_RESPONSE']; $responseText = $this->getResponseCodeText($responseCode); $message .= "
Response Code: {$responseCode} - {$responseText}
"; } } } // Información del modelo Payment $message .= "

Payment Model Information

"; $message .= "
Payment ID: {$this->id}
"; $message .= "
Current Status: " . strtoupper($this->status) . "
"; $message .= "
Amount: " . number_format($this->amount / 100, 2) . " " . strtoupper($this->currency) . "
"; $message .= "
Payment Type: " . strtoupper($this->payment_type) . "
"; // Mostrar datos en crudo en un área colapsable para debugging $message .= "

Raw Data

"; $message .= "
"; $message .= "Show Raw Settings"; $message .= "
"; $message .= "
" . htmlspecialchars(json_encode($settings, JSON_PRETTY_PRINT)) . "
"; $message .= "
"; $message .= "
"; $message .= "
"; return $message; } /** * Obtiene el nombre de la moneda basado en el código numérico de Redsys */ private function getCurrencyName($code) { $currencies = [ '978' => 'EUR', '840' => 'USD', '826' => 'GBP', '392' => 'JPY', '124' => 'CAD', '756' => 'CHF', '208' => 'DKK', '752' => 'SEK', '578' => 'NOK', ]; return $currencies[$code] ?? "Currency {$code}"; } /** * Obtiene el nombre del tipo de transacción */ private function getTransactionTypeName($type) { $types = [ '0' => 'Authorization', '1' => 'Pre-authorization', '2' => 'Confirmation', '3' => 'Automatic return', '4' => 'Reference transaction', '5' => 'Recurring transaction', '6' => 'Successive transaction', '7' => 'Authentication', '8' => 'Deferred authorization', '9' => 'Deferred authorization confirmation', ]; return $types[$type] ?? "Transaction type {$type}"; } /** * Obtiene el nombre del idioma basado en el código */ private function getLanguageName($code) { $languages = [ '001' => 'Spanish', '002' => 'English', '003' => 'Catalan', '004' => 'French', '005' => 'German', '006' => 'Dutch', '007' => 'Italian', '008' => 'Swedish', '009' => 'Portuguese', '010' => 'Valencian', '011' => 'Polish', '012' => 'Galician', '013' => 'Basque', ]; return $languages[$code] ?? "Language {$code}"; } /** * Obtiene el nombre de los métodos de pago */ private function getPaymentMethodsName($methods) { if (trim($methods) === '' || $methods === ' ') { return 'All available methods'; } $methodCodes = [ 'T' => 'Credit/Debit Card', 'R' => 'Bank Transfer', 'D' => 'Domiciliation', 'z' => 'Bizum', 'C' => 'Card (specific)', ]; return $methodCodes[$methods] ?? "Method: {$methods}"; } /** * Obtiene el texto del código de respuesta de Redsys */ private function getResponseCodeText($code) { if ($code >= 0 && $code <= 99) { return 'Authorized'; } elseif ($code >= 900 && $code <= 999) { return 'Authorized for returns and confirmations'; } elseif ($code >= 100 && $code <= 199) { return 'Denied'; } else { return 'Error in transaction'; } } }