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.3 kB

3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. return nil
  27. }
  28. openId := models.GetUserWechatOpenId(userId)
  29. if openId == "" {
  30. return errors.New("Wechat openId not exist")
  31. }
  32. req := TemplateMsgRequest{
  33. ToUser: openId,
  34. TemplateId: template.TemplateId(ctx),
  35. Url: template.Url(ctx),
  36. ClientMsgId: template.MsgId(ctx),
  37. Data: template.Data(ctx),
  38. }
  39. err, retryFlag := sendTemplateMsg(req)
  40. if retryFlag {
  41. log.Info("SendTemplateMsg calling")
  42. refreshAccessToken()
  43. err, _ = sendTemplateMsg(req)
  44. if err != nil {
  45. log.Error("SendTemplateMsg err. %v", err)
  46. return err
  47. }
  48. return nil
  49. }
  50. if err != nil {
  51. log.Error("SendTemplateMsg err. %v", err)
  52. return err
  53. }
  54. return nil
  55. }