Administrator
6 days ago 492ec5b26be12ccc18bfc2006b2c9ff16d2e4bef
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;