欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > 微信开发之获取用户详细列表

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:736

高端HTML5响应式企业通用网

2020-05-06   浏览:517

html5响应式外贸网站英文版

2020-05-08   浏览:505

HTML5自适应律师工作室类网

2020-04-04   浏览:501

HTML5影视传媒文化公司类网

2020-05-12   浏览:495

微信开发之获取用户详细列表

发布时间:2020-12-31  

获取用户id列表

获取单用户详细信息

综合获取用户详细列表

代码结构组织

php框架:Thinkphp
主题任务:微信公众平台开发,获取用户详细信息列表。

获取用户详细信息列表,有人会说直接去微信开发文档找到对应的Api不就得了,还有什么东西可写?
首先,微信没有直接提供这样的Api,所以只能将相关的接口进行组合使用。姑且做一下开发记录。


1、 获取access_token

微信开发文档入口:

https://mp.weixin.qq.com/wiki?action=doc&id=mp1421140183

我的代码:

public function getAccessToken() { $wechat = $this->wx_user; //$this->wx_user:已从数据库中取出所需公众号信息 if (empty($wechat)) { $this->setError("公众号不存在!"); return false; } //判断是否过了缓存期 $expire_time = $wechat['web_expires']; if($expire_time > time()){ return $wechat['web_access_token']; } //调用微信提供的接口获取数据 $appid = $wechat['appid']; $appsecret = $wechat['appsecret']; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}"; $return = httpRequest($url,'GET'); if (empty($return)) { $this->setError("请求失败,获取access_token失败"); return false; } $return = json_decode($return, true); if (isset($return['errcode']) && $return['errcode'] != 0) { $this->setError("get_access_token 错误代码;".$return['errcode']); return false; } //设置过期时间,保存进数据库,下次判断数据库中的时间是否过期,如上面代码所示 $web_expires = time() + 7000; // 提前200秒过期 M('wx_user')->where(array('id'=>$wechat['id']))->save(array('web_access_token'=>$return['access_token'],'web_expires'=>$web_expires)); return $return['access_token']; }

上面涉及到access_token的过期刷新方案。
因为每次从微信服务器拉取access_token时,之前用的access_token就没用了,也不是立即没用,会有个短暂的过渡期,但这个过渡期基本可以忽略不计。所以,总不能每次都生成新的access_token吧?所以要判断过期时间,在过期之前就只用保存的access_token。

这里面还有一个问题,就是如果很多人同时都在操作这个公众号的api,那么,在过期临界点的时候会有多次拉取新access_token的现象,导致有些先拉取access_token的操作会失败,所以,微信官方建议使用AccessToken中控服务器进行集中获取access_token,所以现在就只有中控服务器拉取access_token,没人跟它竞争,不会出现上述描述的场景,放一下官方建议的解决方案图:

微信开发之获取用户详细列表

因为项目这里是后台操作,一般只是管理员在操作,上述场景的情况几乎不会出现,所以简单场景应用简单解决方案。


2、 获取用户id列表

微信开发文档入口:

https://mp.weixin.qq.com/wiki?action=doc&id=mp1421140840

我的代码:

public function getFanIdList($next_openid='') { $access_token = $this->getAccessToken(); if (!$access_token) { return false; } //调用微信提供的接口获取数据 $url ="https://api.weixin.qq.com/cgi-bin/user/get?access_token={$access_token}&next_openid={$next_openid}";//重头开始拉取,一次最多拉取10000个 $return = httpRequest($url); $list = json_decode($return, true); if (isset($list['errcode']) && $list['errcode'] != 0) { $this->setError("错误代码:".$list['errcode']); return false; } return $list; }

获取的数据如下:

//上边返回的$list[]元素: //total 关注该公众账号的总用户数 //count 拉取的OPENID个数,最大值为10000 //data 列表数据,OPENID的列表 //next_openid 拉取列表的最后一个用户的OPENID //样本数据: {"total":2,"count":2,"data":{"openid":["OPENID1","OPENID2"]},"next_openid":"NEXT_OPENID"}

可以看到,这里只提供了openid,我们要用这个openid去查询相应的粉丝详细信息。
题外话 :
微信目前拉取上述用户列表,一次只能拉取10000个用户。看微信的接口约束手册中,哦,接口约束手册描述接口单日可用最大次数,可以看到,获取单用户的详细信息的最大次数是拉取用户列表的最大次数的10000倍,我想这里的10000倍不是巧合。

约束手册入口:

https://mp.weixin.qq.com/wiki?action=doc&id=mp1433744592


3、 获取单用户详细信息

微信开发文档入口:

https://mp.weixin.qq.com/wiki?action=doc&id=mp1421140839

我的代码:

本文标签

:备案管家服务帮您把复杂流程变简单,解决您在进行网站备案过程中遇到的效率低下和成功率不高的问题。个人300/2个域名,企业500/5个域名,qq1650004.