Como Sincronizar o Estoque do WooCommerce com ERP Externo em Tempo Real

Aprenda a arquitetar uma sincronização de estoque em tempo real entre o WooCommerce e seu ERP usando a WP REST API e hooks nativos para evitar erros de vendas.

# Como Sincronizar o Estoque do WooCommerce com ERP Externo em Tempo Real

Vender um produto que já está esgotado no seu estoque físico é um dos piores cenários para qualquer e-commerce. Quando os canais de venda física e digital não estão perfeitamente alinhados, erros de inventário acontecem, gerando frustração no cliente, cancelamentos de pedidos e uma sobrecarga desnecessária na equipe de suporte. Atualizar o estoque de forma manual deixa de ser viável assim que a loja ultrapassa uma dezena de pedidos diários.

A solução definitiva para esse gargalo operacional é a integração em tempo real entre o WooCommerce e o sistema ERP da sua empresa. Neste artigo, você entenderá como arquitetar essa sincronização utilizando as melhores práticas de desenvolvimento dentro do ecossistema WordPress.

## A Arquitetura da Sincronização: WP REST API e Hooks do WooCommerce

Para garantir que o WooCommerce e o ERP se comuniquem sem latência, a melhor abordagem é utilizar a **WP REST API** para receber dados de entrada e os **Hooks do WooCommerce** para enviar atualizações de saída.

### 1. Recebendo Atualizações do ERP (Entrada)
Em vez de sobrecarregar o servidor com consultas periódicas (polling) que consomem muitos recursos, o ERP deve notificar o WooCommerce sempre que houver uma alteração no inventário físico. Para isso, criamos um endpoint customizado utilizando a função `register_rest_route()` do WordPress:

“`php
add_action(‘rest_api_init’, function () {
register_rest_route(‘custom-erp/v1’, ‘/estoque’, array(
‘methods’ => ‘POST’,
‘callback’ => ‘atualizar_estoque_callback’,
‘permission_callback’ => ‘validar_token_erp’,
));
});
“`

No callback dessa rota, utilizamos a API de CRUD do WooCommerce para atualizar o estoque de forma segura e limpa:

“`php
function atualizar_estoque_callback($request) {
$params = $request->get_json_params();
$sku = sanitize_text_field($params[‘sku’]);
$novo_estoque = intval($params[‘quantidade’]);

$product_id = wc_get_product_id_by_sku($sku);
if ($product_id) {
$product = wc_get_product($product_id);
wc_update_product_stock($product, $novo_estoque);
return new WP_REST_Response(array(‘status’ => ‘sucesso’), 200);
}
return new WP_REST_Response(array(‘status’ => ‘produto_nao_encontrado’), 404);
}
“`

### 2. Notificando o ERP sobre Vendas no WooCommerce (Saída)
Quando uma venda é concluída no WooCommerce, o estoque local é reduzido instantaneamente. Para que o ERP físico saiba disso imediatamente, interceptamos a transação utilizando hooks nativos, como o `woocommerce_payment_complete`:

“`php
add_action(‘woocommerce_payment_complete’, ‘notificar_erp_venda’);
function notificar_erp_venda($order_id) {
$order = wc_get_order($order_id);
// Lógica para disparar o payload com os dados de redução de estoque para o ERP
}
“`

## Evitando Concorrência de Dados (Race Conditions)

Em implementações que realizo para e-commerces de alto volume, um problema clássico surge quando múltiplos clientes tentam comprar o mesmo item com estoque baixo no exato milissegundo em que o ERP tenta atualizar o inventário. Se essa concorrência não for tratada, o banco de dados pode registrar informações divergentes.

Para contornar isso, evitamos requisições síncronas pesadas diretamente na finalização do checkout. Em vez disso, utilizamos o **Action Scheduler** (a biblioteca de filas de tarefas nativa do WooCommerce) para enfileirar as atualizações do ERP de forma assíncrona. Isso garante consistência de dados sem prejudicar a velocidade de carregamento para o usuário final.

## Fluxo Inteligente de Processamento

1. **Venda Concluída**: O cliente finaliza o pedido -> WooCommerce debita o estoque local -> Enfileira tarefa no Action Scheduler.
2. **Sincronização Assíncrona**: O Action Scheduler processa a fila de tarefas em background e notifica o ERP externo.
3. **Atualização do ERP**: O estoque global físico é atualizado no ERP.
4. **Entrada de Novo Lote**: O fornecedor entrega novos produtos -> ERP dispara webhook -> WooCommerce atualiza instantaneamente através do endpoint rest customizado.

## Conclusão e Próximos Passos

Sincronizar estoque de forma eficiente exige muito mais do que simplesmente instalar plugins prontos genéricos, que costumam gerar lentidão e conflitos no banco de dados. É necessária uma engenharia que proteja o banco de dados e garanta que nenhuma venda duplicada ocorra.

Se o seu e-commerce está lidando com inconsistência de estoque, falhas de sincronização ou se você precisa construir uma integração sólida e sob medida entre o WooCommerce e o seu ERP, entre em contato para agendarmos uma consultoria técnica de desenvolvimento.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.