From c1fdbe79385b4d9baf08700d39220cb9504c3adb Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 30 May 2026 19:38:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A2=9E=E5=BC=BABepUsdt=E9=92=B1?= =?UTF-8?q?=E5=8C=85=E5=9C=B0=E5=9D=80=E8=8E=B7=E5=8F=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 尝试多个可能的字段名获取钱包地址 - 如果没有直接返回,尝试从payment_url解析 - 添加详细日志记录 Co-Authored-By: Claude Opus 4.8 --- backend/internal/api/handlers/payment.go | 32 +++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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 {