From 77beb9ca966b33e031c231c5635a5e70105caf18 Mon Sep 17 00:00:00 2001 From: Blizzard Date: Sat, 25 Jul 2026 18:15:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(pro):=20=E4=BC=9A=E5=91=98=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E3=80=8C=E5=8D=B3=E5=B0=86=E5=BC=80=E6=94=BE=E3=80=8D?= =?UTF-8?q?=EF=BC=8C=E5=A0=B5=E4=BD=8F=E7=82=B9=E4=B8=80=E4=B8=8B=E7=99=BD?= =?UTF-8?q?=E6=8B=BF=E4=BC=9A=E5=91=98=E7=9A=84=E6=BC=8F=E6=B4=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原先 /api/pro/activate 直接写库开通一年会员,没有任何支付校验, 任何人调一次接口就是会员。支付暂不接入,这里必须在服务端拒绝, 只改 UI 挡不住直接调接口。 - ActivatePro 一律返回 ErrPayNotReady;真正写库的逻辑保留为 activateProAfterPaid,等接微信支付时在校验支付单据后调用 - handler 对该错误返回参数错而非 500,前端直接展示提示文案 - 小程序 Pro 弹层按钮置灰为「即将开放」,我的页入口改为 「Pro 会员(即将开放)」 Co-Authored-By: Claude Opus 4.8 --- pets-be/internal/handler/misc.go | 7 +++++++ pets-be/internal/service/pro.go | 8 ++++++++ pets-be/internal/service/service.go | 4 ++++ pets-fe/components/bottom-sheet/bottom-sheet.wxml | 5 ++++- pets-fe/pages/profile/profile.wxml | 2 +- 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/pets-be/internal/handler/misc.go b/pets-be/internal/handler/misc.go index b5330cd..170241a 100644 --- a/pets-be/internal/handler/misc.go +++ b/pets-be/internal/handler/misc.go @@ -1,6 +1,8 @@ package handler import ( + "errors" + "github.com/gin-gonic/gin" "github.com/sundynix/pets-be/internal/middleware" @@ -42,6 +44,11 @@ func (h *Handler) GetPro(c *gin.Context) { func (h *Handler) ActivatePro(c *gin.Context) { info, err := h.svc.ActivatePro(middleware.UserID(c)) if err != nil { + // 支付未接入不是服务器错误,按参数错返回,前端直接展示提示文案 + if errors.Is(err, service.ErrPayNotReady) { + response.FailParams(c, err.Error()) + return + } response.FailErr(c, err) return } diff --git a/pets-be/internal/service/pro.go b/pets-be/internal/service/pro.go index 9c7d585..37dc153 100644 --- a/pets-be/internal/service/pro.go +++ b/pets-be/internal/service/pro.go @@ -40,7 +40,15 @@ func (s *Service) GetPro(userID string) (*ProInfo, error) { } // ActivatePro 开通年费会员 +// ActivatePro 开通会员。 +// ⚠️ 支付尚未接入:在接上微信支付、且校验到真实支付成功之前,这里必须直接拒绝, +// 否则任何人调一次接口就白拿一年会员。接支付时把下面这段换成「校验支付单据后再写库」。 func (s *Service) ActivatePro(userID string) (*ProInfo, error) { + return nil, ErrPayNotReady +} + +// activateProAfterPaid 支付成功后真正写入会员状态(当前无人调用,等接支付时使用) +func (s *Service) activateProAfterPaid(userID string) (*ProInfo, error) { now := time.Now() end := now.AddDate(1, 0, 0) var m model.ProMembership diff --git a/pets-be/internal/service/service.go b/pets-be/internal/service/service.go index b308418..dc6361b 100644 --- a/pets-be/internal/service/service.go +++ b/pets-be/internal/service/service.go @@ -14,6 +14,10 @@ import ( // ErrNotFound 资源不存在(handler 据此返回 40400) var ErrNotFound = errors.New("not found") +// ErrPayNotReady 支付未接入。会员开通必须走真实支付,未接入前一律拒绝, +// 避免「点一下白拿会员」。 +var ErrPayNotReady = errors.New("支付功能即将开放,敬请期待") + // Service 业务逻辑聚合,方法按领域分散在各文件 type Service struct { db *gorm.DB diff --git a/pets-fe/components/bottom-sheet/bottom-sheet.wxml b/pets-fe/components/bottom-sheet/bottom-sheet.wxml index be073de..77f28a0 100644 --- a/pets-fe/components/bottom-sheet/bottom-sheet.wxml +++ b/pets-fe/components/bottom-sheet/bottom-sheet.wxml @@ -235,7 +235,10 @@ module.exports.sel = function (map, key, index, def) { {{item}} - + + + 会员功能还在准备中,暂未开放购买。 + diff --git a/pets-fe/pages/profile/profile.wxml b/pets-fe/pages/profile/profile.wxml index 38c51d2..cbdde59 100644 --- a/pets-fe/pages/profile/profile.wxml +++ b/pets-fe/pages/profile/profile.wxml @@ -29,7 +29,7 @@ 关于我们 v0.2 › - +