package wechat import ( "bytes" "errors" "fmt" "io/ioutil" "log" "mime/multipart" "net/http" "git.tetele.net/tgo/helper" ) //检测图片内容是否合规 func ImgSecCheck(access_token, imgUrl string) error { var err error checkUrl := "https://api.weixin.qq.com/wxa/img_sec_check?access_token=%s" checkUrl = fmt.Sprintf(checkUrl, access_token) imgResponse, err := http.Get(imgUrl) //获取图片 if err != nil { return err } defer imgResponse.Body.Close() if imgResponse.StatusCode != 200 { return errors.New("resp status:" + fmt.Sprint(imgResponse.StatusCode)) } buf := new(bytes.Buffer) w := multipart.NewWriter(buf) bin, err := ioutil.ReadAll(imgResponse.Body) if err != nil { fmt.Println(err) return err } fw, err := w.CreateFormFile("media", "fijgrpgpegjrepoikr") if err != nil { fmt.Println(err) return err } _, err = fw.Write(bin) if err != nil { fmt.Println(err) return err } w.Close() req, err := http.NewRequest("POST", checkUrl, buf) if err != nil { fmt.Println("req err: ", err) return err } req.Header.Set("Content-Type", w.FormDataContentType()) checkResponse, err := http.DefaultClient.Do(req) if err != nil { fmt.Println("resp err: ", err) return err } defer checkResponse.Body.Close() if checkResponse.StatusCode != 200 { return errors.New("resp status:" + fmt.Sprint(checkResponse.StatusCode)) } response, err := ioutil.ReadAll(checkResponse.Body) if err != nil { return err } responseData := map[string]interface{}{} err = json.Unmarshal(response, &responseData) if err != nil { // 有错,但能解析 log.Println(err) } if _, exist := responseData["errcode"]; exist && helper.ToInt(responseData["errcode"]) != 0 { return errors.New(helper.ToStr(responseData["errmsg"])) } return nil } //检测文本内容是否合规 func MsgSecCheck(access_token string, data map[string]interface{}, retry ...int) error { var err error data["version"] = 2 checkUrl := "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=%s" checkUrl = fmt.Sprintf(checkUrl, access_token) requestDataJson, err := json.Marshal(data) if err != nil { return err } response, err := PostJson(checkUrl, requestDataJson) if err != nil { return err } responseData := map[string]interface{}{} err = json.Unmarshal(response, &responseData) if err != nil { // 有错,但能解析 log.Println(err) } if _, exist := responseData["errcode"]; exist && helper.ToInt(responseData["errcode"]) != 0 { return errors.New(helper.ToStr(responseData["errmsg"])) } resultData, err := helper.InterfaceToMapInterface(responseData["result"]) if err != nil { return err } if resultData["suggest"] != "pass" { return errors.New("内容不能包含" + GetCheckContentByCode(helper.ToStr(resultData["label"]))) } return nil } func GetCheckContentByCode(code string) string { codeList := map[string]string{ "10001": "广告", "20001": "时政", "20002": "色情", "20003": "辱骂", "20006": "违法犯罪", "20008": "欺诈", "20012": "低俗", "20013": "版权", "21000": "其他", } return codeList[code] }