From e5c0d994186827164b75fdc15e8d066d948b7b38 Mon Sep 17 00:00:00 2001 From: 陆恒 Date: Mon, 20 Apr 2020 11:38:16 +0800 Subject: [PATCH] 敏感词检测接口 --- src/HttpServer/logic/datadef.go | 29 +++++++++++++++++++++++++++++ src/HttpServer/logic/errordef.go | 1 + src/HttpServer/logic/httpserver.go | 24 ++++++++++++++++++------ src/HttpServer/logic/logic.go | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/common/redis/def.go | 1 + 5 files changed, 154 insertions(+), 7 deletions(-) diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 0009112..8837afc 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -1,5 +1,10 @@ package logic +//微信url定义 +const ( + URL_WEIXINMSG_CHECK = "https://api.weixin.qq.com/wxa/msg_sec_check" + URL_WEIXINGETACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token" +) //登录类型枚举 const ( @@ -120,6 +125,30 @@ type GetDataResp struct { Result GetDataResult `json:"result"` } +type TextCheckReq struct{ + Token string `json:"token"` + Text string `json:"text"` +} + +type TextCheckResp struct { + Status string `json:"status"` + Result CommonResult `json:"result"` +} + +type MsgCheckDesc struct { + Content string `json:"content"` +} + +type MsgCheckResp struct { + Errcode string `json:"errcode"` + Errmsg string `json:"errmsg"` +} + +type GetAccessTokenResp struct { + Access_token string `json:"access_token"` + Expires_in string `json:"expires_in"` +} + //********************************************************************************************************** diff --git a/src/HttpServer/logic/errordef.go b/src/HttpServer/logic/errordef.go index cf48788..0359fac 100644 --- a/src/HttpServer/logic/errordef.go +++ b/src/HttpServer/logic/errordef.go @@ -9,4 +9,5 @@ const ( ERROR_GETUSERIDFAILED = 4 //获取玩家uuid失败 ERROR_GETUSERMAPBYUIDFAILED = 5 //从玩家在线数据获取失败 ERROR_SRVDB_FAILED = 6 //服務器存储数据失败或者读取失败 + ERROR_HTTPPOSTFAILED = 7 //http请求失败 ) \ No newline at end of file diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index e716639..195510c 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -30,16 +30,28 @@ func CheckErr(err error) { func startServerHttpServe() { http.HandleFunc("/catcafe/login", UserLogin) //登录 - http.HandleFunc("/catcafe/user/saveUserData", saveUserData) //登录 - http.HandleFunc("/catcafe/data/saveData", saveData) //登录 - http.HandleFunc("/catcafe/data/getData", getData) //登录 + http.HandleFunc("/catcafe/user/saveUserData", SaveUserData) //保存用户数据 + http.HandleFunc("/catcafe/data/saveData", SaveData) //保存游戏自定义数据 + http.HandleFunc("/catcafe/data/getData", GetData) //获取自定义数据 + http.HandleFunc("/catcafe/team/textCheck", TextCheck) //敏感词检测 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) CheckErr(err) } -func saveUserData(w http.ResponseWriter, r *http.Request) { +func TextCheck(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("TextCheck , body:%v,uuid=%v", s) + + HandleTextCheck(w,s) +} + +func SaveUserData(w http.ResponseWriter, r *http.Request) { result, _ := ioutil.ReadAll(r.Body) r.Body.Close() @@ -50,7 +62,7 @@ func saveUserData(w http.ResponseWriter, r *http.Request) { HandleSaveUserData(w,s) } -func saveData(w http.ResponseWriter, r *http.Request) { +func SaveData(w http.ResponseWriter, r *http.Request) { result, _ := ioutil.ReadAll(r.Body) r.Body.Close() @@ -61,7 +73,7 @@ func saveData(w http.ResponseWriter, r *http.Request) { HandlesaveData(w,s) } -func getData(w http.ResponseWriter, r *http.Request) { +func GetData(w http.ResponseWriter, r *http.Request) { result, _ := ioutil.ReadAll(r.Body) r.Body.Close() diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index 0100536..19a45c5 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -1,9 +1,13 @@ package logic import ( - + "HttpServer/redishandler" + "bytes" "common/beegomap" "common/logger" + "common/redis" + "io/ioutil" + "strconv" "encoding/json" "fmt" @@ -294,4 +298,104 @@ func HandlegetData(w http.ResponseWriter, data string) { //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) +} + +func GetAccessToken() string{ + //首先从缓存取 + exist,err := redishandler.GetRedisClient().Exists(redis.MSG_CKECK_ACCESSTOKEN) + if err != nil { + logger.Error("GetAccessToken err=%v",err) + return "" + } + + if exist { + key,err := redishandler.GetRedisClient().GetString(redis.MSG_CKECK_ACCESSTOKEN) + if err != nil { + logger.Error("GetAccessToken err=%v",err) + return "" + } + + return key + } + + //去微信获取 + url := URL_WEIXINGETACCESS_TOKEN + "?grant_type=client_credential&" + "appid=wx572a2a5ec4538f33&" + "secret=b31e2e7406af88fe7395cd178bdb64fc" + res,err :=http.Get(url) + if err != nil { + logger.Error("GetAccessToken http failed err=%v",err) + return "" + } + + result, _ := ioutil.ReadAll(res.Body) + defer res.Body.Close() + + var msgresp GetAccessTokenResp + _ = json.Unmarshal(result, &msgresp) + + //存入缓存 + expiretime,_ :=strconv.Atoi(msgresp.Expires_in) + redishandler.GetRedisClient().SetExString(redis.MSG_CKECK_ACCESSTOKEN,msgresp.Access_token,expiretime-60) + + return msgresp.Access_token +} + +func HandleTextCheck(w http.ResponseWriter, data string) { + SetHeader(w) + var resp TextCheckResp + resp.Status = "true" + resp.Result.Code = ERROR_OK + var rdata TextCheckReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleTextCheck json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + uuid,err := GetTouristUid(rdata.Token) + if err != nil || uuid==0{ + logger.Error("HandleTextCheck GetTouristUid failed=%v", err) + resp.Result.Code = ERROR_GETUSERIDFAILED + break + } + + + //首先获取 + msgtoken := GetAccessToken() + msgurl := URL_WEIXINMSG_CHECK + "?access_token=" + msgtoken + var check MsgCheckDesc + check.Content = rdata.Text + bys, err := json.Marshal(&check) + if err != nil { + logger.Error("HandleTextCheck json failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + body := bytes.NewBuffer(bys) + res, err := http.Post(msgurl, "application/json;charset=utf-8", body) + if err != nil { + logger.Error(" HandleTextCheck ERROR_HTTPPOSTFAILED err=%v", err) + resp.Result.Code = ERROR_HTTPPOSTFAILED + return + } + + result, _ := ioutil.ReadAll(res.Body) + defer res.Body.Close() + + var msgresp MsgCheckResp + _ = json.Unmarshal(result, &msgresp) + + code,_ := strconv.Atoi(msgresp.Errcode) + resp.Result.Code =code + resp.Result.Data = msgresp.Errmsg + + resp.Result.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) } \ No newline at end of file diff --git a/src/common/redis/def.go b/src/common/redis/def.go index 9745af4..b402575 100644 --- a/src/common/redis/def.go +++ b/src/common/redis/def.go @@ -6,4 +6,5 @@ const ( USER_BASIC_DATA = "CATCAFE_USER_BASIC_DATA" //玩家基础信息 USER_EXT_DATA = "CATCAFE_USER_EXT_DATA" //玩家游戏数据 USER_BASE_DATA = "CATCAFE_USER_BASE_DATA" //小游戏自定义数据 + MSG_CKECK_ACCESSTOKEN = "CATCAFE_MSG_CKECK_ACCESSTOKEN" //敏感词检测的key ) -- libgit2 0.21.0