O WooCommerce possibilita uma infinidade de customizações com a utilização de seus hooks (gatilhos, meio pelo qual um programador pode fazer customizações no código sem afetar o core do sistema) vinculados a cada processo que o produto irá passar, desde a construção até o consumo de ordem de pagamento no histórico do cliente.
No entanto, o gateway de pagamento utilizado (Pagar.me) não forneceu em sua documentação mecanismos para que pudéssemos realizar essa manipulação de forma segura e profissional. Essa limitação se deve ao foco do Pagar.me em oferecer um meio pelo qual o usuário possa realizar a compra usando seu mecanismo no WooCommerce de forma segura. Compreende-se que não há como atender a todas as demandas de customização sem a morosidade e complexidade de atualizações contínuas, que exigem processos e testes rigorosos. Cada caso é único, e uma extensão respeitável deve buscar disponibilizar recursos que atendam globalmente à comunidade, focando em seu objetivo central.
Além disso, a extensão em questão é de uso público e sua licença é gratuita, o que inviabiliza a cobrança de valores adicionais além do que já é ofertado.
Por esse motivo, decidimos analisar o código do Pagar.me e localizamos quantos hooks (gatilhos, usado para realizar customizações no código sem afetar o core do sistema) estavam implementados. Verificamos se era possível trazer esses hooks para um ambiente onde pudéssemos ter um controle maior, como um plugin customizado.
Em nossa varredura, localizamos algo interessante
A última action faz referência à API do WooCommerce e chama uma função chamada ipn_handler
. Isso nos ajudou a perceber que esse hook tinha ligação direta com a troca de status das transações feitas pelo Pagar.me.
Encontramos a função ipn_handler
e entendemos como ela processa as solicitações do Pagar.me, o que nos deu a certeza de que, ao utilizar esse método, poderíamos fazer as modificações necessárias sem impactar o código principal da extensão.
Dessa forma, desenvolvemos um plugin para ler as requisições e processá-las adequadamente conforme a necessidade do cliente. Abaixo, está um modelo simplificado do recurso implementado:
Observe que sem o hook woocommerce_api_wc_pagarme_credit_card_gateway
, não teríamos como realizar a implementação; a única alternativa seria interferir diretamente no ipn_handler
, o que não é recomendado, pois o código poderia ser perdido a cada atualização da extensão.
Através deste código, conseguimos receber e manipular todas as transações provenientes do Pagar.me pela IPN do WooCommerce.
Você já passou por algum caso semelhante ao que estamos descrevendo? Compartilhe nos comentários, e será um prazer trocar informações com você, programador.
Sinta-se à vontade para nos questionar sobre IPNs.
Sobre a Agência Next4
Com mais de 16 anos de experiência em Marketing Digital, oferecemos aos nossos clientes uma gama de serviços personalizados para que alcancem mais performance no âmbito digital e comercial.
Serviços como: Criação de sites e sistemas web, gestão de RD Station Marketing e CRM, gestão de campanhas ADS, gestão de redes sociais, criação de conteúdo, criação de peças publicitárias, criação de vídeos e muito mais.