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 }