package service import ( "encoding/base64" "fmt" "log" "regexp" "strconv" "strings" "sync" "xiawan/wx/api/req" "xiawan/wx/api/vo" "xiawan/wx/clientsdk" "xiawan/wx/clientsdk/baseinfo" "xiawan/wx/clientsdk/baseutils" "xiawan/wx/clientsdk/xmltool" "xiawan/wx/protobuf/proto_ref" "xiawan/wx/srv/defines" "xiawan/wx/srv/wxcore" "xiawan/wx/srv/wxface" "github.com/gin-gonic/gin" "github.com/gogf/gf/container/garray" _ "github.com/gogf/gf/container/garray" ) // SendSnsTimeLineRequestService 获取朋友圈主页 func SendSnsTimeLineRequestService(queryKey string, m req.GetSnsInfoModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() //获取朋友圈主页 resp, err := reqInvoker.SendSnsTimeLineRequestResult(m.FirstPageMD5, m.MaxID) if err != nil { return vo.NewFail("SendSnsTimeLineRequestService!" + err.Error()) } ObjectList := resp.GetObjectList() if ObjectList != nil && len(ObjectList) > 0 { for _, v := range ObjectList { objectDesc := v.GetObjectDesc() if objectDesc == nil { continue } if objectDesc.GetBuffer() != nil { v.SetObjectDescStr(objectDesc.GetBuffer()) } } } return vo.NewSuccessObj(resp, "") }) } // 通过id获朋友圈详情 func SendSnsObjectDetailByIdService(queryKey string, m req.GetIdDetailModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() //获取好友朋友圈主页 id, _ := strconv.ParseUint(m.Id, 0, 64) resp, err := reqInvoker.SendSnsObjectDetailRequest(id) if err != nil { return vo.NewFail("SendSnsTimeLineRequestService!" + err.Error()) } return vo.NewSuccessObj(resp, "") }) } // SendSnsUserPageRequestService 获取指定人朋友圈 func SendSnsUserPageRequestService(queryKey string, m req.GetSnsInfoModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() //获取好友朋友圈主页 resp, err := reqInvoker.SendSnsUserPageRequest(m.UserName, m.FirstPageMD5, m.MaxID, true) if err != nil { return vo.NewFail("SendSnsUserPageRequestService!" + err.Error()) } count := resp.GetObjectCount() if count > 0 { snsObjList := resp.ObjectList for _, snsObject := range snsObjList { objDesc := snsObject.ObjectDesc tmpTimeLineObj := &proto_ref.TimelineObject{} // 反序列化 TimeLineXML err := xmltool.Unmarshal(objDesc.Buffer, &tmpTimeLineObj) if err != nil { log.Println("GetSnsSyncService Parse TimeLineXML - xml.Unmarshal err:", err) } snsObject.ObjectInfo = tmpTimeLineObj //snsObject.ObjectDesc = nil } } return vo.NewSuccessObj(resp, "") }) } // 转发收藏朋友圈 func SendFavItemCircleService(queryKey string, m req.SendFavItemCircle) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() // 获取指定的朋友圈 objIDString := baseutils.GetNumberString(m.SourceID) snsObjID, _ := strconv.ParseUint(objIDString, 10, 64) snsObject, err := reqInvoker.SendSnsObjectDetailRequest(snsObjID) if err != nil { baseutils.PrintLog("WXSnsTransTask.doFavTask - SendSnsObjectDetailRequest err: " + err.Error()) return vo.NewFail("操作失败!" + err.Error()) } //放入消息队例 currentTaskMgr := iwxConnect.GetWXTaskMgr() taskMgr, _ := currentTaskMgr.(*wxcore.WXTaskMgr) currentSnsTransTask := taskMgr.GetSnsTransTask() // 转发朋友圈 err = currentSnsTransTask.DoSnsTransTask(snsObject, defines.MTaskTypeFavTrans, m.BlackList, m.Location, m.LocationVal) if err == nil { // 如果转发收藏成功则删除 reqInvoker.SendBatchDelFavItemRequest(m.FavItemID) return vo.NewSuccessObj("ok", "操作成功!") } return vo.NewFail("操作失败!" + err.Error()) }) } // 一键转发朋友圈 func SendOneIdCircleService(queryKey string, m req.GetIdDetailModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() // 获取指定的朋友圈 snsObjID, _ := strconv.ParseUint(m.Id, 10, 64) snsObject, err := reqInvoker.SendSnsObjectDetailRequest(snsObjID) if err != nil { baseutils.PrintLog("WXSnsTransTask.doFavTask - SendSnsObjectDetailRequest err: " + err.Error()) return vo.NewFail("操作失败!" + err.Error()) } //放入消息队例 currentTaskMgr := iwxConnect.GetWXTaskMgr() taskMgr, _ := currentTaskMgr.(*wxcore.WXTaskMgr) currentSnsTransTask := taskMgr.GetSnsTransTask() // 转发朋友圈 err = currentSnsTransTask.DoSnsTransTask(snsObject, defines.MTaskTypeFavTrans, m.BlackList, m.Location, m.LocationVal) if err == nil { // 如果转发收藏成功则删除 return vo.NewSuccessObj("ok", "转发成功!") } return vo.NewFail("操作失败!" + err.Error()) }) } // 获取收藏朋友圈详情 func GetCollectCircleService(queryKey string, m req.SendFavItemCircle) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() // 获取指定的朋友圈 objIDString := baseutils.GetNumberString(m.SourceID) snsObjID, _ := strconv.ParseUint(objIDString, 10, 64) snsObject, err := reqInvoker.SendSnsObjectDetailRequest(snsObjID) if err != nil { baseutils.PrintLog("WXSnsTransTask.doFavTask - SendSnsObjectDetailRequest err: " + err.Error()) return vo.NewFail("操作失败!" + err.Error()) } return vo.NewSuccessObj(snsObject, "操作成功!") }) } // SetBackgroundImageApi 设置朋友圈图片 func SetBackgroundImageService(queryKey string, m req.SetBackgroundImageModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //习近平 content := fmt.Sprintf("00 ", wxAccount.GetUserInfo().WxId, m.Url, m.Url) //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() snsPostItem := baseinfo.SnsPostItem{ Content: content, Xml: true, MediaList: make([]*baseinfo.SnsMediaItem, 0), } resp, err := reqInvoker.SendSnsPostRequestNew(&snsPostItem) if err != nil { return vo.NewFail("操作失败!" + err.Error()) } return vo.NewSuccessObj(resp, "操作成功!") }) } // 下载视频 func DownloadMediaService(queryKey string, req req.DownloadMediaModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := connect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !connect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := connect.GetWXReqInvoker() tmpEncKey, _ := strconv.Atoi(req.Key) videoData, err := reqInvoker.SendCdnSnsVideoDownloadReuqest(uint64(tmpEncKey), req.URL) if err != nil { return vo.NewFail("下载失败!" + err.Error()) } return vo.NewSuccessObj(videoData, "下载成功!") }) } // 设置朋友圈可见天数 func SetFriendCircleDaysService(queryKey string, postItem req.SetFriendCircleDaysModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := connect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !connect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := connect.GetWXReqInvoker() err := reqInvoker.SetFriendCircleDays(&postItem) if err != nil { return vo.NewFail("设置朋友圈可见天数失败!" + err.Error()) } return vo.NewSuccessObj("ok", "设置朋友圈可见天数成功!") }) } // SendFriendCircle发送朋友圈 func SendFriendCircleService(queryKey string, postItem req.SnsPostItemModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := connect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !connect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := connect.GetWXReqInvoker() snsPostItem := baseinfo.SnsPostItem{ MediaList: make([]*baseinfo.SnsMediaItem, 0), } //对结构体进行复制 StructCopy(&snsPostItem, &postItem) if postItem.LocationInfo != nil { snsPostItem.LocationInfo = (*baseinfo.SnsLocationInfo)(postItem.LocationInfo) } if len(postItem.MediaList) > 0 { for _, item := range postItem.MediaList { var snsMediaItem baseinfo.SnsMediaItem StructCopy(&snsMediaItem, item) snsPostItem.MediaList = append(snsPostItem.MediaList, &snsMediaItem) } } resp, err := reqInvoker.SendSnsPostRequestNew(&snsPostItem) if err != nil { return vo.NewFail("发送朋友圈失败!" + err.Error()) } return vo.NewSuccessObj(resp, "发送朋友圈成功!") }) } // SendFriendCircleByXMlService 根据XML发送朋友圈 func SendFriendCircleByXMlService(queryKey string, postItem baseinfo.TimelineObject) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := connect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !connect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := connect.GetWXReqInvoker() err := reqInvoker.SendSnsPostRequestByXML(&postItem, []string{}) if err != nil { return vo.NewFail("发送朋友圈失败!" + err.Error()) } return vo.NewSuccessObj(nil, "发送朋友圈成功!") }) } // UploadFriendCircleImagesService 上传朋友圈图片 func UploadFriendCircleImageService(queryKey string, m req.UploadFriendCircleModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := connect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !connect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := connect.GetWXReqInvoker() uploadRespArray := garray.New(true) wg := new(sync.WaitGroup) if len(m.ImageDataList) <= 0 { return vo.NewFail("没有要上传的图片!") } for _, imageData := range m.ImageDataList { sImageBase := strings.Split(imageData, ",") if len(sImageBase) > 1 { imageData = sImageBase[1] } imageBuffer, _ := base64.StdEncoding.DecodeString(imageData) //生成一个Md5 imageId := baseutils.Md5ValueByte(imageBuffer, false) fmt.Println(imageId) //查询数据库是否存在该Id //上传图片 wg.Add(1) go func(image []byte, id string) { defer wg.Done() upImageResp, err := reqInvoker.SendCdnSnsUploadImageReuqest(image) if err != nil { uploadRespArray.Append(gin.H{ "imageId": imageId, "errMgs": err.Error(), }) } else { uploadRespArray.Append(gin.H{ "imageId": imageId, "resp": upImageResp, }) } }(imageBuffer, imageId) } wg.Wait() return vo.NewSuccessObj(uploadRespArray.Interfaces(), "") }) } // SendSnsObjectOpRequestService 朋友圈操作 func SendSnsObjectOpRequestService(queryKey string, m req.SendSnsObjectOpRequestModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := connect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !connect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := connect.GetWXReqInvoker() if len(m.SnsObjectOpList) <= 0 { return vo.NewFail("没有要操作的Id!") } opItems := make([]*baseinfo.SnsObjectOpItem, 0) for _, item := range m.SnsObjectOpList { var opItem baseinfo.SnsObjectOpItem StructCopy(&opItem, &item) opItems = append(opItems, &opItem) } resp, err := reqInvoker.SendSnsObjectOpRequest(opItems) if err != nil { return vo.NewFail(err.Error()) } return vo.NewSuccessObj(resp, "") }) } // SendSnsCommentRequestService 点赞/评论 func SendSnsCommentRequestService(queryKey string, m req.SendSnsCommentRequestModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := connect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !connect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := connect.GetWXReqInvoker() respArray := garray.New(true) wg := new(sync.WaitGroup) if len(m.SnsCommentList) <= 0 { return vo.NewFail("没有数据!") } for _, item := range m.SnsCommentList { commItem := &baseinfo.SnsCommentItem{} if item.OpType == baseinfo.MMSnsCommentTypeLike { //点赞 id, _ := strconv.ParseUint(item.ItemID, 0, 64) commItem = clientsdk.CreateSnsCommentLikeItem(id, item.ToUserName) } else if item.OpType == baseinfo.MMSnsCommentTypeComment { // 评论 //oldDevieType:=wxAccount.GetUserInfo().DeviceInfo.OsType //wxAccount.GetUserInfo().DeviceInfo.OsType="wechat" //_=reqInvoker.SendAutoAuthRequest() /*defer func() { wxAccount.GetUserInfo().DeviceInfo.OsType=oldDevieType _=reqInvoker.SendAutoAuthRequest() }()*/ //评论能用 if m.Tx { item.Content = item.Content + "\n\n~~~~~~~~~~\n每日一练习,\n大大有进步" } id, _ := strconv.ParseUint(item.ItemID, 0, 64) commItem = clientsdk.CreateSnsCommentItem(id, item.ToUserName, item.Content, nil) commItem.ReplyItem = &baseinfo.ReplyCommentItem{} StructCopy(commItem.ReplyItem, &item.ReplyItem) } wg.Add(1) go func(commentItem *baseinfo.SnsCommentItem) { defer wg.Done() err := reqInvoker.SendSnsCommentRequest(commentItem) if err != nil { respArray.Append(gin.H{ "data": commentItem, "isCommentSuccess": false, "errMsg": err.Error(), }) } else { respArray.Append(gin.H{ "data": commentItem, "isCommentSuccess": true, "errMsg": "", }) } }(commItem) } wg.Wait() return vo.NewSuccessObj(respArray.Interfaces(), "") }) } // GetSnsSyncService 同步朋友圈 func GetSnsSyncService(queryKey string) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := connect.GetWXAccount() userInfo := wxAccount.GetUserInfo() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !connect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := connect.GetWXReqInvoker() snsSyncResp, err := reqInvoker.SendSnsSyncRequest(false) if err != nil { return vo.NewFail("GetSnsSyncService err:" + err.Error()) } // 如果请求失败 retCode := snsSyncResp.GetBaseResponse().GetRet() errMsg := snsSyncResp.GetBaseResponse().GetErrMsg().GetStr() if retCode != baseinfo.MMOk { return vo.NewFail("WXSnsSyncRouter err:" + strconv.Itoa(int(retCode)) + " msg = " + errMsg) } // 更新 key userInfo.SnsSyncKey = snsSyncResp.GetKeyBuf().GetBuffer() // 遍历同步到的朋友圈 tmpCmdList := snsSyncResp.GetCmdList() tmpCount := tmpCmdList.GetCount() // 定义正则表达式,用于匹配...之间的内容 re := regexp.MustCompile(`.*?`) snsItems := make([]baseinfo.SnsSyncItem, 0) if tmpCount > 0 { itemList := snsSyncResp.GetCmdList().GetItemList() for _, item := range itemList { snsItem := baseinfo.SnsSyncItem{ CmdId: item.GetCmdId(), } tmpTimeLineObj := &baseinfo.TimelineObject{} tmpTimeLineData := re.FindString(string(item.CmdBuf.Data)) // 反序列化 TimeLineXML err := xmltool.Unmarshal([]byte(tmpTimeLineData), &tmpTimeLineObj) if err != nil { log.Println("GetSnsSyncService Parse TimeLineXML - xml.Unmarshal err:", err) } snsItem.TimelineInfo = *tmpTimeLineObj snsItems = append(snsItems, snsItem) } } resp := baseinfo.SnsSyncResp{ ContinueFlag: snsSyncResp.GetContinueFlag(), SnsSyncKey: userInfo.SnsSyncKey, SnsCount: tmpCount, SnsItems: snsItems, } return vo.NewSuccessObj(resp, "") }) } // CdnSnsVideoUploadService 上传CDN朋友圈视频服务 func CdnSnsVideoUploadService(queryKey string, m req.CdnSnsVideoUploadModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() // 解码base64数据 videoData, err := base64.StdEncoding.DecodeString(m.VideoData) if err != nil { return vo.NewFail("视频数据解析失败!" + err.Error()) } thumbData, err := base64.StdEncoding.DecodeString(m.ThumbData) if err != nil { return vo.NewFail("缩略图数据解析失败!" + err.Error()) } //上传朋友圈视频 resp, err := reqInvoker.SendCdnSnsVideoUploadReuqest(videoData, thumbData) if err != nil { return vo.NewFail("上传朋友圈视频失败!" + err.Error()) } return vo.NewSuccessObj(resp, "上传朋友圈视频成功") }) }