真是被微信气吐了

2017-12-12 03:41:36 +08:00
 insub

微信 PC 端扫码登录,只能选 snsapi_login 的 scope,而这个权限只能获得扫码用户的 openid,是不能获得用户的头像昵称之类公开信息的,然后扫码登录根本不能选其他 scope。也就是说,PC 上扫码用微信账号登录,事实上是根本没有途径去获取用户的昵称和头像的。

然而微信的开放平台网站应用文档会列出来好几个可以获取用户昵称和头像的接口,虽然开放平台网站应用根本就不能去调用这些接口。

玛德各种文档反复看,各种 google,终于崩溃了,气吐了,吐你丫微信一脸

谁能想到一个 oauth 连头像和昵称都不给。

3439 次点击
所在节点    微信
20 条回复
qiayue
2017-12-12 03:58:59 +08:00
第一步,用户扫码,你得到 code
第二步,你拿 code 换取 access_token,同时也能得到 openid 和 scope
第三步,通过 access_token 和 openid 获取用户详细信息

其中第三步,文档已经说得很清楚了:
1. access_token 有效且未超时;
2. 微信用户已授权给第三方应用帐号相应接口作用域( scope )。
insub
2017-12-12 04:08:18 +08:00
@qiayue thk

主要是你说的第二点,实际上,PC 是根本无法请求用户授权相应接口作用域的( scope ),这就是恶心的地方
insub
2017-12-12 04:10:04 +08:00
@qiayue 我说的再明白一点,如果我没理解错的话,网站应用文档里面写的接口作用域,在网站应用里根本就是无法向用户请求授权的
rogwan
2017-12-12 07:45:53 +08:00
微信 DNA 是拒绝 PC 生态的,是不想给。
lestat
2017-12-12 07:52:11 +08:00
微信本来就恶心
des
2017-12-12 09:03:23 +08:00
@rogwan 应该是为了避免和 qq 造成竞争吧
mydns
2017-12-12 09:07:34 +08:00
我用公众平台做的扫码登录 获取用户头像等信息正常
开放平台还得单独再认证一遍麻烦
lelouchyang
2017-12-12 09:13:01 +08:00
楼主刚入行?
lxrmido
2017-12-12 09:20:11 +08:00
……一楼所说的第二、三步是可用的并且我已经在许多个应用上用了好久,你是卡在哪一步了,网站应用的域名跟你申请网站应用时填写的域名不同?还是说你是在前端去获取?
hanzhao
2017-12-12 09:30:09 +08:00
楼主,snsapi_login 是可以获取到用户信息的,再试试吧。
justfindu
2017-12-12 09:39:31 +08:00
我觉得你是没有权限获取哪些信息吧, 因为不是服务号?
insub
2017-12-12 10:06:22 +08:00
@mydns 是 PC 上的扫码登录么?是的话大概怎么个流程呢?
@lelouchyang 不是刚入行
@lxrmido 不是的,access_token 我是可以拿到的,一切正常,但是这个 access_token 是在 snsapi_login 的 scope 下的,@hanzhao 从文档来看,snsapi_login 的 scope 是拿不到用户的头像或昵称信息的,文档里写的返回也是没有的
@justfindu 是服务号权限,开放平台开发者认证正常,也绑定了相关公众号(服务号)

我怀疑之前这个 snsapi_login 是可以获取用户公开信息的,但是微信后来改了,也没说明,因为之前许多应用的截图,在微信内授权那个界面是有“获取用户昵称等公开信息”的勾选项的,现在变成只有“是否登录该网站”的勾选项了
mokeyjay
2017-12-12 10:09:14 +08:00
PHP 的话,大可无脑上 https://www.easywechat.com/
mydns
2017-12-12 10:17:38 +08:00
@insub 是 PC 上的扫码登录 口才不好 过程描述大致如下
1.生成一个带参数的二维码 同时记录二维码参数到数据库
2.用户扫码之后 微信发起对话 服务器接收对话并对比参数 更新数据库
3.生成参数的页面每 1-3 秒查一次数据库中的二维码参数表某个字段是否更新,更新了 就开始登录 获取头像 用户名等信息
insub
2017-12-12 10:23:10 +08:00
我打听一下,有没有哪位的应用,是在 PC 端能够获取到用户的头像和昵称的?
目前看一号店,沪江是可以在 PC 端扫码登录后能够获取到微信用户的头像和昵称的,要么是他们大店权限不一样,要么就是他们申请得早,早期的开放平台登录接口有这个权限
查了一大圈,没法确认
insub
2017-12-12 10:27:50 +08:00
@mydns 明白了,谢谢。我昨天想的也是这个办法,不过我准备就不用扫码登录接口了,直接把公众平台的网页授权接口转成二维码+自定义参数在 PC 端显示让用户扫,这样还能少发几次请求
insub
2017-12-12 10:38:59 +08:00
@hanzhao snsapi_login 确定能拿到用户公开信息么?在那个接口去拿呢?
pubby
2017-12-12 11:09:26 +08:00
能拿到啊

就第一步拿 code 的过程有些不同,
1. 微信内浏览器的情况(服务号 APPID )
https://open.weixin.qq.com/connect/oauth2/authorize?appid=<APPID>&redirect_uri=<RETURN_URL>&response_type=code&scope=snsapi_userinfo&state=myapp_wx#wechat_redirect

2. pc 浏览器的情况(开放平台上 web 应用的 APPID, 并且绑定服务号)
https://open.weixin.qq.com/connect/qrconnect?appid=<APPID>&redirect_uri=<RETURN_URL>&response_type=code&scope=snsapi_login&state=myapp_web#wechat_redirect


剩下的过程相同:


https://api.weixin.qq.com/sns/oauth2/access_token?appid=<APPID>&secret=<SECRET>&code=<CODE>&grant_type=authorization_code
拿到 access_token

https://api.weixin.qq.com/sns/userinfo?access_token=<ACCESS_TOKEN>&openid=<OPENID>
得到 userinfo 数据
insub
2017-12-12 11:16:45 +08:00
@pubby @hanzhao @mydns @qiayue
各位,大家好,我错了
现在确认,是我代码写错了,漏了一步 JSON.parse()
实际上,snsapi_login 这个 scope,是包含了 snsapi_userinfo 的作用域的

删不了贴了,微信我对不起你,对不起各位,我错了,我一定好好反省,以后不乱发帖了
pubby
2017-12-12 11:16:47 +08:00
我们有三个服务号一直都是用这样的方案,没问题。

至于你怀疑最近微信是不是改权限了,这个不知道,最新的一个服务号是去年 4 月开通的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/413946

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX