您的位置:首页 > 移动开发 > 微信开发

公众号中点击第三方网页时如何顺带openId

2018-01-30 14:54 260 查看
openId是公众号中关注者的唯一标识,在同一个公众号中不同微信号有不同的openId。

当一个用户关注了公众号,然后点击了我们放在公众号内的一个第三方页面,比如是一个登陆页面,需要用户收入手机号和验证码进行登陆,则在用户提交表单时,我希望后台还可以获取到这个用户的openId,这样下一次用户再进入这个页面时,我可以自动获取这个用户的手机号、实现自动登陆。

如何能够使得后台能够获取用户的openId?需要我们修改一下提交表单的网址。

比如正常的登陆网址是http://www.whaty.com?phone=15210588777&validcode=1234,那么需要改成

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=http%3a%2f%2fwww.whaty.com%3fphone%3d15210588777%26validcode%3d1234&response_type=code&scope=snsapi_base&state=123#wechat_redirect

其中:

1、redirect_uri的值是原网址进行UrlEncode之后的网址。

2、scope有两种,snsapi_base是静默授权,只能用于已关注用户;snsapi_userinfo是会跳出一个授权窗口,用户点击允许之后,才会跳到redirect_uri,好处是也可以用于非关注用户。对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。

微信的这个接口会自动跳转到redirect_uri,只不过会在后面自动添加上code参数(自动生成的)和state参数(我们自定义的)
这时候在服务端,我们就可以根据code获取openId了:

String code = request.getParameter("code");//我们要的code

code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

然后请求以下接口:

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

正确时返回json数据

{ "access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}

到此我们成功获取到了用户的openid。

参考微信API文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  公众号