corp.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package channel
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "message-pusher/model"
  8. "net/http"
  9. )
  10. type corpMessageRequest struct {
  11. MessageType string `json:"msgtype"`
  12. Text struct {
  13. Content string `json:"content"`
  14. } `json:"text"`
  15. Markdown struct {
  16. Content string `json:"content"`
  17. } `json:"markdown"`
  18. }
  19. type corpMessageResponse struct {
  20. Code int `json:"errcode"`
  21. Message string `json:"errmsg"`
  22. }
  23. func SendCorpMessage(message *model.Message, user *model.User) error {
  24. if user.CorpWebhookURL == "" {
  25. return errors.New("未配置企业微信群机器人消息推送方式")
  26. }
  27. messageRequest := corpMessageRequest{
  28. MessageType: "text",
  29. }
  30. if message.Content == "" {
  31. messageRequest.MessageType = "text"
  32. messageRequest.Text.Content = message.Description
  33. } else {
  34. messageRequest.MessageType = "markdown"
  35. messageRequest.Markdown.Content = message.Content
  36. }
  37. jsonData, err := json.Marshal(messageRequest)
  38. if err != nil {
  39. return err
  40. }
  41. resp, err := http.Post(fmt.Sprintf("%s", user.CorpWebhookURL), "application/json",
  42. bytes.NewBuffer(jsonData))
  43. if err != nil {
  44. return err
  45. }
  46. var res corpMessageResponse
  47. err = json.NewDecoder(resp.Body).Decode(&res)
  48. if err != nil {
  49. return err
  50. }
  51. if res.Code != 0 {
  52. return errors.New(res.Message)
  53. }
  54. return nil
  55. }