qywx.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package util
  2. import (
  3. "context"
  4. "crypto/md5"
  5. "encoding/base64"
  6. "fmt"
  7. "github.com/gogf/gf/v2/errors/gerror"
  8. "github.com/gogf/gf/v2/frame/g"
  9. "github.com/skip2/go-qrcode"
  10. "io"
  11. "net/http"
  12. "strings"
  13. )
  14. // SendQrImage2ChatBot 发送二维码给群聊机器人
  15. func SendQrImage2ChatBot(qrContent string) error {
  16. res, err := qrcode.Encode(qrContent, qrcode.Medium, 256)
  17. if err != nil {
  18. return gerror.Wrap(err, "解密二维码异常")
  19. }
  20. rawStr := base64.StdEncoding.EncodeToString(res)
  21. h := md5.New()
  22. h.Write(res)
  23. hash := h.Sum(nil)
  24. hashStr := fmt.Sprintf("%x", hash)
  25. postBody := fmt.Sprintf(`{
  26. "msgtype": "image",
  27. "image": {
  28. "base64": "%s",
  29. "md5": "%s",
  30. "mentioned_list":["@%s"]
  31. }
  32. }`, rawStr, strings.ToLower(hashStr), "all")
  33. client := new(http.Client)
  34. req, err := http.NewRequest("POST", g.Cfg().MustGet(context.Background(), "qwxRobotUrl").String(),
  35. strings.NewReader(postBody))
  36. if err != nil {
  37. return gerror.Wrap(err, "请求企业微信机器人接口异常")
  38. }
  39. req.Header.Set("Content-Type", "application/json")
  40. resp, err := client.Do(req)
  41. if err != nil {
  42. return err
  43. }
  44. defer resp.Body.Close()
  45. bb, _ := io.ReadAll(resp.Body)
  46. fmt.Println(string(bb))
  47. return nil
  48. }