O estado autoritativo de um pagamento vem sempre do webhook no teu backend, não dos
callbacks do frontend. Os callbacks (onApprove, onPending, onCancel) servem para a
experiência do utilizador; a confirmação de negócio (libertar produto, faturar) só
acontece quando o webhook confirma CON.O endpoint GET /facipaypartner/paymentByExternalTransaction
é apenas uma rede de segurança (fallback) para quando o webhook falha ou atrasa.
O externalTransactionId é a chave de idempotência. Garante que:
Cada ordem tem um externalTransactionIdúnico (ex.: order_<UUID>).
Se um webhook chegar repetido para uma ordem já em estado final (CON/CAN),
respondes 200sem reprocessar.
function updateOrder(externalTransactionId, paymentStatus) { const order = db.orders.find(externalTransactionId); if (!order) return; if (order.status === 'CON' || order.status === 'CAN') return; // já final → não reprocessa db.orders.update(externalTransactionId, { status: paymentStatus });}