FROM CACHE - pt-br_header
Esta comunidade agora é um espaço de suporte colaborativo. O Atendimento ao cliente da Shopify ficará indisponível para a comunidade, mas você pode se conectar com outros lojistas e parceiros para compartilhar dúvidas, dicas e experiências! Conteúdos que violam nosso Código de conduta ou que você deseja que sejam removidos ainda devem ser denunciados.

Webhook order paid Stape

Webhook order paid Stape

Guto1
Visitante
3 0 0

Olá,

Estou tentando configurar o envio de um webhook para o GTM server side para o disparo de um evento no GA4 quando um pedido é pago.
Dentro do painel da Shopify, vou em notificações, crio o webhook "pagamento de pedido" e insiro a url do custom domain configurado no Stape (a mesma url que está no GTM ss).
Quando envio os testes do webhook, a solicitação não aparece no painel de depuração do GTM. Ao olhar os logs dentro da Stape, as solicitações aparecem com o status 400. 

Já tentei configurar um client personalizado no GTM ss para capturar esse webhook:

const CLIENT_NAME = 'Shopify Webhook Client';
const logToConsole = require('logToConsole');
const returnResponse = require('returnResponse');

function onRequest(event) {
const request = event.request;

// Verifica se é uma requisição POST
if (request.method !== 'POST') {
logToConsole('Método não suportado: ' + request.method);
returnResponse({ statusCode: 405 });
return null;
}

// Captura todas as requisições POST, mas filtra apenas as que vêm da Shopify
if (!request.headers['X-Shopify-Topic']) {
logToConsole('Requisição sem cabeçalho X-Shopify-Topic');
returnResponse({ statusCode: 400 });
return null;
}

// Lê o corpo da requisição JSON
let requestBody;
if (request.headers['content-type'] === 'application/json' && request.body) {
requestBody = request.json();
} else {
logToConsole('Conteúdo não é JSON ou corpo vazio.');
returnResponse({ statusCode: 400 });
return null;
}

// Verifica se há um objeto 'order' no JSON recebido
if (!requestBody.order) {
logToConsole('Objeto "order" não encontrado no corpo da requisição.');
returnResponse({ statusCode: 422 });
return null;
}

// Extrai dados relevantes do pedido
const eventData = {
event_name: request.headers['X-Shopify-Topic'] ? request.headers['X-Shopify-Topic'] : '',
order_id: requestBody.order.id ? requestBody.order.id : '',
total_price: requestBody.order.total_price ? requestBody.order.total_price : '',
currency: requestBody.order.currency ? requestBody.order.currency : '',
email: requestBody.order.contact_email ? requestBody.order.contact_email : '',
payment_method: requestBody.order.note_attributes
? getAttributeValue(requestBody.order.note_attributes, 'payment_method')
: '',
discount_code: requestBody.order.discount_codes && requestBody.order.discount_codes.length > 0
? requestBody.order.discount_codes[0].code
: ''
};

logToConsole('Evento Capturado:', eventData);

return {
name: CLIENT_NAME,
data: eventData
};
}

// Função auxiliar para buscar um atributo específico na lista de note_attributes
function getAttributeValue(attributes, key) {
if (attributes && typeof attributes === 'object' && attributes.length) {
for (let i = 0; i < attributes.length; i++) {
if (attributes[i].name === key) {
return attributes[i].value;
}
}
}
return '';
}


Mas sem sucesso.

Alguém já tentou esse processo e poderia me dar uma luz?


 

0 RESPOSTAS 0