add user logout support

This commit is contained in:
ivy1996-encode 2021-03-14 15:22:22 +08:00
parent 96d14f39f6
commit c1c2fd9f72
5 changed files with 28 additions and 10 deletions

9
bot.go
View File

@ -69,6 +69,15 @@ func (b *Bot) Login() error {
} }
} }
func (b *Bot) Logout() error {
info := b.storage.GetLoginInfo()
if err := b.Caller.Logout(info); err != nil {
return err
}
b.stopAsyncCALL(errors.New("logout"))
return nil
}
// 登录逻辑 // 登录逻辑
func (b *Bot) login(data []byte) error { func (b *Bot) login(data []byte) error {
// 判断是否有登录回调,如果有执行它 // 判断是否有登录回调,如果有执行它

View File

@ -2,22 +2,14 @@ package openwechat
import ( import (
"fmt" "fmt"
"io/ioutil"
"testing" "testing"
) )
func TestDefaultBot(t *testing.T) { func TestDefaultBot(t *testing.T) {
bot := DefaultBot() bot := DefaultBot()
messageHandler := func(message *Message) { messageHandler := func(message *Message) {
if message.HasFile() { if message.Content == "logout" {
if message.IsMedia() { bot.Logout()
resp, err := message.GetFile()
if err == nil {
data, _ := ioutil.ReadAll(resp.Body)
ioutil.WriteFile(message.EncryFileName, data, 0x777)
resp.Body.Close()
}
}
} }
} }
bot.RegisterMessageHandler(messageHandler) bot.RegisterMessageHandler(messageHandler)

View File

@ -221,6 +221,12 @@ func (c *Caller) WebWxSendImageMsg(file *os.File, request BaseRequest, info Logi
return parseBaseResponseError(resp) return parseBaseResponseError(resp)
} }
// 用户退出
func (c *Caller) Logout(info LoginInfo) error {
resp := NewReturnResponse(c.Client.Logout(info))
return parseBaseResponseError(resp)
}
// 处理响应返回的结果是否正常 // 处理响应返回的结果是否正常
func parseBaseResponseError(resp *ReturnResponse) error { func parseBaseResponseError(resp *ReturnResponse) error {
if resp.Err() != nil { if resp.Err() != nil {

View File

@ -390,3 +390,13 @@ func (c *Client) WebWxGetMedia(msg *Message, info LoginInfo) (*http.Response, er
path.RawQuery = params.Encode() path.RawQuery = params.Encode()
return c.Get(path.String()) return c.Get(path.String())
} }
func (c *Client) Logout(info LoginInfo) (*http.Response, error) {
path, _ := url.Parse(webWxLogoutUrl)
params := url.Values{}
params.Add("redirect", "1")
params.Add("type", "1")
params.Add("skey", info.SKey)
path.RawQuery = params.Encode()
return c.Get(path.String())
}

View File

@ -32,6 +32,7 @@ const (
webWxGetMsgImgUrl = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetmsgimg" webWxGetMsgImgUrl = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetmsgimg"
webWxGetVoiceUrl = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetvoice" webWxGetVoiceUrl = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetvoice"
webWxGetVideoUrl = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetvideo" webWxGetVideoUrl = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetvideo"
webWxLogoutUrl = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxlogout"
webWxGetMediaUrl = "https://file.wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetmedia" webWxGetMediaUrl = "https://file.wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetmedia"
jsonContentType = "application/json; charset=utf-8" jsonContentType = "application/json; charset=utf-8"