|
- package wechat
-
- import (
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/log"
- "errors"
- "fmt"
- )
-
- type Template interface {
- ShouldSend(ctx *TemplateContext) bool
- Data(ctx *TemplateContext) *DefaultWechatTemplate
- MsgId(ctx *TemplateContext) string
- Url(ctx *TemplateContext) string
- TemplateId(ctx *TemplateContext) string
- }
-
- type TemplateContext struct {
- Cloudbrain *models.Cloudbrain
- }
-
- func SendTemplateMsg(template Template, ctx *TemplateContext, userId int64) error {
- defer func() {
- if err := recover(); err != nil {
- combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2))
- log.Error("PANIC:", combinedErr)
- }
- }()
- if !template.ShouldSend(ctx) {
- log.Info("SendTemplateMsg should not Send.jobId=%d jobType=%s", ctx.Cloudbrain.ID, ctx.Cloudbrain.JobType)
- return nil
- }
-
- openId := models.GetUserWechatOpenId(userId)
- if openId == "" {
- log.Error("Wechat openId not exist,userId=%d", userId)
- return errors.New("Wechat openId not exist")
- }
- req := TemplateMsgRequest{
- ToUser: openId,
- TemplateId: template.TemplateId(ctx),
- Url: template.Url(ctx),
- ClientMsgId: template.MsgId(ctx),
- Data: template.Data(ctx),
- }
- err, retryFlag := sendTemplateMsg(req)
- if retryFlag {
- log.Info("SendTemplateMsg calling")
- refreshAccessToken()
- err, _ = sendTemplateMsg(req)
- if err != nil {
- log.Error("SendTemplateMsg err. %v", err)
- return err
- }
- return nil
- }
- if err != nil {
- log.Error("SendTemplateMsg err. %v", err)
- return err
- }
- log.Info("SendTemplateMsg success")
- return nil
- }
|