From 786c5e81759e151b863db63a9e1a306eda131174 Mon Sep 17 00:00:00 2001 From: line-6000 <154492442+line-6000@users.noreply.github.com> Date: Tue, 14 Apr 2026 18:43:20 +0800 Subject: [PATCH] update router for support epay GET and POST --- src/route/router.go | 48 +++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/src/route/router.go b/src/route/router.go index ee54b32..90114ff 100644 --- a/src/route/router.go +++ b/src/route/router.go @@ -75,25 +75,20 @@ func RegisterRoute(e *echo.Echo) { // epay v1 routes epayV1 := paymentRoute.Group("/epay/v1") - epayV1.GET("/order/create-transaction/submit.php", func(ctx echo.Context) error { - money := ctx.QueryParam("money") - name := ctx.QueryParam("name") - notifyURL := ctx.QueryParam("notify_url") - outTradeNo := ctx.QueryParam("out_trade_no") - returnURL := ctx.QueryParam("return_url") - signstr := ctx.QueryParam("sign") - // signType := ctx.QueryParam("sign_type") - - m := map[string]interface{}{ - "money": money, - "name": name, - "notify_url": notifyURL, - "out_trade_no": outTradeNo, - "pid": config.GetEpayPid(), // 注意:验签时需要包含 pid 参数 - "return_url": returnURL, + epayV1.Match([]string{http.MethodPost, http.MethodGet}, "/order/create-transaction/submit.php", func(ctx echo.Context) error { + params := make(map[string]interface{}) + for k, v := range ctx.QueryParams() { + params[k] = v[0] } - checkSignature, err := sign.Get(m, config.GetApiAuthToken()) + signstr := params["sign"].(string) + delete(params, "sign") + delete(params, "sign_type") + + // we need to add pid to params for signature verification + params["pid"] = config.GetEpayPid() + + checkSignature, err := sign.Get(params, config.GetApiAuthToken()) if err != nil { return constant.SignatureErr } @@ -101,6 +96,25 @@ func RegisterRoute(e *echo.Echo) { return constant.SignatureErr } + // safely get string value from map + getString := func(m map[string]interface{}, key string) string { + v, ok := m[key] + if !ok { + return "" + } + s, ok := v.(string) + if !ok { + return "" + } + return s + } + + money := getString(params, "money") + name := getString(params, "name") + notifyURL := getString(params, "notify_url") + outTradeNo := getString(params, "out_trade_no") + returnURL := getString(params, "return_url") + amountFloat, err := strconv.ParseFloat(money, 64) if err != nil { return comm.Ctrl.FailJson(ctx, fmt.Errorf("invalid money value: %s", money))