From 2e8eb693122cf3f5f4d6117e52a284adaba361f7 Mon Sep 17 00:00:00 2001 From: summer <> Date: Wed, 5 Nov 2025 14:48:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(1.0):=E8=B0=83=E6=95=B4=E4=B8=BA=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E8=8E=B7=E5=8F=96=20access=5Ftoken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/api/wechat/mini_template.go | 70 +++++++++++++++++----------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/internal/api/wechat/mini_template.go b/internal/api/wechat/mini_template.go index 39cdb59..efd1fef 100644 --- a/internal/api/wechat/mini_template.go +++ b/internal/api/wechat/mini_template.go @@ -10,6 +10,7 @@ import ( "mini-chat/internal/pkg/miniprogram" "mini-chat/internal/pkg/validation" + "go.uber.org/zap" "gorm.io/gorm" ) @@ -132,33 +133,50 @@ func (h *handler) SendSubscribeMessage() core.HandlerFunc { return } - // 发送模版消息 - accessToken, err := h.servicesMiniProgram.GetAccessToken(req.AppID, req.AppSecret, ctx) - if err != nil { - h.logger.Error(fmt.Sprintf("获取access_token失败: %s", err.Error())) - res.Success = false - res.Message = fmt.Sprintf("获取access_token失败: %s", err.Error()) - } else { - sendSubscribeMessageReq := new(miniprogram.SendSubscribeMessageRequest) - sendSubscribeMessageReq.Touser = req.Touser - sendSubscribeMessageReq.TemplateID = req.TemplateID - sendSubscribeMessageReq.Page = "pages/index/detail?url=1" - sendSubscribeMessageReq.MiniprogramState = "developer" // 需要改成正式版 目前是体验版 跳转小程序类型:developer 为开发版;trial为体验版;formal为正式版;默认为正式版 - sendSubscribeMessageReq.Lang = "zh_CN" - sendSubscribeMessageReq.Data.Thing1.Value = "留言提醒" - sendSubscribeMessageReq.Data.Time2.Value = time.Now().Format("2006-01-02 15:04:05") - sendSubscribeMessageReq.Data.Thing4.Value = "您有一条新的消息..." + // 调整为实时获取 + accessTokenResponse := new(miniprogram.AccessTokenResponse) + if err := miniprogram.GetAccessToken(req.AppID, req.AppSecret, accessTokenResponse); err != nil { + h.logger.Error("GetAccessToken failed", zap.Error(err), zap.String("app_id", req.AppID), zap.String("app_secret", req.AppSecret)) + ctx.AbortWithError(core.Error( + http.StatusBadRequest, + code.ParamBindError, + fmt.Sprintf("获取 access_token 失败: %s,请稍后重试", err.Error()), + )) + return + } - sendSubscribeMessageRes := new(miniprogram.SendSubscribeMessageResponse) - err = miniprogram.SendSubscribeMessage(accessToken, sendSubscribeMessageReq, sendSubscribeMessageRes) - if err != nil { - res.Success = false - res.Message = "发送订阅消息失败" + err.Error() - h.logger.Error(fmt.Sprintf("发送模版消息失败: %s", err.Error())) - } else { - res.Success = true - res.Message = "订阅消息发送成功" - } + if accessTokenResponse.AccessToken == "" { + ctx.AbortWithError(core.Error( + http.StatusBadRequest, + code.ParamBindError, + "未获得到 access_token,请稍后重试", + )) + return + } + + sendSubscribeMessageReq := new(miniprogram.SendSubscribeMessageRequest) + sendSubscribeMessageReq.Touser = req.Touser + sendSubscribeMessageReq.TemplateID = req.TemplateID + sendSubscribeMessageReq.Page = "pages/index/detail?url=1" + sendSubscribeMessageReq.MiniprogramState = "developer" // 需要改成正式版 目前是体验版 跳转小程序类型:developer 为开发版;trial为体验版;formal为正式版;默认为正式版 + sendSubscribeMessageReq.Lang = "zh_CN" + sendSubscribeMessageReq.Data.Thing1.Value = "留言提醒" + sendSubscribeMessageReq.Data.Time2.Value = time.Now().Format("2006-01-02 15:04:05") + sendSubscribeMessageReq.Data.Thing4.Value = "您有一条新的消息..." + + sendSubscribeMessageRes := new(miniprogram.SendSubscribeMessageResponse) + err := miniprogram.SendSubscribeMessage(accessTokenResponse.AccessToken, sendSubscribeMessageReq, sendSubscribeMessageRes) + if err != nil { + res.Success = false + res.Message = "发送订阅消息失败" + err.Error() + h.logger.Error(fmt.Sprintf("发送模版消息失败: %s", err.Error()), + zap.String("app_id", req.AppID), + zap.String("app_secret", req.AppSecret), + zap.String("template_id", req.TemplateID), + ) + } else { + res.Success = true + res.Message = "订阅消息发送成功" } ctx.Payload(res)