gerarjos14/laravel-pagoflash
Composer 安装命令:
composer require gerarjos14/laravel-pagoflash
包简介
SDK oficial de PagoFlash para Laravel. Comprobacion de Pago Movil, pasarela de pagos y gestion de billeteras para comercios en Venezuela.
README 文档
README
SDK oficial de PagoFlash para Laravel. Integra facilmente la comprobacion de Pago Movil, la pasarela de pagos y la gestion de billeteras en tu aplicacion.
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
- PHP 8.1 o superior
- Laravel 9.x, 10.x, 11.x o 12.x
- Extensiones PHP:
json,mbstring
Instalacion
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
php artisan vendor:publish --tag=pagoflash-config
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
php artisan pagoflash:test
Para crear una orden de prueba real:
php artisan pagoflash:test --with-payment
Uso Rapido
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)
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 por Redireccion (Recomendado para web)
[ Tu App ] [ PagoFlash ] [ Cliente ]
| | |
|--- crearOrden() ---->| |
|<-- URL pasarela -----| |
| | |
|-- redirect() -------------------------------->|
| |<-- cliente paga -----|
| | |
|<-- Webhook (POST) ---| |
|-- marcar como pagado | |
| |--- redirect -------->|
| | a tu URL success |
Flujo por API (Recomendado para apps moviles)
// Paso 1: Crear la orden $order = PagoFlash::createOrder( amount: 25.05, description: 'Compra App', orderId: 'APP-001', payerEmail: 'user@app.com', payerName: 'Usuario App', payerDocument: 'V12345678', payerPhone: '4241234567', ); // Paso 2: Obtener proveedor de Pago Movil $provider = PagoFlash::findPagoMovilProvider(); $bankDetails = $provider->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()} <- IMPORTANTE // Paso 4: El usuario hace el Pago Movil desde su banco // Paso 5a: Verificar por polling (consultar estado cada X segundos) $isPaid = PagoFlash::isOrderPaid($order->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
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)
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
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
# 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
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)
En el ambiente de sandbox puedes probar con estos datos:
| Campo | Valor |
|---|---|
| Banco | BNC 0191 |
| Telefono | 0424 1234567 |
| Cedula | V123456789 |
| Token OTP | Cualquiera (en sandbox no se valida) |
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
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
// 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
// Listar billeteras PagoFlash::listWallets(): array<WalletResponse> // 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
// Listar proveedores PagoFlash::listProviders(): array<ProviderResponse> // Encontrar proveedor P2P-IN (comprobacion de pago movil) PagoFlash::findPagoMovilProvider(): ?ProviderResponse // Obtener datos bancarios para mostrar al cliente PagoFlash::getPagoMovilBankDetails(): ?array
Transacciones
// Listar transacciones PagoFlash::listTransactions(int $page = 1, array $filters = []): PaginatedResponse
Cuentas Bancarias
// Agregar cuenta bancaria PagoFlash::addBankAccount(string $bankCode, string $number, ?string $fiscalRegistry = null, ?string $alias = null): ApiResponse
Devoluciones
// Solicitar devolucion por dispersion PagoFlash::requestRefundDispersion(RefundDispersionRequest $request): ApiResponse
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
Si descubres algun problema de seguridad, por favor envia un email a gerarjos14@gmail.com en lugar de crear un issue publico.
Soporte
- Documentacion de la API: docs.pagoflash.com
- Dashboard: pagoflash.com/comercio
- Email de soporte PagoFlash: api@unidigital.global
- Issues del SDK: GitHub Issues
Licencia
Este paquete es software de codigo abierto bajo la Licencia MIT.
gerarjos14/laravel-pagoflash 适用场景与选型建议
gerarjos14/laravel-pagoflash 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 05 月 09 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「venezuela」 「pagos」 「laravel」 「pagoflash」 「pago-movil」 「pasarela-de-pagos」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 gerarjos14/laravel-pagoflash 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 gerarjos14/laravel-pagoflash 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 gerarjos14/laravel-pagoflash 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Validar números de cuentas bancarias Venezuela
A Magento 2 module for ComproPago, cash and SPEI payments
CedulaVE API permite consultar datos personales de habitantes de Venezuela inscritos en el CNE mediante su Cédula de Identidad.
Provides states, municipalities, parishes and regions of Venezuela
Alfabank REST API integration
Provides states, municipalities, parishes and regions of Venezuela
统计信息
- 总下载量: 1
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 34
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-05-09