/home/suroeste/public_html/payments.transportessuroeste.com/src/Validators
Edit: /home/suroeste/public_html/payments.transportessuroeste.com/src/Validators/Validator.php (6409B)
data = $data;
}
/**
* Validar datos de pago de ticket
*/
public static function validatePayment(array $data): array
{
$validator = new self($data);
// Campos requeridos
$validator->required('ticket_reference', 'Referencia del ticket es requerida');
$validator->required('amount', 'Monto es requerido');
$validator->required('description', 'Descripción es requerida');
$validator->required('payer_email', 'Email del pagador es requerido');
$validator->required('payer_name', 'Nombre del pagador es requerido');
$validator->required('payer_document', 'Documento del pagador es requerido');
$validator->required('payer_document_type', 'Tipo de documento es requerido');
// Validaciones específicas
$validator->numeric('amount', 'Monto debe ser numérico');
$validator->min('amount', TRANSACTION_CONFIG['min_amount'], 'Monto mínimo: $' . (TRANSACTION_CONFIG['min_amount'] / 100));
$validator->max('amount', TRANSACTION_CONFIG['max_amount'], 'Monto máximo: $' . (TRANSACTION_CONFIG['max_amount'] / 100));
$validator->email('payer_email', 'Email inválido');
$validator->maxLength('ticket_reference', 100, 'Referencia muy larga');
$validator->maxLength('description', 500, 'Descripción muy larga');
$validator->inArray('payer_document_type', ['CC', 'CE', 'NIT', 'PP', 'TI'], 'Tipo de documento inválido');
// Validación de teléfono (opcional)
if (!empty($data['payer_phone'])) {
$validator->phone('payer_phone', 'Teléfono inválido');
}
$validator->throwIfErrors();
return $validator->getValidated();
}
/**
* Validar consulta de transacción
*/
public static function validateQuery(array $data): array
{
$validator = new self($data);
if (empty($data['transaction_uuid']) && empty($data['ticket_reference']) && empty($data['internal_reference'])) {
throw new ValidationException(['reference' => 'Debe proporcionar al menos una referencia']);
}
if (!empty($data['transaction_uuid'])) {
$validator->uuid('transaction_uuid', 'UUID de transacción inválido');
}
$validator->throwIfErrors();
return $validator->getValidated();
}
// ============================================================================
// MÉTODOS DE VALIDACIÓN
// ============================================================================
public function required(string $field, string $message): self
{
if (!isset($this->data[$field]) || trim((string)$this->data[$field]) === '') {
$this->errors[$field] = $message;
}
return $this;
}
public function numeric(string $field, string $message): self
{
if (isset($this->data[$field]) && !is_numeric($this->data[$field])) {
$this->errors[$field] = $message;
}
return $this;
}
public function min(string $field, $min, string $message): self
{
if (isset($this->data[$field]) && $this->data[$field] < $min) {
$this->errors[$field] = $message;
}
return $this;
}
public function max(string $field, $max, string $message): self
{
if (isset($this->data[$field]) && $this->data[$field] > $max) {
$this->errors[$field] = $message;
}
return $this;
}
public function email(string $field, string $message): self
{
if (isset($this->data[$field]) && !filter_var($this->data[$field], FILTER_VALIDATE_EMAIL)) {
$this->errors[$field] = $message;
}
return $this;
}
public function maxLength(string $field, int $max, string $message): self
{
if (isset($this->data[$field]) && strlen($this->data[$field]) > $max) {
$this->errors[$field] = $message;
}
return $this;
}
public function minLength(string $field, int $min, string $message): self
{
if (isset($this->data[$field]) && strlen($this->data[$field]) < $min) {
$this->errors[$field] = $message;
}
return $this;
}
public function inArray(string $field, array $allowed, string $message): self
{
if (isset($this->data[$field]) && !in_array($this->data[$field], $allowed)) {
$this->errors[$field] = $message;
}
return $this;
}
public function uuid(string $field, string $message): self
{
$pattern = '/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i';
if (isset($this->data[$field]) && !preg_match($pattern, $this->data[$field])) {
$this->errors[$field] = $message;
}
return $this;
}
public function phone(string $field, string $message): self
{
if (isset($this->data[$field])) {
$phone = preg_replace('/[^0-9+]/', '', $this->data[$field]);
if (strlen($phone) < 7 || strlen($phone) > 15) {
$this->errors[$field] = $message;
}
}
return $this;
}
public function regex(string $field, string $pattern, string $message): self
{
if (isset($this->data[$field]) && !preg_match($pattern, $this->data[$field])) {
$this->errors[$field] = $message;
}
return $this;
}
public function hasErrors(): bool
{
return !empty($this->errors);
}
public function getErrors(): array
{
return $this->errors;
}
public function throwIfErrors(): void
{
if ($this->hasErrors()) {
throw new ValidationException($this->errors);
}
}
public function getValidated(): array
{
return array_intersect_key($this->data, array_flip(array_keys($this->data)));
}
}