From 0431ee605b843183a2379fef477dc7f53e625787 Mon Sep 17 00:00:00 2001 From: Mrx <18278715334@163.com> Date: Mon, 11 May 2026 15:25:41 +0800 Subject: [PATCH] f --- .../api/internal/service/wechatpayService.go | 50 +++++++++---------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/app/main/api/internal/service/wechatpayService.go b/app/main/api/internal/service/wechatpayService.go index bb07a54..a3db68f 100644 --- a/app/main/api/internal/service/wechatpayService.go +++ b/app/main/api/internal/service/wechatpayService.go @@ -25,14 +25,6 @@ import ( "github.com/zeromicro/go-zero/core/logx" ) -// wxpayAPIHTTPStatus 安全读取微信支付 API 的 HTTP 状态码;部分错误路径下 result 可能为 nil(例如本地签名失败)。 -func wxpayAPIHTTPStatus(result *core.APIResult) int { - if result == nil || result.Response == nil { - return 0 - } - return result.Response.StatusCode -} - const ( TradeStateSuccess = "SUCCESS" // 支付成功 TradeStateRefund = "REFUND" // 转入退款 @@ -182,7 +174,7 @@ func (w *WechatPayService) CreateWechatAppOrder(ctx context.Context, amount floa // 发起预支付请求 resp, result, err := svc.Prepay(ctx, payRequest) if err != nil { - return "", fmt.Errorf("微信支付订单创建失败: %v, 状态码: %d", err, wxpayAPIHTTPStatus(result)) + return "", fmt.Errorf("微信支付订单创建失败: %v, 状态码: %d", err, result.Response.StatusCode) } // 返回预支付交易会话标识 @@ -207,23 +199,14 @@ func jsapiRequestPaymentToMap(resp *jsapi.PrepayWithRequestPaymentResponse) (map if resp.Package != nil { m["package"] = *resp.Package } - if resp.SignType != nil && *resp.SignType != "" { + if resp.SignType != nil { m["signType"] = *resp.SignType - } else { - m["signType"] = "RSA" } if resp.PaySign != nil { m["paySign"] = *resp.PaySign } - var missing []string - for _, key := range []string{"appId", "timeStamp", "nonceStr", "package", "paySign"} { - if m[key] == "" { - missing = append(missing, key) - } - } - if len(missing) > 0 { - logx.Errorf("[WechatPay] JSAPI 调起参数缺项: missing=%v resp=%s", missing, resp.String()) - return nil, fmt.Errorf("微信 JSAPI 调起参数不完整: 缺少或为空 %v", missing) + if len(m) != 6 { + return nil, fmt.Errorf("微信 JSAPI 调起参数不完整") } return m, nil } @@ -252,7 +235,7 @@ func (w *WechatPayService) CreateWechatMiniProgramOrder(ctx context.Context, amo // 发起预支付请求 resp, result, err := svc.PrepayWithRequestPayment(ctx, payRequest) if err != nil { - return "", fmt.Errorf("微信支付订单创建失败: %v, 状态码: %d", err, wxpayAPIHTTPStatus(result)) + return "", fmt.Errorf("微信支付订单创建失败: %v, 状态码: %d", err, result.Response.StatusCode) } return jsapiRequestPaymentToMap(resp) } @@ -282,7 +265,7 @@ func (w *WechatPayService) CreateWechatH5Order(ctx context.Context, amount float resp, result, err := svc.PrepayWithRequestPayment(ctx, payRequest) logx.Infof("微信h5支付订单:resp: %+v, result: %+v, err: %+v", resp, result, err) if err != nil { - return "", fmt.Errorf("微信支付订单创建失败: %v, 状态码: %d", err, wxpayAPIHTTPStatus(result)) + return "", fmt.Errorf("微信支付订单创建失败: %v, 状态码: %d", err, result.Response.StatusCode) } return jsapiRequestPaymentToMap(resp) } @@ -291,14 +274,17 @@ func (w *WechatPayService) CreateWechatH5Order(ctx context.Context, amount float func (w *WechatPayService) CreateWechatOrder(ctx context.Context, amount float64, description string, outTradeNo string) (interface{}, error) { platformVal := ctx.Value("platform") platform, ok := platformVal.(string) + rawPlatform := platform platform = strings.TrimSpace(platform) + logx.WithContext(ctx).Infof( + "[WechatPay] CreateWechatOrder platform ctx: value_type=%T assert_ok=%v raw=%q trimmed=%q ref_wxh5=%q ref_wxmini=%q ref_app=%q out_trade_no=%s", + platformVal, ok, rawPlatform, platform, model.PlatformWxH5, model.PlatformWxMini, model.PlatformApp, outTradeNo, + ) if !ok || platform == "" { logx.WithContext(ctx).Errorf("[WechatPay] CreateWechatOrder 缺少 X-Platform") return "", fmt.Errorf("缺少 X-Platform 请求头(微信内请传 wxh5)") } - logx.WithContext(ctx).Infof("[WechatPay] CreateWechatOrder platform=%q out_trade_no=%s", platform, outTradeNo) - var prepayData interface{} var err error @@ -317,6 +303,10 @@ func (w *WechatPayService) CreateWechatOrder(ctx context.Context, amount float64 return "", err } case model.PlatformWxH5: + logx.WithContext(ctx).Infof( + "[WechatPay] CreateWechatOrder branch=wxh5 out_trade_no=%s amount=%.2f desc_len=%d", + outTradeNo, amount, len(description), + ) userID, getUidErr := ctxdata.GetUidFromCtx(ctx) if getUidErr != nil { return "", getUidErr @@ -343,6 +333,14 @@ func (w *WechatPayService) CreateWechatOrder(ctx context.Context, amount float64 if prepayData == nil { logx.WithContext(ctx).Errorf("[WechatPay] CreateWechatOrder 返回 prepayData 为 nil platform=%q", platform) + } else if m, isMap := prepayData.(map[string]string); isMap { + keys := make([]string, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + logx.WithContext(ctx).Infof("[WechatPay] CreateWechatOrder return prepay: platform=%q type=map[string]string len=%d keys=%v", platform, len(m), keys) + } else { + logx.WithContext(ctx).Infof("[WechatPay] CreateWechatOrder return prepay: platform=%q type=%T", platform, prepayData) } // 返回预支付ID @@ -380,7 +378,7 @@ func (w *WechatPayService) QueryOrderStatus(ctx context.Context, transactionID s Mchid: core.String(w.config.Wxpay.MchID), }) if err != nil { - return nil, fmt.Errorf("订单查询失败: %v, 状态码: %d", err, wxpayAPIHTTPStatus(result)) + return nil, fmt.Errorf("订单查询失败: %v, 状态码: %d", err, result.Response.StatusCode) } return resp, nil