关于微信公众平台,网页授权获取用户基本信息 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
joy2everyone
V2EX    程序员

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

  •  1
     
  •   joy2everyone 2014-12-19 23:07:38 +08:00 9509 次点击
    这是一个创建于 3959 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好,我在处理接入微信公众平台的时候,想实现网页授权,参考文档: 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#wechatredirect

    会发现最终跳转到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     Solana     957 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 19:47 PVG 03:47 LAX 12:47 JFK 15:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86