FernandoAcosta.Netdocs

Adicionar gateway customizado

2 min de leituraAtualizado há 5 dias

O plugin já reconhece 26 gateways nativos. Pra qualquer outro, use o filtro wc_boleto_reminder_get_payment_data pra ensinar o plugin onde encontrar o link do boleto.

Estrutura do filtro

apply_filters( 'wc_boleto_reminder_get_payment_data', $args, $order );

O retorno deve ser um array com:

Chave Tipo Obrigatório Descrição
payment_url string sim URL do boleto
method_name string sim Nome amigável (placeholder {method_name})
expiry_time int (timestamp) não Quando o boleto vence — depois disso o plugin para de mandar lembrete

Se o filtro retornar falsy (false, null, array vazio), o plugin não cria o lembrete pra esse pedido.

Exemplo simples

Imagine um gateway custom com slug my-gateway que guarda o link do boleto em _my_gateway_boleto_url:

add_filter( 'wc_boleto_reminder_get_payment_data', function( $data, $order ) {
    if ( 'my-gateway' !== $order->get_payment_method() ) {
        return $data;
    }

    $url = $order->get_meta( '_my_gateway_boleto_url' );
    if ( empty( $url ) ) {
        return $data;
    }

    return array(
        'payment_url' => $url,
        'method_name' => 'Meu Gateway',
    );
}, 10, 2 );

Exemplo com expiração

Quando o gateway expõe data de vencimento, inclua expiry_time pra que o plugin pare de mandar lembrete depois do vencimento:

add_filter( 'wc_boleto_reminder_get_payment_data', function( $data, $order ) {
    if ( 'my-gateway' !== $order->get_payment_method() ) {
        return $data;
    }

    $url    = $order->get_meta( '_my_gateway_boleto_url' );
    $expiry = $order->get_meta( '_my_gateway_expiry' ); // 'YYYY-MM-DD'

    if ( empty( $url ) ) {
        return $data;
    }

    return array(
        'payment_url' => $url,
        'method_name' => 'Meu Gateway',
        'expiry_time' => strtotime( $expiry . ' 23:59:59' ),
    );
}, 10, 2 );

Exemplo com payload JSON

Muitos gateways guardam um payload completo (response da API) em uma única meta. Decode e extraia:

add_filter( 'wc_boleto_reminder_get_payment_data', function( $data, $order ) {
    if ( 'fancy-payments-billet' !== $order->get_payment_method() ) {
        return $data;
    }

    $payload = json_decode( $order->get_meta( '_fancy_response' ), true );
    if ( empty( $payload['boleto']['link'] ) ) {
        return $data;
    }

    return array(
        'payment_url' => $payload['boleto']['link'],
        'method_name' => 'Fancy Payments — Boleto',
        'expiry_time' => isset( $payload['boleto']['expires_at'] )
            ? strtotime( $payload['boleto']['expires_at'] )
            : null,
    );
}, 10, 2 );

Cuidados

Sempre cheque o gateway

Confira o payment_method antes de retornar. Sem essa guarda, seu filtro afeta TODOS os gateways suportados nativamente — e quebra a detecção dos outros 26.

Inspirando-se no plugin

Se o link de pagamento depende de uma classe ou método (estilo WC_Banco_Inter::get_boleto_url), invoque a classe diretamente no filtro. Veja como o plugin lida com interboleto em includes/wc-boleto-reminder-functions.php pra inspiração.

Testar a integração

Crie um pedido de teste com seu gateway, vá em WooCommerce → Boleto Reminder e veja se o lembrete foi criado. Se não:

  1. Ative o Debug Log (Configuração).
  2. Faça um pedido novo.
  3. Procure logs com "Método de pagamento do pedido não é compatível" ou "Definindo crons para o pedido #...".
  4. Cheque o conteúdo de wc_boleto_reminder_get_payment_data($order) em um snippet PHP:
$order = wc_get_order( 123 );
$data  = wc_boleto_reminder_get_payment_data( $order );
var_dump( $data ); // Deve mostrar payment_url e method_name
Foi útil?