first commit
This commit is contained in:
@@ -0,0 +1,641 @@
|
||||
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("<TimelineObject><id><![CDATA[0]]></id><username><![CDATA[%s]]></username><createTime><![CDATA[0]]></createTime><contentDescShowType>0</contentDescShowType><contentDescScene>0</contentDescScene><private><![CDATA[0]]></private><contentDesc></contentDesc><contentattr><![CDATA[0]]></contentattr><sourceUserName></sourceUserName><sourceNickName></sourceNickName><statisticsData></statisticsData><weappInfo><appUserName></appUserName><pagePath></pagePath></weappInfo><canvasInfoXml></canvasInfoXml><location poiClickableStatus=\"0\" poiClassifyId=\"\" poiScale=\"0\" longitude=\"0.0\" city=\"\" poiName=\"\" latitude=\"0.0\" poiClassifyType=\"0\" poiAddress=\"\" ></location><ContentObject><contentStyle><![CDATA[7]]></contentStyle><contentSubStyle><![CDATA[0]]></contentSubStyle><title>


</title><description></description><contentUrl></contentUrl><mediaList><media><id><![CDATA[0]]></id><type><![CDATA[2]]></type><title></title><description></description><private><![CDATA[0]]></private><url type=\"1\" ><![CDATA[%s]]></url><thumb type=\"1\" ><![CDATA[%s]]></thumb>", 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()
|
||||
|
||||
// 定义正则表达式,用于匹配<TimelineObject>...</TimelineObject>之间的内容
|
||||
re := regexp.MustCompile(`<TimelineObject>.*?</TimelineObject>`)
|
||||
|
||||
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, "上传朋友圈视频成功")
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user