PHPackages                             shieldforce/checkout-payment - 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. shieldforce/checkout-payment

ActiveLibrary[Payment Processing](/categories/payments)

shieldforce/checkout-payment
============================

This is my package checkout-payment

v5.66.0(2mo ago)0157[4 PRs](https://github.com/Shieldforce/checkout-payment/pulls)1MITPHPPHP ^8.1CI passing

Since Sep 9Pushed 1mo agoCompare

[ Source](https://github.com/Shieldforce/checkout-payment)[ Packagist](https://packagist.org/packages/shieldforce/checkout-payment)[ Docs](https://github.com/shieldforce/checkout-payment)[ GitHub Sponsors](https://github.com/Shieldforce)[ RSS](/packages/shieldforce-checkout-payment/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (28)Versions (82)Used By (1)

Plugin para filament checkout-payment
=====================================

[](#plugin-para-filament-checkout-payment)

[![Latest Version on Packagist](https://camo.githubusercontent.com/5e23c025244ff48728e172115ec896aa56cb93519ca97a7f3bdf57646c17ae12/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f736869656c64666f7263652f636865636b6f75742d7061796d656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/shieldforce/checkout-payment)[![GitHub Tests Action Status](https://camo.githubusercontent.com/0f79b3dc0286d8768a5870494d91a79a7568fde1b39407d6b3cf5c483484b1e6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f736869656c64666f7263652f636865636b6f75742d7061796d656e742f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/shieldforce/checkout-payment/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/6ae3217f39df35f932f748aff66beda9b3a85e5bb374ea1865e3a76b7e7d8940/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f736869656c64666f7263652f636865636b6f75742d7061796d656e742f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/shieldforce/checkout-payment/actions?query=workflow%3A%22Fix+PHP+code+styling%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/feb4f24af89e94da1151930a32c52929f4036fa300558ecc792ad6bc799044c7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f736869656c64666f7263652f636865636b6f75742d7061796d656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/shieldforce/checkout-payment)

Este plugin implementa checkout de pagamento interno e externo para o filament!

Instalação
----------

[](#instalação)

Instalar Via Composer:

```
composer require shieldforce/checkout-payment
```

Você precisa publicar as migrações:

```
php artisan checkout-payment:install

php artisan vendor:publish --tag="checkout-payment-migrations"
php artisan migrate
```

Caso se arrependa (CUIDADO, TENHA CERTEZA QUE OS MIGRATIONS DO CHECKOUT FORAM OS ÚLTIMOS A SEREM RODADOS):

```
 php artisan migrate:rollback --step=6
```

Você precisa publicar as configurações:

```
php artisan vendor:publish --tag="checkout-payment-config"
```

Opcionalmente você pode publicar as views:

```
php artisan vendor:publish --tag="checkout-payment-views"
```

Conteúdo do arquivo de configuração ao publicar será parecido com este:

```
return [
    'sidebar_group' => 'Checkout Payment',
    'type_gateway'  => \Shieldforce\CheckoutPayment\Enums\TypeGatewayEnum::mercado_pago,
];
```

Usage
-----

[](#usage)

```
$checkoutPayment = new Shieldforce\CheckoutPayment();
echo $checkoutPayment->echoPhrase('Hello, Shieldforce!');
```

Exemplo de implementação completa:
==================================

[](#exemplo-de-implementação-completa)

```
    /*
     * Neste exemplo você irá passar todos os dados do checkout já prontos,
     * com exceção do passo Pagamentos, que é de escolha exclusiva do cliente!
    */

    // Dados que irão alimentar o checkout ---
    $client     = $model->order->client;
    $partName   = explode(" ", trim($client->name));
    $fullPhone  = $client?->contacts()?->first()?->prefix . $client?->contacts()?->first()?->number;
    $address    = $client?->addresses()->where("main", 1)?->first();
    $typePeople = isset($client->document) && strlen($client->document) > 11
        ? TypePeopleEnum::J
        : TypePeopleEnum::F;

    // Criando Checkout ---
    $mountCheckout = new MountCheckoutStepsService(
        model: $model,
        requiredMethods: [
            MethodPaymentEnum::credit_card->value,
            MethodPaymentEnum::pix->value,
            MethodPaymentEnum::billet->value,
        ]
    );

    $mountCheckout->handle()
        // Configurando botão que finaliza o wizard ---
        ->configureButtonSubmit(
                text: "Dashboard",
                color: "info",
                urlRedirect: route("filament.admin.pages.dashboard"),
        )
        // Cadastrando step 1 ---
        ->step1(
            items: array_map(callback: function ($product) {
                return (new DtoStep1(
                    name: $product["name"],
                    price: $product["pivot"]["price"],
                    price_2: $product["pivot"]["price"],
                    price_3: $product["pivot"]["price"],
                    description: "Venda de produto: " . $product["name"],
                    img: $product["picture"],
                    quantity: $product["pivot"]["quantity"],
                ))->toArray();
            }, array: $model->order->products->toArray()),
            visible: true,
        )
        // Cadastrando step 2 ---
        ->step2(
            data: new DtoStep2(
                people_type: $typePeople,
                first_name: $partName[0],
                last_name: $partName[1] ?? "Não Informado",
                email: $client->email,
                phone_number: $fullPhone,
                document: $client->document,
                visible: true,
            )
        )
        // Cadastrando step 3 ---
        ->step3(
            data: new DtoStep3(
                zipcode: $address->zipcode,
                street: $address->street,
                district: $address->district,
                city: $address->city,
                state: $address->state,
                number: $address->number,
                complement: $address->complement,
                visible: true,
            )
        );
```

Exemplo de implementação simples:
=================================

[](#exemplo-de-implementação-simples)

```

    /*
     * Neste exemplo você irá passar somente os itens do carrinho,
     * e o cliente irá informar todos os passos.
    */

    // Criando Checkout ---
    $mountCheckout = new MountCheckoutStepsService(
        model: $model,
        requiredMethods: [
            MethodPaymentEnum::credit_card->value,
            MethodPaymentEnum::pix->value,
            MethodPaymentEnum::billet->value,
        ]
    );

    $mountCheckout->handle()
        // Configurando botão que finaliza o wizard ---
        ->configureButtonSubmit(
                text: "Dashboard",
                color: "info",
                urlRedirect: route("filament.admin.pages.dashboard"),
        )
        // Cadastrando step 1 ---
        ->step1(
            items: array_map(callback: function ($product) {
                return (new DtoStep1(
                    name: $product["name"],
                    price: $product["pivot"]["price"],
                    price_2: $product["pivot"]["price"],
                    price_3: $product["pivot"]["price"],
                    description: "Venda de produto: " . $product["name"],
                    img: $product["picture"],
                    quantity: $product["pivot"]["quantity"],
                ))->toArray();
            }, array: $model->order->products->toArray()),
            visible: true,
        );
```

Exemplo de implementação simples:
=================================

[](#exemplo-de-implementação-simples-1)

```

    /*
     * A cada hora roda um job para atualizar os pagamentos de um checkout
     * no campo checkout->return_gateway.
     * Para os jobs do plugin acontecer você precisa ter o horizon ou os works
     * rodando com supervisor, ou crontab.
    */

    // Chamada no provider ---
    class CheckoutPaymentServiceProvider extends ServiceProvider
    {
        public function boot(): void
        {
            $this->loadViewsFrom(__DIR__ . '/../resources/views', 'checkout-payment');

            $this->app->booted(function () {
                $schedule = $this->app->make(Schedule::class);
                $schedule->job(new AllCheckoutsUpdatesPaymentsJob())->hourly();
            });
        }
    }

    // Chamada no Job que executa os checkouts
    class AllCheckoutsUpdatesPaymentsJob implements ShouldQueue
    {
        use Dispatchable, Queueable, Batchable;

        public MercadoPagoService $mp;

        public function __construct()
        {
            $this->mp = new MercadoPagoService();
        }

        public function handle(): void
        {
            logger("AllCheckoutsUpdatesPaymentsJob" . date("Y-m-d H:i:s"));
            $checkouts = CppCheckout::where("status", StatusCheckoutEnum::pendente->value)->get();
            foreach ($checkouts as $checkout) {
                ProcessCheckoutUpdatePaymentsJob::dispatch($checkout);
            }
        }
    }

    // Chamada do ‘update’ do checkout individual
    class ProcessCheckoutUpdatePaymentsJob implements ShouldQueue
    {
        use Dispatchable, Queueable, Batchable;

        public MercadoPagoService $mp;

        public function __construct(public CppCheckout $checkout)
        {
            $this->mp = new MercadoPagoService();
        }

        public function handle(): void
        {
            logger("ProcessCheckoutUpdatePaymentsJob, checkout id: {$this->checkout->uuid} - " . date("Y-m-d H:i:s"));
            $payments = $this->mp->buscarPagamentoPorExternalId($this->checkout->uuid);

            $this->checkout->update([
                "return_gateway" => $payments,
            ]);
        }
    }
```

Permissões
----------

[](#permissões)

### As pages do plugin tem um trait de Permissões chamado CanTrait

[](#as-pages-do-plugin-tem-um-trait-de-permissões-chamado-cantrait)

```
