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