Webhook Eventos e avisos de liquidação
Tipos de eventos do comerciante Webhook, identidades de idempotência, campos de aviso de liquidação e exemplos de resultados de fundos.
Esta página segue Agent Java SDK WEBHOOKS.md no commit fa6c7b6. Esta é uma atualização apenas de documentação; nenhum novo artefacto SDK contendo métodos auxiliares de aviso foi lançado.
Todos os quatro tipos de eventos utilizam o callback configurado único do comerciante URL (agents.webhook_url). Despacho no corpo event; não é necessário nenhum aviso separado URL. Os exemplos mostram a estrutura da carga útil e não devem ser utilizados para injetar dados num ambiente de teste.
Eventos e idempotência
O evento de aviso do comerciante é liquidation.warning; o utilizador WebSocket data.event permanece LIQUIDATION_WARNING. Mantenha os dois canais distintos.
Notificações históricas do comerciante utilizadas LIQUIDATION_WARNING. As cargas congeladas mantêm o seu corpo original nas novas tentativas, pelo que os recetores devem reconhecer ambos os nomes. Se os registos comerciais existentes utilizarem um prefixo de chave de aviso em maiúsculas, retenha a chave original ou verifique ambas as chaves durante a migração para evitar processar novamente a notificação.
O WebhookVerifier.idempotencyKey atual apenas extrai orderType:orderId:targetStatus para eventos de fundos e devolve uma string vazia para payloads de aviso. Nenhum novo artefacto SDK contendo métodos auxiliares de aviso foi lançado com esta atualização de documentação. Continue a utilizar o método verify existente para verificar o corpo do aviso em bruto. Após as verificações de assinatura e propriedade, o código comercial do comerciante deve reconhecer ambos os nomes de eventos, validar se notificationId é uma string de número inteiro decimal positivo e construir liquidation.warning:<notificationId>. Nunca utilize uma chave de desduplicação vazia ou exija que os avisos contenham campos de pedidos de fundos.
Persista a desduplicação no âmbito do comerciante e environment e confirme-a atomicamente com o processamento de negócios. As notificações FIRST / UPGRADE / REMINDER com valores notificationId diferentes são independentes; não os descarte agrupando-os por utilizador, episódio ou eventType. Uma chave vazia significa que uma identidade válida não pôde ser extraída. O SDK apenas devolve uma chave auxiliar; não persiste registos nem executa processamento comercial. Registar a mesma identidade com um corpo diferente como conflito; não substitua o corpo processado.
Campos de aviso de liquidação e exemplo
Exemplo de resultado de transferência
Os callbacks de fundos mantêm os seus tipos existentes: orderId e agentId são números JSON; amount e platformUserId são strings. Não aplique a convenção de cadeia agentId do aviso para os retornos de chamada de fundos. Leia números inteiros grandes sem perda de precisão utilizando tipos inteiros/decimais. completedAt is UTC RFC3339; ts são segundos Unix.
Exemplo de resultado de reversão
Exemplo de estado morto de pedido de fundos
Estes exemplos mostram apenas o protocolo. Para FAILED, rejectCode, rejectMessage e failReason refletem a rejeição real. O nome do evento por si só não prova que os fundos foram creditados.