From efdac13d91b6d8e484c9b6b183495a3cadfce7cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9A=E5=90=83=E7=82=B9=E8=8B=B9=E6=9E=9C?= <73388495+eatmoreapple@users.noreply.github.com> Date: Sat, 10 Dec 2022 16:46:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A5=BD=E5=8F=8B=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E4=B8=8D=E5=85=A8=E7=9A=84=E9=97=AE=E9=A2=98=20(#118)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- caller.go | 37 +++++++++++++++++++++++++------------ client.go | 4 ++-- items.go | 2 +- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/caller.go b/caller.go index 1714026..2e1d20c 100644 --- a/caller.go +++ b/caller.go @@ -155,19 +155,32 @@ func (c *Caller) SyncCheck(request *BaseRequest, info *LoginInfo, response *WebI // WebWxGetContact 获取所有的联系人 func (c *Caller) WebWxGetContact(info *LoginInfo) (Members, error) { - resp, err := c.Client.WebWxGetContact(info) - if err != nil { - return nil, err + var members Members + var reqs int64 + for { + resp, err := c.Client.WebWxGetContact(info, reqs) + if err != nil { + return nil, err + } + var item WebWxContactResponse + if err = scanJson(resp.Body, &item); err != nil { + _ = resp.Body.Close() + return nil, err + } + if err = resp.Body.Close(); err != nil { + return nil, err + } + if !item.BaseResponse.Ok() { + return nil, item.BaseResponse.Err() + } + members = append(members, item.MemberList...) + + if item.Seq == 0 || item.Seq == reqs { + break + } + reqs = item.Seq } - defer func() { _ = resp.Body.Close() }() - var item WebWxContactResponse - if err := scanJson(resp.Body, &item); err != nil { - return nil, err - } - if !item.BaseResponse.Ok() { - return nil, item.BaseResponse.Err() - } - return item.MemberList, nil + return members, nil } // WebWxBatchGetContact 获取联系人的详情 diff --git a/client.go b/client.go index 0c32024..e1bdc2a 100644 --- a/client.go +++ b/client.go @@ -214,12 +214,12 @@ func (c *Client) SyncCheck(request *BaseRequest, info *LoginInfo, response *WebI } // WebWxGetContact 获取联系人信息 -func (c *Client) WebWxGetContact(info *LoginInfo) (*http.Response, error) { +func (c *Client) WebWxGetContact(info *LoginInfo, reqs int64) (*http.Response, error) { path, _ := url.Parse(c.Domain.BaseHost() + webwxgetcontact) params := url.Values{} params.Add("r", strconv.FormatInt(time.Now().UnixNano()/1e6, 10)) params.Add("skey", info.SKey) - params.Add("req", "0") + params.Add("seq", strconv.FormatInt(reqs, 10)) path.RawQuery = params.Encode() req, _ := http.NewRequest(http.MethodGet, path.String(), nil) return c.Do(req) diff --git a/items.go b/items.go index 67a91c6..b0d33ac 100644 --- a/items.go +++ b/items.go @@ -131,7 +131,7 @@ type WebWxSyncResponse struct { type WebWxContactResponse struct { MemberCount int - Seq int + Seq int64 BaseResponse BaseResponse MemberList []*User }