goProject/.svn/pristine/49/49ee5106c29cff02591a87a5b23b6d636baf73e0.svn-base

127 lines
3.6 KiB
Plaintext
Raw Normal View History

2025-01-06 16:21:36 +08:00
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)
}