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 '
";
// 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 .= "
";
$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';
}
}
}