elitetools/laravel-transaction-manager

Laravel SDK for Transaction Manager payment gateway — unified payment processing with webhook signature verification.

Maintainers

Package info

github.com/for4izen/laravel-transaction-manager

pkg:composer/elitetools/laravel-transaction-manager

Transparency log

Statistics

Installs: 15

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.2 2026-08-22 15:11 UTC

This package is auto-updated.

Last update: 2026-08-22 15:12:58 UTC


README

SDK e pacote de integração oficial para o Transaction Manager (Gateway Unificado de Pagamentos da EliteHub).

Criado para ser 100% Universal e Plug and Play: funciona perfeitamente com Assinaturas/Planos, E-commerce/Pedidos (carrinho com múltiplos itens), Recarga de Créditos, Serviços Avulsos ou Cobranças Rápidas sem Models!

⚡ Instalação em 2 Passos

1. Adicionar o pacote

No composer.json da sua aplicação (elitebio-api, elitetweaks-api, eliteshop-api, etc.):

"repositories": [
    {
        "type": "path",
        "url": "../elitetools/laravel-transaction-manager"
    }
],
"require": {
    "elitetools/laravel-transaction-manager": "*"
}

E rode no terminal:

composer update elitetools/laravel-transaction-manager

🚀 Como Usar: Escolha o seu Cenário

O pacote oferece 3 formas elegantes de integração:

Cenário A: Sistema SaaS / Assinatura de Planos

Basta adicionar a trait HasTransactionManager no seu Model de transação (PaymentTransaction, Subscription, etc.):

use Illuminate\Database\Eloquent\Model;
use Elitetools\TransactionManager\Contracts\PaymentTransactionInterface;
use Elitetools\TransactionManager\Traits\HasTransactionManager;

class PaymentTransaction extends Model implements PaymentTransactionInterface
{
    use HasTransactionManager;
    // Lê automático $this->user, $this->plan, $this->amount, etc.
}

No seu Controller / Service:

use Elitetools\TransactionManager\Facades\TransactionManager;

// Gerar Pix:
$result = TransactionManager::createPix($transaction);

// Ou direto no próprio Model:
$result = $transaction->createPix();

return response()->json([
    'qr_code' => $result->qrCode,
    'qr_code_base64' => $result->qrCodeBase64,
]);

Cenário B: E-commerce / Carrinho de Compras (Múltiplos Produtos)

Se você possui um Model Order com relação de itens (items ou orderItems):

use Illuminate\Database\Eloquent\Model;
use Elitetools\TransactionManager\Contracts\PaymentTransactionInterface;
use Elitetools\TransactionManager\Traits\HasTransactionManager;

class Order extends Model implements PaymentTransactionInterface
{
    use HasTransactionManager;

    public function items()
    {
        return $this->hasMany(OrderItem::class);
    }
}

No seu Checkout Controller:

use Elitetools\TransactionManager\Facades\TransactionManager;

// Gera o Checkout Pro (Cartão, Boleto, Parcelamento) com todos os itens do carrinho:
$result = TransactionManager::createPreference($order);

// Ou direto pelo Model:
$result = $order->createPreference();

return response()->json([
    'payment_url' => $result->paymentUrl, // Link do Checkout Mercado Pago
]);

💡 Nota: A trait detecta automaticamente a relação $order->items, mapeia os títulos, quantidades e preços unitários e calcula o total com precisão.

Cenário C: Venda de Créditos / Tokens / Serviços Avulsos

Para modelos simples que não possuem produtos nem planos cadastrados:

class CreditPurchase extends Model implements PaymentTransactionInterface
{
    use HasTransactionManager;
    // Lê automático as colunas da tabela: amount, description/title, user_id
}

No Controller:

$purchase = CreditPurchase::create([
    'user_id' => auth()->id(),
    'amount' => 50.00,
    'description' => 'Recarga de 500 Créditos',
]);

$result = $purchase->createPix();

Cenário D: Cobrança Rápida via Fluent Builder (Sem precisar de Model no Banco)

Se você precisa disparar um Pix ou Link de pagamento imediato sem criar/salvar um Model no banco de dados:

use Elitetools\TransactionManager\Facades\TransactionManager;

// 1. Pix Simples
$result = TransactionManager::payer('João Silva', 'joao@email.com')
    ->amount(120.50)
    ->description('Consultoria Técnica Avulsa')
    ->reference('CONSULT-9988')
    ->createPix();

// 2. Transação com Itens Customizados
$result = TransactionManager::payer('Maria Souza', 'maria@email.com')
    ->reference('PEDIDO-1234')
    ->addItem('Camiseta Oficial', price: 89.90, quantity: 2, id: 'PROD-01')
    ->addItem('Taxa de Envio Express', price: 25.00, quantity: 1, id: 'SHIPPING')
    ->createPreference(); // Abre Checkout Pro

🔔 Tratamento de Webhook

O webhook é validado automaticamente com verificação de assinatura criptográfica HMAC-SHA256:

use Illuminate\Http\Request;
use Elitetools\TransactionManager\Facades\TransactionManager;

class PaymentWebhookController extends Controller
{
    public function handle(Request $request)
    {
        $result = TransactionManager::handleWebhook($request);

        if (!$result) {
            return response()->json(['message' => 'Assinatura inválida ou requisição rejeitada'], 400);
        }

        // $result é um DTO PaymentResult tipado!
        // Contém: $result->externalId, $result->status
        
        $transaction = PaymentTransaction::where('external_id', $result->externalId)->first();

        if ($transaction) {
            $transaction->update(['status' => $result->status]);

            if ($result->isApproved()) {
                // Liberar acesso, creditar tokens, enviar e-mail de confirmação, etc.
            }
        }

        return response()->json(['success' => true]);
    }
}

📦 Métodos Úteis do DTO PaymentResult

A resposta de qualquer pagamento retorna a classe PaymentResult:

$result->externalId;       // ID da transação no Gateway
$result->paymentUrl;       // URL do Checkout Pro (Mercado Pago)
$result->qrCode;          // Código Pix Copia e Cola
$result->qrCodeBase64;    // Imagem do QR Code em Base64 para tags <img>
$result->status;          // Status retornado ('pending', 'approved', 'rejected', etc.)

// Helpers booleanos de status:
$result->isApproved();    // true se aprovado
$result->isPending();     // true se pendente
$result->isRejected();    // true se rejeitado
$result->isCancelled();   // true se cancelado

// Array para salvar direto no Model Eloquent:
$model->update($result->toArray());

⚙️ Variáveis de Ambiente (.env)

# URL do Transaction Manager Service
TRANSACTION_MANAGER_BASE_URL=https://api.elitehub.com

# Chave de API da sua aplicação
TRANSACTION_MANAGER_API_KEY=sua-api-key-aqui

# Segredo para validação de assinatura dos webhooks
TRANSACTION_MANAGER_WEBHOOK_SECRET=seu-webhook-secret-aqui

# (Opcional) Webhook de retorno customizado
TRANSACTION_MANAGER_CALLBACK_URL=https://seu-dominio.com/api/v1/payments/webhook

🎨 Enum de Status para Views e Badges

use Elitetools\TransactionManager\Enums\PaymentTransactionStatus;

$status = PaymentTransactionStatus::fromProvider(3); // Approved

$status->label(); // "Aprovado"
$status->color(); // "rgba(34, 197, 94, 0.4)"

📜 Licença

Propriedade privada — EliteHub / EliteTools.