You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

template.go 1.5 kB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package wechat
  2. import (
  3. "code.gitea.io/gitea/models"
  4. "code.gitea.io/gitea/modules/log"
  5. "errors"
  6. "fmt"
  7. )
  8. type Template interface {
  9. ShouldSend(ctx *TemplateContext) bool
  10. Data(ctx *TemplateContext) *DefaultWechatTemplate
  11. MsgId(ctx *TemplateContext) string
  12. Url(ctx *TemplateContext) string
  13. TemplateId(ctx *TemplateContext) string
  14. }
  15. type TemplateContext struct {
  16. Cloudbrain *models.Cloudbrain
  17. }
  18. func SendTemplateMsg(template Template, ctx *TemplateContext, userId int64) error {
  19. defer func() {
  20. if err := recover(); err != nil {
  21. combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2))
  22. log.Error("PANIC:", combinedErr)
  23. }
  24. }()
  25. if !template.ShouldSend(ctx) {
  26. log.Info("SendTemplateMsg should not Send.jobId=%d jobType=%s", ctx.Cloudbrain.ID, ctx.Cloudbrain.JobType)
  27. return nil
  28. }
  29. openId := models.GetUserWechatOpenId(userId)
  30. if openId == "" {
  31. log.Error("Wechat openId not exist,userId=%d", userId)
  32. return errors.New("Wechat openId not exist")
  33. }
  34. req := TemplateMsgRequest{
  35. ToUser: openId,
  36. TemplateId: template.TemplateId(ctx),
  37. Url: template.Url(ctx),
  38. ClientMsgId: template.MsgId(ctx),
  39. Data: template.Data(ctx),
  40. }
  41. err, retryFlag := sendTemplateMsg(req)
  42. if retryFlag {
  43. log.Info("SendTemplateMsg calling")
  44. refreshAccessToken()
  45. err, _ = sendTemplateMsg(req)
  46. if err != nil {
  47. log.Error("SendTemplateMsg err. %v", err)
  48. return err
  49. }
  50. return nil
  51. }
  52. if err != nil {
  53. log.Error("SendTemplateMsg err. %v", err)
  54. return err
  55. }
  56. log.Info("SendTemplateMsg success")
  57. return nil
  58. }