This commit is contained in:
Mrx
2026-02-09 14:51:03 +08:00
parent ad28fc2301
commit 07ad436fd5
4 changed files with 37 additions and 9 deletions

View File

@@ -252,8 +252,12 @@ func (w *WechatPayService) CreateWechatH5Order(ctx context.Context, amount float
// CreateWechatOrder 创建微信支付订单(集成 APP、H5、小程序
func (w *WechatPayService) CreateWechatOrder(ctx context.Context, amount float64, description string, outTradeNo string) (interface{}, error) {
// 根据 ctx 中的 platform 判断平台
platform := ctx.Value("platform").(string)
// 安全读取 platform未设置或非小程序时避免误走 APP 支付导致 prepay_data 为空
platformVal := ctx.Value("platform")
platform, _ := platformVal.(string)
if platform == "" {
return nil, fmt.Errorf("请携带 X-Platform 请求头wxmini/h5/app以使用微信支付")
}
var prepayData interface{}
var err error
@@ -262,34 +266,35 @@ func (w *WechatPayService) CreateWechatOrder(ctx context.Context, amount float64
case model.PlatformWxMini:
userID, getUidErr := ctxdata.GetUidFromCtx(ctx)
if getUidErr != nil {
return "", getUidErr
return nil, getUidErr
}
userAuthModel, findAuthModelErr := w.userAuthModel.FindOneByUserIdAuthType(ctx, userID, model.UserAuthTypeWxMiniOpenID)
if findAuthModelErr != nil {
return "", findAuthModelErr
// 返回明确文案,便于前端用 code 重试
return nil, fmt.Errorf("未绑定微信小程序,请重试或携带 code 参数")
}
prepayData, err = w.CreateWechatMiniProgramOrder(ctx, amount, description, outTradeNo, userAuthModel.AuthKey)
if err != nil {
return "", err
return nil, err
}
case model.PlatformWxH5:
userID, getUidErr := ctxdata.GetUidFromCtx(ctx)
if getUidErr != nil {
return "", getUidErr
return nil, getUidErr
}
userAuthModel, findAuthModelErr := w.userAuthModel.FindOneByUserIdAuthType(ctx, userID, model.UserAuthTypeWxh5OpenID)
if findAuthModelErr != nil {
return "", findAuthModelErr
return nil, findAuthModelErr
}
prepayData, err = w.CreateWechatH5Order(ctx, amount, description, outTradeNo, userAuthModel.AuthKey)
if err != nil {
return "", err
return nil, err
}
case model.PlatformApp:
// 如果是 APP 平台,调用 APP 支付订单创建
prepayData, err = w.CreateWechatAppOrder(ctx, amount, description, outTradeNo)
default:
return "", fmt.Errorf("不支持的支付平台: %s", platform)
return nil, fmt.Errorf("不支持的支付平台: %s", platform)
}
// 如果创建支付订单失败,返回错误