Ótimo artigo. No Next.js moderno esse problema é recorrente: tentar validar a assinatura depois que o framework já mexeu no corpo da requisição quebra a conferência na hora.
É fundamental capturar o texto bruto exatamente como chegou do gateway de pagamento para fazer a checagem correta.