微信oauth2的access_token问题。。

Dleno 2014-12-16 10:13:32
微信oauth2获取用户信息的整个流程都走通了。也没有问题。。

不过中间有一事不明。希望哪位知道的朋友帮解答下。。

每一次都要通过code去获取access_token吗?
不的话,那么用户的openid又只能在获取access_token时返回,不然就得不到用户的openid了。
或者是第一次获取到用户的openid以后存到cookie里去,下次读cookie吗???
否则那个刷新access_token有什么意义啊。。。

再有就是获取到的access_token是只是当前会话有效,还是对应某个用户openid有效,或者是所有用户都有效。。。

初次接触微信这个,谢谢。。。。。
...全文
35057 49 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
RAYSOG 2017-06-01
  • 打赏
  • 举报
回复
我懂了,如果不是用户登录的情况下,想去获取用户的基本信息,才通过refresh_token 去刷新,refresh_token 有效期30,如果用户30天未登录过,你就别想获取基本信息了!
shorrow 2016-08-21
  • 打赏
  • 举报
回复
简单梳理如下: 1, 如果通过微信公众号入口,每次access token总会重新获取到,所以如果没有其他入口的话其实是没必要持久化保存的,只要保存在session里就可以,用于获取用户基本信息时使用。如果不需要获取用户基本信息就没有必要保存。 2, 但是如果有其他入口要获取/更新用户信息,就像前面几位高手讲的后台管理。例如你是通过后台定时刷新用户信息的,因为用户的头像和基本信息用户是可以随时更改的。这种情况下就要把openid和accesstoken,refreshtoken及有效期信息持久化下来,这样后台就可以去定时刷新了 3,如果是基于每次用户登入的时候检查用户信息是否更新的,其实也没有必要保存access token和refresh token了
zhu123de 2016-07-14
  • 打赏
  • 举报
回复
wocaosdsad
ken_cq 2016-07-05
  • 打赏
  • 举报
回复
引用 45 楼 qq_35517751 的回复:
[quote=引用 44 楼 u011895796 的回复:] [quote=引用 43 楼 oCappuccino1 的回复:] 哎呀,它这个服务器,我都换头像了,它如此欺我。原以为发表第一条以前没换就发了,头像是不会变的,现在在发表第二个的时候头像都换了,怎么还显示以前的
新的code新的access 我又重新整理了一次,静默授权,只能获得openid获取不到未关注平台的用户信息,用户点击授权,网页才可以获取未关注平台用户信息,我上次用静默授权获取到了未关注平台用户信息,是因为他吗的腾讯服务器有延迟,关注平台再取消关注,这样的用户,静默授权可以获得他的信息,现在我网站的做法是,用户使用微信打开我的网站,点击授权获取信息以后,我直接把用户信息存入数据库,然后cookie保存用户登录信息30年,以后用户来我网站30年不用登录,如果他换微信头像和微信名称,只需要点击退出登录,重新登录一下,就又一次获取了最新的用户信息。[/quote] 怎么判断 使用 静默授权还是点击授权 ?你cookies存放了什么?如果 用户使用微信打开你的网站 cookie保存用户登录信息,,然后 用户换了另外一个微信账号 登录你的网站 怎么判断另外 是静默授权还是点击授权 ?[/quote] 两个问题,第一个:微信OAuth2有两个access_token,一个是全局权限的access_token,另一个是用户的access_token。 全局的access_token是通过https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET来获得,这个需要基础调用时候使用的,比如获取微信服务器IP、发送消息给微信用户等等,这个需要2小时获取一次,存放在服务器里。 另一个是用户网页授权的access_token,这个是通过用户网页授权获得的,具体步骤是:通过重定向到用户授权页面,返回code,然后通过这个code获取access_token、refresh_token等,这个次数是比全局获取access_token限制更高,好像服务号是5000万次每天。一次授权之后access_token直接存在session里,refresh_token放在cookie里,下一个页面的访问就不用再去获取了。 下一次登录直接通过cookie里的refresh_token来重新刷新access_token使用,避免了再次网页授权的麻烦。 但是如果用户超过30天没有登录,cookie里的refresh_token就会失效,就要重新授权了。 希望能帮到你们。
qq_35517751 2016-07-05
  • 打赏
  • 举报
回复
引用 44 楼 u011895796 的回复:
[quote=引用 43 楼 oCappuccino1 的回复:] 哎呀,它这个服务器,我都换头像了,它如此欺我。原以为发表第一条以前没换就发了,头像是不会变的,现在在发表第二个的时候头像都换了,怎么还显示以前的
新的code新的access 我又重新整理了一次,静默授权,只能获得openid获取不到未关注平台的用户信息,用户点击授权,网页才可以获取未关注平台用户信息,我上次用静默授权获取到了未关注平台用户信息,是因为他吗的腾讯服务器有延迟,关注平台再取消关注,这样的用户,静默授权可以获得他的信息,现在我网站的做法是,用户使用微信打开我的网站,点击授权获取信息以后,我直接把用户信息存入数据库,然后cookie保存用户登录信息30年,以后用户来我网站30年不用登录,如果他换微信头像和微信名称,只需要点击退出登录,重新登录一下,就又一次获取了最新的用户信息。[/quote] 怎么判断 使用 静默授权还是点击授权 ?你cookies存放了什么?如果 用户使用微信打开你的网站 cookie保存用户登录信息,,然后 用户换了另外一个微信账号 登录你的网站 怎么判断另外 是静默授权还是点击授权 ?
下载211 2016-03-25
  • 打赏
  • 举报
回复
引用 43 楼 oCappuccino1 的回复:
哎呀,它这个服务器,我都换头像了,它如此欺我。原以为发表第一条以前没换就发了,头像是不会变的,现在在发表第二个的时候头像都换了,怎么还显示以前的
新的code新的access 我又重新整理了一次,静默授权,只能获得openid获取不到未关注平台的用户信息,用户点击授权,网页才可以获取未关注平台用户信息,我上次用静默授权获取到了未关注平台用户信息,是因为他吗的腾讯服务器有延迟,关注平台再取消关注,这样的用户,静默授权可以获得他的信息,现在我网站的做法是,用户使用微信打开我的网站,点击授权获取信息以后,我直接把用户信息存入数据库,然后cookie保存用户登录信息30年,以后用户来我网站30年不用登录,如果他换微信头像和微信名称,只需要点击退出登录,重新登录一下,就又一次获取了最新的用户信息。
胡柚 2016-02-24
  • 打赏
  • 举报
回复
哎呀,它这个服务器,我都换头像了,它如此欺我。原以为发表第一条以前没换就发了,头像是不会变的,现在在发表第二个的时候头像都换了,怎么还显示以前的
胡柚 2016-02-24
  • 打赏
  • 举报
回复
引用 36 楼 m70772754 的回复:
还有啊,看你们说的乱七八糟,什么为了用户下次登录使用. 用户登录的是你最开始引导他进入的页面 https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXX&redirect_uri=http://XXXX/oauth2.php&response_type=code&scope=snsapi_base&state=1#wechat_redirect 用户下次登录还是会点击这里,你想保存第一次的openid等用户下次登录就不用授权了对吧 所以你想保存acctoken与openid到数据库,或者cookie,下次不用用户授权,对吧 那你没想想他进来的地方还是获取code的上面的连接,每次生成code你就没想过code有没有调用限制? 如果有调用限制,你保存acctoken和openid有鸡毛用,开始进来就提示code达到上线.根本轮不到你调用户信息 如果没有调用限制,你保存acctoken和openid又有鸡毛用,没限制随便调,微信也会提示"近期已授权,无需重复授权". 你们看不见啊,做没做过开发啊
ps:上一个头像是几百年用的。太丑了,怕引不满并吓到及影响形象。。嘿嘿,不要介意哦。 再重新问下,其实就是不管第一次还是第二次都是得先获取到code是不?只是以后登录的时候不用用户手动授权。每次返回的code不一样,然后根据code获取的access_token也不一样么?
胡柚 2016-02-24
  • 打赏
  • 举报
回复
引用 36 楼 m70772754 的回复:
还有啊,看你们说的乱七八糟,什么为了用户下次登录使用. 用户登录的是你最开始引导他进入的页面 https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXX&redirect_uri=http://XXXX/oauth2.php&response_type=code&scope=snsapi_base&state=1#wechat_redirect 用户下次登录还是会点击这里,你想保存第一次的openid等用户下次登录就不用授权了对吧 所以你想保存acctoken与openid到数据库,或者cookie,下次不用用户授权,对吧 那你没想想他进来的地方还是获取code的上面的连接,每次生成code你就没想过code有没有调用限制? 如果有调用限制,你保存acctoken和openid有鸡毛用,开始进来就提示code达到上线.根本轮不到你调用户信息 如果没有调用限制,你保存acctoken和openid又有鸡毛用,没限制随便调,微信也会提示"近期已授权,无需重复授权". 你们看不见啊,做没做过开发啊
问下,其实就是不管第一次还是第二次都是得先获取到code是不?只是以后登录的时候不用用户手动授权。每次返回的code不一样,然后根据code获取的access_token也不一样么?
m70772754 2016-02-17
  • 打赏
  • 举报
回复
订阅号做授权页面,看你要干什么,如果要判断用户是否关注订阅号,判断关注状态[subscribe],直接用订阅号自己的appid就可以,如果要拉取用户信息,开个服务号,做网页静默授权,直接拉取用户信息就可以,不过看不到是否关注订阅号的状态。 就是说,订阅号appid做网页授权只能得到[subscribe]值判断用户是否关注,即使关注后也不能通过网页获取用户信息,需要通过微信平台的开发者文档获取用户信息,网页是做不到。服务号可以通过网页获得用户信息,但是得不到关注订阅号状态[subscribe]的值。如果你主营订阅号,那就开个服务号配合使用吧。
bingshui09 2016-01-19
  • 打赏
  • 举报
回复
引用 35 楼 m70772754 的回复:
看你们这些人逼逼,真没营养,就贴出那个接口调用频率表的人,还算聪明. 这鸟逼玩意,先得分认证订阅号跟认证服务号, 认证服务号有高级权限.可以使用scope=snsapi_base静默获取access_token与openid模式.不管用户关注没关注,都能用二者拉取用户信息. 订阅号一般没有高级权限,需要没有关注订阅号的用户点击同意授权才能获取信息,也就是scope=snsapi_userinfo模式. 人家都贴出调用权限没限制,还保存鸡毛access_token,保存基础access_token是因为有调用限制,每天只能调用2000次 获取网页授权access_token 无 都告诉你没调用限制了,你还保存鸡毛. 刷新网页授权access_token 无 网页授权获取用户信息 无 用服务号简单两步就获取到关注用户,未关注用户的基本信息了,还逼逼这么多. 关注订阅号没高级权限必须用户授权的问题,你开个服务号借用下appid与secret不就完事了 第一步: $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=XXX&secret=XXX&code=".$_GET['code']."&grant_type=authorization_code";$result = json_decode(httpGet($url), true); 第二步: $urlb="https://api.weixin.qq.com/sns/userinfo?access_token=".$result[access_token]."&openid=".$result[openid]."&lang=zh_CN"; $resultb = json_decode(httpGet($urlb), true);//print_r($resultb); 输出一下就是用户基本信息,还保存鸡毛access_token真逼真逼真逼
请教一下订阅号如何使用网页授权?借用一个服务号的appid吗?
gao380221829 2016-01-11
  • 打赏
  • 举报
回复
网页授权access_token 跟基础信息获取的access_token 是不一样的 没有次数限制,这个可以放心调用
xiaoqingnianss 2015-12-29
  • 打赏
  • 举报
回复
这个问题一般都是微信用户登录之后openId 都会存入session中了
m70772754 2015-12-17
  • 打赏
  • 举报
回复
还有啊,看你们说的乱七八糟,什么为了用户下次登录使用. 用户登录的是你最开始引导他进入的页面 https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXX&redirect_uri=http://XXXX/oauth2.php&response_type=code&scope=snsapi_base&state=1#wechat_redirect 用户下次登录还是会点击这里,你想保存第一次的openid等用户下次登录就不用授权了对吧 所以你想保存acctoken与openid到数据库,或者cookie,下次不用用户授权,对吧 那你没想想他进来的地方还是获取code的上面的连接,每次生成code你就没想过code有没有调用限制? 如果有调用限制,你保存acctoken和openid有鸡毛用,开始进来就提示code达到上线.根本轮不到你调用户信息 如果没有调用限制,你保存acctoken和openid又有鸡毛用,没限制随便调,微信也会提示"近期已授权,无需重复授权". 你们看不见啊,做没做过开发啊
m70772754 2015-12-17
  • 打赏
  • 举报
回复
看你们这些人逼逼,真没营养,就贴出那个接口调用频率表的人,还算聪明. 这鸟逼玩意,先得分认证订阅号跟认证服务号, 认证服务号有高级权限.可以使用scope=snsapi_base静默获取access_token与openid模式.不管用户关注没关注,都能用二者拉取用户信息. 订阅号一般没有高级权限,需要没有关注订阅号的用户点击同意授权才能获取信息,也就是scope=snsapi_userinfo模式. 人家都贴出调用权限没限制,还保存鸡毛access_token,保存基础access_token是因为有调用限制,每天只能调用2000次 获取网页授权access_token 无 都告诉你没调用限制了,你还保存鸡毛. 刷新网页授权access_token 无 网页授权获取用户信息 无 用服务号简单两步就获取到关注用户,未关注用户的基本信息了,还逼逼这么多. 关注订阅号没高级权限必须用户授权的问题,你开个服务号借用下appid与secret不就完事了 第一步: $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=XXX&secret=XXX&code=".$_GET['code']."&grant_type=authorization_code";$result = json_decode(httpGet($url), true); 第二步: $urlb="https://api.weixin.qq.com/sns/userinfo?access_token=".$result[access_token]."&openid=".$result[openid]."&lang=zh_CN"; $resultb = json_decode(httpGet($urlb), true);//print_r($resultb); 输出一下就是用户基本信息,还保存鸡毛access_token真逼真逼真逼
horsesuper163 2015-11-11
  • 打赏
  • 举报
回复
仔细研究了一下,说下我的想法,不知道可对。 这个应该是 给 与微信用户绑定的 后台管理相关的。比如说从自己开发的后台反向刷新获取绑定的微信用户的信息。
qpq_17 2015-11-06
  • 打赏
  • 举报
回复
oauth2AccessToken 这个是可以随时访问 而且过期之后可以刷新 没有限制数量的 一般用户授权之后 都会将用户openid等资料保存下来 不需要重复授权的
asd01199 2015-09-16
  • 打赏
  • 举报
回复
你们都搞混了吧.总共有两个access_token的.一个是基础支持的access_token.一个是OAuth2.0认证的access_token,前者是有每天限制数量的,所以要做缓存.后者没有.可以随时访问.两者没有冲突的.!
plq15146601334 2015-08-20
  • 打赏
  • 举报
回复
我也这么想的,获取到code后,继续下一步就会得到新的access token
musicgood86 2015-08-12
  • 打赏
  • 举报
回复
引用 25 楼 qq_22208675 的回复:
其实这个问题,我也很诧异。不清楚这个刷新一步,到底有啥作用。 可能是考虑用户如果存在名称/头像之类的,修改之后的更新问题吧。 我是这样操作的 1. 使用 静默授权 (Scope为snsapi_base ),获取到 openid / unionid. 2. 查询系统内是否存在此用户(根据 : openid / unionid ) 3. 若不存在: 3.1 引导用户进入授权页面同意授权, 获取 code 3.2 通过code换取网页授权access_token 3.3 存储信息入库。信息指: 3.4 通过code换取的json信息。 3.4.1 access_token 3.4.2 expires_in 3.4.3 refresh_token 3.4.4 openid 3.4.5 unionid 3.5 继续第四步,获取用户信息。 4. 若存在: 4.1 查询数据库中,access_token并验证 4.2 官方文档,授权的最下面有验证的方法。 4.3 验证结果 4.3.1 有效:直接获取用户信息。 4.3.2 无效:刷新access_token然后,继续获取用户信息。 4.3.3 无效:更新刷新后的信息。 5. 获取到用户信息,更新入库!
貌似 不需要这么 复杂,因为只要走完OAuth 就一定被迫得到新的 token, 不知道对不对?
加载更多回复(28)

20,397

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧