fix: 增强BepUsdt钱包地址获取逻辑

- 尝试多个可能的字段名获取钱包地址
- 如果没有直接返回,尝试从payment_url解析
- 添加详细日志记录

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-05-30 19:38:42 +08:00
parent 7bbff3223b
commit c1fdbe7938
+31 -1
View File
@@ -156,7 +156,37 @@ func (h *PaymentHandler) CreatePayment(c *gin.Context) {
tradeID, _ := data["trade_id"].(string)
token, _ := data["token"].(string)
paymentURL, _ := data["payment_url"].(string)
walletAddress, _ := data["address"].(string)
// 尝试多个可能的字段名获取钱包地址
var walletAddress string
addressFields := []string{"address", "wallet_address", "to_address", "payment_address", "deposit_address", "receiver_address"}
for _, field := range addressFields {
if addr, ok := data[field].(string); ok && addr != "" {
walletAddress = addr
log.Printf("[BepUsdt] found wallet address in field '%s': %s", field, addr)
break
}
}
// 如果没有直接获取到钱包地址,尝试从payment_url解析
if walletAddress == "" && paymentURL != "" {
// payment_url格式可能是: usdt:TRC20地址?amount=xxx 或直接是钱包地址
if strings.HasPrefix(paymentURL, "usdt:") || strings.HasPrefix(paymentURL, "USDT:") {
parts := strings.SplitN(paymentURL, ":", 2)
if len(parts) > 1 {
// 移除查询参数
addrPart := strings.SplitN(parts[1], "?", 2)[0]
walletAddress = strings.TrimSpace(addrPart)
log.Printf("[BepUsdt] parsed wallet address from payment_url: %s", walletAddress)
}
} else if len(paymentURL) >= 30 && !strings.Contains(paymentURL, "://") {
// 可能直接就是钱包地址
walletAddress = paymentURL
log.Printf("[BepUsdt] using payment_url as wallet address: %s", walletAddress)
}
}
log.Printf("[BepUsdt] payment data: trade_id=%s, token=%s, payment_url=%s, wallet_address=%s", tradeID, token, paymentURL, walletAddress)
var amount float64
if v, ok := data["amount"].(float64); ok {