Commit e5c0d994186827164b75fdc15e8d066d948b7b38

Authored by 陆恒
1 parent da930f25
Exists in master

敏感词检测接口

src/HttpServer/logic/datadef.go
1 1 package logic
2 2  
  3 +//微信url定义
  4 +const (
  5 + URL_WEIXINMSG_CHECK = "https://api.weixin.qq.com/wxa/msg_sec_check"
  6 + URL_WEIXINGETACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token"
  7 +)
3 8  
4 9 //登录类型枚举
5 10 const (
... ... @@ -120,6 +125,30 @@ type GetDataResp struct {
120 125 Result GetDataResult `json:"result"`
121 126 }
122 127  
  128 +type TextCheckReq struct{
  129 + Token string `json:"token"`
  130 + Text string `json:"text"`
  131 +}
  132 +
  133 +type TextCheckResp struct {
  134 + Status string `json:"status"`
  135 + Result CommonResult `json:"result"`
  136 +}
  137 +
  138 +type MsgCheckDesc struct {
  139 + Content string `json:"content"`
  140 +}
  141 +
  142 +type MsgCheckResp struct {
  143 + Errcode string `json:"errcode"`
  144 + Errmsg string `json:"errmsg"`
  145 +}
  146 +
  147 +type GetAccessTokenResp struct {
  148 + Access_token string `json:"access_token"`
  149 + Expires_in string `json:"expires_in"`
  150 +}
  151 +
123 152  
124 153 //**********************************************************************************************************
125 154  
... ...
src/HttpServer/logic/errordef.go
... ... @@ -9,4 +9,5 @@ const (
9 9 ERROR_GETUSERIDFAILED = 4 //获取玩家uuid失败
10 10 ERROR_GETUSERMAPBYUIDFAILED = 5 //从玩家在线数据获取失败
11 11 ERROR_SRVDB_FAILED = 6 //服務器存储数据失败或者读取失败
  12 + ERROR_HTTPPOSTFAILED = 7 //http请求失败
12 13 )
13 14 \ No newline at end of file
... ...
src/HttpServer/logic/httpserver.go
... ... @@ -30,16 +30,28 @@ func CheckErr(err error) {
30 30  
31 31 func startServerHttpServe() {
32 32 http.HandleFunc("/catcafe/login", UserLogin) //登录
33   - http.HandleFunc("/catcafe/user/saveUserData", saveUserData) //登录
34   - http.HandleFunc("/catcafe/data/saveData", saveData) //登录
35   - http.HandleFunc("/catcafe/data/getData", getData) //登录
  33 + http.HandleFunc("/catcafe/user/saveUserData", SaveUserData) //保存用户数据
  34 + http.HandleFunc("/catcafe/data/saveData", SaveData) //保存游戏自定义数据
  35 + http.HandleFunc("/catcafe/data/getData", GetData) //获取自定义数据
  36 + http.HandleFunc("/catcafe/team/textCheck", TextCheck) //敏感词检测
36 37  
37 38  
38 39 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil)
39 40 CheckErr(err)
40 41 }
41 42  
42   -func saveUserData(w http.ResponseWriter, r *http.Request) {
  43 +func TextCheck(w http.ResponseWriter, r *http.Request) {
  44 +
  45 + result, _ := ioutil.ReadAll(r.Body)
  46 + r.Body.Close()
  47 +
  48 + s := string(result)
  49 + logger.Info("TextCheck , body:%v,uuid=%v", s)
  50 +
  51 + HandleTextCheck(w,s)
  52 +}
  53 +
  54 +func SaveUserData(w http.ResponseWriter, r *http.Request) {
43 55  
44 56 result, _ := ioutil.ReadAll(r.Body)
45 57 r.Body.Close()
... ... @@ -50,7 +62,7 @@ func saveUserData(w http.ResponseWriter, r *http.Request) {
50 62 HandleSaveUserData(w,s)
51 63 }
52 64  
53   -func saveData(w http.ResponseWriter, r *http.Request) {
  65 +func SaveData(w http.ResponseWriter, r *http.Request) {
54 66  
55 67 result, _ := ioutil.ReadAll(r.Body)
56 68 r.Body.Close()
... ... @@ -61,7 +73,7 @@ func saveData(w http.ResponseWriter, r *http.Request) {
61 73 HandlesaveData(w,s)
62 74 }
63 75  
64   -func getData(w http.ResponseWriter, r *http.Request) {
  76 +func GetData(w http.ResponseWriter, r *http.Request) {
65 77  
66 78 result, _ := ioutil.ReadAll(r.Body)
67 79 r.Body.Close()
... ...
src/HttpServer/logic/logic.go
1 1 package logic
2 2  
3 3 import (
4   -
  4 + "HttpServer/redishandler"
  5 + "bytes"
5 6 "common/beegomap"
6 7 "common/logger"
  8 + "common/redis"
  9 + "io/ioutil"
  10 + "strconv"
7 11  
8 12 "encoding/json"
9 13 "fmt"
... ... @@ -294,4 +298,104 @@ func HandlegetData(w http.ResponseWriter, data string) {
294 298 //回包
295 299 respstr, _ := json.Marshal(&resp)
296 300 fmt.Fprint(w, string(respstr))
  301 +}
  302 +
  303 +func GetAccessToken() string{
  304 + //首先从缓存取
  305 + exist,err := redishandler.GetRedisClient().Exists(redis.MSG_CKECK_ACCESSTOKEN)
  306 + if err != nil {
  307 + logger.Error("GetAccessToken err=%v",err)
  308 + return ""
  309 + }
  310 +
  311 + if exist {
  312 + key,err := redishandler.GetRedisClient().GetString(redis.MSG_CKECK_ACCESSTOKEN)
  313 + if err != nil {
  314 + logger.Error("GetAccessToken err=%v",err)
  315 + return ""
  316 + }
  317 +
  318 + return key
  319 + }
  320 +
  321 + //去微信获取
  322 + url := URL_WEIXINGETACCESS_TOKEN + "?grant_type=client_credential&" + "appid=wx572a2a5ec4538f33&" + "secret=b31e2e7406af88fe7395cd178bdb64fc"
  323 + res,err :=http.Get(url)
  324 + if err != nil {
  325 + logger.Error("GetAccessToken http failed err=%v",err)
  326 + return ""
  327 + }
  328 +
  329 + result, _ := ioutil.ReadAll(res.Body)
  330 + defer res.Body.Close()
  331 +
  332 + var msgresp GetAccessTokenResp
  333 + _ = json.Unmarshal(result, &msgresp)
  334 +
  335 + //存入缓存
  336 + expiretime,_ :=strconv.Atoi(msgresp.Expires_in)
  337 + redishandler.GetRedisClient().SetExString(redis.MSG_CKECK_ACCESSTOKEN,msgresp.Access_token,expiretime-60)
  338 +
  339 + return msgresp.Access_token
  340 +}
  341 +
  342 +func HandleTextCheck(w http.ResponseWriter, data string) {
  343 + SetHeader(w)
  344 + var resp TextCheckResp
  345 + resp.Status = "true"
  346 + resp.Result.Code = ERROR_OK
  347 + var rdata TextCheckReq
  348 + err := json.Unmarshal([]byte(data), &rdata)
  349 + for {
  350 + if err != nil {
  351 + logger.Error("HandleTextCheck json unmarshal failed=%v", err)
  352 + resp.Result.Code = ERROR_JSONUNMASHFAILED
  353 + break
  354 + }
  355 +
  356 + uuid,err := GetTouristUid(rdata.Token)
  357 + if err != nil || uuid==0{
  358 + logger.Error("HandleTextCheck GetTouristUid failed=%v", err)
  359 + resp.Result.Code = ERROR_GETUSERIDFAILED
  360 + break
  361 + }
  362 +
  363 +
  364 + //首先获取
  365 + msgtoken := GetAccessToken()
  366 + msgurl := URL_WEIXINMSG_CHECK + "?access_token=" + msgtoken
  367 + var check MsgCheckDesc
  368 + check.Content = rdata.Text
  369 + bys, err := json.Marshal(&check)
  370 + if err != nil {
  371 + logger.Error("HandleTextCheck json failed=%v", err)
  372 + resp.Result.Code = ERROR_JSONUNMASHFAILED
  373 + break
  374 + }
  375 +
  376 + body := bytes.NewBuffer(bys)
  377 + res, err := http.Post(msgurl, "application/json;charset=utf-8", body)
  378 + if err != nil {
  379 + logger.Error(" HandleTextCheck ERROR_HTTPPOSTFAILED err=%v", err)
  380 + resp.Result.Code = ERROR_HTTPPOSTFAILED
  381 + return
  382 + }
  383 +
  384 + result, _ := ioutil.ReadAll(res.Body)
  385 + defer res.Body.Close()
  386 +
  387 + var msgresp MsgCheckResp
  388 + _ = json.Unmarshal(result, &msgresp)
  389 +
  390 + code,_ := strconv.Atoi(msgresp.Errcode)
  391 + resp.Result.Code =code
  392 + resp.Result.Data = msgresp.Errmsg
  393 +
  394 + resp.Result.Code = ERROR_OK
  395 + break
  396 + }
  397 +
  398 + //回包
  399 + respstr, _ := json.Marshal(&resp)
  400 + fmt.Fprint(w, string(respstr))
297 401 }
298 402 \ No newline at end of file
... ...
src/common/redis/def.go
... ... @@ -6,4 +6,5 @@ const (
6 6 USER_BASIC_DATA = "CATCAFE_USER_BASIC_DATA" //玩家基础信息
7 7 USER_EXT_DATA = "CATCAFE_USER_EXT_DATA" //玩家游戏数据
8 8 USER_BASE_DATA = "CATCAFE_USER_BASE_DATA" //小游戏自定义数据
  9 + MSG_CKECK_ACCESSTOKEN = "CATCAFE_MSG_CKECK_ACCESSTOKEN" //敏感词检测的key
9 10 )
... ...