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