anisotton / pagarme-laravel
A Laravel package to integrate with Pagar.me API v5 - Modern, type-safe, and feature-rich payment gateway integration for Laravel 12+
Fund package maintenance!
anisotton
Requires
- php: ^8.3
- guzzlehttp/guzzle: ^7.8
- illuminate/contracts: ^12.0
- illuminate/support: ^12.0
- spatie/laravel-package-tools: ^1.16.0
Requires (Dev)
- laravel/pint: ^1.13
- mockery/mockery: ^1.6
- orchestra/testbench: ^10.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2025-06-27 04:04:21 UTC
README
Este pacote é uma integração da API do Pagar.me v5 com o Laravel 12+. O pacote oferece uma interface simples e elegante para trabalhar com a API de pagamentos do Pagar.me, seguindo as melhores práticas do Laravel 12 e PHP 8.3+.
✨ Funcionalidades
- ✅ Integração completa com a API Pagar.me v5
- ✅ Type hints completos para melhor desenvolvimento
- ✅ Data Transfer Objects (DTOs) para estruturação de dados
- ✅ Helpers para validação e formatação
- ✅ Logging configurável de requisições
- ✅ Tratamento de erros robusto
- ✅ Cache de configurações
- ✅ Webhooks com verificação de assinatura
- ✅ Suporte completo a PIX, Boleto e Cartão de Crédito
🔧 Compatibilidade
- PHP: ^8.3
- Laravel: ^12.0
- Pagar.me API: v5
📦 Instalação
Você pode instalar o pacote via Composer:
composer require anisotton/pagarme-laravel
Publique o arquivo de configuração:
php artisan vendor:publish --tag="pagarme-config"
Configure suas credenciais no arquivo .env
:
PAGARME_API_KEY=ak_live_your_api_key_here PAGARME_SANDBOX=false PAGARME_LOG_REQUESTS=true PAGARME_WEBHOOK_SECRET=your_webhook_secret
⚙️ Configuração
O arquivo config/pagarme.php
contém as seguintes configurações:
return [ // Configurações da API 'api_key' => env('PAGARME_API_KEY', 'ak_test_*'), 'base_url' => env('PAGARME_BASE_URL', 'https://api.pagar.me/core'), 'api_version' => env('PAGARME_API_VERSION', 'v5'), // Configurações de Timeout 'timeout' => env('PAGARME_TIMEOUT', 30), 'connect_timeout' => env('PAGARME_CONNECT_TIMEOUT', 10), // Configurações de Logging 'log_requests' => env('PAGARME_LOG_REQUESTS', false), 'log_channel' => env('PAGARME_LOG_CHANNEL', 'default'), // Ambiente 'sandbox' => env('PAGARME_SANDBOX', true), // Webhooks 'webhook_secret' => env('PAGARME_WEBHOOK_SECRET'), 'webhook_tolerance' => env('PAGARME_WEBHOOK_TOLERANCE', 300), // Cache 'cache_prefix' => env('PAGARME_CACHE_PREFIX', 'pagarme'), 'cache_ttl' => env('PAGARME_CACHE_TTL', 3600), ];
🚀 Como usar
Importando a Facade
use Pagarme; // ou use Anisotton\Pagarme\Facades\Pagarme;
🧑💼 Criando um Cliente
Usando DTOs (Recomendado)
use Anisotton\Pagarme\DataTransferObjects\CustomerDto; $customerDto = CustomerDto::individual( name: 'João Silva', email: 'joao@example.com', document: '12345678901', phones: [ 'home_phone' => [ 'country_code' => '55', 'area_code' => '11', 'number' => '987654321' ] ] ); $customer = Pagarme::customer()->create($customerDto->toArray());
Forma tradicional
$customer = Pagarme::customer()->create([ 'type' => 'individual', 'name' => 'João Silva', 'email' => 'joao@example.com', 'document_type' => 'CPF', 'document' => '12345678901', 'phones' => [ 'home_phone' => [ 'country_code' => '55', 'area_code' => '11', 'number' => '987654321' ] ] ]);
💳 Criando Cobranças
Cobrança PIX
use Keepcloud\Pagarme\DataTransferObjects\ChargeDto; $chargeDto = ChargeDto::pix( amount: 1000, // R$ 10,00 em centavos customerId: $customer->id, metadata: ['order_id' => '12345'] ); $charge = Pagarme::charge()->createPix($chargeDto->toArray());
Cobrança com Cartão de Crédito
$chargeDto = ChargeDto::creditCard( amount: 1000, creditCard: [ 'installments' => 1, 'statement_descriptor' => 'LOJA', 'card' => [ 'number' => '4000000000000010', 'holder_name' => 'João Silva', 'exp_month' => 12, 'exp_year' => 2025, 'cvv' => '123' ] ], customerId: $customer->id ); $charge = Pagarme::charge()->createCreditCard($chargeDto->toArray());
Cobrança Boleto
$chargeDto = ChargeDto::boleto( amount: 1000, customerId: $customer->id, dueAt: now()->addDays(3)->toISOString() ); $charge = Pagarme::charge()->createBoleto($chargeDto->toArray());
🛒 Criando um Pedido
$order = Pagarme::order()->create([ 'closed' => true, 'customer_id' => $customer->id, 'items' => [ [ 'amount' => 1000, // R$ 10,00 em centavos 'description' => 'Produto teste', 'quantity' => 1, 'code' => 'prod-001' ] ], 'payments' => [ [ 'payment_method' => 'credit_card', 'credit_card' => [ 'installments' => 1, 'statement_descriptor' => 'LOJA', 'card' => [ 'number' => '4000000000000010', 'holder_name' => 'João Silva', 'exp_month' => 12, 'exp_year' => 2025, 'cvv' => '123' ] ] ] ] ]);
📋 Criando Planos
$plan = Pagarme::plan()->create([ 'name' => 'Plano Premium', 'amount' => 9990, // R$ 99,90 'currency' => 'BRL', 'interval' => 'month', 'interval_count' => 1, 'billing_type' => 'prepaid', 'payment_methods' => ['credit_card', 'boleto'], 'items' => [ [ 'name' => 'Acesso Premium', 'quantity' => 1, 'pricing_scheme' => [ 'price' => 9990 ] ] ] ]);
🔔 Processando Webhooks
use Keepcloud\Pagarme\Facades\Pagarme; Route::post('/webhook/pagarme', function (Request $request) { try { $signature = $request->header('X-Hub-Signature-256'); $payload = $request->getContent(); $data = Pagarme::webhook()->processWebhook($payload, $signature); // Processar o evento do webhook switch ($data['type']) { case 'charge.paid': // Cobrança foi paga break; case 'charge.failed': // Cobrança falhou break; // ... outros eventos } return response()->json(['status' => 'ok']); } catch (\Exception $e) { Log::error('Webhook error: ' . $e->getMessage()); return response()->json(['error' => 'Invalid webhook'], 400); } });
🛠️ Usando Helpers
use Keepcloud\Pagarme\Support\PaymentHelper; // Converter centavos para reais $amount = PaymentHelper::centsToCurrency(1000); // 10.00 // Converter reais para centavos $cents = PaymentHelper::currencyToCents(10.50); // 1050 // Validar CPF $isValid = PaymentHelper::isValidCpf('12345678901'); // Validar CNPJ $isValid = PaymentHelper::isValidCnpj('12345678000199'); // Formatar telefone $phone = PaymentHelper::formatPhone('11987654321'); // Retorna: ['country_code' => '55', 'area_code' => '11', 'number' => '987654321'] // Validar cartão de crédito $isValid = PaymentHelper::isValidCreditCard('4000000000000010'); // Obter bandeira do cartão $brand = PaymentHelper::getCreditCardBrand('4000000000000010'); // 'visa' // Gerar opções de parcelamento $installments = PaymentHelper::generateInstallments(10000, 12, 2.5);
📚 Endpoints Disponíveis
Customer (Clientes)
create()
- Criar clientefind($id)
- Obter clienteupdate($id, $data)
- Atualizar clienteall($queryParams)
- Listar clientescreateCreditCard($id, $data)
- Adicionar cartãofindCreditCard($id, $cardId)
- Obter cartãoallCreditCards($id)
- Listar cartõesupdateCreditCard($id, $cardId, $data)
- Atualizar cartãodeleteCreditCard($id, $cardId)
- Remover cartãocreateAddress($id, $data)
- Adicionar endereçofindAddress($id, $addressId)
- Obter endereçoallAddresses($id)
- Listar endereçosupdateAddress($id, $addressId, $data)
- Atualizar endereçodeleteAddress($id, $addressId)
- Remover endereço
Charge (Cobranças)
create($data)
- Criar cobrançacreatePix($data)
- Criar cobrança PIXcreateBoleto($data)
- Criar cobrança BoletocreateCreditCard($data)
- Criar cobrança Cartãofind($id)
- Obter cobrançaall($queryParams)
- Listar cobrançascapture($id, $data)
- Capturar cobrançacancel($id)
- Cancelar cobrançaretry($id)
- Reprocessar cobrançaeditCard($id, $data)
- Editar cartãodueDate($id, $data)
- Alterar vencimentoupdatePaymentMethod($id, $data)
- Alterar meio de pagamento
Order (Pedidos)
create($data)
- Criar pedidofind($id)
- Obter pedidoall()
- Listar pedidosclose($id)
- Fechar pedidoaddItem($id, $data)
- Adicionar itemupdateItem($id, $itemId, $data)
- Atualizar itemdeleteItem($id, $itemId)
- Remover itemdeleteAllItems($id)
- Remover todos os itensallItems($id)
- Listar itens
Plan (Planos)
create($data)
- Criar planofind($id)
- Obter planoupdate($id, $data)
- Atualizar planodeletePlan($id)
- Deletar planoall($queryParams)
- Listar planosaddItem($id, $data)
- Adicionar item ao planoupdateItem($id, $itemId, $data)
- Atualizar item do planodeleteItem($id, $itemId)
- Remover item do planogetItems($id)
- Listar itens do plano
Subscription (Assinaturas)
create($data)
- Criar assinaturafind($id)
- Obter assinaturaall($queryParams)
- Listar assinaturascancel($id)
- Cancelar assinaturaupdateCard($id, $data)
- Atualizar cartãoupdateMetadata($id)
- Atualizar metadadosupdatePaymentMethod($id)
- Atualizar meio de pagamentoupdateStartAt($id)
- Atualizar data de inícioupdateMinimumPrice($id)
- Atualizar preço mínimoenableManualBilling($id)
- Ativar faturamento manualdisableManualBilling($id)
- Desativar faturamento manual
Recipient (Recebedores)
create($data)
- Criar recebedorfind($id)
- Obter recebedorupdate($id, $data)
- Atualizar recebedorall()
- Listar recebedores
Webhook (Webhooks)
create($data)
- Criar webhookfind($id)
- Obter webhookupdate($id, $data)
- Atualizar webhookdeleteWebhook($id)
- Deletar webhookall($queryParams)
- Listar webhooksverifySignature($payload, $signature, $secret)
- Verificar assinaturaprocessWebhook($payload, $signature)
- Processar webhook
🧪 Testando
composer test
🎨 Formatação de Código
composer format
📝 Changelog
Por favor, consulte o CHANGELOG para mais informações sobre as mudanças recentes.
🤝 Contribuindo
Por favor, consulte CONTRIBUTING para detalhes.
🔒 Segurança
Se você descobrir alguma vulnerabilidade de segurança, por favor envie um e-mail para anderson@isotton.com.br.
👨💻 Créditos
📄 Licença
Este pacote é open-source e licenciado sob a Licença MIT.
📖 Documentação Adicional
Para documentação mais detalhada sobre cada endpoint, consulte:
- Customer (Clientes)
- Charge (Cobranças)
- Order (Pedidos)
- Plan (Planos)
- Subscription (Assinaturas)
- Recipient (Recebedores)
- Webhook (Webhooks)
🚀 Roadmap
- Suporte a marketplace
- Integração com Laravel Cashier
- Testes automatizados
- Cache de respostas
- Retry automático em falhas
- Rate limiting
- Métricas e monitoramento
- Todos os Contribuidores
Licença
Licença MIT (MIT). Por favor, consulte o Arquivo de Licença para mais informações.