PHPackages                             shino47/laravel-yappy-checkout - 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. shino47/laravel-yappy-checkout

ActiveLibrary[Payment Processing](/categories/payments)

shino47/laravel-yappy-checkout
==============================

Integración para Laravel del Botón de Pago Yappy

1.1.1(4y ago)13991MITPHPCI failing

Since Jun 11Pushed 6mo ago1 watchersCompare

[ Source](https://github.com/shino47/laravel-yappy-checkout)[ Packagist](https://packagist.org/packages/shino47/laravel-yappy-checkout)[ RSS](/packages/shino47-laravel-yappy-checkout/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (4)Dependencies (3)Versions (6)Used By (0)

Laravel Yappy Checkout
======================

[](#laravel-yappy-checkout)

[![Tests](https://github.com/shino47/laravel-yappy-checkout/actions/workflows/tests.yml/badge.svg)](https://github.com/shino47/laravel-yappy-checkout/actions/workflows/tests.yml/badge.svg)[![Latest Stable Version](https://camo.githubusercontent.com/4b14b409f329c2063ebc91827cf4b6615de2a3a631b442616dd77a3827c068e4/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7368696e6f34372f6c61726176656c2d79617070792d636865636b6f7574)](https://camo.githubusercontent.com/4b14b409f329c2063ebc91827cf4b6615de2a3a631b442616dd77a3827c068e4/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7368696e6f34372f6c61726176656c2d79617070792d636865636b6f7574)[![License](https://camo.githubusercontent.com/78843cc3a8b59a4ada6327a5ea5a1aa96534f81699baa33d1e49f48e49ed5f29/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f7368696e6f34372f6c61726176656c2d79617070792d636865636b6f7574)](https://camo.githubusercontent.com/78843cc3a8b59a4ada6327a5ea5a1aa96534f81699baa33d1e49f48e49ed5f29/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f7368696e6f34372f6c61726176656c2d79617070792d636865636b6f7574)

Implementación del Botón de Pago Yappy para Laravel.

Este paquete está basado en la [Librería en PHP](https://www.bgeneral.com/desarrolladores/boton-de-pago-yappy/sdk-en-php)del sitio web de Banco General y nació porque a muchos no nos agrada la idea de versionar librerías.

Instalación
-----------

[](#instalación)

Para instalar, utiliza el siguiente comando:

```
composer require shino47/laravel-yappy-checkout
```

Si tienes Laravel 5.5 o superior, esto es todo (gracias al auto-discovery). Para versiones anteriores tienes agregar unas líneas a tu archivo `config/app.php`, dentro de la llave `providers` y dentro de `aliases`:

```
'providers' => [
    // Otros paquetes por acá
    // ...
    BancoGeneral\YappyCheckout\YappyCheckoutServiceProvider::class,
],

'aliases' => [
    // Otros aliases por acá
    // ...
    'YappyCheckout' => BancoGeneral\YappyCheckout\Facades\YappyCheckoutFacade::class,
],
```

Configuración
-------------

[](#configuración)

Agrega las siguientes variables a tu `.env` (y a tu `.env.example` en blanco si eres un buen muchacho):

```
YAPPY_SECRET_KEY=
YAPPY_MERCHANT_ID=
YAPPY_MERCHANT_URL=
YAPPY_SUCCESS_URL=
YAPPY_FAIL_URL=
YAPPY_LOGS_ENABLED=true
```

VariableTipoDescripciónYAPPY\_SECRET\_KEY`string`Clave secreta del comercio.YAPPY\_MERCHANT\_ID`string`ID del comercio.YAPPY\_MERCHANT\_URL`string`URL de comercio. Normalmente es igual a APP\_URL, pero en ambientes de desarrollo APP\_URL puede tomar valores locales.YAPPY\_SUCCESS\_URL`string`URL a la cual se redireccionará al usuario cuando se ejecute correctamente la transacción.YAPPY\_FAIL\_URL`string`URL a la cual se redireccionará al usuario en caso de que cancele la transacción o haya algún error.YAPPY\_LOGS\_ENABLED`bool`Indica si registra errores en los logs. Por defecto es `true`.Si quieres tener más control sobre la configuración, puedes hacer publish del archivo de configuración:

```
php artisan vendor:publish --provider="BancoGeneral\YappyCheckout\YappyCheckoutServiceProvider"
```

Esto agregará el archivo `config/yappy.php` y el `public/vendor/yappy/js/yappy-checkout.js` a tu proyecto.

Si no quieres ambos archivos, puedes usar los tags `config` y `assets`:

```
# Si sólo necesitas el archivo de configuración
php artisan vendor:publish \
    --provider="BancoGeneral\YappyCheckout\YappyCheckoutServiceProvider" \
    --tag=config

# Si sólo necesitas los assets para el front end
php artisan vendor:publish \
    --provider="BancoGeneral\YappyCheckout\YappyCheckoutServiceProvider" \
    --tag=assets
```

Uso
---

[](#uso)

El flujo del pago es sencillo y se resume en lo siguiente:

1. El usuario presiona el botón de Pagar/Donar.
2. Nuestra aplicación recibe la petición, valida las credenciales del comercio y genera la URL del pago.
3. Si todo sale bien, el usuario es redireccionado a la URL generada. Ya aquí el usuario está fuera de nuestra aplicación. El flujo continúa del lado de Yappy.
4. Luego de que se haga, falle o cancele la transacción, el usuario será redirigido a la URL definida en `YAPPY_SUCCESS_URL` o `YAPPY_FAIL_URL`. Yappy nos hará una petición a un endpoint de nuestra aplicación.
5. En esta petición Yappy nos envía el número de orden y el estado de la transacción. Somos libres de jugar con esta información en nuestra aplicación.

### Agregar el botón a nuestras vistas

[](#agregar-el-botón-a-nuestras-vistas)

Primero, agregamos lo siguiente en donde queramos nuestro botón.

```

```

Lamentablemente, hicieron que el botón por fuerza sea un `div` (en el CSS). En nuestro caso, no nos vamos a complicar y vamos en envolver ese `div` en una etiqueda `a` o `button`.

Como vemos, el botón acepta atributos de tipo data.

AtributoDescripción`color`Define el color del botón. Las opciones son `dark` y `brand` (por defecto).`donacion`Define el texto del botón. Por defecto es *Pagar*, pero si está presente dirá *Donar*.Lo siguiente será agregar el script que le dará estilo a nuestro botón. Podemos hacerlo de alguna de las siguientes maneras.

#### Usando un CDN

[](#usando-un-cdn)

```

```

#### Usando el generado en el vendor:publish

[](#usando-el-generado-en-el-vendorpublish)

Si hiciste `vendor:publish` ya tienes este script en la carpeta `public/vendor/yappy/js`, por lo que podemos referenciarlo así:

```

```

#### Usando Laravel Mix

[](#usando-laravel-mix)

El método anterior tiene un inconveniente: si se actualiza, el cliente no lo notará si el navegador no refresca el cache. Para solucionar eso, nos apoyamos en Laravel Mix. Abrimos el archivo `webpack.mix.js` de nuestra aplicación y agregamos lo siguiente:

```
mix.scripts([
    // Otras librerías por acá...
    // ...
    'vendor/shino47/laravel-yappy-checkout/resources/assets/js/yappy-checkout.js',
], 'public/js/vendor.js');
```

Y en nuestras vistas:

```

```

### Redireccionar al cliente

[](#redireccionar-al-cliente)

Una vez el usuario haya presionado el enlace o botón, la petición será recibida en nuestro controlador de la siguiente manera.

```
use YappyCheckout;

class YeyoController extends Controller
{
    public function redirectToYappyPayment()
    {
        $url = YappyCheckout::getPaymentUrl($orderId, $subtotal, $tax, $total);
        abort_if(is_null($url), 500);
        return redirect()->away($url);
    }
}
```

El método `getPaymentUrl` devuelve `null` si ha habido un error generando la URL; en ese caso verifica las credenciales del comercio. Este método recibe los siguientes parámetros:

VariableTipoDescripción`orderId``string`, `int`ID de la orden. Será usada por Yappy al finalizar la transacción.`subtotal``float`Subtotal de la compra.`tax``float`Impuesto de la compra.`total``float`Total de la compra.`phone``string`El número de teléfono del usuario (opcional).Si todo sale bien, el usuario será redirigido a esa URL generada.

### Páginas de estado

[](#páginas-de-estado)

Una vez que se haya hecho o se cancele la transacción, el usuario será redirigido a nuestro sitio web. Para ello, debemos definir las variables `YAPPY_SUCCESS_URL` y `YAPPY_FAIL_URL`. Pueden ser, por ejemplo:

```
YAPPY_SUCCESS_URL="${APP_URL}/pago-recibido"
YAPPY_FAIL_URL="${APP_URL}/pago-fallido"
```

Recuerda definir esas rutas en tu `routes/web.php` y crearles sus vistas.

### Recibir el estado de la transacción

[](#recibir-el-estado-de-la-transacción)

Una vez terminada la transacción, Yappy nos enviará el estado a nuestro servidor a `mi-dominio.com/pagosbg.php`. Lamentablemente, no podemos cambiar esa ruta, así que toca trabajar con ese `.php` feíto en la URL.

Creamos nuestra ruta en `routes/web.php`.

```
// Para Laravel 8 en adelante
Route::get('/pagosbg.php', [YeyoController::class, 'yappyPaymentStatus']);

// O para versiones anteriores
Route::get('/pagosbg.php', 'YeyoController@yappyPaymentStatus');
```

Y en nuestro controlador.

```
use YappyCheckout;
use Illuminate\Http\Request;

class YeyoController extends Controller
{
    public function yappyPaymentStatus(Request $request)
    {
        $data = YappyCheckout::getPaymentStatus($request->all());
        $success = isset($data);
        if ($success) {
            // Mi lógica de negocio a continuación
            $order = \App\Models\Order::find($data['order_id']);
            $order->status = $data['status'];
            $order->save();
        }
        return response()->json([
            'success' => $success,
        ]);
    }
}
```

El método `getPaymentStatus` recibe un `array` con los parámetros de la petición y devuelve `null` en caso de error o un `array` con el ID de la orden (`order_id`) y el estado de la transacción (`status`). Los valores de `status` pueden ser:

CódigoDescripciónE**Ejecutado**. El cliente confirmó el pago y se completó la compra.R**Rechazado**. El cliente no confirma el pago dentro de los cinco minutos que dura la vida del pedido.C**Cancelado**. El cliente inició el proceso, pero canceló el pedido en el app de Banco General.**Nota**: Yappy no está enviando peticiones cuando las transacciones quedan rechazadas (`R`). El tiempo de espera actualmente es cinco minutos, así que pasado este tiempo tendrás que actualizar el estado a *rechazado*.

Contribuir
----------

[](#contribuir)

Si deseas contribuir, siéntete libre de subir tu pull request usando el estándar [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)que es el que usa Laravel.

Usa inglés para el código y español para documentar. Código en inglés para que combine con tus aplicaciones Laravel y documentación en español, porque hay muchos desarrolladores con inglés malito.

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance47

Moderate activity, may be stable

Popularity15

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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

Every ~0 days

Total

5

Last Release

1794d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/0c5517bd5d4284d2adbafce198fdb9763f1993f93cf4a84977f01c227e87624b?d=identicon)[shino47](/maintainers/shino47)

---

Top Contributors

[![shino47](https://avatars.githubusercontent.com/u/44731419?v=4)](https://github.com/shino47 "shino47 (12 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/shino47-laravel-yappy-checkout/health.svg)

```
[![Health](https://phpackages.com/badges/shino47-laravel-yappy-checkout/health.svg)](https://phpackages.com/packages/shino47-laravel-yappy-checkout)
```

###  Alternatives

[chargebee/chargebee-php

ChargeBee API client implementation for PHP

768.0M9](/packages/chargebee-chargebee-php)[imdhemy/google-play-billing

Google Play Billing

491.3M5](/packages/imdhemy-google-play-billing)[bitpay/sdk

Complete version of the PHP library for the new cryptographically secure BitPay API

42337.5k4](/packages/bitpay-sdk)[buckaroo/sdk

Buckaroo payment SDK

12189.1k9](/packages/buckaroo-sdk)[contica/facturador-electronico-cr

Un facturador de código libre para integrar facturación electrónica en Costa Rica a un proyecto PHP

2128.8k](/packages/contica-facturador-electronico-cr)[karson/mpesa-php-sdk

172.2k](/packages/karson-mpesa-php-sdk)

PHPackages © 2026

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