PHPackages                             gerarjos14/laravel-pagoflash - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. gerarjos14/laravel-pagoflash

ActiveLibrary[Payment Processing](/categories/payments)

gerarjos14/laravel-pagoflash
============================

SDK oficial de PagoFlash para Laravel. Comprobacion de Pago Movil, pasarela de pagos y gestion de billeteras para comercios en Venezuela.

v1.0.0(1mo ago)01MITPHPPHP ^8.1CI failing

Since May 10Pushed 1mo agoCompare

[ Source](https://github.com/gerarjos14/laravel-pagoflash)[ Packagist](https://packagist.org/packages/gerarjos14/laravel-pagoflash)[ Docs](https://github.com/gerarjos14/laravel-pagoflash)[ RSS](/packages/gerarjos14-laravel-pagoflash/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (9)Versions (2)Used By (0)

PagoFlash SDK para Laravel
==========================

[](#pagoflash-sdk-para-laravel)

[![CI](https://github.com/gerarjos14/laravel-pagoflash/actions/workflows/ci.yml/badge.svg)](https://github.com/gerarjos14/laravel-pagoflash/actions/workflows/ci.yml)[![Latest Stable Version](https://camo.githubusercontent.com/fdfedcd5cda6cf707903cb1984e368df68a5ab3909c546327cea057e76943d89/68747470733a2f2f706f7365722e707567782e6f72672f67657261726a6f7331342f6c61726176656c2d7061676f666c6173682f762f737461626c65)](https://packagist.org/packages/gerarjos14/laravel-pagoflash)[![Total Downloads](https://camo.githubusercontent.com/31a3b4cd1f0399cd34b97e7cd677b0b35778452eb695c4e41eb2cf9e76da6240/68747470733a2f2f706f7365722e707567782e6f72672f67657261726a6f7331342f6c61726176656c2d7061676f666c6173682f646f776e6c6f616473)](https://packagist.org/packages/gerarjos14/laravel-pagoflash)[![License](https://camo.githubusercontent.com/27d23b3d42dc35e3826ccfa720e566a5bcdaf2da3abf92ec920b79d15c85dcac/68747470733a2f2f706f7365722e707567782e6f72672f67657261726a6f7331342f6c61726176656c2d7061676f666c6173682f6c6963656e7365)](https://packagist.org/packages/gerarjos14/laravel-pagoflash)

SDK oficial de [PagoFlash](https://www.pagoflash.com) para Laravel. Integra facilmente la **comprobacion de Pago Movil**, la **pasarela de pagos** y la **gestion de billeteras** en tu aplicacion.

Caracteristicas
---------------

[](#caracteristicas)

- **Comprobacion de Pago Movil (P2P-IN)** - Verifica pagos moviles realizados por tus clientes
- **Pasarela de Pagos** - Crea ordenes de pago con redireccion a la interfaz de PagoFlash
- **Pagos P2P (Wallet)** - Envia pagos movil usando el saldo de tu billetera
- **Webhooks** - Recibe notificaciones en tiempo real de pagos exitosos y fallidos
- **DTOs Tipados** - Toda la API usa objetos tipados para mayor seguridad
- **Validacion Integrada** - Los DTOs validan los datos antes de enviarlos a la API
- **Reintentos Automaticos** - El cliente HTTP reintenta ante fallos de conexion
- **Logging Configurable** - Registra todas las operaciones para debugging
- **Laravel Native** - Facade, Service Provider, Events, Commands y Auto-Discovery

Requisitos
----------

[](#requisitos)

- PHP 8.1 o superior
- Laravel 9.x, 10.x, 11.x o 12.x
- Extensiones PHP: `json`, `mbstring`

Instalacion
-----------

[](#instalacion)

### 1. Instalar via Composer

[](#1-instalar-via-composer)

```
composer require gerarjos14/laravel-pagoflash
```

El package usa **Laravel Auto-Discovery**, por lo que el Service Provider y el Facade se registran automaticamente.

### 2. Publicar la configuracion

[](#2-publicar-la-configuracion)

```
php artisan vendor:publish --tag=pagoflash-config
```

### 3. Configurar variables de entorno

[](#3-configurar-variables-de-entorno)

Agrega estas variables a tu archivo `.env`:

```
# Entorno: sandbox o production
PAGOFLASH_ENVIRONMENT=sandbox

# Credenciales de tu cuenta de comercio en PagoFlash
PAGOFLASH_EMAIL=tu-email@comercio.com
PAGOFLASH_PASSWORD=tu-password

# Moneda por defecto (USD o VES)
PAGOFLASH_CURRENCY=USD

# URLs de webhook (donde PagoFlash notificara los pagos)
PAGOFLASH_WEBHOOK_SUCCESS_URL=https://tudominio.com/webhooks/pagoflash/success
PAGOFLASH_WEBHOOK_ERROR_URL=https://tudominio.com/webhooks/pagoflash/error

# Clave secreta para verificar webhooks (opcional pero recomendado)
PAGOFLASH_WEBHOOK_SECRET=tu-clave-secreta

# URLs de redireccion despues del pago
PAGOFLASH_REDIRECT_SUCCESS_URL=https://tudominio.com/pago-exitoso
PAGOFLASH_REDIRECT_ERROR_URL=https://tudominio.com/pago-fallido
```

### 4. Verificar la conexion

[](#4-verificar-la-conexion)

```
php artisan pagoflash:test
```

Para crear una orden de prueba real:

```
php artisan pagoflash:test --with-payment
```

Uso Rapido
----------

[](#uso-rapido)

### Crear una orden de pago

[](#crear-una-orden-de-pago)

```
use PagoFlash;

// Crear la orden
$order = PagoFlash::createOrder(
    amount: 25.50,
    description: 'Compra #1234 - Zapatos deportivos',
    orderId: '1234',                    // Tu ID interno
    payerEmail: 'cliente@email.com',    // Email del cliente
    payerName: 'Juan Perez',            // Nombre completo
    payerDocument: 'V12345678',         // Cedula (V, E, P, J, G)
    payerPhone: '4241234567',           // Telefono (10 digitos)
);

// Redirigir al cliente a la pasarela de pago
return redirect($order->getPaymentUrl());
```

### Usar el DTO completo (mas opciones)

[](#usar-el-dto-completo-mas-opciones)

```
use Gerarjos14\PagoFlash\DTOs\Requests\CreateOrderRequest;
use Gerarjos14\PagoFlash\Facades\PagoFlash;

$request = new CreateOrderRequest(
    amount: 50.00,
    description: 'Membresia Premium',
    orderId: 'MEMB-5678',
    payerEmail: 'cliente@email.com',
    payerName: 'Maria Garcia',
    payerDocument: 'V87654321',
    payerPhone: '4147654321',
    currency: 'USD',                    // USD se convierte a Bs automaticamente
    minAmount: null,                    // null = monto exacto obligatorio
    expiresAt: null,                    // null = 30 minutos por defecto
    successRedirectUrl: 'https://mitienda.com/gracias',
    errorRedirectUrl: 'https://mitienda.com/error',
    successCallbackUrl: 'https://mitienda.com/webhook/pago',
    errorCallbackUrl: 'https://mitienda.com/webhook/error',
);

// No disponible directamente, usar PagoFlash::createOrder con opciones array
$order = PagoFlash::createOrder(
    amount: 50.00,
    description: 'Membresia Premium',
    orderId: 'MEMB-5678',
    payerEmail: 'cliente@email.com',
    payerName: 'Maria Garcia',
    payerDocument: 'V87654321',
    payerPhone: '4147654321',
    options: [
        'currency' => 'USD',
        'successRedirectUrl' => 'https://mitienda.com/gracias',
        'successCallbackUrl' => 'https://mitienda.com/webhook/pago',
    ]
);
```

Flujo de Pago Completo
----------------------

[](#flujo-de-pago-completo)

### Flujo por Redireccion (Recomendado para web)

[](#flujo-por-redireccion-recomendado-para-web)

```
[ Tu App ]          [ PagoFlash ]           [ Cliente ]
    |                      |                      |
    |--- crearOrden() ---->|                      |
    ||
    |                      |getBankDetails();

// Paso 3: Mostrar datos al usuario para que haga el Pago Movil
// Banco: {$bankDetails['Bank']}
// Telefono: {$bankDetails['Phone']}
// Documento: {$bankDetails['Document']}
// Concepto/Referencia: {$order->getReferenceCode()} getOrderId());

// Paso 5b: O verificar manualmente con datos del pago
$response = PagoFlash::verifyPagoMovilSimple(
    orderId: $order->getOrderId(),
    phoneCode: '424',
    phone: '1234567',
    bankCode: '0191',
    amount: 25.05,
    token: '123456',            // OTP del usuario
    fullDocument: 'V12345678',
    wallet: $provider->walletId ?? '',
    provider: $provider->strongId,
);

if ($response->isSuccessful()) {
    // Pago confirmado!
}
```

Verificar Estado de Orden
-------------------------

[](#verificar-estado-de-orden)

### Por Polling (consulta periodica)

[](#por-polling-consulta-periodica)

```
use PagoFlash;

// Verificar si fue pagada
if (PagoFlash::isOrderPaid('uuid-de-la-orden')) {
    // Activar servicio, enviar email, etc.
}

// Obtener detalle completo
$order = PagoFlash::getOrder('uuid-de-la-orden');
echo $order->status;        // "Pagado", "Pendiente", "Expirado", "Anulado"
echo $order->amount;        // 25.05
echo $order->isPaid();      // true/false
echo $order->isExpired();   // true/false
```

### Por Webhook (notificacion push)

[](#por-webhook-notificacion-push)

Crea un listener para el evento `PaymentReceived`:

```
// app/Listeners/MarkOrderAsPaid.php
namespace App\Listeners;

use Gerarjos14\PagoFlash\Events\PaymentReceived;

class MarkOrderAsPaid
{
    public function handle(PaymentReceived $event): void
    {
        $orderId = $event->getOrderId();        // Tu ID interno
        $amount = $event->getAmount();          // Monto en USD
        $amountBs = $event->getAmountBs();      // Monto en Bs
        $rate = $event->getExchangeRate();      // Tasa de cambio
        $payer = $event->getPayerName();        // Quien pago
        $reference = $event->getReference();    // Referencia PagoFlash

        // Buscar tu orden y marcarla como pagada
        $order = Order::where('external_id', $orderId)->first();

        if ($order && ! $order->isPaid()) {
            $order->update([
                'status'         => 'paid',
                'amount_bs'      => $amountBs,
                'exchange_rate'  => $rate,
                'paid_at'        => now(),
                'reference'      => $reference,
                'payer_name'     => $payer,
            ]);
        }
    }
}
```

Registra el listener en `EventServiceProvider`:

```
protected $listen = [
    \Gerarjos14\PagoFlash\Events\PaymentReceived::class => [
        \App\Listeners\MarkOrderAsPaid::class,
        \App\Listeners\SendPaymentConfirmationEmail::class,
        \App\Listeners\ActivateSubscription::class,
    ],
    \Gerarjos14\PagoFlash\Events\PaymentFailed::class => [
        \App\Listeners\NotifyPaymentFailed::class,
    ],
];
```

Gestion de Billeteras
---------------------

[](#gestion-de-billeteras)

```
use PagoFlash;

// Listar billeteras
$wallets = PagoFlash::listWallets();
foreach ($wallets as $wallet) {
    echo $wallet->service;          // "MiBanco"
    echo $wallet->balance;          // 1051534.66
    echo $wallet->isCustodiable;    // true/false
    echo $wallet->strongId;         // GUID
}

// Saldo total
$total = PagoFlash::getTotalBalance();
echo "Saldo total: {$total} Bs";

// Enviar Pago Movil desde wallet (vuelto digital)
$response = PagoFlash::sendPagoMovil(
    wallet: 'uuid-billetera-origen',
    bankCode: '0191',               // BNC
    phoneCode: '424',
    phone: '1234567',
    fullDocument: 'V12345678',
    amount: 10.00,
    description: 'Vuelto digital',
);

if ($response->isSuccessful()) {
    echo "Pago enviado! Ref: " . $response->result['reference'];
}
```

Comandos Artisan
----------------

[](#comandos-artisan)

```
# Verificar conexion y credenciales
php artisan pagoflash:test

# Verificar conexion y crear orden de prueba
php artisan pagoflash:test --with-payment

# Ver billeteras y saldos
php artisan pagoflash:wallets

# Enviar Pago Movil desde comando
php artisan pagoflash:wallets --send \
  --wallet=uuid-aqui \
  --bank=0191 \
  --phone=4241234567 \
  --doc=V12345678 \
  --amount=10 \
  --description="Pago de prueba"
```

Configuracion Avanzada
----------------------

[](#configuracion-avanzada)

El archivo `config/pagoflash.php` tiene todas las opciones documentadas:

```
return [
    // Entorno: 'sandbox' o 'production'
    'environment' => env('PAGOFLASH_ENVIRONMENT', 'sandbox'),

    // Credenciales
    'credentials' => [
        'email'    => env('PAGOFLASH_EMAIL'),
        'password' => env('PAGOFLASH_PASSWORD'),
    ],

    // Token JWT (opcional - si ya tienes uno)
    'token' => env('PAGOFLASH_TOKEN'),

    // Moneda por defecto
    'currency' => env('PAGOFLASH_CURRENCY', 'USD'),

    // URLs webhook
    'webhook' => [
        'success_url'  => env('PAGOFLASH_WEBHOOK_SUCCESS_URL'),
        'error_url'    => env('PAGOFLASH_WEBHOOK_ERROR_URL'),
        'secret'       => env('PAGOFLASH_WEBHOOK_SECRET'),
        'middleware'   => ['api', 'throttle:60,1'],
        'prefix'       => 'webhooks',
    ],

    // URLs de redireccion
    'redirect' => [
        'success' => env('PAGOFLASH_REDIRECT_SUCCESS_URL'),
        'error'   => env('PAGOFLASH_REDIRECT_ERROR_URL'),
    ],

    // Logging
    'logging' => [
        'enabled' => true,
        'channel' => 'stack',
        'level'   => 'debug',
    ],

    // Reintentos HTTP
    'retry' => [
        'attempts'   => 3,
        'delay_ms'   => 500,
        'multiplier' => 2.0,    // 500ms, 1000ms, 2000ms
    ],

    // Timeouts
    'timeout' => [
        'connection' => 10,
        'request'    => 30,
    ],
];
```

Datos de Prueba (Sandbox)
-------------------------

[](#datos-de-prueba-sandbox)

En el ambiente de sandbox puedes probar con estos datos:

CampoValorBancoBNC 0191Telefono0424 1234567CedulaV123456789Token OTPCualquiera (en sandbox no se valida)Manejo de Errores
-----------------

[](#manejo-de-errores)

El SDK lanza excepciones especificas que puedes capturar:

```
use Gerarjos14\PagoFlash\Exceptions\AuthenticationException;
use Gerarjos14\PagoFlash\Exceptions\OrderException;
use Gerarjos14\PagoFlash\Exceptions\PaymentVerificationException;
use Gerarjos14\PagoFlash\Exceptions\PagoFlashException;
use Gerarjos14\PagoFlash\Exceptions\WalletException;

try {
    $order = PagoFlash::createOrder(...);
} catch (AuthenticationException $e) {
    // Credenciales invalidas o token expirado
    Log::error('Auth error: ' . $e->getMessage());
} catch (OrderException $e) {
    // Orden no encontrada, ya pagada, expirada, etc.
    if ($e->getContext()['type'] === 'order_already_paid') {
        // La orden ya fue pagada anteriormente
    }
} catch (PaymentVerificationException $e) {
    // El pago movil no pudo ser verificado
    Log::error('Payment verification failed: ' . $e->getMessage());
} catch (WalletException $e) {
    // Saldo insuficiente, billetera no encontrada
    if ($e->getContext()['type'] === 'insufficient_balance') {
        $available = $e->getContext()['available'];
        Log::error("Saldo insuficiente. Disponible: {$available}");
    }
} catch (PagoFlashException $e) {
    // Error generico de la API
    Log::error('PagoFlash error: ' . $e->getMessage());
}
```

Referencia de la API del SDK
----------------------------

[](#referencia-de-la-api-del-sdk)

### Ordenes

[](#ordenes)

```
// Crear orden
PagoFlash::createOrder(float $amount, string $description, string $orderId, string $payerEmail, string $payerName, string $payerDocument, string $payerPhone, array $options = []): OrderResponse

// Obtener orden
PagoFlash::getOrder(string $orderId): OrderDetailResponse

// Listar ordenes (paginado)
PagoFlash::listOrders(int $page = 1, array $filters = []): PaginatedResponse

// Anular orden
PagoFlash::cancelOrder(string $orderId): bool

// Revertir orden pagada
PagoFlash::revertOrder(string $orderId): bool

// Notificar orden manualmente
PagoFlash::notifyOrder(string $orderId): bool

// Verificar si esta pagada
PagoFlash::isOrderPaid(string $orderId): bool
```

### Pago Movil

[](#pago-movil)

```
// Verificar Pago Movil con DTO
PagoFlash::verifyPagoMovil(string $orderId, VerifyPagoMovilRequest $request): ApiResponse

// Verificar Pago Movil con parametros simples
PagoFlash::verifyPagoMovilSimple(string $orderId, string $phoneCode, string $phone, string $bankCode, float $amount, string $token, string $fullDocument, string $wallet, string $provider): ApiResponse
```

### Billeteras

[](#billeteras)

```
// Listar billeteras
PagoFlash::listWallets(): array

// Saldo total
PagoFlash::getTotalBalance(): float

// Buscar billetera
PagoFlash::findWallet(string $walletId): ?WalletResponse

// Enviar Pago Movil desde wallet
PagoFlash::sendFromWallet(SendWalletRequest $request): ApiResponse
PagoFlash::sendPagoMovil(string $wallet, string $bankCode, string $phoneCode, string $phone, string $fullDocument, float $amount, ?string $description = null): ApiResponse
```

### Proveedores

[](#proveedores)

```
// Listar proveedores
PagoFlash::listProviders(): array

// Encontrar proveedor P2P-IN (comprobacion de pago movil)
PagoFlash::findPagoMovilProvider(): ?ProviderResponse

// Obtener datos bancarios para mostrar al cliente
PagoFlash::getPagoMovilBankDetails(): ?array
```

### Transacciones

[](#transacciones)

```
// Listar transacciones
PagoFlash::listTransactions(int $page = 1, array $filters = []): PaginatedResponse
```

### Cuentas Bancarias

[](#cuentas-bancarias)

```
// Agregar cuenta bancaria
PagoFlash::addBankAccount(string $bankCode, string $number, ?string $fiscalRegistry = null, ?string $alias = null): ApiResponse
```

### Devoluciones

[](#devoluciones)

```
// Solicitar devolucion por dispersion
PagoFlash::requestRefundDispersion(RefundDispersionRequest $request): ApiResponse
```

Desarrollo
----------

[](#desarrollo)

```
# Clonar
gh repo clone gerarjos14/laravel-pagoflash
cd laravel-pagoflash

# Instalar dependencias
composer install

# Ejecutar tests
composer test

# Ejecutar con coverage
composer test-coverage

# Analisis estatico
composer analyse

# Formatear codigo
composer format

# Verificar formato
composer format-dry-run
```

Seguridad
---------

[](#seguridad)

Si descubres algun problema de seguridad, por favor envia un email a  en lugar de crear un issue publico.

Soporte
-------

[](#soporte)

- **Documentacion de la API**: [docs.pagoflash.com](https://docs.pagoflash.com)
- **Dashboard**: [pagoflash.com/comercio](https://www.pagoflash.com/comercio)
- **Email de soporte PagoFlash**:
- **Issues del SDK**: [GitHub Issues](https://github.com/gerarjos14/laravel-pagoflash/issues)

Licencia
--------

[](#licencia)

Este paquete es software de codigo abierto bajo la [Licencia MIT](LICENSE).

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance94

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

31d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9a26ca025a566d163300579e53752c66e3c107baddda878434a15f0b284ade63?d=identicon)[gerarjos14](/maintainers/gerarjos14)

---

Tags

laravelvenezuelapagospagoflashpago-movilpasarela-de-pagoscomprobacion-pago-movil

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/gerarjos14-laravel-pagoflash/health.svg)

```
[![Health](https://phpackages.com/badges/gerarjos14-laravel-pagoflash/health.svg)](https://phpackages.com/packages/gerarjos14-laravel-pagoflash)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[laravel/socialite

Laravel wrapper around OAuth 1 &amp; OAuth 2 libraries.

5.7k104.3M822](/packages/laravel-socialite)[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k51.0M7.4k](/packages/larastan-larastan)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

76318.2M110](/packages/laravel-mcp)[spatie/laravel-health

Monitor the health of a Laravel application

88011.3M149](/packages/spatie-laravel-health)[spatie/laravel-export

Create a static site bundle from a Laravel app

670139.5k6](/packages/spatie-laravel-export)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
