公众号提供了通过accesstoken和nextOpenId去查询关注用户列表的接口。为了防止每次都从最开始拉取数据同步到数据库(因为用户很多,会消耗大量的时间),我们会通过数据库当前最后一条数据的openId作为nextOpenId去查询(此时微信会返回这个openId关注时间之后的所有openId),然后把新数据添加进数据库(这些新数据可以视为上一次同步过后的最新数据)。但是这样有一个bug:
因为公众号接口返回的openId是根据关注时间返回的,所以哪怕取消关注再重新关注,openId也是位于第一次关注时所在的位置。这样就导致了当同步时,这个时候用户是取消关注状态(已经关注过后再取消),实际上同步时是拉不到这个用户的。同步过后用户再次关注,但是数据库里面已经没有这个用户了(因为同步没有同步到)并且,通过数据库最后一条openid去查用户也是查不出来的(因为这个用户的openId在前面不在后面)。
请问这种情况该怎么处理呢?
可以监听用户关注和取消的推送消息
步骤一:通过接口统一拉取一回所有用户信息。
步骤二:以后利用关注或取消关注事件,更新你们本地的用户信息。
开启服务器推动功能。
用户关注或取消关注时微信会给你推送一条消息的。
https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html