sec_check.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package weapp
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io"
  7. "io/ioutil"
  8. "mime/multipart"
  9. "net/http"
  10. "os"
  11. "strings"
  12. "github.com/sqeven/weapp/util"
  13. )
  14. // 检测地址
  15. const (
  16. IMGSecCheckURL = "/wxa/img_sec_check"
  17. MSGSecCheckURL = "/wxa/msg_sec_check"
  18. )
  19. // IMGSecCheckFromNet 网络图片检测
  20. // 官方文档: https://developers.weixin.qq.com/miniprogram/dev/api/imgSecCheck.html
  21. //
  22. // @url 要检测的图片网络路径
  23. // @token 接口调用凭证(access_token)
  24. func IMGSecCheckFromNet(url, token string) (res Response, err error) {
  25. resp, err := http.Get(url)
  26. if err != nil {
  27. return
  28. }
  29. defer resp.Body.Close()
  30. bts, err := ioutil.ReadAll(resp.Body)
  31. body := &bytes.Buffer{}
  32. writer := multipart.NewWriter(body)
  33. str := strings.Split(url, "/")
  34. fmt.Println(str)
  35. fmt.Println(str[len(str)-1])
  36. fileWriter, err := writer.CreateFormFile("media", str[len(str)-1])
  37. if err != nil {
  38. return
  39. }
  40. _, err = fileWriter.Write(bts)
  41. if err != nil {
  42. return
  43. }
  44. contentType := writer.FormDataContentType()
  45. writer.Close()
  46. return imgSecCheck(body, contentType, token)
  47. }
  48. // IMGSecCheck 本地图片检测
  49. // 官方文档: https://developers.weixin.qq.com/miniprogram/dev/api/imgSecCheck.html
  50. //
  51. // @filename 要检测的图片本地路径
  52. // @token 接口调用凭证(access_token)
  53. func IMGSecCheck(filename, token string) (res Response, err error) {
  54. file, err := os.Open(filename)
  55. if err != nil {
  56. return
  57. }
  58. defer file.Close()
  59. body := &bytes.Buffer{}
  60. writer := multipart.NewWriter(body)
  61. fileWriter, err := writer.CreateFormFile("media", filename)
  62. if err != nil {
  63. return
  64. }
  65. _, err = io.Copy(fileWriter, file)
  66. if err != nil {
  67. return
  68. }
  69. contentType := writer.FormDataContentType()
  70. writer.Close()
  71. return imgSecCheck(body, contentType, token)
  72. }
  73. func imgSecCheck(body io.Reader, contentType, token string) (res Response, err error) {
  74. api, err := util.TokenAPI(BaseURL+IMGSecCheckURL, token)
  75. if err != nil {
  76. return
  77. }
  78. resp, err := http.Post(api, contentType, body)
  79. if err != nil {
  80. return
  81. }
  82. defer resp.Body.Close()
  83. err = json.NewDecoder(resp.Body).Decode(&res)
  84. return
  85. }
  86. // MSGSecCheck 文本检测
  87. // 官方文档: https://developers.weixin.qq.com/miniprogram/dev/api/msgSecCheck.html
  88. //
  89. // @content 要检测的文本内容,长度不超过 500KB,编码格式为utf-8
  90. // @token 接口调用凭证(access_token)
  91. func MSGSecCheck(content, token string) (res Response, err error) {
  92. api, err := util.TokenAPI(BaseURL+MSGSecCheckURL, token)
  93. if err != nil {
  94. return
  95. }
  96. body := fmt.Sprintf(`{"content": "%s"}`, content)
  97. resp, err := http.Post(api, "application/json", strings.NewReader(body))
  98. if err != nil {
  99. return
  100. }
  101. defer resp.Body.Close()
  102. err = json.NewDecoder(resp.Body).Decode(&res)
  103. return
  104. }