diff --git a/.gitignore b/.gitignore index e9e553c..c4455a3 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,5 @@ data/* /tmp/ /app/api -**/__debug_bin*.exe \ No newline at end of file +**/__debug_bin*.exe +**/api.exe \ No newline at end of file diff --git a/app/main/api/internal/service/wechatpayService.go b/app/main/api/internal/service/wechatpayService.go index bd81ee5..237e6d4 100644 --- a/app/main/api/internal/service/wechatpayService.go +++ b/app/main/api/internal/service/wechatpayService.go @@ -316,14 +316,30 @@ func (w *WechatPayService) CreateWechatOrder(ctx context.Context, amount float64 if getUidErr != nil { return "", getUidErr } - userAuthModel, findAuthModelErr := w.userAuthModel.FindOneByUserIdAuthType(ctx, userID, model.UserAuthTypeWxh5OpenID) - if findAuthModelErr != nil { - return "", findAuthModelErr - } - logx.Infof("微信h5支付订单:userAuthModel: %+v", userAuthModel) - prepayData, err = w.CreateWechatH5Order(ctx, amount, description, outTradeNo, userAuthModel.AuthKey) - if err != nil { - return "", err + // 微信内 H5:优先 wxh5_openid(与公众号/网页 AppID 一致);若无则尝试 wxmini_openid(走小程序 AppID 下单) + h5Auth, h5Err := w.userAuthModel.FindOneByUserIdAuthType(ctx, userID, model.UserAuthTypeWxh5OpenID) + if h5Err == nil { + logx.Infof("微信h5支付订单:userAuthModel(wxh5): %+v", h5Auth) + prepayData, err = w.CreateWechatH5Order(ctx, amount, description, outTradeNo, h5Auth.AuthKey) + if err != nil { + return "", err + } + } else if h5Err == model.ErrNotFound { + miniAuth, miniErr := w.userAuthModel.FindOneByUserIdAuthType(ctx, userID, model.UserAuthTypeWxMiniOpenID) + if miniErr != nil { + return "", miniErr + } + logx.WithContext(ctx).Infof( + "[WechatPay] wxh5 无 wxh5_openid,使用 wxmini_openid 下单 out_trade_no=%s user_id=%d", + outTradeNo, userID, + ) + logx.Infof("微信h5支付订单:userAuthModel(wxmini fallback): %+v", miniAuth) + prepayData, err = w.CreateWechatMiniProgramOrder(ctx, amount, description, outTradeNo, miniAuth.AuthKey) + if err != nil { + return "", err + } + } else { + return "", h5Err } case model.PlatformApp: // 如果是 APP 平台,调用 APP 支付订单创建