From 492ec5b26be12ccc18bfc2006b2c9ff16d2e4bef Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 23 Jun 2026 16:26:13 +0800
Subject: [PATCH] fix(mall): 修复Tokenview Webhook服务交易验证逻辑
---
src/main/java/cc/mrbird/febs/mall/controller/dependentStation/TokenviewWebhookService.java | 23 ++++++++++++++++-------
1 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/dependentStation/TokenviewWebhookService.java b/src/main/java/cc/mrbird/febs/mall/controller/dependentStation/TokenviewWebhookService.java
index 155064f..858c717 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/dependentStation/TokenviewWebhookService.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/dependentStation/TokenviewWebhookService.java
@@ -68,15 +68,23 @@
}
// 从 payload 提取关键字段(兼容多种 key 命名)
+ String toAddress = getField(payload, "address", "toAddress","to");
String txid = getField(payload, "txid", "hash", "transactionHash");
- String toAddress = getField(payload, "to", "toAddress");
+ String time = getField(payload, "time");
String value = getField(payload, "value", "amount");
- String tokenAddr = getField(payload, "token", "tokenAddr", "contractAddress");
- String symbol = getField(payload, "symbol", "tokenSymbol");
+ String coin = getField(payload, "coin");
+ String tokenAddr = getField(payload, "token", "tokenAddr", "contractAddress","tokenAddress");
+ String tokenSymbol = getField(payload, "tokenSymbol");
+ String tokenValue = getField(payload, "tokenValue");
if (StrUtil.isBlank(txid)) {
log.warn("webhook 推送数据缺少交易哈希 txid: {}", payload);
return "缺少 txid,跳过处理";
+ }
+
+ if (StrUtil.isNotBlank(tokenSymbol) && !"USDT".equalsIgnoreCase(tokenSymbol)) {
+ log.info("交易币种不匹配,期望: {}, 实际: {}, txid: {}", "USDT", tokenSymbol, txid);
+ return "收款地址不匹配,跳过处理";
}
// 验证收款地址是否匹配
@@ -87,12 +95,12 @@
// 验证 token 合约地址(USDT: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t)
if (StrUtil.isNotBlank(tokenAddr) && !"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t".equalsIgnoreCase(tokenAddr)) {
- log.info("非 USDT 代币交易,跳过处理: token={}, symbol={}, txid={}", tokenAddr, symbol, txid);
+ log.info("非 USDT 代币交易,跳过处理: token={}, symbol={}, txid={}", tokenAddr, tokenSymbol, txid);
return "非 USDT 交易,跳过处理";
}
// 执行充值匹配
- return matchAndUpdateOrder(txid, value, receiveAddress);
+ return matchAndUpdateOrder(txid, tokenValue, receiveAddress);
}
/**
@@ -133,8 +141,9 @@
}
BigDecimal amount;
try {
- amount = new BigDecimal(rawValue)
- .divide(new BigDecimal("1000000"), 2, RoundingMode.DOWN);
+// amount = new BigDecimal(rawValue)
+// .divide(new BigDecimal("1000000"), 2, RoundingMode.DOWN);
+ amount = new BigDecimal(rawValue);
} catch (NumberFormatException e) {
log.error("金额解析失败: txid={}, value={}", txid, rawValue, e);
return "金额解析失败: " + txid;
--
Gitblit v1.9.1