V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
joy2everyone
V2EX  ›  程序员

关于微信公众平台,网页授权获取用户基本信息

  •  1
     
  •   joy2everyone · 2014-12-19 23:07:38 +08:00 · 9082 次点击
    这是一个创建于 3628 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好,我在处理接入微信公众平台的时候,想实现网页授权,参考文档: http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

    参考官方文档的说明,相关的流程可分为:

    1.引导用户进入授权页面同意授权,获取code
    2.通过code换取网页授权access_token(与基础支持中的access_token不同)
    3.如果需要,开发者可以刷新网页授权access_token,避免过期
    4.通过网页授权access_token和openid获取用户基本信息

    我在处理第一步的时候,对应的请求类似如下(可以参考文档中找到如下的介绍):

    参考链接(请在微信客户端中打开此链接体验)
    Scope为snsapi_userinfo
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

    我将自己的参数配置上,然后在微信客户端访问这个链接,我将直接将跳转至 redirect_uri/?code=CODE&state=STATE,也就是说已经忽略了第一步的要求,并没有加载相关的授权页面,用户并没有点击同意授权,我就已经获取了对应的code。

    可我希望流程上出现授权页面,但是并未出现,而且我的请求参数scope=snsapi_userinfo,按照文档中的说明,它是会出现授权页面的。

    以上都是在测试环境中的操作,我在微信公众平台的问答区有搜到类似的提问(说在测试环境也遇到了类似的问题),但却没有得到解释回答,是不是在线上环境才可以获取授权页面了?我准备实验下。

    如果有微信的同学看到此贴,或者有同学遇到过这样的问题,烦请帮忙回答解释下,感谢!
    18 条回复    2015-10-10 12:14:11 +08:00
    Sunyanzi
        1
    Sunyanzi  
       2014-12-19 23:35:14 +08:00
    授权过一次之后一段时间内就不会再弹了 ...

    以及你发的链接的 redirect_uri 是错的 ...
    joy2everyone
        2
    joy2everyone  
    OP
       2014-12-19 23:56:39 +08:00
    @Sunyanzi 谢谢你的回复,能否请再仔细地说明下,“我发的链接的redirect_uri 是错的”,是哪里有不对的地方?
    Sunyanzi
        3
    Sunyanzi  
       2014-12-20 00:04:32 +08:00
    @joy2everyone 跟你在微信里设置的不同 ... 我访问会提示 redirect_uri 错误 ...
    SunKarl
        4
    SunKarl  
       2014-12-20 10:07:36 +08:00
    通过code获取用户信息的时候,才会弹出授权页面,code请求一次就失效了,从你描述中,你还没有进行第4步的操作吧,如果不是要获取微信用户的昵称、头像那些的话,只判断唯一身份,授权作用域用snsapi_base即可满足需求
    joy2everyone
        5
    joy2everyone  
    OP
       2014-12-20 10:12:49 +08:00
    @Sunyanzi 那是因为我贴出来的地址是官方文档里的一个例子,它现在并不能工作了 :)

    以下是我自己的配置测试地址

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxea67532f3b017b61&redirect_uri=http%3A%2F%2Fwww.xinz.im&ree&scope=snsapi_userinfo&state=S2#wechat_redirect

    会发现最终跳转到redirect_uri指定的路径后,就能获取code。而且我从开始做接入这个授权页面的时候,就从未看见授权页面的出现过,有其他的建议吗?
    joy2everyone
        6
    joy2everyone  
    OP
       2014-12-20 10:17:03 +08:00
    @SunKarl 谢谢回复,可文档里不是说“1.引导用户进入授权页面同意授权,获取code”,我的理解是第一步是在用户看见授权页面之后,当点击“允许”的时候,之后才能获得到相应的code。

    我现在因为无法见到授权页面,在做第一步的时候就获取到了code,所以有点困惑。这里我说的各个步骤是文档里这样的描述:

    1.引导用户进入授权页面同意授权,获取code
    2.通过code换取网页授权access_token(与基础支持中的access_token不同)
    3.如果需要,开发者可以刷新网页授权access_token,避免过期
    4.通过网页授权access_token和openid获取用户基本信息
    SunKarl
        7
    SunKarl  
       2014-12-20 10:24:51 +08:00
    @joy2everyone 微信的文档很多地方都有歧义,不必太纠结这个
    joy2everyone
        8
    joy2everyone  
    OP
       2014-12-20 10:35:13 +08:00
    @SunKarl 多谢啦,我调试下 :)
    rqrq
        9
    rqrq  
       2014-12-20 13:08:46 +08:00
    必须是“认证服务号”才能显示授权获取用户信息,其他级别的公众号包括sanbox的测试帐号都不行。
    我记得是这样的。
    joy2everyone
        10
    joy2everyone  
    OP
       2014-12-21 01:43:56 +08:00
    @SunKarl 我分别在测试环境和prod环境测试过,直到已经获取到了用户的相关信息(那4个步骤都已经请求了)都没有加载看到授权页面。

    @rqrq 是认证服务号,我在prod环境测试过,始终未能见到那个弹出的授权页面。

    大家还有其他的建议吗?这个弹出的授权页面,为什么就是不能按照流程上说的出现?

    再次谢谢大家了!
    joy2everyone
        11
    joy2everyone  
    OP
       2014-12-21 11:00:23 +08:00
    微信公众平台开发者问答系统,现在看起来就像关闭了一样,只能阅读一些过往的问题,无法再提新的问题。也打电话咨询过公众平台的客服,目前也没有任何的技术支持。
    SunKarl
        12
    SunKarl  
       2014-12-22 15:46:17 +08:00
    @joy2everyone 详情参考以下两个连接:
    http://mp.weixin.qq.com/wiki/14/bb5031008f1494a59c6f71fa0f319c66.html
    http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

    通过第一种方式获取,是不会弹出授权的,但如果没有关注公众号的话,则获取不到用户的信息
    joy2everyone
        13
    joy2everyone  
    OP
       2014-12-22 21:16:30 +08:00
    @SunKarl 我参考的是第二个链接 http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

    并且scope设定为snsapi_userinfo,我已经可以获取到用户的相关信息了,通过如下的这个API:

    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

    但让我困惑的是整个获取用户的过程中,始终没有见过有弹出的用户授权页面。

    很感谢你的帮助,如果可以的话,我可以添加你到我的测试平台中吗?只为让你能看到我描述的发生,又或者不知道哪位同学有类似的功能,能否请帮忙验证下,这个授权页面是否仍存在?
    SunKarl
        15
    SunKarl  
       2014-12-23 00:37:08 +08:00
    @joy2everyone 比较奇怪,授权只要用户允许了,不需要用户关注也可以获取到对应信息的,第二种方式跟用户是否关注无关,我线上的是ok的,还有一点忘记说了,微信公众平台中,开发者中心要将对应的OAuth2.0网页授权改成你的域名(精确到二级域名),不知道是不是这个引起的,如:
    测试服务器:test.163.com
    正式服务器:www.baidu.com
    skywatcher
        16
    skywatcher  
       2015-06-05 21:37:31 +08:00
    @SunKarl 测试账号提示未关注不能授权,正式账号应该不需要关注也能授权吧?
    whgreate
        17
    whgreate  
       2015-10-09 22:07:11 +08:00
    hello ,问一下,你这个问题解决了没,我也碰到了
    whgreate
        18
    whgreate  
       2015-10-10 12:14:11 +08:00
    发现问题原因了,是因为已经关注公众号了,即使是 snsapi_userinfo ,也不会有授权页面,取消关注,就能出来~(这个帖子好久了,估计已经没人看了吧^_^)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   908 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:06 · PVG 06:06 · LAX 14:06 · JFK 17:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.