goProject/.svn/pristine/49/49ee5106c29cff02591a87a5b23b6d636baf73e0.svn-base
2025-01-06 16:21:36 +08:00

127 lines
3.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}