| | |
| | | } |
| | | |
| | | // 从 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 "收款地址不匹配,跳过处理"; |
| | | } |
| | | |
| | | // 验证收款地址是否匹配 |
| | |
| | | |
| | | // 验证 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); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | 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; |