关于微信网页授权获取用户基本信息的切入问题


微信网页授权获取用户基本信息
这个功能一直有一个疑问,没有想到很好的处理方式!
用户在如何跳转到网页授权这里的?这个要如何设置呢?
请大师指点!
我想了很多方式:
1、用户打开一个静态页面,使用window.locathion来跳转到微信授权的页面;
2、在菜单或者发送给用户的链接中,直接使用微信授权链接,在用户授权后,跳转到目标页面;
但是这两种方法有一定的弊端:使用snsapi_userinfo时,用户可能每次打开,都要授权,实际上,用户可能已经授权过了,于是想到了第三种方法:
3、用户打开目标页面,目标页面发送ajax请求到服务器,在服务器查询当前用户是否已经有过授权记录,如果有直接去获取用户基本信息,返回到页面;如果没有授权记录,则返回未授权信息给页面,页面再执行跳转请求微信授权。但是这样做,依然有一个点无法跨越,那就是在向服务器查询是否有授权记录时,需要的OpenID该从何而来?
求指点!谢谢!

微信开发 微信开放平台 微信公众平台

toooony 10 years, 7 months ago

微信的授权登录,必须要用户通过微信浏览器打开了 https://open.weixin.qq.com/connect/oauth2/authorize?appid=************* 页面的。所以你第三个方法是没办法的。

我现在是用你的第二个方法:用户打开需要登录的页面,马上判断登录状态,没登陆就跳转到微信授权页面,获取到code了就可以登录了,登录完再跳转到登录前的页面。

ps.我用了一个小技巧来告诉我的登录控制器,登录前用户打开的页面是哪个页面,就是利用微信授权页面的 redirect_uri 参数,直接给你看我的一个例子 https://open.weixin.qq.com/connect/oauth2/authorize?appid=*********&redirect_uri=http%3A%2F%2Fwww.17171777.com%2F%2Fmobile%2Findex.php%3Fc%3Dweixin%26a%3Dlogin%26frontUrl%3Dhttp%253A%252F%252Fwww.17171777.com%252F%252Fmobile%252Findex.php%253Fc%253Dmember%2526a%253Dindex&response_type=code&scope=snsapi_base&state=snsapi_base&connect_redirect=1#wechat_redirect

我登录的时候无论怎样都是会返回登录控制器的,然后由登录控制器判断是否获取code成功,最后是登录还是注册都是由登录控制器决定,最终登录成功了,由登录控制器返回登录前的页面,而不是直接在 redirect_uri 中填写登录前的页面

宁静的哈哈哈 answered 10 years, 7 months ago

用session进行检查。
1. 如果session中没有openid记录,那么2; 如果有openid,跳到4
2. 记录当前页面的 uri ,跳转到授权页面,回调页面跳到3。
3. 根据code获取openid,获取用户信息,存入session,取出刚刚存的 uri ,跳转到 uri ,到步骤4。
4. 从session中取出微信用户信息执行业务逻辑

额头上的川 answered 10 years, 7 months ago

Your Answer