---
title: Testing de modulos de pago — sandbox y pruebas
section: payment
slug: testing
description: "Como testear modulos de pago en PrestaShop: modo sandbox, tarjetas de prueba, simulacion de webhooks, errores comunes y checklist de QA."
keywords: prestashop pago testing sandbox tarjeta prueba webhook simulacion QA modulo pago PS8
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/payment/testing"
---

# Testing de modulos de pago — sandbox y pruebas

> Como testear modulos de pago en PrestaShop: modo sandbox, tarjetas de prueba, simulacion de webhooks, errores comunes y checklist de QA.

Antes de activar un modulo de pago en produccion es imprescindible probarlo exhaustivamente en modo sandbox. Cada pasarela de pago tiene su propia API de pruebas con tarjetas y escenarios predefinidos.

## Modo sandbox en el modulo

*Implementar modo sandbox con Configuration*

```php
<?php

class MyPaymentModule extends PaymentModule
{
    // ── Constantes de configuracion ──
    const CONFIG_SANDBOX     = 'MYPAY_SANDBOX';
    const CONFIG_API_KEY     = 'MYPAY_API_KEY';
    const CONFIG_SANDBOX_KEY = 'MYPAY_SANDBOX_KEY';

    // ── Obtener la API key correcta segun el modo ──
    private function getApiKey(): string
    {
        if (Configuration::get(self::CONFIG_SANDBOX)) {
            return (string) Configuration::get(self::CONFIG_SANDBOX_KEY);
        }
        return (string) Configuration::get(self::CONFIG_API_KEY);
    }

    // ── Obtener la URL base de la API ──
    private function getApiBaseUrl(): string
    {
        if (Configuration::get(self::CONFIG_SANDBOX)) {
            return 'https://sandbox.mypaymentgateway.com/api';
        }
        return 'https://api.mypaymentgateway.com/api';
    }

    // ── Mostrar aviso visual en el BO cuando sandbox esta activo ──
    public function getContent(): string
    {
        $output = '';
        if (Configuration::get(self::CONFIG_SANDBOX)) {
            $output .= $this->displayWarning(
                $this->trans('SANDBOX MODE ACTIVE — Do not use in production!', [], 'Modules.Mypayment.Admin')
            );
        }
        // ... resto del getContent()
        return $output;
    }
}
```

## Tarjetas de prueba estandar

| Pasarela | Numero de tarjeta | Resultado |
| --- | --- | --- |
| Stripe | 4242 4242 4242 4242 | Pago exitoso |
| Stripe | 4000 0000 0000 0002 | Pago rechazado |
| Stripe | 4000 0025 0000 3155 | Requiere autenticacion 3DS |
| PayPal | 4111 1111 1111 1111 | Pago exitoso (sandbox) |
| Redsys | 4548 8120 4940 0004 | Pago exitoso |
| Redsys | 4548 8120 4940 0004 (CVC 666) | Pago rechazado |
| Braintree | 4111 1111 1111 1111 | Pago exitoso |
| Braintree | 4000 1111 1111 1115 | Rechazado (fondos insuficientes) |

## Simular webhooks de pago

*Simular webhook con curl y con Stripe CLI*

```bash
# ── Simular webhook con curl ──
curl -X POST https://mitienda.com/module/mypayment/webhook \
  -H "Content-Type: application/json" \
  -H "X-Signature: sha256=ABC123" \
  -d '{
    "event": "payment.completed",
    "data": {
      "payment_id": "pay_test_123",
      "amount": 9900,
      "currency": "EUR",
      "metadata": {"cart_id": "42"}
    }
  }'

# ── Stripe CLI (recomendado para desarrollo local) ──
stripe listen --forward-to http://localhost/module/mypayment/webhook
stripe trigger payment_intent.succeeded

# ── PayPal IPN Simulator ──
# https://developer.paypal.com/developer/ipnSimulator/
```

## Errores comunes y solucion

| Error | Causa probable | Solucion |
| --- | --- | --- |
| Cart already ordered | validateOrder() llamado dos veces | Verificar $cart->orderExists() antes de llamar |
| Secure key mismatch | El cliente no coincide con el carrito | Comparar $customer->secure_key con el parametro |
| Payment method not available | hookPaymentOptions no registrado | Verificar que el hook esta activo y el modulo habilitado |
| Order confirmation redirect loop | La URL de confirmacion regenera el carrito | Limpiar el carrito en session despues de validateOrder() |
| Webhook signature invalid | El secret del webhook no coincide | Verificar el secret en la configuracion del modulo |

## Checklist de QA antes de produccion

| Prueba | Estado |
| --- | --- |
| Pago exitoso → pedido creado con estado correcto |  |
| Pago fallido → pedido con estado error / sin pedido |  |
| Pago pendiente → estado pendiente visible en BO |  |
| Email de confirmacion recibido por el cliente |  |
| Email de nuevo pedido recibido por el admin |  |
| Factura generada correctamente (si aplica) |  |
| Doble submit no crea pedido duplicado |  |
| Webhook recibido y procesado correctamente |  |
| Modo sandbox desactivado antes de ir a produccion |  |
| Claves de produccion configuradas |  |
| HTTPS activo en la tienda |  |
| Prueba con varios importes (0.01, 99.99, 1000+) |  |


---

*Fuente: [https://ayudaprestashop.es/payment/testing](https://ayudaprestashop.es/payment/testing). Version Markdown generada automaticamente para consumo por LLMs.*
