package security import ( "encoding/json" "errors" "fmt" "github.com/silenceper/wechat/v2/miniprogram" "github.com/silenceper/wechat/v2/miniprogram/content" "github.com/silenceper/wechat/v2/util" ) // 检查一段文本是否含有违法违规内容。 // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html const SecurityMsgCheckUrl = "https://api.weixin.qq.com/wxa/msg_sec_check" type Security struct { *content.Content } type MyMiniprogram struct { *miniprogram.MiniProgram } func NewMyMiniprogram(miniprogram *miniprogram.MiniProgram) *MyMiniprogram { return &MyMiniprogram{miniprogram} } type BodyContent struct { Version int8 `json:"version"` // 接口版本号,2.0版本为固定值2 Openid string `json:"openid"` // 用户的openid(用户需在近两小时访问过小程序) Scene int8 `json:"scene"` // 场景枚举值(1 资料;2 评论;3 论坛;4 社交日志) Content string `json:"content"` // 需检测的文本内容,文本字数的上限为2500字,需使用UTF-8编码 Nickname string `json:"nickname"` // 用户昵称,需使用UTF-8编码 Title string `json:"title"` // 文本标题,需使用UTF-8编码 Signature string `json:"signature"` // 个性签名,该参数仅在资料类场景有效(scene=1),需使用UTF-8编码 } func (s *MyMiniprogram) MsgSecCheckWithResult(bodyContent *BodyContent) (result Result, err error) { var accessToken string accessToken, err = s.GetContentSecurity().GetAccessToken() if err != nil { return } uri := fmt.Sprintf("%s?access_token=%s", SecurityMsgCheckUrl, accessToken) response, err := util.PostJSON(uri, bodyContent) if err != nil { return } return DecodeWithResult(response, "MsgSecCheck") } type Result struct { Result *ResultBody } type ResultBody struct { Suggest string //建议,有risky、pass、review三种值 Label int //命中标签枚举值,100 正常;10001 广告;20001 时政;20002 色情;20003 辱骂;20006 违法犯罪;20008 欺诈;20012 低俗;20013 版权;21000 其他 } func DecodeWithResult(response []byte, apiName string) (result Result, err error) { var commError util.CommonError err = json.Unmarshal(response, &commError) if err != nil { return } if commError.ErrCode != 0 { err = errors.New(fmt.Sprintf("%s Error , errcode=%d , errmsg=%s", apiName, commError.ErrCode, commError.ErrMsg)) return } err = json.Unmarshal(response, &result) if err != nil { return } return }