127 lines
3.5 KiB
Go
127 lines
3.5 KiB
Go
package websrv
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"reflect"
|
|
"strconv"
|
|
"time"
|
|
|
|
"xiawan/wx/clientsdk/baseutils"
|
|
"xiawan/wx/srv/srvconfig"
|
|
)
|
|
|
|
func createParamData(paramMap map[string]string) []byte {
|
|
retString := ""
|
|
for key, value := range paramMap {
|
|
retString = retString + key + "=" + value + "&"
|
|
}
|
|
retBytes := []byte(retString)
|
|
count := len(retBytes)
|
|
retBytes = retBytes[0 : count-1]
|
|
return retBytes
|
|
}
|
|
|
|
func getBaseParamMap(taskInfo *TaskInfo) map[string]string {
|
|
retMap := make(map[string]string)
|
|
curTime := strconv.Itoa(int(time.Now().UnixNano() / 1000000000))
|
|
head := curTime + taskInfo.SignKey
|
|
hsWebTime := curTime + baseutils.RandomBigHexString(20)
|
|
apiKey := baseutils.Md5Value(head)
|
|
|
|
retMap["name"] = taskInfo.Name
|
|
retMap["app_number"] = taskInfo.AppNumber
|
|
retMap["apikey"] = apiKey
|
|
retMap["hswebtime"] = hsWebTime
|
|
retMap["time"] = curTime
|
|
|
|
return retMap
|
|
}
|
|
|
|
// UploadTaskStatus 上传任务状态
|
|
func UploadTaskStatus(webTask *WebTask) error {
|
|
baseParamMap := getBaseParamMap(webTask.TaskInfo)
|
|
baseParamMap["name"] = webTask.UserInfo.NickName
|
|
baseParamMap["task_id"] = webTask.TaskInfo.TaskID
|
|
baseParamMap["account"] = webTask.UserInfo.WxId
|
|
baseParamMap["headimg"] = webTask.UserInfo.HeadURL
|
|
baseParamMap["status"] = webTask.Status
|
|
if webTask.Status == TaskStateLoginSuccess {
|
|
tmpToken := base64.StdEncoding.EncodeToString(webTask.UserInfo.AutoAuthKey)
|
|
baseParamMap["token"] = tmpToken
|
|
baseParamMap["data"] = ""
|
|
baseParamMap["autoauth"] = "data=" + "token=" + tmpToken
|
|
}
|
|
paramBytes := createParamData(baseParamMap)
|
|
respData, err := TaskPost("http://"+srvconfig.GlobalSetting.WebDomain+"/statistic/Wechat/upd.html", paramBytes)
|
|
if err != nil {
|
|
baseutils.PrintLog(err.Error())
|
|
return err
|
|
}
|
|
resp := &UploadTaskStatusResp{}
|
|
err = json.Unmarshal(respData, resp)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 如果显示44
|
|
if resp.Code == 44 {
|
|
return nil
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// ReportWechatStatus 上报状态
|
|
func ReportWechatStatus(webTask *WebTask, tmpType string) error {
|
|
baseParamMap := getBaseParamMap(webTask.TaskInfo)
|
|
baseParamMap["name"] = webTask.UserInfo.NickName
|
|
baseParamMap["uuid"] = webTask.UserInfo.UUID
|
|
baseParamMap["task_id"] = webTask.TaskInfo.TaskID
|
|
baseParamMap["account"] = webTask.UserInfo.WxId
|
|
baseParamMap["task_type"] = "2"
|
|
baseParamMap["service"] = srvconfig.GlobalSetting.WebDomainNum
|
|
baseParamMap["type"] = tmpType
|
|
connectInfo := map[string]interface{}{}
|
|
connectInfo["info"] = baseParamMap
|
|
|
|
// 复制所有能够被序列化的字段
|
|
for key, value := range webTask.ConnectInfo {
|
|
switch v := value.(type) {
|
|
case func(): // 这里检查并排除不支持的字段
|
|
fmt.Println("Skipping function:", key)
|
|
default:
|
|
// 判断是否是基本类型
|
|
if reflect.TypeOf(v).Kind() == reflect.String || reflect.TypeOf(v).Kind() == reflect.Int || reflect.TypeOf(v).Kind() == reflect.Bool {
|
|
connectInfo[key] = v
|
|
}
|
|
}
|
|
}
|
|
// 将参数转换为 JSON 格式
|
|
paramBytes, err := json.Marshal(connectInfo)
|
|
if err != nil {
|
|
fmt.Println("Error marshaling JSON:", err)
|
|
return err
|
|
}
|
|
if srvconfig.GlobalSetting.WebDomain == "" {
|
|
return nil
|
|
}
|
|
respData, err := TaskPostJson("http://"+srvconfig.GlobalSetting.WebDomain+"/statistic/Wechat/reportStatus", paramBytes)
|
|
if err != nil {
|
|
baseutils.PrintLog(err.Error())
|
|
return err
|
|
}
|
|
resp := &UploadTaskStatusResp{}
|
|
err = json.Unmarshal(respData, resp)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// 上报错误
|
|
if resp.Code == 44 {
|
|
return errors.New("上报错误")
|
|
}
|
|
return nil
|
|
}
|