fix: correcciones de seguridad pre-producción identificadas en code review
- autoAplicarRecarga: null-check en User::find + DB::transaction atómico
- pagarConSaldo: $cuenta->update('ocupado') dentro de la transacción (evita doble venta)
- comprarPromoConSaldo: Historiale::create movido dentro de la transacción (evita registros huérfanos)
- mostrarTransferencia: array_merge en lugar de asignación directa (preserva pending_purchase)
- Blade copiarTodo: lee valores desde x-ref del DOM en vez de escapado PHP→JS
- ValidarPagoTelegramJob: eliminado import App\Models\User no utilizado
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
1245d255bb
commit
16315da176
@@ -852,6 +852,7 @@ class PublicChat extends Component
|
||||
'nombre_cliente' => $user->name,
|
||||
]);
|
||||
Historial_cuenta::create(['historial_id' => $historial->id, 'cuenta_id' => $cuenta->id]);
|
||||
$cuenta->update(['estado' => 'ocupado']);
|
||||
$saldo->update(['valor' => $nuevoSaldo]);
|
||||
});
|
||||
|
||||
@@ -1019,22 +1020,21 @@ class PublicChat extends Component
|
||||
return;
|
||||
}
|
||||
|
||||
$historial = Historiale::create([
|
||||
'fecha_inicio' => now(),
|
||||
'fecha_final' => now()->addDays(30),
|
||||
'valor' => $precio,
|
||||
'utilidad' => $utilidad,
|
||||
'tipo_pago' => 'saldo',
|
||||
'estado' => 'entregado',
|
||||
'vendedor_id' => $this->userId,
|
||||
'promocion_id' => $promoId,
|
||||
'cliente_id' => $this->userId,
|
||||
'nombre_cliente' => $user->name,
|
||||
]);
|
||||
|
||||
$nuevoSaldo = $saldo->valor - $precio;
|
||||
|
||||
DB::transaction(function () use ($historial, $cuenta, $saldo, $nuevoSaldo) {
|
||||
DB::transaction(function () use ($promo, $user, $saldo, $cuenta, $precio, $utilidad, $promoId, $nuevoSaldo) {
|
||||
$historial = Historiale::create([
|
||||
'fecha_inicio' => now(),
|
||||
'fecha_final' => now()->addDays(30),
|
||||
'valor' => $precio,
|
||||
'utilidad' => $utilidad,
|
||||
'tipo_pago' => 'saldo',
|
||||
'estado' => 'entregado',
|
||||
'vendedor_id' => $this->userId,
|
||||
'promocion_id' => $promoId,
|
||||
'cliente_id' => $this->userId,
|
||||
'nombre_cliente' => $user->name,
|
||||
]);
|
||||
Historial_cuenta::create(['historial_id' => $historial->id, 'cuenta_id' => $cuenta->id]);
|
||||
$cuenta->update(['estado' => 'ocupado']);
|
||||
$saldo->update(['valor' => $nuevoSaldo]);
|
||||
@@ -1171,7 +1171,7 @@ class PublicChat extends Component
|
||||
return;
|
||||
}
|
||||
|
||||
$this->flujoData = ['monto' => $monto];
|
||||
$this->flujoData = array_merge($this->flujoData, ['monto' => $monto]);
|
||||
|
||||
$nombresPrevios = $this->userId ? \App\Models\SolicitudRecarga::nombresPrevios($this->userId) : [];
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
namespace App\Jobs;
|
||||
|
||||
use App\Models\SolicitudRecarga;
|
||||
use App\Models\User;
|
||||
use App\Services\PagoValidadorService;
|
||||
use App\Services\TelegramBotService;
|
||||
use Illuminate\Bus\Queueable;
|
||||
|
||||
@@ -309,22 +309,30 @@ class TelegramBotService
|
||||
|
||||
public function autoAplicarRecarga(string $chatId, array $state, SolicitudRecarga $solicitud, int $monto): void
|
||||
{
|
||||
$usuarioId = $state['user_id'];
|
||||
$user = User::with('saldo')->find($usuarioId);
|
||||
$usuarioId = $state['user_id'];
|
||||
$user = User::with('saldo')->find($usuarioId);
|
||||
|
||||
if (! $user) {
|
||||
Log::warning("[TelegramBot] autoAplicarRecarga: usuario {$usuarioId} no encontrado.");
|
||||
$this->send($chatId, "⚠️ Error al aplicar la recarga. Por favor contacta a un asesor.");
|
||||
return;
|
||||
}
|
||||
|
||||
$saldo = $user->saldo ?? Saldo::create(['usuario_id' => $usuarioId, 'valor' => 0]);
|
||||
$nuevoSaldo = $saldo->valor + $monto;
|
||||
$saldo->update(['valor' => $nuevoSaldo]);
|
||||
|
||||
\App\Models\recarga::create([
|
||||
'usuario_id' => $usuarioId,
|
||||
'saldo_id' => $saldo->id,
|
||||
'monto' => $monto,
|
||||
'valor_recarga'=> $monto,
|
||||
'status' => 'Confirmado',
|
||||
'reference' => 'breb-bot-' . $solicitud->id,
|
||||
]);
|
||||
|
||||
$solicitud->confirmar();
|
||||
DB::transaction(function () use ($saldo, $nuevoSaldo, $usuarioId, $monto, $solicitud) {
|
||||
$saldo->update(['valor' => $nuevoSaldo]);
|
||||
\App\Models\recarga::create([
|
||||
'usuario_id' => $usuarioId,
|
||||
'saldo_id' => $saldo->id,
|
||||
'monto' => $monto,
|
||||
'valor_recarga' => $monto,
|
||||
'status' => 'Confirmado',
|
||||
'reference' => 'breb-bot-' . $solicitud->id,
|
||||
]);
|
||||
$solicitud->confirmar();
|
||||
});
|
||||
|
||||
$pp = $state['data']['pending_purchase'] ?? null;
|
||||
unset($state['data']['pago_pendiente'], $state['data']['solicitud_recarga_id'], $state['data']['pending_purchase']);
|
||||
|
||||
Reference in New Issue
Block a user