diff --git a/backend/internal/api/handlers/payment.go b/backend/internal/api/handlers/payment.go index 4e87c6d..015850e 100644 --- a/backend/internal/api/handlers/payment.go +++ b/backend/internal/api/handlers/payment.go @@ -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 {