FernandoAcosta.Netdocs

Adicionar gateway de pagamento customizado

2 min de leituraAtualizado há 5 dias

O plugin tem integração nativa com 20 gateways — para qualquer outro, {payment_url} cai na URL de checkout do WooCommerce. Para devolver o link direto do boleto/Pix de um gateway custom (ou de um gateway não listado), use os filtros de pagamento.

Os dois filtros

Filtro Quando dispara
wc_whatsapp_pending_orders_get_payment_data Quando o gateway do pedido não está na lista de integrações nativas. Você é a última chance de retornar uma URL custom.
wc_whatsapp_pending_orders_payment_data Sempre que um gateway nativo está integrado, depois do plugin extrair os dados. Útil para sobrescrever ou enriquecer o que ele já achou.

Estrutura de dados

Os dois filtros recebem um array com no mínimo:

[
    'method_name' => 'Boleto Bancário',          // título do gateway no pedido
    'payment_url' => 'https://...',              // URL do pagamento
]

Você retorna o array modificado. Pode adicionar chaves extras (elas não vão pra mensagem por padrão, mas podem ser usadas em filtros como wc_whatsapp_pending_orders_placeholders).

Exemplo: gateway custom

Suponha que você desenvolveu um gateway interno chamado meu-gateway-pix que salva o link do QR Code do Pix no meta _meu_gateway_pix_qrcode_url:

add_filter(
    'wc_whatsapp_pending_orders_get_payment_data',
    function ( $defaults, $order ) {
        if ( 'meu-gateway-pix' !== $order->get_payment_method() ) {
            return $defaults;
        }

        $url = $order->get_meta( '_meu_gateway_pix_qrcode_url' );

        if ( $url ) {
            $defaults['payment_url'] = $url;
        }

        return $defaults;
    },
    10,
    2
);

Agora {payment_url} para pedidos meu-gateway-pix retorna a URL do QR Code direto, em vez de cair no checkout do WooCommerce.

Exemplo: alterar URL de gateway nativo

Suponha que você usa o Mercado Pago Ticket (gateway nativo woo-mercado-pago-ticket) mas quer trocar a URL pelo link curto do dashboard do MP:

add_filter(
    'wc_whatsapp_pending_orders_payment_data',
    function ( $args, $order ) {
        if ( 'woo-mercado-pago-ticket' !== $order->get_payment_method() ) {
            return $args;
        }

        $args['payment_url'] = 'https://www.mercadopago.com.br/payments/' . $order->get_meta( '_mercadopago_payment_id' );

        return $args;
    },
    10,
    2
);

Exemplo: combinar dois gateways

Site usa PagSeguro para boleto e Mercado Pago para Pix. Você quer que {payment_url} para Pix retorne uma página própria que mostra o QR Code:

add_filter(
    'wc_whatsapp_pending_orders_get_payment_data',
    function ( $defaults, $order ) {
        $method = $order->get_payment_method();

        if ( 'pagseguro' === $method ) {
            // o nativo já trata; deixa passar
            return $defaults;
        }

        if ( 'mercado-pago-pix' === $method ) {
            $defaults['payment_url'] = home_url( '/qr-code/?order=' . $order->get_id() );
        }

        return $defaults;
    },
    10,
    2
);

Diferença entre _get_payment_data e _payment_data

┌──────────────────────────────────────────────────────────┐
│  Pedido com gateway 'pagseguro' (nativo, com Boleto)    │
│                                                          │
│  Plugin extrai URL do meta 'URL de pagamento.'           │
│            ↓                                              │
│  Aplica filtro 'wc_whatsapp_pending_orders_payment_data' │
│            ↓                                              │
│  {payment_url} substituído na mensagem                   │
└──────────────────────────────────────────────────────────┘

┌──────────────────────────────────────────────────────────┐
│  Pedido com gateway 'qualquer-outro' (não nativo)        │
│                                                          │
│  Plugin tem só URL padrão de checkout                    │
│            ↓                                              │
│  Aplica filtro 'wc_whatsapp_pending_orders_get_payment_data' │
│            ↓                                              │
│  {payment_url} substituído na mensagem                   │
└──────────────────────────────────────────────────────────┘

Se você está adicionando um gateway novo, use wc_whatsapp_pending_orders_get_payment_data. Se está customizando um existente, use wc_whatsapp_pending_orders_payment_data.

Dica: filtre por método para evitar regressão

Sempre cheque o payment_method do pedido antes de modificar. Se você retornar a URL custom incondicionalmente, pode quebrar pedidos de gateway diferente.

Foi útil?