127 lines
3.6 KiB
Plaintext
127 lines
3.6 KiB
Plaintext
|
|
package contextcheckMgr
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"encoding/json"
|
|||
|
|
"fmt"
|
|||
|
|
"math/rand"
|
|||
|
|
"sort"
|
|||
|
|
"strconv"
|
|||
|
|
"time"
|
|||
|
|
|
|||
|
|
"goutil/logUtil"
|
|||
|
|
"goutil/securityUtil"
|
|||
|
|
"goutil/webUtil"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
var (
|
|||
|
|
//接口密钥Id
|
|||
|
|
msecretId string = "c98276c73c122eaa65163fe431cbf7d4"
|
|||
|
|
//接口密钥key
|
|||
|
|
msecretKey string = "3d2b39f824fa2f992494e17be500e303"
|
|||
|
|
//业务ID
|
|||
|
|
mbusinessId string = "9559ce74b5c5d24f6b124799a53c7431"
|
|||
|
|
//接口请求地址
|
|||
|
|
mapiurl string = "http://as.dun.163.com/v3/text/check"
|
|||
|
|
//版本号
|
|||
|
|
mversion string = "v3.1"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
//参数设置
|
|||
|
|
func SetPara(secretId, secretKey, businessId, apiurl, version string) {
|
|||
|
|
msecretId = secretId
|
|||
|
|
msecretKey = secretKey
|
|||
|
|
mbusinessId = businessId
|
|||
|
|
mapiurl = apiurl
|
|||
|
|
mversion = version
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//content:用户发表内容
|
|||
|
|
//account:玩家账号(用户唯一标识)
|
|||
|
|
//nickname:角色名称
|
|||
|
|
//extStr1:角色区服名称
|
|||
|
|
//extStr2:UserId
|
|||
|
|
//ip:用户IP地址,建议抄送,辅助机审策略精准调优
|
|||
|
|
//extLon1:区服ID
|
|||
|
|
//返回值 code: 0:通过, 1:嫌疑,2:不通过
|
|||
|
|
//文本内容检测
|
|||
|
|
func TextCheck(content, account, nickname, extStr1, extStr2, ip string, extLon1 int64) (code int, err error) {
|
|||
|
|
//构造请求参数
|
|||
|
|
postDataDict := make(map[string]string)
|
|||
|
|
postDataDict["secretId"] = msecretId
|
|||
|
|
postDataDict["businessId"] = mbusinessId
|
|||
|
|
postDataDict["timestamp"] = strconv.FormatInt(time.Now().Unix(), 10)
|
|||
|
|
postDataDict["nonce"] = strconv.FormatInt(rand.New(rand.NewSource(time.Now().UnixNano())).Int63n(10000000000), 10)
|
|||
|
|
rawString := fmt.Sprintf("%v%v%v", account, postDataDict["timestamp"], content)
|
|||
|
|
postDataDict["dataId"] = securityUtil.Md5String(rawString, false)
|
|||
|
|
postDataDict["content"] = content
|
|||
|
|
postDataDict["version"] = mversion
|
|||
|
|
postDataDict["account"] = account
|
|||
|
|
postDataDict["nickname"] = nickname
|
|||
|
|
postDataDict["extLon1"] = strconv.FormatInt(extLon1, 10)
|
|||
|
|
// postDataDict["extLon2"] = extLon2
|
|||
|
|
postDataDict["extStr1"] = extStr1
|
|||
|
|
postDataDict["extStr2"] = extStr2
|
|||
|
|
postDataDict["ip"] = ip
|
|||
|
|
postDataDict["signature"] = getSignature(postDataDict)
|
|||
|
|
|
|||
|
|
//请求url,请求头
|
|||
|
|
header := webUtil.GetFormHeader()
|
|||
|
|
transport := webUtil.NewTransport()
|
|||
|
|
transport.DisableKeepAlives = true
|
|||
|
|
transport = webUtil.GetTimeoutTransport(transport, 30)
|
|||
|
|
|
|||
|
|
//请求接口
|
|||
|
|
statusCode, result, err := webUtil.PostMapData(mapiurl, postDataDict, header, transport)
|
|||
|
|
//定义错误信息
|
|||
|
|
var logMessage string
|
|||
|
|
|
|||
|
|
//post请求错误
|
|||
|
|
if err != nil {
|
|||
|
|
logMessage = fmt.Sprintf("TextCheck:,错误信息为:%s", err.Error())
|
|||
|
|
logUtil.ErrorLog(logMessage)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
if statusCode != 200 {
|
|||
|
|
logMessage = fmt.Sprintf("TextCheck:%d is wrong", statusCode)
|
|||
|
|
logUtil.ErrorLog(logMessage)
|
|||
|
|
err = fmt.Errorf("TextCheck:%d is wrong", statusCode)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//反序列化结果
|
|||
|
|
var checkResponseObj *ResultModel
|
|||
|
|
err = json.Unmarshal(result, &checkResponseObj)
|
|||
|
|
if err != nil {
|
|||
|
|
logMessage = fmt.Sprintf("json.Unmarshal(checkResponseObj),err:%s", err.Error())
|
|||
|
|
logUtil.ErrorLog(logMessage)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//判断接口是否调用成功
|
|||
|
|
if checkResponseObj.Code != 200 {
|
|||
|
|
logMessage = fmt.Sprintf("TextCheck接口调用失败,ResultStatus %d", checkResponseObj.Code)
|
|||
|
|
err = fmt.Errorf("TextCheck接口调用失败,code:%d", checkResponseObj.Code)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//返回检测结果
|
|||
|
|
code = checkResponseObj.Result.Action
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//生成签名字符串
|
|||
|
|
func getSignature(postDataDict map[string]string) string {
|
|||
|
|
var paramStr string
|
|||
|
|
keys := make([]string, 0, len(postDataDict))
|
|||
|
|
for k := range postDataDict {
|
|||
|
|
keys = append(keys, k)
|
|||
|
|
}
|
|||
|
|
sort.Strings(keys)
|
|||
|
|
for _, key := range keys {
|
|||
|
|
paramStr += key + postDataDict[key]
|
|||
|
|
}
|
|||
|
|
paramStr += msecretKey
|
|||
|
|
|
|||
|
|
return securityUtil.Md5String(paramStr, false)
|
|||
|
|
}
|