From 6d5305430f402745e997a0acffaabcaba63d304d Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 27 May 2026 22:43:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DBepUsdt=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E8=A7=A3=E6=9E=90=E5=A4=B1=E8=B4=A5=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=AD=BE=E5=90=8D=E9=94=99=E8=AF=AF=EF=BC=88JSON=E6=95=B0?= =?UTF-8?q?=E5=80=BC=E7=B1=BB=E5=9E=8B=E6=97=A0=E6=B3=95Unmarshal=E5=88=B0?= =?UTF-8?q?map[string]string=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/api/handlers/payment.go | 51 ++++++++++++++++++++---- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/backend/internal/api/handlers/payment.go b/backend/internal/api/handlers/payment.go index 3eb1f4e..05dcc35 100644 --- a/backend/internal/api/handlers/payment.go +++ b/backend/internal/api/handlers/payment.go @@ -6,6 +6,7 @@ import ( "encoding/json" "fmt" "io" + "log" "net/http" "sort" "strconv" @@ -57,8 +58,7 @@ func (h *PaymentHandler) CreatePayment(c *gin.Context) { } channel := channels[0] - var config map[string]string - json.Unmarshal([]byte(channel.Config), &config) + config := parseChannelConfig(channel.Config) apiURL := strings.TrimSuffix(config["bepusdt_api_url"], "/") apiToken := config["bepusdt_api_token"] @@ -93,8 +93,8 @@ func (h *PaymentHandler) CreatePayment(c *gin.Context) { signature := signBepUsdt(params, apiToken) - fmt.Printf("[BepUsdt] signature params: %v\n", params) - fmt.Printf("[BepUsdt] signature: %s, token: %s\n", signature, apiToken) + log.Printf("[BepUsdt] signature params: %v", params) + log.Printf("[BepUsdt] signature: %s, token: %s", signature, apiToken) reqBody := BepUsdtCreateRequest{ TradeType: tradeType, @@ -107,7 +107,7 @@ func (h *PaymentHandler) CreatePayment(c *gin.Context) { } body, _ := json.Marshal(reqBody) - fmt.Printf("[BepUsdt] request body: %s\n", string(body)) + log.Printf("[BepUsdt] request body: %s", string(body)) resp, err := http.Post(apiURL+"/api/v1/order/create-transaction", "application/json", strings.NewReader(string(body))) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to connect payment gateway"}) @@ -117,7 +117,7 @@ func (h *PaymentHandler) CreatePayment(c *gin.Context) { respBody, _ := io.ReadAll(resp.Body) - fmt.Printf("[BepUsdt] response: %s\n", string(respBody)) + log.Printf("[BepUsdt] response: %s", string(respBody)) var result map[string]interface{} json.Unmarshal(respBody, &result) @@ -209,8 +209,7 @@ func (h *PaymentHandler) BepUsdtNotify(c *gin.Context) { } channel := channels[0] - var config map[string]string - json.Unmarshal([]byte(channel.Config), &config) + config := parseChannelConfig(channel.Config) apiToken := config["bepusdt_api_token"] stringParams := make(map[string]string) @@ -268,3 +267,39 @@ func signBepUsdt(params map[string]string, token string) string { hash := md5.Sum([]byte(str)) return hex.EncodeToString(hash[:]) } + +func parseChannelConfig(configStr string) map[string]string { + result := make(map[string]string) + if configStr == "" { + return result + } + var raw map[string]interface{} + if err := json.Unmarshal([]byte(configStr), &raw); err != nil { + var rawStr map[string]string + if err2 := json.Unmarshal([]byte(configStr), &rawStr); err2 == nil { + return rawStr + } + log.Printf("[BepUsdt] failed to parse channel config: %v", err) + return result + } + for k, v := range raw { + if v == nil { + continue + } + switch val := v.(type) { + case string: + result[k] = val + case float64: + if val == float64(int64(val)) { + result[k] = strconv.FormatInt(int64(val), 10) + } else { + result[k] = strconv.FormatFloat(val, 'f', -1, 64) + } + case bool: + result[k] = strconv.FormatBool(val) + default: + result[k] = fmt.Sprintf("%v", val) + } + } + return result +}