Configuração de Múltiplos Gateways de Pagamento com Omnipay

Vantagens da Integração com Omnipay

Omnipay oferece uma interface unificada para mais de 100 provedores de pagamento. Sua abordagem padronizada elimina a necessidade de implementações individuais para cada gateway, simplificando significativamente o desenvolvimento.

Benefícios Principais

  • API consistente para todos os gateways
  • Troca faciliatda entre provedores
  • Gerenciamento centralizado de erros
  • Suporte a principais serviços globais

Implementação Básica

use Omnipay\Omnipay;

$provedor = Omnipay::create('PayPal');
$provedor->setApiKey('chave_api_paypal');

$dadosPagamento = [
    'valor' => '150.00',
    'moeda' => 'BRL',
    'cartao' => [
        'numero' => '5555555555554444',
        'mes_validade' => '08',
        'ano_validade' => '2026',
        'cvv' => '321'
    ]
];

$resposta = $provedor->compra($dadosPagamento)->enviar();

if ($resposta->sucesso()) {
    echo "Pagamento aprovado. ID: " . $resposta->getReferenciaTransacao();
} else {
    echo "Falha: " . $resposta->getMensagem();
}

Gerenciamento de Múltiplos Gateways

Arquivo de Configuração

// config/pagamentos.php
return [
    'provedores' => [
        'pagseguro' => [
            'driver' => 'PagSeguro',
            'chave_api' => env('PAGSEGURO_API_KEY')
        ],
        'cielo' => [
            'driver' => 'Cielo',
            'merchant_id' => env('CIELO_MERCHANT_ID')
        ]
    ],
    'padrao' => 'pagseguro'
];

Classe Gerenciadora

class GerenciadorPagamentos
{
    public function __construct(private array $config) {}
    
    public function criarProvedor(string $nome): GatewayInterface
    {
        if (!isset($this->config['provedores'][$nome])) {
            throw new InvalidArgumentException("Provedor {$nome} não configurado");
        }
        
        $config = $this->config['provedores'][$nome];
        $provedor = Omnipay::create($config['driver']);
        
        foreach ($config as $chave => $valor) {
            if ($chave !== 'driver') {
                $metodo = 'set' . ucfirst($chave);
                $provedor->{$metodo}($valor);
            }
        }
        
        return $provedor;
    }
}

Tratamento de Erros

try {
    $resposta = $provedor->compra($dados)->enviar();
    
    if ($resposta->redirecionamentoNecessario()) {
        $resposta->redirecionar();
    }
} catch (InvalidRequestException $e) {
    Log::erro("Requisição inválida: " . $e->getMessage());
} catch (InvalidCreditCardException $e) {
    Log::aviso("Cartão inválido: " . $e->getMessage());
}

Processamento de Webhokos

public function processarNotificacao(string $provedor)
{
    $gateway = $this->gerenciador->criarProvedor($provedor);
    $notificacao = $gateway->aceitarNotificacao();
    
    switch ($notificacao->getStatusTransacao()) {
        case 'COMPLETED':
            $this->finalizarPedido($notificacao->getIdTransacao());
            break;
        case 'FAILED':
            $this->marcarPedidoComoFalha($notificacao->getIdTransacao());
            break;
    }
}

Pagamentos com Token

// Criar token de cartão
$resposta = $provedor->criarCartao($dadosCartao)->enviar();
$token = $resposta->getReferenciaCartao();

// Reutilizar token
$resposta = $provedor->compra([
    'valor' => '75.50',
    'referenciaCartao' => $token
])->enviar();

Otimizações Recomendadas

  • Utilizar pool de conexões para gateways frequentes
  • Cache de configurações de provedores
  • Processamento assíncrono de callbacks
  • Monitoramento contínuo de falhas

Tags: Omnipay PHP Payment Gateways Stripe PayPal

Publicado em 6-23 02:30